Newer
Older
from django.views.decorators.cache import never_cache
from django.utils.decorators import method_decorator
from django.views.generic import FormView, TemplateView
from django.utils.translation import ugettext as _
from django.urls import reverse, reverse_lazy
from django.views.generic.detail import DetailView
from rules.contrib.views import PermissionRequiredMixin
from django_tables2.views import SingleTableView, RequestConfig
from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView
from .tables import ClientsTable, InvoiceGroupsTable, InvoicesTable
from .forms import EditClientForm, EditInvoiceGroupForm
from .models.invoice import Invoice, InvoiceGroup
class GetInvoicePDF(PermissionRequiredMixin, RenderPDFView):
permission_required = "tezor.can_print_invoice"
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
invoice = Invoice.objects.get(id=self.kwargs["pk"])
class ClientListView(PermissionRequiredMixin, SingleTableView):
"""Table of all clients."""
model = Client
table_class = ClientsTable
@method_decorator(never_cache, name="dispatch")
class ClientCreateView(PermissionRequiredMixin, AdvancedCreateView):
"""Create view for clients."""
model = Client
form_class = EditClientForm
success_url = reverse_lazy("clients")
success_message = _("The client has been created.")
@method_decorator(never_cache, name="dispatch")
class ClientEditView(PermissionRequiredMixin, AdvancedEditView):
"""Edit view for clients."""
model = Client
form_class = EditClientForm
success_url = reverse_lazy("clients")
success_message = _("The client has been saved.")
class ClientDeleteView(PermissionRequiredMixin, AdvancedDeleteView):
"""Delete view for client."""
model = Client
template_name = "core/pages/delete.html"
success_url = reverse_lazy("clients")
success_message = _("The client has been deleted.")
class ClientDetailView(PermissionRequiredMixin, DetailView):
model = Client
template_name = "tezor/client/full.html"
def get_context_data(self, object):
context = super().get_context_data()
invoice_groups = object.invoice_groups.all()
invoice_groups_table = InvoiceGroupsTable(invoice_groups)
RequestConfig(self.request).configure(invoice_groups_table)
context["invoice_groups_table"] = invoice_groups_table
return context
class InvoiceGroupDetailView(PermissionRequiredMixin, DetailView):
model = InvoiceGroup
template_name = "tezor/invoice_group/full.html"
def get_context_data(self, object):
context = super().get_context_data()
invoices = object.invoices.all()
invoices_table = InvoicesTable(invoices)
RequestConfig(self.request).configure(invoices_table)
context["invoices_table"] = invoices_table
return context
@method_decorator(never_cache, name="dispatch")
class InvoiceGroupCreateView(PermissionRequiredMixin, AdvancedCreateView):
"""Create view for invoice_groups."""
model = InvoiceGroup
form_class = EditInvoiceGroupForm
template_name = "tezor/invoice_group/create.html"
success_url = reverse_lazy("clients")
success_message = _("The invoice_group has been created.")
def form_valid(self, form):
client = Client.objects.get(id=self.kwargs["pk"])
InvoiceGroup.objects.create(client=client, name=form.cleaned_data["name"], template_name=form.cleaned_data["template_name"])
return super().form_valid(form)
@method_decorator(never_cache, name="dispatch")
class InvoiceGroupEditView(PermissionRequiredMixin, AdvancedEditView):
"""Edit view for invoice_groups."""
model = InvoiceGroup
form_class = EditInvoiceGroupForm
template_name = "tezor/invoice_group/edit.html"
success_url = reverse_lazy("invoice_groups")
success_message = _("The invoice_group has been saved.")
class InvoiceGroupDeleteView(PermissionRequiredMixin, AdvancedDeleteView):
"""Delete view for invoice_group."""
model = InvoiceGroup
template_name = "core/pages/delete.html"
success_url = reverse_lazy("invoice_groups")
success_message = _("The invoice_group has been deleted.")
class InvoiceDetailView(PermissionRequiredMixin, DetailView):
model = Invoice
template_name = "tezor/invoice/full.html"