]> wagnertech.de Git - SVBaL.git/commitdiff
pydev-s6
authorMichael Wagner <michael@wagnertech.de>
Wed, 28 May 2025 14:38:46 +0000 (16:38 +0200)
committerMichael Wagner <michael@wagnertech.de>
Wed, 28 May 2025 14:38:46 +0000 (16:38 +0200)
14 files changed:
Test/FitnessePages/DjangoTest/content.txt [new file with mode: 0644]
Test/FitnessePages/DjangoTest/properties.xml [new file with mode: 0644]
Test/etc/Export.csv [new file with mode: 0644]
bin/pdfersteller [new file with mode: 0755]
latex/brief.lco
latex/brief.tex [changed from file to symlink]
python/eh_util/eh_app/AWK/pdf_ersteller.py [new file with mode: 0644]
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/kassenbrief.html
python/eh_util/eh_app/templates/vorlagen_verwalten.html [new file with mode: 0644]
python/eh_util/eh_app/urls.py
python/eh_util/eh_app/views.py

diff --git a/Test/FitnessePages/DjangoTest/content.txt b/Test/FitnessePages/DjangoTest/content.txt
new file mode 100644 (file)
index 0000000..5897464
--- /dev/null
@@ -0,0 +1,6 @@
+!|test.util.CallScript|
+|call script|!-rm -r ~/test |true-!|
+|call script|mkdir -p ~/test/python/eh_util/eh_app|
+|call script|cp ../python/eh_util/eh_app/tests.py ~/test/python/eh_util/eh_app/|
+|call script|cp ../python/eh_util/manage.py ~/test/python/eh_util/|
+|call script|cd ~/test/python/eh_util/; ./manage.py test|
diff --git a/Test/FitnessePages/DjangoTest/properties.xml b/Test/FitnessePages/DjangoTest/properties.xml
new file mode 100644 (file)
index 0000000..e13fdf4
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<properties>
+       <Edit>true</Edit>
+       <Files>true</Files>
+       <Properties>true</Properties>
+       <RecentChanges>true</RecentChanges>
+       <Refactor>true</Refactor>
+       <Search>true</Search>
+       <Test>true</Test>
+       <Versions>true</Versions>
+       <WhereUsed>true</WhereUsed>
+</properties>
diff --git a/Test/etc/Export.csv b/Test/etc/Export.csv
new file mode 100644 (file)
index 0000000..5819ab7
--- /dev/null
@@ -0,0 +1,10 @@
+"Anrede";"Vorname";"Nachname";"Straße";"Zusatzadresse";"PLZ";"Ort";"Land";"Titel";"Geschlecht";"Familienstand";"Mitglieds-Nr";"Geburtsdatum";"Eintrittsdatum";"Austrittsdatum";"Austrittsgrund";"Zahlungsart";"IBAN";"BIC";"Kontonummer";"Bankleitzahl";"Kreditinstitut";"Kontoinhaber";"Mandatsreferenz";"Debitorenkonto-Nr";"Status";"Branche";"Notfallnummer";"Notfallkontakt";"KommE-Mail_P1";"KommFax_P1";"KommMobil_P1";"KommWeb_P1";"KommTelefon_P1";"KommSkype_P1";"Abteilung_1";"Abteilungseintritt_1";"Abteilungsaustritt_1";"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";"Freifeldwert_1";"Freifeldname_2";"Freifeldwert_2";"Freifeldname_3";"Freifeldwert_3";"NotizArt_1";"NotizPrio_1";"NotizBetreff_1";"NotizInhalt_1";"NotizDatum_1"
+Herr;Horsti;Acktu;"Blombergstr. 30";"";81825;München;Deutschland;;;;"14962";25.04.1948;01.01.1998;31.12.2050;;;DE24700202701780047001;HYVEDEMMXXX;"1780047000";"70020270";"UniCredit Bank - HypoVereinsbank";Acktun Horst;"10058";"10253";Aktiv;;;;;"";"";;"4317535";;Standard;01.01.1998;;Aktiv;;;;;;;;;Standard;01.01.1998;;;Jahr;;nein;;;;;;;;;;;;;;"";;"";Zeitung;"Ja";;;;;
+Herr;Horsti;Acktu;"Blombergstr. 30";"";81825;München;Deutschland;;;;"14963";25.04.1948;01.01.1998;31.12.2023;;;DE24700202701780047001;HYVEDEMMXXX;"1780047000";"70020270";"UniCredit Bank - HypoVereinsbank";Acktun Horst;"10058";"10253";Aktiv;;;;;"";"";;"4317535";;Standard;01.01.1998;;Aktiv;;;;;;;;;Standard;01.01.1998;;;Jahr;;nein;;;;;;;;;;;;;;"";;"";Zeitung;"Ja";;;;;
+Herr und Frau;Dr. Michael und Ingrid;Wagner;"Turfstr. 18 a";"";81929;München;Deutschland;;Jur. Person oder sächlich;;"14964";;01.04.2024;;;Lastschrift;DE54700905000004428285;GENODEF1S04;"4428285";"70090500";"Sparda-Bank München";Wagner Dr. Michael und Ingrid;"10255";"10255";Aktiv;;;;;;;;;;;;;;;;Zusatzgrundstück;01.04.2024;;Aktiv;;;;;;;;;;;;;;;;;;;;;;Partnernummer;"76736";VersichertesObjekt;"Gleiwitzer Str. 26, 81929 München";Zeitung;"Nein";;;;;
+Herr und Frau;Dr. Michael und Ingrid;Wagner;"Turfstr. 18 a";"";81929;München;Deutschland;;;;"14965";;01.04.2024;;;Lastschrift;DE54700905000004428285;GENODEF1S04;"4428285";"70090500";"Sparda-Bank München";Wagner Dr. Michael und Ingrid;"10256";"10256";Aktiv;;;;;;;;;;;;;;;;Zusatzgrundstück;01.04.2024;;Aktiv;;;;;;;;;;;;;;;;;;;;;;Partnernummer;"76736";VersichertesObjekt;"Finkenweg 5, 83556 Griesstätt";Zeitung;"Nein";;;;;
+Herr und Frau;Dr. Michael und Ingrid;Wagner;"Turfstr. 18 a";"";81929;München;Deutschland;;;;"76736";25.05.1965;01.12.2012;;;Lastschrift;DE54700905000004428285;GENODEF1S04;"4428285";"70090500";"Sparda-Bank München";Wagner Dr. Michael und Ingrid;"10218";"10218";Aktiv;;;;bonzius@vindelicia.de;"";"";;"99 75 94 94";;Standard;01.12.2012;;Aktiv;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"";VersichertesObjekt;"81929 München, Gleiwitzerstr. 28";Zeitung;"Ja";;;;;
+Frau;Elke;Söller;"Argula-von-Grumbach-Sr. 5";"";92345;Dietfurt;Deutschland;;;;"77912";08.05.1979;01.07.2008;;;;;;;;;;"10193";"10193";Aktiv;;;;;"";"";;"084 64 / 64 21 79";;Standard;01.07.2008;;Aktiv;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"";VersichertesObjekt;"92363 Breitenbrunn, Breitenegg 1 a";Zeitung;"Ja";;;;;
+Frau;Marianne;Söller;"Böhmerbrunnenstr. 27";"";92345;Dietfurt;Deutschland;;;;"76441";;01.01.1995;;;;DE98760520800570713611;BYLADEM1NMA;"570713610";"76052080";"Sparkasse Neumarkt i d OPf-Parsberg";Söllner2 Marianne;"10249";"10249";Aktiv;;;;;;;;;;;;;;;;Zusatzgrundstück;01.01.1995;;Aktiv;;;;;;;;;;;;;;;;;;;;;;Partnernummer;"75987";;"";Zeitung;"Nein";;;;;
+Frau;Marianne;Söller;"Böhmerbrunnenstr. 27";"";92354;Dietfurt;Deutschland;;;;"75987";;01.01.1985;;;;DE98760520800570713611;BYLADEM1NMA;"570713610";"76052080";"Sparkasse Neumarkt i d OPf-Parsberg";Söllner Marianne;"10194";"10194";Aktiv;;;;;"";"";;"084 64 / 15 42";;Standard;01.01.1985;;Aktiv;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"";VersichertesObjekt;"92345 Dietfurt 2, Böhmerbrunnenstr. 21";Zeitung;"Ja";;;;;
+Frau;Marianne;Söller;"Böhmerbrunnenstr. 27";"";92345;Dietfurt;Deutschland;;;;"76491";;01.09.1992;;;;DE98760520800570713611;BYLADEM1NMA;"570713610";"76052080";"Sparkasse Neumarkt i d OPf-Parsberg";Söllner3 Marianne;"10250";"10250";Aktiv;;;;;;;;;;;;;;;;Zusatzgrundstück;01.09.1992;;Aktiv;;;;;;;;;;;;;;;;;;;;;;Partnernummer;"75987";VersichertesObjekt;"92363 Breitbrunn, Tannenweg 6";Zeitung;"Nein";;;;;
diff --git a/bin/pdfersteller b/bin/pdfersteller
new file mode 100755 (executable)
index 0000000..9ba870d
--- /dev/null
@@ -0,0 +1,4 @@
+#/bin/bash
+
+cd /home/sparky2021/SVBaL/latex
+pdflatex $1
index ab870bab7c98ffdd7a05f99252b6e7fd0d2c5fea..91817baff8e7d12f0cb10d9810bd1fa4f53ce72f 100644 (file)
@@ -9,15 +9,17 @@
 \hypersetup{pdfpagemode=None}
 \KOMAoptions{
         paper=a4,
-        pagenumber=botcenter,
+        pagenumber=false,
 %        fromalign=right,
 %        fromrule=afteraddress,
 %        fromphone,
 %       fromfax,
-%        fromlogo,fromurl,fromemail,
+        fromlogo,
+%        fromurl,fromemail,
 %        backaddress,
         foldmarks,
 %        headsepline,footsepline,
+        headsepline=true,    % Linie unter dem Header der Folgeseite
         enlargefirstpage,
         parskip=half
 }
 \setkomavar{frombank}{Eine Bank\\IBAN~123\,45\,678}
 \setkomavar{place}{München}
 \setkomavar{signature}{Michael Wagner\\1.Vorsitzender}
-\setkomavar{fromlogo}{\parbox[b]{8cm}{\usekomafont{fromaddress}%
-        {\mbox{\LARGE \bfseries Dr.\ rer.\ nat.\ Joachim~Schlosser}}
-        \smallskip}
-}
+%\setkomavar{fromlogo}{\parbox[b]{8cm}{\usekomafont{fromaddress}%
+%        {\mbox{\LARGE \bfseries Dr.\ rer.\ nat.\ Joachim~Schlosser}}
+%        \smallskip}
+%}
 \setkomafont{backaddress}{\sffamily}
 \setkomafont{fromaddress}{\sffamily}
-\addtokomafont{fromname}{\scriptsize}
+%\setkomavar{fromlogo}{\parbox[b]{8cm}{\includegraphics[width=2cm]{logo.jpeg}}}
+\setkomavar{fromlogo}{\includegraphics[width=2cm]{logo.jpeg}}
+\setkomavar{nexthead}{\mbox{\textbf{Siedlervereinigung Berg am Laim}} \usekomavar{fromlogo}}
+\headheight=2cm
+\setkomafont{fromname}{\sffamily}
 \addtokomafont{fromaddress}{\scriptsize}
 \pagestyle{headings}
 %\CenterWallPaper{1}{MitgliederausweisSVBaLVorlage_leer_v2.pdf}
deleted file mode 100644 (file)
index 897c89d5240283ce82ed21190d0fdf425f13892d..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1,59 +0,0 @@
-\documentclass{scrlttr2}
-\LoadLetterOption{brief}
-\setkomavar{date}{\vspace*{-6\baselineskip}\today}
-\begin{document}
-\begin{letter}{
-       %\today \par \vspace*{2\baselineskip}
-       \vspace*{11 mm}\small{Frau\\Erika Schwarze\\Wildenholzenerstr. 14\\81617 München}}
-
-\opening{\par \vspace*{3\baselineskip}Liebe Vereinsmitglieder!}
-\CenterWallPaper{1}{../Aktuell/BriefpapierSVBaLVorlage.pdf}
-Lass mich Dir die Welt zeigen,\\
-wie ich sie sehe ...\\
-Lass mich Deine Gefühle spüren,\\
-sodass ich sie verstehe ...\\
-Lass Dich in meine Arme sinken,\\
-Du bist nicht allein ...\\
-Lass Dich von meinen Träumen berühren,\\
-ich will bei dir sein.
-
-Ulrich Stamm
-
-\vspace*{1 cm}\hrule
-\vspace*{2 cm}
-In ungewissen Zeiten schafft die Beziehung zu einem geliebten Menschen uns Sicherheit, mit der wir voll Zuversicht ins neue Jahr gehen können.
-
-Der Vorstand der Siedlervereinigung Berg am Laim wünscht Ihnen gesegnete Weihnacht und viel Zuversicht im neuen Jahr.
-
-\pagebreak
-\ClearWallPaper
-
-\textbf{Nachrichten aus dem Verband}
-\begin{itemize}
-\item  Baumschutzverordnung und Wärmeplan
-
-    Die Vorstände der Siedlervereine des Münchner Ostens sind zu diesen im Gespräch mit Stadträten und Ausschüssen. Gerne halten wir Sie bei neuen Entwicklungen auf dem Laufenden.
-
-    Am 6.2.2025 um 18:00h hat der Eigenheimer Waldperlach-Neubiberg das Referat für Klima- und Umweltschutz im Leiberheim zu Gast. In einem Tandemvortrag soll die Wärmeplanung für dieses Stadtgebiet vorgestellt und im Anschluss diskutiert werden. Auch interessierte Vereinsmitglieder sind herzlich eingeladen.
-
-\item Neuer Justitiar Karl Schmelzing
-
-    Nach langjähriger Tätigkeit für den Verband ist Rainer Schmidt in den Ruhestand gegangen. Für rechtliche Fragen steht nun sein Nachfolger Hr. Karl Schmelzing zur Verfügung.
-
-\item Wärmepumpen und Wallboxen
-
-    Wärmepumpen und Wallboxen benötigen viel Strom, der durch das existierende Stromnetz den Verbrauchern zur Verfügung gestellt werden muss. Wir hören bereits von Fällen, dass die Stadtwerke die Installation solcher Einrichtungen ablehnen, da sie sonst eine Überlastung der Netze befürchten.
-
-    Bitte teilen Sie uns Ihre Erfahrungen zu diesen Themen mit, damit wir einen Überblick über die Situation erhalten.
-    Vergünstigungen
-
-\item  Wir weisen nochmal auf die bereits im Sommerrundbrief beschriebenen Vergünstigungen für die Mitglieder des Eihenheimerverbandes hin: Da sind zum einen Handelsunternehmen im Münchner Osten, die uns Rabatte gewähren, zum anderen gibt es die "Eigenheimervergünstigungen" auf der Internetseite des Verbands. Auf Rückfrage teile ich Ihnen Gerne nochmal die Möglichkeiten mit.
-
-
-\item Mitglieder werben Mitglieder
-
-    Ich darf Sie an die 20.- EUR Prämie für die Werbung neuer Mitglieder erinnern.
-\end{itemize}
-%\closing{Viele Grüße}
-\end{letter}
-\end{document}
new file mode 120000 (symlink)
index 0000000000000000000000000000000000000000..289ee89a0d4ffb576bb38e95178eab320c382c0d
--- /dev/null
@@ -0,0 +1 @@
+brief_202503.tex
\ No newline at end of file
diff --git a/python/eh_util/eh_app/AWK/pdf_ersteller.py b/python/eh_util/eh_app/AWK/pdf_ersteller.py
new file mode 100644 (file)
index 0000000..d86278e
--- /dev/null
@@ -0,0 +1,42 @@
+class PdfErsteller(object):
+    '''
+    Klasse zur Erstellung von PDFs
+    '''
+
+
+    def __init__(self, request, template, pfad):
+        self.request  = request
+        self.template = template
+        self.pfad     = pfad
+        
+    def erstellepdf(self, m):
+        gg      = m.VersicherteGrundstucke()
+        g1      = gg[0]
+        gn      = gg[1:]
+        beitrag = 39 + 32*len(gn)
+        konto   = None
+        if len(m.iban) > 0:
+            konto = m.iban[0:4]+" xxxx xxxx xxxx "+m.iban[-2:]
+        
+        tex_bearbeitet = self.template.render(
+            {"vorname"      : m.vorname, 
+             "nachname"     : m.nachname,
+             "strasse"      : m.strasse,
+             "plz"          : m.plz,
+             "ort"          : m.ort,
+             "anrede"       : m.anrede,
+             "grundstuck1"  : g1,
+             "basisbeitrag" : 39,
+             "g_weitere"    : gn,
+             "zusatzbeitrag": 32,
+             "beitrag"      : beitrag,
+             "konto"        : konto,
+             "m_nr"         : m.mitgliedsnr
+            }, self.request)
+    
+        with open(f'{self.pfad}/{m.nachname}_{m.mitgliedsnr}_brief.tex', 'w') as f: # öffnet ein neues Dokument mit dem Namen test.tex
+            f.write(tex_bearbeitet) # schreibt in dieses neue Dokument
+            
+        # AUfruf PDF latex tex -> pdf
+        import subprocess
+        subprocess.run(["bash", "../../bin/pdfersteller", f'{m.nachname}_{m.mitgliedsnr}_brief.tex'])
index b621b377e56381594a68fa6f0eb784f6f1d01e41..fffbfaa50962ec660ac72c9584364bf8b635ed2e 100644 (file)
@@ -1,4 +1,5 @@
 import os
+from eh_app.AWK import config
 '''
 def handle_uploaded_file(csv_file):
     csv_file_name = str(csv_file)
@@ -9,7 +10,7 @@ def handle_uploaded_file(csv_file):
             destination.write(chunk)
 '''
 def aktualisiere_config(config, data, file):
-    
+
     if file:
         uploaded_file = file.name
         data_path = config.requireConfig("data_path")
@@ -18,26 +19,20 @@ def aktualisiere_config(config, data, file):
             for chunk in file.chunks():
                 destination.write(chunk)
         config.setConfig("briefpapier", uploaded_file)
-    
+
     if data["basisbeitrag"]:
         config.setConfig("beitrag_basis", data["basisbeitrag"])
-        
+
     if data["zusatzbeitrag"]:
         config.setConfig("beitrag_zusatz", data["zusatzbeitrag"])
     
-def erstellepdf(text):
-    with open(r'G:\SVBaL\python\eh_util\eh_app\test.tex', 'w') as f: # öffnet ein neues Dokument mit dem Namen test.tex
-        f.write(text) # schreibt in dieses neue Dokument
-        
-    # TODO: AUfruf PDF latex tex -> pdf
-
 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)
     
@@ -84,3 +79,20 @@ def erstelle_ehmeldung(data):
     output.write(output_stream)
     output_stream.close()
       
+def pdfs_erstellen(request, verein):
+    from django.template import loader
+    
+    # lese alle Miglieder
+    cf = config.getInstance("svbal")
+    cf.setConfig("DataFile", "../../Test/etc/Export.csv")
+    from eh_app.qmodels import Mitglied
+    mm = Mitglied.objects.all()
+    template = loader.get_template("brief.tex")
+    
+    from eh_app.AWK.pdf_ersteller import PdfErsteller
+    pe = PdfErsteller(request, template, "../../latex")
+    
+    # Erstelle PDFs
+    for m in mm:
+        pe.erstellepdf(m)
+                   
index bf19011018ec6ed8ee8f0ff10a9e84f1ad190ff5..a67b75f708f3630c6ae5be7839ad5f596a1d6748 100644 (file)
@@ -23,7 +23,29 @@ https://docs.djangoproject.com/en/2.2/topics/forms/
 - Doku zu Fields:
 https://docs.djangoproject.com/en/2.2/ref/forms/fields/
 '''
-class KassenbriefForm(forms.Form):
+class VorlagenForm(forms.Form):
+    template      = forms.ChoiceField(choices=())
+    def __init__(self, *args, templates=[('AB', 'ab'),('BC','bc')], **kwargs):
+        #self.templates = templates
+        super().__init__(*args, **kwargs)
+        self.fields['template'].choices = templates
+
+class VorlagenVerwaltungForm(forms.Form):
+    vorlagen_zu_loschen = forms.MultipleChoiceField(
+        widget=forms.CheckboxSelectMultiple, 
+        choices=(),
+        label="Vorlagen zum Löschen vormerken:"
+    )
+    vorlage_neu = forms.FileField(label='Neue Vorlage installieren:', required=False)
+    def __init__(self, *args, vorlagen=[('AB', 'ab'),('BC','bc')], **kwargs):
+        self.vorlagen = vorlagen
+        super().__init__(*args, **kwargs)
+        self.fields['vorlagen_zu_loschen'].choices = vorlagen
+
+class BeitragForm(forms.Form):
+    basisbeitrag  = forms.IntegerField()
+    zusatzbeitrag = forms.IntegerField(label="Beitrag für Zusatzgrundstück")
+class KassenbriefForm_alt(forms.Form):
     #briefpapier   = forms.FileField(label='Briefpapier ändern:', required=False)
     template      = forms.ChoiceField(choices=())
     basisbeitrag  = forms.IntegerField()
index 3e0e1342f3b1168d462355bfa904288497408d22..6eb376ff8a0f40ecad3120bbc8ee03b85925ffe7 100644 (file)
@@ -85,6 +85,7 @@ class MitgliederQuery:
     
     def VersicherteGrundstucke(self, mitglied):
         # Hole Basiseintrag
+
         data_set = self.data_source.request(f"SELECT VersichertesObjekt FROM {self.file_name} WHERE `Mitglieds-Nr` = {mitglied.mitgliedsnr}")
         if type(data_set) is QError:
             raise RuntimeError(data_set)
index 08cdd2711dc5c06d0b032d2421be0e90747d8f31..22e22f37a9c37a905428e3b2fd82c101da2e3dca 100644 (file)
@@ -7,14 +7,33 @@
 <p>Überprüfen Sie folgende Eingabedaten:</p>
 <hr>
 
-<h2>Template</h2>
+<h2>Kassenbriefvorlagen</h2>
+<p class="fehler">{{fehlertext_template}}</p>
 
-<form action="/{{verein}}/kassenbrief/" method="post" enctype="multipart/form-data">
+<form action="/{{verein}}/template_andern/" method="post" enctype="multipart/form-data">
 {% csrf_token %}
 <table>
-{{form}}
+{{vorlagen_form}}
+</table>
+<br>
+<a href = "/{{verein}}/vorlagen_verwalten/">Kassenbriefvorlagen verwalten</a>
+<p><input type="submit" value="Speichern"/>
+</form>
+
+<hr>
+<h2>Beiträge</h2>
+<form action="/{{verein}}/template_andern/" method="post" enctype="multipart/form-data">
+<table>
+{{beitrag_form}}
 </table>
-{{fehlertext}}
+<p><input type="submit" value="Speichern"/>
+</form>
+<hr>
+<hr>
+
+<form action="/{{verein}}/kassenbrief/" method="post" enctype="multipart/form-data">
+{% csrf_token %}
 <p><input type="submit" value="Erstellen"/>
 </form>
 </body>
diff --git a/python/eh_util/eh_app/templates/vorlagen_verwalten.html b/python/eh_util/eh_app/templates/vorlagen_verwalten.html
new file mode 100644 (file)
index 0000000..be8a82e
--- /dev/null
@@ -0,0 +1,15 @@
+<html>
+<head>
+       <title>Siedlerverein-Verwaltung by WagnerTech UG</title>
+</head>
+<body>
+<h1>Vorlagen verwalten</h1>
+<form action="/{{verein}}/vorlagen_verwalten/" method="post" enctype="multipart/form-data">
+{% csrf_token %}
+<table>
+{{vorlagen_form}}
+</table>
+<p><input type="submit" value="Ändern"/>
+</form>
+</body>
+</html>
index f94cf602a438141332aacaf860f4c275d00992fc..d991005fea78a02c577ed517ad935a505da041ac 100644 (file)
@@ -5,6 +5,7 @@ from . import views
 urlpatterns = [
     path('', views.index),
     path('kassenbrief/', views.kassenbrief),
+    path('vorlagen_verwalten/', views.vorlagen_verwalten),
     path('kassenbrief/erfolg', views.kassenbrief_erfolg),
     path('kassenbrief/download', views.kassenbrief_download),
     path('ehmeldung/', views.ehmeldung),
index 47e089707d2a06b21693814e306c16ad45a73a91..0d9f31d0540537d93495f5a4bceb3c7124294c6f 100644 (file)
@@ -7,7 +7,8 @@ from django.template import loader
 
 from .AWK import config, routines
 #import .forms 
-from .forms import EhmeldungForm, KassenbriefForm
+from .forms import EhmeldungForm, VorlagenForm, BeitragForm, VorlagenVerwaltungForm
+from eh_app.AWK.pdf_ersteller import PdfErsteller
 
 # Create your views here.
 
@@ -27,12 +28,75 @@ def index(request, verein):
     raise RuntimeError("blub")
     return HttpResponse(template.render({"verein" : verein}, request))
 
-def tex_bearbeiten(request, verein):
-    template = loader.get_template("brief.tex")
-    tex_bearbeitet = template.render({"Anrede" : 'Frau'}, {"Nachname" : 'Wagner'}, request)
-                   
-@login_required
+def vorlagen_verwalten(request, verein):
+    # TODO vorlagen_liste durch Dateioperationen aufbauen. S. kassenbrief_alt
+    # Die finale Liste muss dann folgende Form haben:
+    vorlagen_liste = [("vorlage1.tex","vorlage1"),("vorlage2.tex","vorlage2")]
+
+    if request.method == 'POST':
+        # Form auswerten
+        # Verarbeitung in routines.py aufrufen
+
+        # Wenn alles gut gegangen, zurück zum Kassenbrief
+        return HttpResponseRedirect(f'/{verein}/kassenbrief')
+    else:
+        vorlagen_form = VorlagenVerwaltungForm(vorlagen=vorlagen_liste)
+        
+    template = loader.get_template("vorlagen_verwalten.html")
+    return HttpResponse(template.render(
+        {
+            "verein" : verein, 
+            "vorlagen_form" : vorlagen_form }, 
+        request))
+    '''
+    ---------------------------------------------------------------
+    Neue Templates installieren
+    
+    <Dateiauswahlknopf>
+    <Knopf"Installieren">
+    '''
+
+#@login_required
 def kassenbrief(request, verein):
+    '''
+    GET:
+    Diese Methode liest aus der Config die Einstellungen und zeigt sie an.
+    
+    POST: 
+    Diese Methode bearbeitet den finalen "Erstellen"
+    
+    Die Unterformulare (z.B. Beitrag ändern) landen in einer eigenen Methode, die die 
+    Einstellungen in der Config ändert und dann diese hier mit GET aufruft.
+    '''
+    '''
+    ---------------------------------------------------------------
+    Templateauswahl
+    
+    Ausgewähltes Template: <Wert aus Config>
+    Klappliste <Knopf"Template ändern">
+    Link -> Neue Templates installieren
+    ---------------------------------------------------------------
+    '''
+    fehlertext_vorlage = ""
+    vconf = config.getInstance(verein)
+    beitrag_basis  = vconf.getConfig("beitrag_basis", 0)
+    beitrag_zusatz = vconf.getConfig("beitrag_zusatz", 0)
+    vorlagen_liste = ['T1']
+    vorlagen_form = VorlagenForm(templates=vorlagen_liste)
+    beitrag_form = BeitragForm
+    if request.method == 'POST':
+        vorlagen_form = VorlagenForm(request.POST, request.FILES)
+        beitrag_form = BeitragForm(request.POST, request.FILES)
+        if vorlagen_form.is_valid() and beitrag_form.is_valid():
+            routines.aktualisiere_config(vconf, vorlagen_form.cleaned_data, beitrag_form.cleaned_data)
+            if not vorlagen_liste:
+                fehlertext_vorlage = "Bitte Kassenbriefvorlage auswählen"
+            else:   
+                routines.pdfs_erstellen(request, verein)
+                return HttpResponseRedirect('erfolg')
+    return render(request, 'kassenbrief.html', {'vorlagen_form': vorlagen_form, 'beitrag_form': beitrag_form,'verein': verein, 'fehlertext' : fehlertext_vorlage})
+   
+def kassenbrief_alt(request, verein):
     fehlertext = ""
     # Hole Daten aus der Config
     vconf = config.getInstance(verein)
@@ -41,51 +105,58 @@ def kassenbrief(request, verein):
 
     # suche Templates
     import os
-    dirlist = os.listdir("eh_app/templates/"+verein) # returns list
-    template_list = []
-    for t in dirlist:
-        template_list.append((t,t))
+    dirlist = None
+    if os.path.isdir("eh_app/templates/"+verein):
+        dirlist = os.listdir("eh_app/templates/"+verein) # returns list
+    if dirlist:
+        template_list = []
+        for t in dirlist:
+            template_list.append((t,t))
     
-    # if this is a POST request we need to process the form data
-    if request.method == 'POST':
+            # 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 = KassenbriefForm(request.POST, request.FILES, dirlist)
-        # check whether it's valid:
-        if form.is_valid():
-            # bei Änderungen Konfiguration aktualisieren
-            routines.aktualisiere_config(vconf, form.cleaned_data, request.FILES.get('briefpapier_neu', None))
+            form = KassenbriefForm(request.POST, request.FILES, dirlist)
+            # check whether it's valid:
+            if form.is_valid():
+                # bei Änderungen Konfiguration aktualisieren
+                routines.aktualisiere_config(vconf, form.cleaned_data, request.FILES.get('briefpapier_neu', None))
             
-            #Stammdaten neu aus Datenbank lesen und prüfen
-            briefpapier    = vconf.getConfig("briefpapier")
-            beitrag_basis  = int(vconf.getConfig("beitrag_basis", 0))
-            beitrag_zusatz = int(vconf.getConfig("beitrag_zusatz", 0))
-            briefpapier_label = briefpapier
-            if not briefpapier:
-                briefpapier_label = "Kein Briefpapier ausgewäht"
+                #Stammdaten neu aus Datenbank lesen und prüfen
+                briefpapier    = vconf.getConfig("briefpapier")
+                beitrag_basis  = int(vconf.getConfig("beitrag_basis", 0))
+                beitrag_zusatz = int(vconf.getConfig("beitrag_zusatz", 0))
+                briefpapier_label = briefpapier
+                if not briefpapier:
+                    briefpapier_label = "Kein Briefpapier ausgewäht"
             
-            # prüfen ob Werte gefüllt
-            if briefpapier is None:
-                fehlertext = "Bitte Briefpapier auswählen."
-            elif beitrag_basis == 0 and beitrag_zusatz == 0:
-                fehlertext = "Bitte Basisbeitrag und Zusatzbeitrag ausfüllen."
-            elif beitrag_basis == 0:
-                fehlertext = "Bitte Basisbeitrag ausfüllen."
-            elif beitrag_zusatz == 0:
-                fehlertext = "Bitte Zusatzbeitrag ausfüllen."
+                    # prüfen ob Werte gefüllt
+                if briefpapier is None:
+                    fehlertext = "Bitte Briefpapier auswählen."
+                elif beitrag_basis == 0 and beitrag_zusatz == 0:
+                    fehlertext = "Bitte Basisbeitrag und Zusatzbeitrag ausfüllen."
+                elif beitrag_basis == 0:
+                    fehlertext = "Bitte Basisbeitrag ausfüllen."
+                elif beitrag_zusatz == 0:
+                    fehlertext = "Bitte Zusatzbeitrag ausfüllen."
             
-            # wenn Werte gefüllt 
-            else:
-                routines.erstellepdf('Hallo Welt')
+                # wenn Werte gefüllt 
+                else:
+                    routines.pdfs_erstellen(request, verein)
                 
-                # redirect to a new URL:
-                return HttpResponseRedirect('erfolg')
+                    # redirect to a new URL:
+                    return HttpResponseRedirect('erfolg')
 
-    # if a GET (or any other method) we'll create a blank form
+
+        # if a GET (or any other method) we'll create a blank form
+        else:
+            form = KassenbriefForm(templates=template_list, initial={'basisbeitrag': beitrag_basis, 'zusatzbeitrag': beitrag_zusatz})
+            #form = KassenbriefForm(initial={'basisbeitrag': beitrag_basis, 'zusatzbeitrag': beitrag_zusatz})
+            return render(request, 'kassenbrief.html', {'form': form, 'verein': verein, 'fehlertext' : fehlertext})
     else:
-        form = KassenbriefForm(templates=template_list, initial={'basisbeitrag': beitrag_basis, 'zusatzbeitrag': beitrag_zusatz})
-        #form = KassenbriefForm(initial={'basisbeitrag': beitrag_basis, 'zusatzbeitrag': beitrag_zusatz})
+        fehlertext = "Bitte Templates anlegen."
+        return render(request, 'fehler.html', {'verein': verein, 'fehlertext' : fehlertext})
 
-    return render(request, 'kassenbrief.html', {'form': form, 'verein': verein, 'fehlertext' : fehlertext})
     
     '''
     template = loader.get_template("kassenbrief.html")