Files
SUST/sustApp/create_payment_slip.py
T
2025-07-24 14:33:25 +02:00

143 lines
6.6 KiB
Python

import sustApp.models.models as models
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from segno import helpers
import datetime
import locale
import os
from config_loader import load_config
cfg = load_config()
year = cfg['year']
def print_multiple_lines(lines: int, text):
cnt = 1
while cnt < lines:
text.textLines("")
cnt += 1
def create_payment_slip(member: models.Members = None,
forMail: bool = False):
locale.setlocale(locale.LC_ALL, '')
salutation = "Deine"
salutation2 = "Dein"
salutation3 = "Dich"
salutation4 = "Solltest Du"
salutation5 = "sende"
subfolder = ""
w, h = A4
# create epc qr-code
if not member is None:
qrcode = helpers.make_epc_qr(name='Sportunion St. Thomas',
iban='AT493443700000113407',
amount=15*member.member_count,
reference=f'{year}-4732-{member.id:03}-{member.member_count}')
qrcode.save("epc_qr.png", scale=2)
subfolder = "mail" if member.member_email else ""
fullfilepath = os.path.join(os.path.expanduser("~"),"sust","payment_slips",subfolder,f"{member.member_zip}_payment_slip_member{member.id}.pdf")
else:
fullfilepath = os.path.join(os.path.expanduser("~"),"sust","payment_slips",subfolder,f"4732_payment_slip_blanko.pdf")
# Ensure the directory exists
os.makedirs(os.path.dirname(fullfilepath), exist_ok=True)
c = canvas.Canvas(fullfilepath, pagesize=A4)
if not member is None:
c.drawImage(image="epc_qr.png", x=500, y=40) # epc qr
#c.drawImage(image="Sportunion quer 4c.png", x=(w-180), y=(h-100), width=150, height=50, mask='auto')
image_path = os.path.join(os.path.dirname(__file__), "Sportunion quer 4c.png")
c.drawImage(image=image_path, x=(w-180), y=(h-100), width=150, height=50, mask='auto')
c.setFont("Helvetica", 9)
text = c.beginText(60, h - 150)
if not member is None:
if member.member_count > 1:
text.textLine(f"{member.member_firstname_spouse} u. {member.member_firstname} {member.member_surname}")
else:
text.textLine(f"{member.member_firstname} {member.member_surname} {member.member_suffix}")
text.textLine(f"{member.member_street} {member.member_streetnumber}")
text.textLine(f"{member.member_zip} {member.member_city}")
print_multiple_lines(5, text)
if member.member_count > 1:
salutation = "eure"
salutation2 = "euer"
salutation3 = "euch"
salutation4 = "Solltet ihr"
salutation5 = "sendet"
text.textLine(f"Liebe {member.member_firstname_spouse} und lieber {member.member_firstname}!")
else:
salutation = "Deine"
salutation2 = "Dein"
salutation3 = "Dich"
salutation4 = "Solltest Du"
salutation5 = "sende"
if member.member_gender == "female":
salutation_gender = "liebe"
else:
salutation_gender = "lieber"
text.textLine(f"{salutation_gender.capitalize()} {member.member_firstname}!")
else:
print_multiple_lines(10, text)
c.drawString(w - 150, h - 225, f'St. Thomas, {datetime.date.today().strftime('%d.%m.%Y')}')
#c.drawString(w - 150, h - 225, f'St. Thomas, {datetime.date.today().strftime('%x')}')
print_multiple_lines(5, text)
text.textLines(f"Vielen Dank für {salutation} Treue!\n\n{salutation2.capitalize()} Beitrag ist gut angelegt, denn der Sportverein St. Thomas bietet für jede(n) etwas:")
print_multiple_lines(2, text)
text.textLines("* Skigymnastik\n* Radfahren\n* Stockschiessen\n* Pilates\n* Tagesskifahrt\n* uvam")
print_multiple_lines(5, text)
if not forMail:
text.textLines(f"Wir möchten das Zustellen des Mitgliedsbeitrags-Zahlscheines zuküntig auf Mail umstellen, daher bitten wir {salutation3},\nuns eine Mail mit dem Betreff \"Zahlschein\" an unsere Mail-Adresse sv.stthomas@gmx.at zu senden!")
else:
print_multiple_lines(2, text)
print_multiple_lines(3, text)
text.textLines(f"{salutation2.capitalize()} Sportverein-Team!")
c.drawText(text)
text = c.beginText(60, h - 500)
c.setFont("Helvetica", 7)
text.textLines(f"Auf Grund der DSGVO müssen wir darauf hinweisen, dass wir außer Name, Adresse, Mail-Adresse\nzum Zwecke der Einebung des Mitgliedsbeitrags, keine persönlichen Daten unserer Mitglieder führen!\nDiese Daten werden von uns nicht an Dritte weitergegeben!\nWeiters informieren wir darüber, dass Fotos, die bei Veranstaltungen oder Aktivitäten entstehen,\nauf unserer Homepage oder in Zeitungen veröffentlicht werden können.\n{salutation4} gegen die Speicherung {salutation}r Daten oder die Veröffentlichung diverser Foto sein, {salutation5} uns bitte eine Mail.")
c.drawText(text)
# payment slip details
text = c.beginText(11, 75)
c.setFont("Helvetica", 8)
if not member is None:
text.textLine(f"Beitrag gesamt: {locale.format_string('%.2f', 15 * member.member_count)}")
text.textLine(f"Mitgliedsnummer: 4732-{member.id:03}")
else:
text.textLine(f"Beitrag gesamt: {locale.format_string('%.2f', 15)}")
text.textLine(f"Mitgliedsnummer: 4732-NEU")
c.drawText(text)
text = c.beginText(188, 103)
c.setFont("Helvetica", 8)
if not member is None:
text.textLine(f"Bei Online-Zahlung bitte die Zahlungsreferenz {year}-4732-{member.id:03}-{member.member_count} eintragen")
print_multiple_lines(1, text)
if member.member_count > 1:
text.textLine(f"Mitgliedsnummer: 4732-{member.id:03}, {member.member_firstname_spouse} {member.member_suffix} {member.member_firstname} {member.member_surname}")
else:
text.textLine(f"Mitgliedsnummer: 4732-{member.id:03}, {member.member_firstname} {member.member_surname}")
c.drawText(text)
c.setFont("Helvetica", 12)
c.drawString(77, 50, f"{year}")
c.drawString(300, 120, f"{year}")
c.setFont("Helvetica", 10)
c.drawString(188, h - 696, f'{year}-4732-{member.id:03}-{member.member_count}') # Zahlungsreferenz Zahlungsanweisung
c.drawString(11, 120, f'{year}-4732-{member.id:03}-{member.member_count}') # Zahlungsreferenz Auftragsbestätigung
c.drawString(130, h - 694, (locale.format_string('%.2f', 15 * member.member_count))) # Betrag Auftragsbestätigung
c.drawString(w - 30, 170, (locale.format_string('%.2f', 15 * member.member_count))) # Betrag Zahlungsanweisung
c.save()