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:
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
widget=forms.Textarea,
)
'''
+from django.db.models.fields import BooleanField
'''
- Doku zu Forms:
https://docs.djangoproject.com/en/2.2/topics/forms/
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
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]
# "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]
m.kontoinhaber = data[22]
m.mandatsreferenz = data[23]
m.debitorenkontonr = data[24]
- m.status = data[25]
+ # m.status = data[25]
# "Branche"
# "Notfallnummer"
# "Notfallkontakt"
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:
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)
+
--- /dev/null
+<!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>
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)
+'''
path('', views.index),
path('kassenbrief/', views.kassenbrief),
path('kassenbrief/exec', views.kassenbrief_exec),
+ path('ehmeldung/', views.ehmeldung),
]
from .AWK import config, routines
#import .forms
-from .forms import KassenbriefForm
+from .forms import EhmeldungForm, KassenbriefForm
# Create your views here.
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