def generate_bill(a_family, a_cost_per_person): a_title = DIR_UBERSICHT + "Vorauszahlung_Ubersicht_"+a_family+".pdf" pdf = PDFDocument(a_title) pdf.init_report() pdf.p_markup("Automatisch generiert am: "+ str(date.today()), pdf.style.right) pdf.spacer(20) pdf.h1("Übersicht Vorauszahlung für Familie " + a_family) pdf.spacer(20) pdf.h2("Kostenaufstellung") pdf.hr() pdf.spacer(10) my_list = [] q = db.query(Members).join(Familys).filter_by(f_name=a_family) total = 0 for result in db.execute(q): my_list.append([result[2] + " " + result[3], str(a_cost_per_person) + " €"]) total += a_cost_per_person try: pdf.table(my_list, 220) except Exception: print("No members") pdf.spacer(10) pdf.hr() pdf.spacer(20) pdf.p_markup("Total: " + str(total) + " €", pdf.style.bold) pdf.spacer(20) pdf.p(UBERWEISUNG_FOOTER) pdf.generate() return os.path.abspath(a_title)
def generate_teilnehmerliste(): a_title = DIR_TEILNEHMERLISTE + "Teilnehmer.pdf" pdf = PDFDocument(a_title) pdf.init_report() pdf.p_markup(date.today(), pdf.style.right) pdf.spacer(20) pdf.h1("Teilnehmer Skifahren 2017") pdf.hr_mini() pdf.spacer(20) familys = Familys.query.all() for family in familys: pdf.h3(family.f_name) q = db.query(Members).join(Familys).filter_by(f_name=family.f_name) members = [] for result in db.execute(q): members.append(result[2] + " " + result[3]) pdf.ul(members) pdf.spacer(10) pdf.p("Info:") pdf.p(family.f_info) pdf.spacer(20) pdf.hr() pdf.generate() return os.path.abspath(a_title)
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