From: Michael Wagner Date: Sun, 19 Jan 2025 15:41:02 +0000 (+0100) Subject: pydev-s6git X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/SVBaL.git/commitdiff_plain/722a0ed734f8e63911a66fda371147acf7dbc497 pydev-s6git --- diff --git a/python/eh_util/eh_app/AWK/config.py b/python/eh_util/eh_app/AWK/config.py index 47c7b0a..ee76c7b 100644 --- a/python/eh_util/eh_app/AWK/config.py +++ b/python/eh_util/eh_app/AWK/config.py @@ -27,7 +27,18 @@ class Config: 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: diff --git a/python/eh_util/eh_app/AWK/routines.py b/python/eh_util/eh_app/AWK/routines.py index 76a2c96..f176462 100644 --- a/python/eh_util/eh_app/AWK/routines.py +++ b/python/eh_util/eh_app/AWK/routines.py @@ -23,4 +23,55 @@ def aktualisiere_config(config, data): 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 diff --git a/python/eh_util/eh_app/forms.py b/python/eh_util/eh_app/forms.py index cc438ab..396bbe2 100644 --- a/python/eh_util/eh_app/forms.py +++ b/python/eh_util/eh_app/forms.py @@ -16,6 +16,7 @@ class TextInputForm(forms.Form): widget=forms.Textarea, ) ''' +from django.db.models.fields import BooleanField ''' - 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") + +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 diff --git a/python/eh_util/eh_app/qmodels.py b/python/eh_util/eh_app/qmodels.py index 8a2521b..83c6a85 100644 --- a/python/eh_util/eh_app/qmodels.py +++ b/python/eh_util/eh_app/qmodels.py @@ -13,16 +13,14 @@ class MitgliederQuery: 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): - 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() + m.mitgliedsnr = data[0] m.anrede = data[0] m.vorname = data[1] m.nachname = data[2] @@ -34,10 +32,7 @@ class MitgliederQuery: # "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] @@ -48,7 +43,7 @@ class MitgliederQuery: m.kontoinhaber = data[22] m.mandatsreferenz = data[23] m.debitorenkontonr = data[24] - m.status = data[25] + # m.status = data[25] # "Branche" # "Notfallnummer" # "Notfallkontakt" @@ -61,35 +56,6 @@ class MitgliederQuery: 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: @@ -100,9 +66,16 @@ class MitgliederQuery: 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: + # TODO: In property verwandeln 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 index 0000000..5d7705c --- /dev/null +++ b/python/eh_util/eh_app/templates/ehmeldung.html @@ -0,0 +1,29 @@ + + + + + WagnerTech - Eigenheimer - Meldung + + + + + +
+ {% csrf_token %} +

{{ form.VorZuname.label_tag }} {{ form.VorZuname }}

+

{{ form.VorZunamePartner.label_tag }} {{ form.VorZunamePartner }}

+

{{ form.Wohnanschrift.label_tag }} {{ form.Wohnanschrift }}

+

{{ form.Telefon.label_tag }} {{ form.Telefon }}

+

{{ form.Email.label_tag }} {{ form.Email }}

+

{{ form.Geburtsdatum.label_tag }} {{ form.Geburtsdatum }}

+

{{ form.VersichertesObjekt.label_tag }} {{ form.VersichertesObjekt }}

+

{{ form.AnzahlWohnungen.label_tag }} {{ form.AnzahlWohnungen }}

+

{{ form.Selbstgenutzt.label_tag }} {{ form.Selbstgenutzt }}

+

{{ form.Eigentumswohnung.label_tag }} {{ form.Eigentumswohnung }}

+

{{ form.Gewerblich.label_tag }} {{ form.Gewerblich }}

+ +

+
+ + + diff --git a/python/eh_util/eh_app/tests.py b/python/eh_util/eh_app/tests.py index 7ce503c..dd8e750 100644 --- a/python/eh_util/eh_app/tests.py +++ b/python/eh_util/eh_app/tests.py @@ -1,3 +1,27 @@ 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) +''' diff --git a/python/eh_util/eh_app/urls.py b/python/eh_util/eh_app/urls.py index aeb4913..9443272 100644 --- a/python/eh_util/eh_app/urls.py +++ b/python/eh_util/eh_app/urls.py @@ -6,4 +6,5 @@ urlpatterns = [ path('', views.index), path('kassenbrief/', views.kassenbrief), path('kassenbrief/exec', views.kassenbrief_exec), + path('ehmeldung/', views.ehmeldung), ] diff --git a/python/eh_util/eh_app/views.py b/python/eh_util/eh_app/views.py index 0c3eb2c..3599c11 100644 --- a/python/eh_util/eh_app/views.py +++ b/python/eh_util/eh_app/views.py @@ -6,7 +6,7 @@ from django.template import loader from .AWK import config, routines #import .forms -from .forms import KassenbriefForm +from .forms import EhmeldungForm, KassenbriefForm # Create your views here. @@ -68,4 +68,23 @@ def kassenbrief_exec(request, verein): 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