Example #1
0
    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")
Example #2
0
    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
Example #3
0
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
Example #4
0
    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
Example #5
0
    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 />&nbsp;"
                            % (
                                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