der Config speichern lässt.
--- /dev/null
+!|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|
--- /dev/null
+<?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>
--- /dev/null
+!contents -R2 -g -p -f -h
\ No newline at end of file
--- /dev/null
+<?xml version="1.0"?>
+<properties>
+ <Edit>true</Edit>
+ <Files>true</Files>
+ <Properties>true</Properties>
+ <RecentChanges>true</RecentChanges>
+ <Refactor>true</Refactor>
+ <Search>true</Search>
+ <Versions>true</Versions>
+ <WhereUsed>true</WhereUsed>
+</properties>
--- /dev/null
+#!/bin/bash
+
+if [ $# -lt 1 ]; then
+ echo "usage: create-test-export INPUT"
+ exit 1
+fi
+head -1 $1 > TestExport.csv
+grep 14962 $1 >> TestExport.csv
+grep 19603 $1 >> TestExport.csv
+grep 76491 $1 >> TestExport.csv
+grep 76441 $1 >> TestExport.csv
+grep 75987 $1 >> TestExport.csv
+grep 75723 $1 >> TestExport.csv
+grep 14965 $1 >> TestExport.csv
+grep 14964 $1 >> TestExport.csv
+grep 76736 $1 >> TestExport.csv
+
+# remove BOM
+sed -i $'1s/^\uFEFF//' TestExport.csv
--- /dev/null
+"Mitglieds-Nr";Nachname;Vorname;Anrede;"Straße";PLZ;Ort;Geburtsdatum;Eintrittsdatum;Austrittsdatum;Abteilungen;Zahlungsart;IBAN;BIC;Kontoinhaber;"Mandatsreferenz";Abweichender Zahler Mitglied;Abweichender Zahler IBAN;E-Mail;Postinfo;VersichertesObjekt;Zeitung
+"14962";Acktun;Horst;Herr;"Blombergstr. 30";81825;München;25.04.1948;01.01.1998;;Standard (01.01.1998 bis -);Lastschrift;DE24 7002 0270 1780 0470 00;HYVEDEMMXXX;Acktun Horst;"10058";;;;Nein;;Ja
+"* 19603";Bachmann;Sonja und Horst;Herr und Frau;"Kampenwandstr. 1a";81671;München;04.12.1954;01.04.2010;31.12.2024;Zusatzgrundstück (01.04.2010 bis 31.12.2024);Lastschrift (AZ: Bachmann, Horst und Sonja);;;;"";Bachmann, Horst und Sonja;DE47 7015 0000 0080 1337 39;;Nein;81671 München, Hachinger Bach-Str. 4 c;Nein
+"76491";Söllner;Marianne;Frau;"Böhmerbrunnenstr. 27";92345;Dietfurt;;01.09.1992;;Zusatzgrundstück (01.09.1992 bis -);Lastschrift (AZ: Söllner, Marianne);;;;"";Söllner, Marianne;DE98 7605 2080 0570 7136 10;;Nein;92363 Breitbrunn, Tannenweg 6;Nein
+"76441";Söllner;Marianne;Frau;"Böhmerbrunnenstr. 27";92345;Dietfurt;;01.01.1995;;Zusatzgrundstück (01.01.1995 bis -);Lastschrift (AZ: Söllner, Marianne);;;;"";Söllner, Marianne;DE98 7605 2080 0570 7136 10;;Nein;;Nein
+"75987";Söllner;Marianne;Frau;"Böhmerbrunnenstr. 27";92354;Dietfurt;;01.01.1985;;Standard (01.01.1985 bis -);Lastschrift;DE98 7605 2080 0570 7136 10;BYLADEM1NMA;Söllner Marianne;"10194";;;;Nein;92345 Dietfurt 2, Böhmerbrunnenstr. 21;Ja
+"75723";Tungl;Inge;Frau;"Sonnwendjochstr. 79";81825;München;;01.01.1960;;Standard (01.01.1960 bis -);Überweisung;;;Tungl Inge;"";;;;Nein;;Ja
+"14965";Wagner;Dr. Michael und Ingrid;;"Turfstr. 18 a";81929;München;;01.04.2024;;Zusatzgrundstück (01.04.2024 bis -);Lastschrift (AZ: Wagner, Dr. Michael und Ingrid);;;;"";Wagner, Dr. Michael und Ingrid;DE54 7009 0500 0004 4282 85;;Nein;Finkenweg 5, 83556 Griesstätt;Nein
+"14964";Wagner;Dr. Michael und Ingrid;Herr und Frau;"Turfstr. 18 a";81929;München;;01.04.2024;;Zusatzgrundstück (01.04.2024 bis -);Lastschrift (AZ: Wagner, Dr. Michael und Ingrid);;;;"";Wagner, Dr. Michael und Ingrid;DE54 7009 0500 0004 4282 85;;Nein;Gleiwitzer Str. 26, 81929 München;Nein
+"76736";Wagner;Dr. Michael und Ingrid;Herr und Frau;"Turfstr. 18 a";81929;München;25.05.1965;01.12.2012;;Standard (01.12.2012 bis -);Lastschrift;DE54 7009 0500 0004 4282 85;GENODEF1S04;Wagner Dr. Michael und Ingrid;"10218";;;bonzius@vindelicia.de;Nein;81929 München, Gleiwitzerstr. 28;Ja
svbal (0.1-%BUILD%) unstable; urgency=medium
- * initial version: Ausweiserstellung
+ * initial version: Ausweiserstellung, Kassenbrief
-- Michael Wagner <info@wagnertech.de> Sat, 06 Jun 2020 20:03:04 +0100
Package: eigenheimer-util
Architecture: all
-Depends: texlive-latex-base, texlive-latex-recommended, texlive-lang-german, python3, apache2, libapache2-mod-wsgi-py3
+Depends: texlive-latex-base, texlive-latex-recommended, texlive-lang-german, python3, apache2, libapache2-mod-wsgi-py3, python3-django
Description: Mitgliederverwaltung Eigenheimerverband
.
set -e
mkdir -p $1/opt
-cp -r python/eh_util $1/opt
+cp -r python/eh_util $1/opt/
# DB löschen
rm $1/opt/eh_util/db.sqlite3
# DB anlegen/migrieren
/opt/eh_util/manage.py migrate
-# activate verleihnix configuration
+# activate eh_util configuration
if ! test -e /etc/apache2/sites-enabled/eh_util.conf
then
a2ensite eh_util
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")
--- /dev/null
+<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>
from .AWK import config, routines
#import .forms
-from .forms import EhmeldungForm, VorlagenForm, BeitragForm
+from .forms import EhmeldungForm, VorlagenForm, BeitragForm, VorlagenVerwaltungForm
from eh_app.AWK.pdf_ersteller import PdfErsteller
-from test.test_codeccallbacks import NoEndUnicodeDecodeError
# Create your views here.
def index(request, verein):
template = loader.get_template("vbasis.html")
+ raise RuntimeError("blub")
return HttpResponse(template.render({"verein" : verein}, request))
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}, request))
+ return HttpResponse(template.render(
+ {
+ "verein" : verein,
+ "vorlagen_form" : vorlagen_form },
+ request))
'''
---------------------------------------------------------------
Neue Templates installieren
<Dateiauswahlknopf>
<Knopf"Installieren">
'''
- pass
+
#@login_required
def kassenbrief(request, verein):
'''
--- /dev/null
+from django import forms
+
+class LoginForm(forms.Form):
+ verein = forms.CharField(label = "Vereinskürzel")
+ name = forms.CharField(label = "Login-Name")
+ password = forms.CharField(widget=forms.PasswordInput, label = "Passwort")
+ next = forms.CharField(widget = forms.HiddenInput(), required = False)
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
-
+MEDIA_ROOT = BASE_DIR
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
ALLOWED_HOSTS = []
+LOGIN_URL = "/eh-util/login"
# Application definition
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'DIRS': ["eh_util/templates", "eh_utils/eh_app/templates/svbal"],
+ 'DIRS': [os.path.join(BASE_DIR, "eh_util/templates"), os.path.join(BASE_DIR, "eh_utils/eh_app/templates/svbal")],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
--- /dev/null
+<html>
+<head>
+ <title>Siedlerverein-Verwaltung by WagnerTech UG</title>
+</head>
+<body>
+<h1>Siedlerverein-Verwaltung by WagnerTech UG</h1>
+<h2>Login</h2>
+<form action="/eh-util/login/" method="post" enctype="multipart/form-data">
+{% csrf_token %}
+{{fehlertext}}
+<table>
+{{form}}
+</table>
+<p><input type="submit" value="Anmelden"/>
+</form>
+</body>
+</html>
urlpatterns = [
path('', views.index),
- path('accounts/login/', views.login),
+ path('login/', views.login),
path('admin/', admin.site.urls),
path('eh-abgleich/', include('eh_abgleich.urls')),
# path('<slug:verein>/', views.vbasis),
def vbasis(request, verein):
template = loader.get_template("vbasis.html")
+ raise RuntimeError("blub")
return HttpResponse(template.render({"verein" : verein}, request))