from django.views.generic import View from django.shortcuts import render 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.views import RenderPDFView from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView from .tables import ClientsTable, InvoiceGroupsTable, InvoicesTable from .forms import EditClientForm, EditInvoiceGroupForm from .models.base import Client 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"]) self.template_name = invoice.group.template_name context["invoice"] = invoice print(invoice.group.__dict__) return context class ClientListView(PermissionRequiredMixin, SingleTableView): """Table of all clients.""" model = Client table_class = ClientsTable permission_required = "tezor.view_clients_rule" template_name = "tezor/client/list.html" @method_decorator(never_cache, name="dispatch") class ClientCreateView(PermissionRequiredMixin, AdvancedCreateView): """Create view for clients.""" model = Client form_class = EditClientForm permission_required = "tezor.create_client_rule" template_name = "tezor/client/create.html" 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 permission_required = "tezor.edit_client_rule" template_name = "tezor/client/edit.html" success_url = reverse_lazy("clients") success_message = _("The client has been saved.") class ClientDeleteView(PermissionRequiredMixin, AdvancedDeleteView): """Delete view for client.""" model = Client permission_required = "tezor.delete_client_rule" template_name = "core/pages/delete.html" success_url = reverse_lazy("clients") success_message = _("The client has been deleted.") class ClientDetailView(PermissionRequiredMixin, DetailView): model = Client permission_required = "tezor.view_client_rule" 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 permission_required = "tezor.view_invoice_group_rule" 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 permission_required = "tezor.create_invoice_groups_rule" 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 permission_required = "tezor.edit_invoice_group_rule" 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 permission_required = "tezor.delete_invoice_group_rule" 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 permission_required = "tezor.view_invoice_rule" template_name = "tezor/invoice/full.html"