gitarre
authorMichael Wagner <michael@wagnertech.de>
Mon, 4 Mar 2024 20:52:32 +0000 (21:52 +0100)
committerMichael Wagner <michael@wagnertech.de>
Mon, 4 Mar 2024 20:52:32 +0000 (21:52 +0100)
python/ausweis/.dummy [deleted file]
python/ausweis/ausweis.py [deleted file]
python/eh_util/eh_abgleich/AWK/SVereinControl.py
python/eh_util/eh_abgleich/AWK/ausweis.py [new file with mode: 0755]
python/eh_util/eh_abgleich/AWK/mitglied.py
python/eh_util/eh_abgleich/MyTest.py

diff --git a/python/ausweis/.dummy b/python/ausweis/.dummy
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/python/ausweis/ausweis.py b/python/ausweis/ausweis.py
deleted file mode 100755 (executable)
index b2badf9..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/python3
-
-import sys
-
-"""
-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):
-    from PyPDF2 import PdfFileWriter, PdfFileReader
-    import io
-    from reportlab.pdfgen import canvas
-    from reportlab.lib.pagesizes import letter
-    
-    packet = io.BytesIO()
-    can = canvas.Canvas(packet, pagesize=letter)
-    can.setFont("Helvetica", 12)
-    can.drawString(460, 110, "235147")
-    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.save()
-    
-    #move to the beginning of the StringIO buffer
-    packet.seek(0)
-    
-    # create a new PDF with Reportlab
-    new_pdf = PdfFileReader(packet)
-    # read your existing PDF
-    existing_pdf = PdfFileReader(open(hintergrund_pdf, "rb"))
-    output = PdfFileWriter()
-    # add the "watermark" (which is the new pdf) on the existing page
-    page = existing_pdf.pages[0]
-    page.mergePage(new_pdf.pages[0])
-    output.addPage(page)
-    # finally, write "output" to a real file
-    output_stream = open(outpath+"destination.pdf", "wb")
-    output.write(output_stream)
-    output_stream.close()
-
-if __name__ == "__main__":
-    if len(sys.argv) == 6:
-        nachname = sys.argv[1]
-        vorname = sys.argv[2]
-        geburtsdatum = sys.argv[3]
-        infile = sys.argv[4]
-        outpath = sys.argv[5]
-    else:
-        print ("Nachname: ")
-        nachname = input()
-        print ("Vorname:")
-        vorname = input()
-        print ("Geburtsdatum:")
-        geburtsdatum = input()
-        print ("Input-Datei: ")
-        infile = input()
-        print ("Ausgabepfad:")
-        outpath = input()
-        
-    mitglied = Mitglied(nachname, vorname, geburtsdatum)
-    erzeuge_ausweis(mitglied,infile, outpath)
-    
index 64a383a..606325d 100644 (file)
@@ -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/eh_util/eh_abgleich/AWK/ausweis.py b/python/eh_util/eh_abgleich/AWK/ausweis.py
new file mode 100755 (executable)
index 0000000..96250e8
--- /dev/null
@@ -0,0 +1,91 @@
+#!/usr/bin/python3
+
+import sys
+from AWK.mitglied import Mitglied
+
+"""
+Testaufruf:
+./ausweis.py Michael Wagner "25.5.1965" MitgliederausweisSVBaLVorlage_leer.pdf ./
+"""
+
+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, mitglied.mitgliedsnr)
+    can.drawString(330, 80, mitglied.vorname+" "+mitglied.nachname)
+    can.setFont("Helvetica", 9)
+    can.drawString(400, 56, mitglied.geburtsdatum)
+    can.drawString(400, 42, mitglied.eintrittsdatum)
+    can.drawString(400, 20, mitglied.ver_grund)
+    
+    
+    can.save()
+    
+    #move to the beginning of the StringIO buffer
+    packet.seek(0)
+    
+    # create a new PDF with Reportlab
+    new_pdf = PdfFileReader(packet)
+    # read your existing PDF
+    existing_pdf = PdfFileReader(open(hintergrund_pdf, "rb"))
+    output = PdfFileWriter()
+    # add the "watermark" (which is the new pdf) on the existing page
+    page = existing_pdf.pages[0]
+    page.mergePage(new_pdf.pages[0])
+    output.addPage(page)
+    # finally, write "output" to a real file
+    output_stream = open(ausgabe_pfad, "wb")
+    output.write(output_stream)
+    output_stream.close()
+
+if __name__ == "__main__":
+    if len(sys.argv) == 6:
+        nachname = sys.argv[1]
+        vorname = sys.argv[2]
+        geburtsdatum = sys.argv[3]
+        infile = sys.argv[4]
+        outpath = sys.argv[5]
+    else:
+        print ("Nachname: ")
+        nachname = input()
+        print ("Vorname:")
+        vorname = input()
+        print ("Geburtsdatum:")
+        geburtsdatum = input()
+        print ("Input-Datei: ")
+        infile = input()
+        print ("Ausgabepfad:")
+        outpath = input()
+        
+    mitglied = Mitglied(nachname, vorname, geburtsdatum)
+    erzeuge_ausweis(mitglied,infile, outpath)
+    
index 7d2673a..a66b47a 100644 (file)
@@ -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
index 001d460..0ddfd40 100644 (file)
@@ -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])
+