def response(self, request, queryset): if request.GET.get("export") == "pdf": if not queryset.exists(): messages.warning(request, _("No invoices found.")) return HttpResponseRedirect("?error=1") count = queryset.count() if count > settings.BATCH_MAX_ITEMS: messages.error( request, _("%s invoices in selection, that's too many.") % count) return HttpResponseRedirect("?error=1") pdf, response = pdf_response( "invoices", as_attachment=request.GET.get("disposition") == "attachment", ) for invoice in queryset: pdf.init_letter() pdf.process_invoice(invoice) pdf.restart() pdf.generate() return response if request.GET.get("export") == "xlsx": xlsx = WorkbenchXLSXDocument() xlsx.table_from_queryset(queryset) return xlsx.to_response("invoices.xlsx")
def get(self, request, *args, **kwargs): self.object = self.get_object() pdf, response = pdf_response( self.object.code, as_attachment=request.GET.get("disposition") == "attachment", ) pdf.init_letter() pdf.process_offer(self.object) pdf.generate() return response
def dunning_letter(request, customer_id): invoices = (Invoice.objects.overdue().filter( customer=customer_id).select_related("customer", "contact__organization", "owned_by", "project")) pdf, response = pdf_response("reminders", as_attachment=True) pdf.dunning_letter(invoices=list(invoices)) pdf.generate() invoices.update(last_reminded_on=dt.date.today()) return response
def get(self, request, *args, **kwargs): self.object = self.get_object() offers = list(self.object.offers.order_by("_code")) if not offers: messages.error(request, _("No offers in project.")) return redirect(self.object) pdf, response = pdf_response( self.object.code, as_attachment=request.GET.get("disposition") == "attachment", ) pdf.offers_pdf(project=self.object, offers=offers) return response
def get(self, request, *args, **kwargs): self.object = self.get_object() if not self.object.closed_on: messages.warning( request, _( "Please close the expense report first. Generating PDFs" " for open expense reports isn't allowed." ), ) return redirect(self.object) pdf, response = pdf_response( self.object.code, as_attachment=request.GET.get("disposition") == "attachment", ) pdf.init_report() pdf.h1(_("expense report")) pdf.spacer(2 * mm) pdf.table( [ (capfirst(_("of")), self.object.owned_by.get_full_name()), (capfirst(_("created at")), local_date_format(self.object.created_at)), (capfirst(_("status")), capfirst(self.object.pretty_status)), ], pdf.style.tableColumnsLeft, pdf.style.table, ) pdf.spacer(5 * mm) counter = count(1) expenses = OrderedDict() for cost in self.object.expenses.select_related( "service__project__owned_by" ).order_by("rendered_on", "pk"): expenses.setdefault(cost.expense_currency, []).append(cost) for currency_code, sublist in sorted(expenses.items()): pdf.table( [(_("receipt"), "", "")] + [ ( "%d." % (next(counter),), MarkupParagraph( "%s<br />%s: %s<br />%s<br /> " % ( local_date_format(cost.rendered_on), cost.service.project, cost.service, cost.description, ), pdf.style.normal, ), currency(cost.third_party_costs) if cost.expense_cost is None else currency(cost.expense_cost), ) for cost in sublist ], (10 * mm, pdf.bounds.E - pdf.bounds.W - 10 * mm - 16 * mm, 16 * mm), pdf.style.tableHead, ) pdf.spacer(0.7 * mm) total_cost = reduce( operator.add, (cost.expense_cost or cost.third_party_costs for cost in sublist), Z2, ) pdf.table( [ ( "%s %s" % ( capfirst(_("total")), currency_code or settings.WORKBENCH.CURRENCY, ), currency(total_cost), ) ], pdf.style.tableColumns, pdf.style.tableHeadLine, ) pdf.spacer() pdf.generate() return response