4 from eh_app.AWK import config
7 def handle_uploaded_file(csv_file):
8 csv_file_name = str(csv_file)
9 data_path = config.getInstance().requireConfig("data_path")
10 path = os.path.join(data_path, csv_file_name)
11 with open(path, 'wb+') as destination:
12 for chunk in csv_file.chunks():
13 destination.write(chunk)
15 from django.utils.datetime_safe import strftime
16 def aktualisiere_config(config, vorlage, beitrag_data):
19 uploaded_file = file.name
20 data_path = config.requireConfig("data_path")
21 # copy briefpapier into data_path
22 with open(os.path.join(data_path, uploaded_file), 'wb+') as destination:
23 for chunk in file.chunks():
24 destination.write(chunk)
25 config.setConfig("briefpapier", uploaded_file)
28 config.setConfig("vorlage", vorlage)
29 if beitrag_data["basisbeitrag"]:
30 config.setConfig("beitrag_basis", beitrag_data["basisbeitrag"])
32 if beitrag_data["zusatzbeitrag"]:
33 config.setConfig("beitrag_zusatz", beitrag_data["zusatzbeitrag"])
35 def erstelle_ehmeldung(data):
36 from PyPDF2 import PdfFileWriter, PdfFileReader
37 from datetime import date
39 from reportlab.pdfgen import canvas
40 from reportlab.lib.pagesizes import letter
43 can = canvas.Canvas(packet, pagesize=letter)
46 can.setFont("Helvetica", 14)
47 can.drawString(80, 770, "Siedlervereinigung Berg am Laim")
48 can.setFont("Helvetica", 12)
49 can.drawString(205, 618, data["VorZuname"])
50 can.drawString(205, 600, data["VorZunamePartner"])
51 can.drawString(205, 583, data["Wohnanschrift"])
52 can.drawString(205, 566, data["Telefon"])
53 can.drawString(365, 566, data["Email"])
54 can.drawString(205, 549, data["Geburtsdatum"])
55 versichertes_object = data["VersichertesObjekt"]
56 if versichertes_object == "":
57 versichertes_object = data["Wohnanschrift"]
58 can.drawString(205, 500, versichertes_object)
59 can.drawString(193, 466, str(data["AnzahlWohnungen"]))
60 if data["Selbstgenutzt"]:
61 can.drawString(360, 466, "X")
62 if data["Eigentumswohnung"]:
63 can.drawString(192, 449, "X")
64 if data["Gewerblich"]:
65 can.drawString(360, 449, "X")
66 can.drawString(140, 376, date.today().strftime('%d.%m.%Y'))
67 can.drawString(350, 376, "Maschinell erstellt.")
71 #move to the beginning of the StringIO buffer
74 # create a new PDF with Reportlab
75 new_pdf = PdfFileReader(packet)
76 # read your existing PDF
77 existing_pdf = PdfFileReader(open("/home/sparky2021/SVBaL/Aktuell/BeitrittserklarungSVBaL.pdf", "rb"))
78 output = PdfFileWriter()
79 # add the "watermark" (which is the new pdf) on the existing page
80 page = existing_pdf.pages[0]
81 page.mergePage(new_pdf.pages[0])
83 # finally, write "output" to a real file
84 output_stream = open("meldung.pdf", "wb")
85 output.write(output_stream)
88 def erstelle_ausweis(data):
89 from PyPDF2 import PdfFileWriter, PdfFileReader
90 from datetime import date
92 from reportlab.pdfgen import canvas
93 from reportlab.lib.pagesizes import letter
96 can = canvas.Canvas(packet, pagesize=letter)
99 can.setFont("Helvetica", 12)
100 can.drawString(70, 640, "Herr/Frau")
101 can.drawString(70, 625, data["VorZuname"])
102 can.drawString(70, 610, data["Wohnanschrift"])
103 can.drawString(70, 590, "PLZ/Ort")
106 can.setFont("Helvetica", 9)
107 can.drawString(350, 520, "München, "+date.today().strftime('%d.%m.%Y'))
110 can.drawString(70, 500, "Sehr geehrte/r Herr/Frau"+data["VorZuname"]+",")
111 text = can.beginText(70, 480)
112 text.textLines("Hier Ihr Ausweis")
116 can.line(20, 180, 560, 180)
119 can.setFont("Helvetica", 12)
120 can.drawString(460, 100, "#0817654")
121 can.drawString(330, 80, data["VorZuname"])
122 can.setFont("Helvetica", 9)
123 can.drawString(400, 56, data["Geburtsdatum"])
124 can.drawString(400, 42, date.today().strftime('%d.%m.%Y'))
125 versichertes_object = data["VersichertesObjekt"]
126 if versichertes_object == "":
127 versichertes_object = data["Wohnanschrift"]
128 can.drawString(400, 20, versichertes_object)
132 #move to the beginning of the StringIO buffer
135 # create a new PDF with Reportlab
136 new_pdf = PdfFileReader(packet)
137 # read your existing PDF
138 existing_pdf = PdfFileReader(open("MitgliederausweisSVBaLVorlage_leer.pdf", "rb"))
139 output = PdfFileWriter()
140 # add the "watermark" (which is the new pdf) on the existing page
141 page = existing_pdf.pages[0]
142 page.mergePage(new_pdf.pages[0])
144 # finally, write "output" to a real file
145 output_stream = open("ausweis.pdf", "wb")
146 output.write(output_stream)
147 output_stream.close()
149 def pdfs_erstellen(request, verein, mitglieder, templ_name, data_path, build_name):
150 from django.template import loader
152 # lese alle Miglieder
153 from eh_app.qmodels import Mitglied
154 if mitglieder == "alle":
155 mm = Mitglied.objects.all()
158 m_ids = mitglieder.split(",")
161 m = o.get(mitgliedsnr=m_id)
163 raise RuntimeError(f"Mitglied mit id {m_id} konnte nicht geladen werden.")
165 template = loader.get_template(f"{verein}/{templ_name}")
167 cf = config.getInstance()
168 ehappdir = cf.getConfig("ehappdir", "/opt/eh_app")
169 pdfersteller = f"{ehappdir}/bin/pdfersteller.sh"
170 if not os.path.exists(pdfersteller):
171 raise RuntimeError("Install-Skript nicht gefunden: "+pdfersteller)
173 from eh_app.AWK.pdf_ersteller import PdfErsteller
174 build_base = os.path.join(data_path, "build")
175 build_path = os.path.join(build_base, build_name)
176 result_path = os.path.join(build_path, "ergebnis")
177 tpl_name_wo_ext = os.path.splitext(templ_name)[0]
178 template_path = os.path.join(data_path, f"{tpl_name_wo_ext}")
180 # alte builds löschen
181 rc = os.system(f'cd {build_base}; rm -r *')
183 from eh_app.AWK import util
184 util.schreibe_log(f"Löschen alter builds fehlgeschlagen: {rc}")
186 # lege Verzeichnis + Links auf Templatedateien an
187 os.makedirs(result_path)
188 rc = os.system(f'cd {build_path}; ln -s {template_path}/* .')
190 raise RuntimeError(f"Linkerstellung fehlgeschlagen: {rc}")
192 basisbtr = int(cf.requireConfig("beitrag_basis"))
193 zusatzbtr = int(cf.requireConfig("beitrag_zusatz"))
195 with PdfErsteller(request, template, basisbtr, zusatzbtr, build_path, pdfersteller) as pe:
202 rc = os.system(f'cd {build_path}; tar czf ergebnis.tgz ergebnis')
204 raise RuntimeError(f"Packen (tar) fehlgeschlagen: {rc}")
206 return pe.anzahl, pe.gesamtbetrag
208 def vertragsliste_erstellen(verein, data_path):
209 build_path = os.path.join(data_path, "build")
210 ergebnis_datei = "vertragsliste_"+time.strftime("%Y%m%d%H%M%S", time.localtime())+".csv"
212 # lese alle Miglieder
213 from eh_app.qmodels import Mitglied
214 mm = Mitglied.objects.all()
216 with open(os.path.join(build_path,ergebnis_datei), "w") as d:
217 print("Name", "Vorname", "Straße", "PLZ", "Ort", "Grundstück", "Eintrittsdatum", sep=";", file=d )
219 gg = m.VersicherteGrundstucke()
227 m.eintrittsdatum.strftime("%d.%m.%Y"),
229 return ergebnis_datei
231 def vorlagen_verwalten(verein, zu_loschen, vorlage_neu):
233 cf = config.getInstance(verein)
234 ehappdir = cf.getConfig("ehappdir", "/opt/eh_app")
235 workdir = cf.getConfig("data_path", "/var/mysite/eh_app")
236 djangodir = cf.getConfig("djangodir", "/opt/mysite")
237 install_sh = f"{ehappdir}/bin/install_vorlage.sh"
238 delete_sh = f"{ehappdir}/bin/delete_vorlage.sh"
239 ehapp_check = f"{ehappdir}/bin/ehapp-verein-check.sh"
241 # prüfe Existenz der Skripte
242 if not os.path.exists(install_sh):
243 raise RuntimeError("Install-Skript nicht gefunden: "+install_sh)
244 if not os.path.exists(delete_sh):
245 raise RuntimeError("Delete-Skript nicht gefunden: "+delete_sh)
246 if not os.path.exists(ehapp_check):
247 raise RuntimeError("Check-Skript nicht gefunden: "+ehapp_check)
249 # prüfe Dateistruktur
250 rc = subprocess.call(["bash", ehapp_check, workdir, verein])
252 raise RuntimeError(f"install_sh failed: {rc}")
255 for vorlage in zu_loschen:
256 rc = os.system(f'{delete_sh} {verein} {vorlage} {ehappdir}')
258 raise RuntimeError(f"delete_sh fehlgeschlagen: {rc}")
260 vorlage_name = str(vorlage_neu)
261 path = os.path.join(workdir, "upload", vorlage_name)
262 with open(path, 'wb+') as destination:
263 for chunk in vorlage_neu.chunks():
264 destination.write(chunk)
265 #raise RuntimeError(f"xxxxxxxx: {install_sh} {verein} {vorlage_name} {workdir} {ehappdir}")
266 rc = subprocess.call(["bash", install_sh, verein, vorlage_name, workdir, ehappdir])
268 raise RuntimeError(f"install_sh failed: {rc}")
270 def datenquelle_andern(verein, pfad, zu_loschen, zu_verwenden, zu_install):
271 cf = config.getInstance(verein)
272 akt_quelle = cf.getConfig("datenquelle", "")
275 for file in zu_loschen:
276 dpath = os.path.join(pfad, file)
278 if akt_quelle == file:
279 # Datenquelle zurücksetzen
280 cf.setConfig("datenquelle")
282 # Neue Datei verwenden
284 datei_name = str(zu_install)
285 dpath = os.path.join(pfad, datei_name)
286 with open(dpath, 'wb+') as destination:
287 for chunk in zu_install.chunks():
288 destination.write(chunk)
289 cf.setConfig("datenquelle", datei_name)
291 cf.setConfig("datenquelle", zu_verwenden)