From 6e2734d8a2be533de7593328ba8574aa143bbff4 Mon Sep 17 00:00:00 2001 From: Michael Wagner Date: Mon, 4 Mar 2024 21:52:32 +0100 Subject: [PATCH] gitarre --- python/ausweis/.dummy | 0 .../eh_util/eh_abgleich/AWK/SVereinControl.py | 23 ++++++++++- .../eh_abgleich/AWK}/ausweis.py | 41 ++++++++++++++----- python/eh_util/eh_abgleich/AWK/mitglied.py | 26 ++++++++---- python/eh_util/eh_abgleich/MyTest.py | 27 +++++++++++- 5 files changed, 96 insertions(+), 21 deletions(-) delete mode 100644 python/ausweis/.dummy rename python/{ausweis => eh_util/eh_abgleich/AWK}/ausweis.py (63%) diff --git a/python/ausweis/.dummy b/python/ausweis/.dummy deleted file mode 100644 index e69de29..0000000 diff --git a/python/eh_util/eh_abgleich/AWK/SVereinControl.py b/python/eh_util/eh_abgleich/AWK/SVereinControl.py index 64a383a..606325d 100644 --- a/python/eh_util/eh_abgleich/AWK/SVereinControl.py +++ b/python/eh_util/eh_abgleich/AWK/SVereinControl.py @@ -10,6 +10,7 @@ class SVereinDatei(object): ''' self.datei_name = datei_name self.mitglieder = {} + self.get_merker = 0 dh = open(datei_name) line = dh.readline().rstrip() @@ -21,7 +22,7 @@ class SVereinDatei(object): for kopf in export_header: if kopf[0] == '"': kopf = kopf[1:-1] - if kopf == 'Freifeldwert_1': + if kopf == 'Mitglieds-Nr': sv_pn_spalte = i i += 1 @@ -38,3 +39,23 @@ class SVereinDatei(object): pn = pn[1:-1] pn = int(pn) self.mitglieder[pn] = Mitglied(data) + # setze zusätzliche Mitgliedschaften im Stamm + for mnr in self.mitglieder: + if self.mitglieder[mnr].stammnummer > 0: + self.mitglieder[self.mitglieder[mnr].stammnummer].add_weitere_mitgliedschaft(mnr) + + def get(self, mnr = None): + if mnr: + return self.mitglieder[mnr] + if self.get_merker == 0: + for m in self.mitglieder: + self.get_merker = m + return self.mitglieder[m] + return_next = False + for m in self.mitglieder: + if return_next: + self.get_merker = m + return self.mitglieder[m] + if m == self.get_merker: + return_next = True + return None diff --git a/python/ausweis/ausweis.py b/python/eh_util/eh_abgleich/AWK/ausweis.py similarity index 63% rename from python/ausweis/ausweis.py rename to python/eh_util/eh_abgleich/AWK/ausweis.py index b2badf9..96250e8 100755 --- a/python/ausweis/ausweis.py +++ b/python/eh_util/eh_abgleich/AWK/ausweis.py @@ -1,33 +1,52 @@ #!/usr/bin/python3 import sys +from AWK.mitglied import Mitglied """ Testaufruf: ./ausweis.py Michael Wagner "25.5.1965" MitgliederausweisSVBaLVorlage_leer.pdf ./ """ -class Mitglied: - def __init__(self, nachname, vorname, geburtsdatum): - self.nachname = nachname - self.vorname = vorname - self.geburtsdatum = geburtsdatum - -def erzeuge_ausweis(mitglied: Mitglied, hintergrund_pdf, ausgabe_pfad): +def erzeuge_ausweis(mitglied: Mitglied, ausgabetext, hintergrund_pdf, ausgabe_pfad): from PyPDF2 import PdfFileWriter, PdfFileReader + from datetime import date import io from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter packet = io.BytesIO() can = canvas.Canvas(packet, pagesize=letter) + + # Adressfeld + can.setFont("Helvetica", 12) + can.drawString(70, 640, mitglied.anrede) + can.drawString(70, 625, mitglied.vorname+" "+mitglied.nachname) + can.drawString(70, 610, mitglied.strasse) + can.drawString(70, 580, mitglied.plz+" "+mitglied.ort) + + # Datum + can.setFont("Helvetica", 9) + can.drawString(350, 520, "München, "+date.today().strftime('%d.%m.%Y')) + + # Anschreiben + can.drawString(70, 500, mitglied.anrede+" "+mitglied.nachname+",") + text = can.beginText(70, 480) + text.textLines(ausgabetext) + can.drawText(text) + + + can.line(20, 180, 560, 180) + + # Ausweis can.setFont("Helvetica", 12) - can.drawString(460, 110, "235147") + can.drawString(460, 110, mitglied.mitgliedsnr) can.drawString(330, 80, mitglied.vorname+" "+mitglied.nachname) can.setFont("Helvetica", 9) can.drawString(400, 56, mitglied.geburtsdatum) - can.drawString(400, 42, "1.3.2012") - can.drawString(400, 20, "Gleiwitzer Str. 28") + can.drawString(400, 42, mitglied.eintrittsdatum) + can.drawString(400, 20, mitglied.ver_grund) + can.save() @@ -44,7 +63,7 @@ def erzeuge_ausweis(mitglied: Mitglied, hintergrund_pdf, ausgabe_pfad): page.mergePage(new_pdf.pages[0]) output.addPage(page) # finally, write "output" to a real file - output_stream = open(outpath+"destination.pdf", "wb") + output_stream = open(ausgabe_pfad, "wb") output.write(output_stream) output_stream.close() diff --git a/python/eh_util/eh_abgleich/AWK/mitglied.py b/python/eh_util/eh_abgleich/AWK/mitglied.py index 7d2673a..a66b47a 100644 --- a/python/eh_util/eh_abgleich/AWK/mitglied.py +++ b/python/eh_util/eh_abgleich/AWK/mitglied.py @@ -3,22 +3,25 @@ Created on 29.02.2024 @author: sparky2021 ''' -from voluptuous.schema_builder import Self - class Mitglied(object): ''' classdocs ''' + def rd_opt_qval(self, s): + if s[0] == '"': + s = s[1:-1] + return s def __init__(self, data): ''' Constructor ''' + self.weitere_mitgliedschaften = [] self.anrede = data[0] self.vorname = data[1] self.nachname = data[2] - self.strasse = data[3] + self.strasse = self.rd_opt_qval(data[3]) # "Zusatzadresse" self.plz = data[5] self.ort = data[6] @@ -26,8 +29,8 @@ class Mitglied(object): # "Titel" # "Geschlecht" # "Familienstand" - # "Mitglieds-Nr" - self.geburtsdatum = data[12] + self.mitgliedsnr = self.rd_opt_qval(data[11]) + self.geburtsdatum = data[12] self.eintrittsdatum = data[13] self.austrittsdatum = data[14] # "Austrittsgrund" @@ -82,9 +85,18 @@ class Mitglied(object): # "BeitragGB5Gesperrt_1_1" # "BeitragZahlweiseGesperrt_1_1" # "Freifeldname_1" - self.partnernummer = data[67] + if data[67] == '""': + self.stammnummer = 0 + else: + self.stammnummer = int(self.rd_opt_qval(data[67])) # "Freifeldname_2" - self.ver_grund = data[69] + self.ver_grund = self.rd_opt_qval(data[69]) + if len(self.ver_grund) == 0: + self.ver_grund = f"{self.strasse}, {self.plz} {self.ort}" # "Freifeldname_3" self.zeitung = data[71] + def add_weitere_mitgliedschaft(self, pn): + self.weitere_mitgliedschaften.append(pn) + + \ No newline at end of file diff --git a/python/eh_util/eh_abgleich/MyTest.py b/python/eh_util/eh_abgleich/MyTest.py index 001d460..0ddfd40 100644 --- a/python/eh_util/eh_abgleich/MyTest.py +++ b/python/eh_util/eh_abgleich/MyTest.py @@ -1,14 +1,37 @@ from AWK.SVereinControl import SVereinDatei +from AWK import ausweis import sys def mytest(datei_name): daten = SVereinDatei(datei_name) print ("Daten geladen") - + m = daten.get() + while m: + if m.abteilung_1 == "Standard": + austxt = "Ihr Beitrag für 2024 setzt sich wie folgt zusammen:\n" + austxt += f"Standardmitgliedschaft ({m.ver_grund}): 39.-" + betrag = 39 + weitere = m.weitere_mitgliedschaften + for weitere_mnr in weitere: + wm = daten.get(weitere_mnr) + austxt += f"\nZusatzgrundstück ({wm.ver_grund}): 32.-" + betrag += 32 + if len(m.iban) > 0: + iban = m.iban[0:3]+"XXXXXXXXXXXXX"+m.iban[-4:] + austxt += f"\n\nDer Betrag von {betrag}.- wird von Ihrem Konto {iban} eingezogen." + else: + austxt += f"\n\nBitte überweisen Sie den offnen Betrag von {betrag}.- auf unser Konto TODO." + austxt += "\n\nBitte beachten Sie die Einladung zu unserer Hauptversammlung in der Anlage." + austxt += "\n\nMit freundlichen Grüßen,\nMichael Wagner\n(Vorstand)" + ausweis.erzeuge_ausweis(m, austxt, "MitgliederausweisSVBaLVorlage_leer.pdf", f"Ausweis_{m.mitgliedsnr}_{m.nachname}.pdf") + #return + m = daten.get() + print ("Ausweise erstellt.") if __name__ == '__main__': numArgs = len(sys.argv) if (numArgs != 2): raise RuntimeError("usage: MyTest DATEI") - mytest(sys.argv[1]) \ No newline at end of file + mytest(sys.argv[1]) + -- 2.20.1