]> wagnertech.de Git - SVBaL.git/commitdiff
pydev-s6git
authorMichael Wagner <mail@wagnertech.de>
Sun, 19 Jan 2025 15:41:02 +0000 (16:41 +0100)
committerMichael Wagner <mail@wagnertech.de>
Sun, 19 Jan 2025 15:41:02 +0000 (16:41 +0100)
python/eh_util/eh_app/AWK/config.py
python/eh_util/eh_app/AWK/routines.py
python/eh_util/eh_app/forms.py
python/eh_util/eh_app/qmodels.py
python/eh_util/eh_app/templates/ehmeldung.html [new file with mode: 0644]
python/eh_util/eh_app/tests.py
python/eh_util/eh_app/urls.py
python/eh_util/eh_app/views.py

index 47c7b0ab5a6995a2c745c8ef36294c7e2f9491d2..ee76c7b248a246cef72360501df4ca94776770ea 100644 (file)
@@ -27,7 +27,18 @@ class Config:
             raise RuntimeError(f"Kein Eintag für: {self.verein}/{key}")
         return data
         
             raise RuntimeError(f"Kein Eintag für: {self.verein}/{key}")
         return data
         
-
+    def setConfig(self, key, value):
+        # check, if entry already exists
+        data = ConfigData.objects.filter(verein=self.verein, key=key)
+        if data:
+            # check value
+            if data.value != value:
+                data.value = value
+                data.save()
+        else:
+            data = ConfigData(verein=self.verein, key=key, value=value)
+            data.save()
+        
 def getInstance(verein=None):
     global the_instance
     if not the_instance:
 def getInstance(verein=None):
     global the_instance
     if not the_instance:
index 76a2c9642d99a8bdea536eb55e97e1df4a6317c8..f176462f27db85f3a48fb1b256d59f4027e2b55c 100644 (file)
@@ -23,4 +23,55 @@ def aktualisiere_config(config, data):
         
     if data["zusatzbeitrag"]:
         config.set_config("beitrag_zusatz", data["zusatzbeitrag"])
         
     if data["zusatzbeitrag"]:
         config.set_config("beitrag_zusatz", data["zusatzbeitrag"])
-        
\ No newline at end of file
+
+def erstelle_ehmeldung(data):
+    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(205, 618, data["VorZuname"])
+    can.drawString(205, 600, data["VorZunamePartner"])
+    can.drawString(205, 583, data["Wohnanschrift"])
+    can.drawString(205, 566, data["Telefon"])
+    can.drawString(365, 566, data["Email"])
+    can.drawString(205, 549, data["Geburtsdatum"])
+    versichertes_object = data["VersichertesObjekt"]
+    if versichertes_object == "":
+        versichertes_object = data["Wohnanschrift"]
+    can.drawString(205, 500, versichertes_object)
+    can.drawString(193, 466, str(data["AnzahlWohnungen"]))
+    if data["Selbstgenutzt"]:
+        can.drawString(350, 466, "X")
+    if data["Eigentumswohnung"]:
+        can.drawString(188, 449, "X")
+    if data["Gewerblich"]:
+        can.drawString(350, 449, "X")
+    can.drawString(140, 376, date.today().strftime('%d.%m.%Y'))
+    can.drawString(350, 376, "Maschinell erstellt.")
+        
+    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("/home/sparky2021/SVBaL/Aktuell/BeitrittserklarungSVBaL.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("meldung.pdf", "wb")
+    output.write(output_stream)
+    output_stream.close()
+      
\ No newline at end of file
index cc438ab9e0b71e1172b7316b3f5a4bd92a52765a..396bbe268aed8b952d24c68f42ec52c771f59797 100644 (file)
@@ -16,6 +16,7 @@ class TextInputForm(forms.Form):
         widget=forms.Textarea,
     )
 '''
         widget=forms.Textarea,
     )
 '''
+from django.db.models.fields import BooleanField
 '''
 - Doku zu Forms:
 https://docs.djangoproject.com/en/2.2/topics/forms/
 '''
 - Doku zu Forms:
 https://docs.djangoproject.com/en/2.2/topics/forms/
@@ -26,3 +27,28 @@ class KassenbriefForm(forms.Form):
     briefpapier   = forms.FileField(label='Briefpapier ändern:', required=False)
     basisbeitrag  = forms.IntegerField()
     zusatzbeitrag = forms.IntegerField(label="Beitrag für Zusatzgrundstück")
     briefpapier   = forms.FileField(label='Briefpapier ändern:', required=False)
     basisbeitrag  = forms.IntegerField()
     zusatzbeitrag = forms.IntegerField(label="Beitrag für Zusatzgrundstück")
+
+class EhmeldungForm(forms.Form):
+    VorZuname = forms.CharField(
+        label = "Vor- und Zuname",)
+    VorZunamePartner = forms.CharField(
+        label = "Vor- und Zuname Partner",
+        required=False)
+    Wohnanschrift = forms.CharField(label = "Wohnanschrift (Str, PLZ, Ort)")
+    Telefon = forms.CharField(
+        label = "Telefon",
+        required=False)
+    Email = forms.CharField(
+        label = "E-Mail",
+        required=False)
+    Geburtsdatum = forms.CharField(
+        label = "Geburtsdatum",
+        required=False)
+    VersichertesObjekt = forms.CharField(
+        label = "Versichertes Objekt",
+        required=False)
+    AnzahlWohnungen = forms.IntegerField(initial=1, label="Anzahl Wonungen")
+    Selbstgenutzt = forms.BooleanField(label="Selbstgenutzt", required=False)
+    Eigentumswohnung = forms.BooleanField(label="Eigentumswohnung", required=False)
+    Gewerblich = forms.BooleanField(label="(teilw.) gewerblich genutzt", required=False)
+    
\ No newline at end of file
index 8a2521b7b80f4e94c729cad63ecbff3f133bbe76..83c6a85c28e3e8dee8190e1c4643b32a4ce0d0f0 100644 (file)
@@ -13,16 +13,14 @@ class MitgliederQuery:
             d (separator)  : ;
             H (header line): yes
         '''
             d (separator)  : ;
             H (header line): yes
         '''
-        self.file_name = None
-        self.att_list = "Anrede, Vorname, Nachname, Strasse, PLZ, Ort, Geburtsdatum, Eintrittsdatum, Austrittsdatum, Zahlungsart, Iban, Bic, Kontoinhaber, Mandatsreferenz, Debitorenkontonr, Status, Email, Abteilung_1, Abteilungseintritt_1, Abteilungsaustritt_1, Freifeldname_1, Freifeldwert_1, Freifeldname_2, Freifeldwert_2, Freifeldname_3, Freifeldwert_3"
-        
+        self.file_name = config.getInstance().requireConfig("DataFile")
+        self.att_list = "Mitglieds-Nr, Anrede, Vorname, Nachname, Strasse, PLZ, Ort, Geburtsdatum, Eintrittsdatum, Austrittsdatum, Zahlungsart, Iban, Bic, Kontoinhaber, Mandatsreferenz, Email, "
+        #               0              1        2         3        4    5    6             7               8               9            10    11   12            13               14     15           
     def all(self):
     def all(self):
-        if self.file_name == None:
-            self.file_name = config.getInstance().requireConfig("DataFile")
-            
-        data_set = self.data_source.request(f"SELECT {self.att_list} FROM {self.file_name}")
+        data_set = self.data_source.request(f"SELECT {self.att_list} FROM {self.file_name} WHERE Abteilung_1 = 'Standard' AND Eintrittsdatum < NOW AND Austrittsdatum > NOW")
         for data in data_set:
             m = Mitglied()
         for data in data_set:
             m = Mitglied()
+            m.mitgliedsnr    = data[0]
             m.anrede = data[0]
             m.vorname = data[1]
             m.nachname = data[2]
             m.anrede = data[0]
             m.vorname = data[1]
             m.nachname = data[2]
@@ -34,10 +32,7 @@ class MitgliederQuery:
             # "Titel"
             # "Geschlecht"
             # "Familienstand"
             # "Titel"
             # "Geschlecht"
             # "Familienstand"
-            m.mitgliedsnr    = data[6]
-            m.geburtsdatum   = data[7]
-            m.eintrittsdatum = data[8]
-            m.austrittsdatum = data[9]
+            # m.geburtsdatum   = data[7]
             # "Austrittsgrund"
             m.zahlungsart    = data[16]
             m.iban           = data[17]
             # "Austrittsgrund"
             m.zahlungsart    = data[16]
             m.iban           = data[17]
@@ -48,7 +43,7 @@ class MitgliederQuery:
             m.kontoinhaber   = data[22]
             m.mandatsreferenz = data[23]
             m.debitorenkontonr = data[24]
             m.kontoinhaber   = data[22]
             m.mandatsreferenz = data[23]
             m.debitorenkontonr = data[24]
-            m.status           = data[25]
+            m.status           = data[25]
             # "Branche"
             # "Notfallnummer"
             # "Notfallkontakt"
             # "Branche"
             # "Notfallnummer"
             # "Notfallkontakt"
@@ -61,35 +56,6 @@ class MitgliederQuery:
             m.abteilung_1      = data[35]
             m.abteilungseintritt_1 = data[36]
             m.abteilungsaustritt_1 = data[37]
             m.abteilung_1      = data[35]
             m.abteilungseintritt_1 = data[36]
             m.abteilungsaustritt_1 = data[37]
-            # "Abteilungsstatus_1"
-            # "Abteilungsstatus DFB_1"
-            # "Abteilungsaustrittsgrund_1"
-            # "Abteilung_2"
-            # "Abteilungseintritt_2"
-            # "Abteilungsaustritt_2"
-            # "Abteilungsstatus_2"
-            # "Abteilungsstatus DFB_2"
-            # "Abteilungsaustrittsgrund_2"
-            # "Beitragsbezeichnung_1_1"
-            # "Beitragsstart_1_1"
-            # "Beitragsende_1_1"
-            # "BeitragBerechnetBis_1_1"
-            # "BeitragZahlweise_1_1"
-            # "BeitragFälligkeitsdatum_1_1"
-            # "BeitragVariabel_1_1"
-            # "BeitragFormel_1_1"
-            # "BeitragGrundbetrag1_1_1"
-            # "BeitragGB1Gesperrt_1_1"
-            # "BeitragGrundbetrag2_1_1"
-            # "BeitragGB2Gesperrt_1_1"
-            # "BeitragGrundbetrag3_1_1"
-            # "BeitragGB3Gesperrt_1_1"
-            # "BeitragGrundbetrag4_1_1"
-            # "BeitragGB4Gesperrt_1_1"
-            # "BeitragGrundbetrag5_1_1"
-            # "BeitragGB5Gesperrt_1_1"
-            # "BeitragZahlweiseGesperrt_1_1"
-            # "Freifeldname_1"
             if data[67] == '""':
                 m.stammnummer = 0
             else:
             if data[67] == '""':
                 m.stammnummer = 0
             else:
@@ -100,9 +66,16 @@ class MitgliederQuery:
                 m.ver_grund = f"{m.strasse}, {m.plz} {m.ort}"
             # "Freifeldname_3"
             m.zeitung             = data[71]
                 m.ver_grund = f"{m.strasse}, {m.plz} {m.ort}"
             # "Freifeldname_3"
             m.zeitung             = data[71]
+    def VersicherteGrundstucke(self, mitglied_id):
+        data_set = self.data_source.request(f"SELECT Freifeldwert_1 FROM {self.file_name} WHERE ")
+        
         
 class Mitglied:
         
 class Mitglied:
+    # TODO: In property verwandeln 
     objects = MitgliederQuery()
     def __init__(self):
         pass
     
     objects = MitgliederQuery()
     def __init__(self):
         pass
     
+    def VersicherteGrundstucke(self):
+        return self.objects.VersicherteGrundstucke(self.mitgliedsnr)
+
diff --git a/python/eh_util/eh_app/templates/ehmeldung.html b/python/eh_util/eh_app/templates/ehmeldung.html
new file mode 100644 (file)
index 0000000..5d7705c
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <title>WagnerTech - Eigenheimer - Meldung</title>
+    </head>
+
+    <body>
+       
+        <!-- Upload form. Note enctype attribute! -->
+        <form action="/{{verein}}/ehmeldung/" method="post" enctype="multipart/form-data">
+            {% csrf_token %}
+             <p>{{ form.VorZuname.label_tag }} {{ form.VorZuname }}</p>
+             <p>{{ form.VorZunamePartner.label_tag }} {{ form.VorZunamePartner }}</p>
+             <p>{{ form.Wohnanschrift.label_tag }} {{ form.Wohnanschrift }}</p>
+             <p>{{ form.Telefon.label_tag }} {{ form.Telefon }}</p>
+             <p>{{ form.Email.label_tag }} {{ form.Email }}</p>
+             <p>{{ form.Geburtsdatum.label_tag }} {{ form.Geburtsdatum }}</p>
+             <p>{{ form.VersichertesObjekt.label_tag }} {{ form.VersichertesObjekt }}</p>
+             <p>{{ form.AnzahlWohnungen.label_tag }} {{ form.AnzahlWohnungen }}</p>
+             <p>{{ form.Selbstgenutzt.label_tag }} {{ form.Selbstgenutzt }}</p>
+             <p>{{ form.Eigentumswohnung.label_tag }} {{ form.Eigentumswohnung }}</p>
+             <p>{{ form.Gewerblich.label_tag }} {{ form.Gewerblich }}</p>
+
+            <p><input type="submit" value="Meldung erstellen"/></p>
+        </form>
+    </body>
+
+</html>
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..dd8e750daa39753f7a3fae9791cc0d21b6b22a25 100644 (file)
@@ -1,3 +1,27 @@
 from django.test import TestCase
 
 # Create your tests here.
 from django.test import TestCase
 
 # Create your tests here.
+
+class TestConfig(TestCase):
+    def test_setter(self):
+        from .AWK import config
+        cf = config.getInstance("svbal")
+        cf.setConfig("bla", "blub")
+        
+        val = cf.getConfig("bla")
+        assert (val == "blub")
+
+'''
+class TestQModel(TestCase):
+    def test_allinstances(self):
+        
+        from .AWK import config
+        config.getInstance("svbal")
+
+        from eh_app.qmodels import Mitglied
+        
+        config.getInstance("svbal")
+        
+        data = Mitglied.objects.all()
+        print (data)
+'''
index aeb491362ad0fff76b4e41106926d2916d1765d3..94432720e9e10ce075e1f13ced6a048bb7f45c24 100644 (file)
@@ -6,4 +6,5 @@ urlpatterns = [
     path('', views.index),
     path('kassenbrief/', views.kassenbrief),
     path('kassenbrief/exec', views.kassenbrief_exec),
     path('', views.index),
     path('kassenbrief/', views.kassenbrief),
     path('kassenbrief/exec', views.kassenbrief_exec),
+    path('ehmeldung/', views.ehmeldung),
 ]
 ]
index 0c3eb2c876862711cf1290545f8721d30385b9a4..3599c11db0f4814fb381dafa07c66afb9d1ad2dc 100644 (file)
@@ -6,7 +6,7 @@ from django.template import loader
 
 from .AWK import config, routines
 #import .forms 
 
 from .AWK import config, routines
 #import .forms 
-from .forms import KassenbriefForm
+from .forms import EhmeldungForm, KassenbriefForm
 
 # Create your views here.
 
 
 # Create your views here.
 
@@ -68,4 +68,23 @@ def kassenbrief_exec(request, verein):
     print (request.POST)
     print (request.FILES)
     return HttpResponse("xxx")
     print (request.POST)
     print (request.FILES)
     return HttpResponse("xxx")
+
+def ehmeldung(request, verein):
+    # if this is a POST request we need to process the form data
+    if request.method == 'POST':
+        # create a form instance and populate it with data from the request:
+        form = EhmeldungForm(request.POST, request.FILES)
+        # check whether it's valid:
+        if form.is_valid():
+            # bei Änderungen Konfiguration aktualisieren
+            routines.erstelle_ehmeldung(form.cleaned_data)
+            # redirect to a new URL:
+            return HttpResponseRedirect('/thanks/')
+
+    # if a GET (or any other method) we'll create a blank form
+    else:
+        form = EhmeldungForm()
+
+    return render(request, 'ehmeldung.html', {'form': form, 'verein': verein})
+    
     
\ No newline at end of file
     
\ No newline at end of file