示例#1
0
def reference_pdf(request, reference_id):
    reference = get_object_or_404(
        JobReference.objects.select_related("assignment__drudge__user"), pk=reference_id
    )

    if not request.user.is_staff:
        if reference.assignment.drudge.user != request.user:
            return HttpResponseForbidden("<h1>Access forbidden</h1>")

    drudge = reference.assignment.drudge

    pdf, response = pdf_response("reference-%s" % reference.pk)
    pdf.init_letter(page_fn=create_stationery_fn(NaturnetzStationery()))

    pdf.p(drudge.user.get_full_name())
    pdf.p(drudge.address)
    pdf.p(u"%s %s" % (drudge.zip_code, drudge.city))
    pdf.next_frame()

    pdf.p("Kloster Fahr, %s" % reference.created.strftime("%d.%m.%Y"))

    pdf.h1("ARBEITSZEUGNIS")
    pdf.spacer()

    pdf.p(reference.text)

    pdf.spacer(10 * mm)
    pdf.p(u"Dr. Marco Sacchi\nGeschäftsführer")

    pdf.generate()
    return response
示例#2
0
def packing_slip_pdf(pdf, order):
    pdf.init_letter(page_fn=create_stationery_fn(get_callable(plata.settings.PLATA_REPORTING_STATIONERY)()))

    if plata.settings.PLATA_REPORTING_ADDRESSLINE:
        pdf.address_head(plata.settings.PLATA_REPORTING_ADDRESSLINE)

    pdf.address(order.addresses()["shipping"])
    pdf.next_frame()

    pdf.p(
        u"%s: %s"
        % (
            capfirst(_("order date")),
            order.confirmed and order.confirmed.strftime("%d.%m.%Y") or _("Not confirmed yet"),
        )
    )
    pdf.spacer(3 * mm)

    pdf.h1(_("Order %09d") % order.id)
    pdf.hr()

    pdf.table(
        [(_("SKU"), capfirst(_("product")), capfirst(_("quantity")))]
        + [(item.variation.sku, unicode(item.variation), item.quantity) for item in order.items.all()],
        (2 * cm, 13.4 * cm, 1 * cm),
        pdf.style.tableHead + (("ALIGN", (1, 0), (1, -1), "LEFT"),),
    )

    if order.notes:
        pdf.spacer(10 * mm)
        pdf.p(capfirst(_("notes")), style=pdf.style.bold)
        pdf.spacer(1 * mm)
        pdf.p(order.notes)

    pdf.generate()
示例#3
0
 def init_letter(self):
     self.pdf.init_letter(page_fn=create_stationery_fn(
         get_callable(plata.settings.PLATA_REPORTING_STATIONERY)()))
示例#4
0
 def init_letter(self):
     self.pdf.init_letter(page_fn=create_stationery_fn(
         get_callable(plata.settings.PLATA_REPORTING_STATIONERY)()))
示例#5
0
def assignment_pdf(request, assignment_id):
    assignment = get_object_or_404(
        Assignment.objects.select_related("drudge__user"), pk=assignment_id
    )

    if not request.user.is_staff:
        if assignment.drudge.user != request.user:
            return HttpResponseForbidden("<h1>Access forbidden</h1>")

    result_writer = PdfFileWriter()

    # Generate the first page ################################################
    first_page = BytesIO()
    pdf = PDFDocument(first_page)

    pdf.init_report()
    pdf.generate_style(font_size=10)

    scope_statement = assignment.specification.scope_statement
    address = [
        scope_statement.company_name or u"Verein Naturnetz",
        scope_statement.company_address or u"Chlosterstrasse",
        scope_statement.company_contact_location or u"8109 Kloster Fahr",
    ]

    pdf.spacer(25 * mm)
    pdf.table(list(zip(address, address)), (8.2 * cm, 8.2 * cm), pdf.style.tableBase)
    pdf.spacer(30 * mm)

    pdf.p_markup(
        u"""
Lieber Zivi<br /><br />

Vielen Dank fürs Erstellen deiner Einsatzvereinbarung! Du findest hier nun die
Einsatzvereinbarung und einige Hinweise zum Einsatz beim Naturnetz. Bitte lies
alles nochmals genau durch und überprüfe deine Daten auf Fehler. Wenn alles
korrekt ist, unterschreibe die Einsatzvereinbarung und schicke diese ans
Naturnetz. Die Naturnetz-Adresse ist oben aufgedruckt (passend für ein
Fenstercouvert). Die Blätter mit den Hinweisen solltest du bei dir behalten
und für deinen Zivildiensteinsatz aufbewahren. Mit deiner Unterschrift
bestätigst du, dass du die Bestimmungen gelesen und akzeptiert hast. Die
Adresse unten wird von uns benutzt, um die Einsatzvereinbarung an das
Regionalzentrum weiterzuleiten.<br /><br />

Bestätigung: Ich akzeptiere die internen Bestimmungen des Naturnetz (Beilagen
zur Einsatzvereinbarung).<br /><br /><br /><br />

_________________________________________<br />
%s, %s<br /><br />

Wir freuen uns auf deinen Einsatz!
"""
        % (date.today().strftime("%d.%m.%Y"), assignment.drudge.user.get_full_name())
    )
    pdf.spacer(26 * mm)

    address = u"\n".join(
        [assignment.regional_office.name, assignment.regional_office.address]
    ).replace("\r", "")

    pdf.table([(address, address)], (8.2 * cm, 8.2 * cm), pdf.style.tableBase)

    pdf.generate()

    # Add the first page to the output #######################################
    first_page_reader = PdfFileReader(first_page)
    result_writer.addPage(first_page_reader.getPage(0))

    # Generate the form ######################################################
    overlay = BytesIO()
    pdf = PDFDocument(overlay)

    # pdf.show_boundaries = True
    pdf.init_report(page_fn=create_stationery_fn(AssignmentPDFStationery(assignment)))

    pdf.pagebreak()
    pdf.pagebreak()

    pdf.generate()

    # Merge the form and the overlay, and add everything to the output #######
    eiv_reader = PdfFileReader(
        os.path.join(
            os.path.dirname(os.path.dirname(__file__)),
            "data",
            "Einsatzvereinbarung.pdf",
        )
    )
    overlay_reader = PdfFileReader(overlay)

    for idx in range(2):
        page = eiv_reader.getPage(idx)
        page.mergePage(overlay_reader.getPage(idx))
        result_writer.addPage(page)

    # Add the conditions PDF if it exists ####################################
    if assignment.specification.conditions:
        conditions_reader = PdfFileReader(
            assignment.specification.conditions.open("rb")
        )
        for page in range(conditions_reader.getNumPages()):
            result_writer.addPage(conditions_reader.getPage(page))

    # Response! ##############################################################
    response = HttpResponse(content_type="application/pdf")
    result_writer.write(response)

    response["Content-Disposition"] = "attachment; filename=eiv-%s.pdf" % (
        assignment.pk,
    )
    return response
示例#6
0
def invoice_pdf(pdf, order):
    pdf.init_letter(page_fn=create_stationery_fn(get_callable(plata.settings.PLATA_REPORTING_STATIONERY)()))

    if plata.settings.PLATA_REPORTING_ADDRESSLINE:
        pdf.address_head(plata.settings.PLATA_REPORTING_ADDRESSLINE)

    pdf.address(order, "billing_")
    pdf.next_frame()

    pdf.p(
        u"%s: %s"
        % (
            capfirst(_("order date")),
            order.confirmed and order.confirmed.strftime("%d.%m.%Y") or _("Not confirmed yet"),
        )
    )
    pdf.spacer(3 * mm)

    pdf.h1(_("Order %09d") % order.id)
    pdf.hr()

    pdf.table(
        [
            (
                _("SKU"),
                capfirst(_("product")),
                capfirst(_("quantity")),
                capfirst(_("unit price")),
                capfirst(_("line item price")),
            )
        ]
        + [
            (
                item.variation.sku,
                unicode(item.variation),
                item.quantity,
                u"%.2f" % item.unit_price,
                u"%.2f" % item.discounted_subtotal,
            )
            for item in order.items.all()
        ],
        (2 * cm, 6 * cm, 1 * cm, 3 * cm, 4.4 * cm),
        pdf.style.tableHead + (("ALIGN", (1, 0), (1, -1), "LEFT"),),
    )

    summary_table = [("", ""), (capfirst(_("subtotal")), u"%.2f" % order.subtotal)]

    if order.discount:
        summary_table.append((capfirst(_("discount")), u"%.2f" % order.discount))

    if order.shipping:
        summary_table.append((capfirst(_("shipping")), u"%.2f" % order.shipping))

    pdf.table(summary_table, (12 * cm, 4.4 * cm), pdf.style.table)

    pdf.spacer(1 * mm)

    total_title = u"%s %s" % (capfirst(_("total")), order.currency)

    if order.tax:
        if "tax_details" in order.data:
            zero = Decimal("0.00")

            pdf.table(
                [
                    (
                        u"",
                        u"%s %s" % (_("Incl. tax"), u"%.1f%%" % row["tax_rate"]),
                        row["total"].quantize(zero),
                        row["tax_amount"].quantize(zero),
                        u"",
                    )
                    for rate, row in order.data["tax_details"]
                ],
                (2 * cm, 4 * cm, 3 * cm, 3 * cm, 4.4 * cm),
                pdf.style.table,
            )

    pdf.table([(total_title, u"%.2f" % order.total)], (12 * cm, 4.4 * cm), pdf.style.tableHead)

    pdf.spacer()
    if order.is_paid:
        try:
            payment = order.payments.authorized()[0]
        except IndexError:
            payment = None

        if payment:
            pdf.p(
                _("Already paid for with %(payment_method)s (Transaction %(transaction)s).")
                % {"payment_method": payment.payment_method, "transaction": payment.transaction_id}
            )
        else:
            pdf.p(_("Already paid for."))
    else:
        pdf.p(_("Not paid yet."))

    pdf.generate()