Skip to content

Commit

Permalink
feat!: Swap LeineLab e.V. specific implementation
Browse files Browse the repository at this point in the history
in favor of FNorden e.V. specific implementation.
  • Loading branch information
AiyionPrime committed Jan 4, 2025
1 parent e2b5058 commit fd97e0f
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 83 deletions.
6 changes: 3 additions & 3 deletions app/config.py.example
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#!/usr/bin/python

class Config(object):
MAIL_SERVER = 'leineserver.leinelab.org'
MAIL_PORT = 587
MAIL_USERNAME = 'vorstand@leinelab.org'
MAIL_SERVER = 'server.wiemann.cc'
MAIL_PORT = 25
MAIL_USERNAME = 'vorstand@fnorden.de'
MAIL_PASSWORD = 'your_password'
MAIL_USE_TLS = True
MAIL_USE_SSL = False
32 changes: 6 additions & 26 deletions app/templates/index.html
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>LeineLab e.V. - Mitgliedsantrag</title>
<title>FNorden e.V. - Mitgliedsantrag</title>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
<!-- HTMX -->
<script src="https://unpkg.com/[email protected]"></script>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='leinelab0.png')}}">
<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='logo_mini_inverted.png')}}">
<style>
body {
padding: 20px;
Expand All @@ -24,15 +24,14 @@
<body style="display:flex; justify-content : center;">
<div style="max-width: 600px;">
<div style="text-align: center;">
<img src="{{ url_for('static', filename='leinelab0.png')}}" width="300" alt="LeineLab Logo - An den Glider aus Game of Life angelehntes L auf regenbogenfarbenem Hintergrund.">
</div>
<h1 style="margin-top: 30px;">LeineLab e.V. - Mitgliedsantrag</h1>
<h1 style="margin-top: 30px;">FNorden e.V. - Mitgliedsantrag</h1>
{% from "form.html" import render_field with context %}

{% block content %}
<form method="post" hx-indicator="#loading" hx-swap="outerHTML" id="{{form._prefix}}form" hx-post novalidate encoding="{{encoding}}">

<h3 style="padding-top:30px">Basisdaten</h3>
<h3 style="padding-top:30px">Stammdaten</h3>

{{ form.csrf_token }}

Expand All @@ -58,29 +57,14 @@ <h3 style="padding-top:30px" id="beitrag" hx-post="" hx-trigger="input from:#x2
<div class="alert alert-info" role="alert">
Sofern nicht anders vereinbart, werden die Mitgliedsbeiträge in einer jährlichen Sammelbuchung eingezogen.
</div>
<div id="ermaessigt-hinweis" hx-post="" hx-trigger="input from:#x2">
{% if request.form['x-ermaessigt'] %}
<div class="alert alert-info" role="alert">
Hinweis: Falls du den angezeigten Beitrag aus finanziellen Gründen trotz Ermäßigung immer
noch nicht aufbringen kannst, sprich uns als Vorstand gerne an. Wir haben
nach der Beitragsordnung die Möglichkeit, weitere individuelle Vergünstigungen
für Sonderfälle zu vergeben.
</div>
{% endif %}
</div>

<div id="mitgliedsart-outer">
{{ render_field(form.mitgliedsart, False) }}
</div>

<div id="mitgliedsart-dependent" hx-post="" hx-trigger="change from:#mitgliedsart-outer">
{% if request.form['mitgliedsart'] == "Fördermitgliedschaft (Kein Stimmrecht auf Mitgliederversammlungen, keine Werkstattnutzung, keine Schließberechtigung, beliebiger Beitrag)" %}
{% if request.form['mitgliedsart'] == "Fördermitgliedschaft (Kein Stimmrecht auf Mitgliederversammlungen, beliebiger Beitrag)" %}
{{ render_field(form.x.foerderbeitrag, False, False) }}
{% else %}
<div id="ermaessigt-werkstatt" hx-post="" hx-trigger="change">
{{ render_field(form.x.ermaessigt, False, False) }}
{{ render_field(form.x.werkstatt, False, False) }}
</div>
{% endif %}
</div>

Expand All @@ -102,12 +86,8 @@ <h3 style="padding-top:30px">Zahlungsdaten</h3>
Hinweis: Ich kann innerhalb von acht Wochen, beginnend mit dem Belastungsdatum, die Erstattung des belasteten
Betrags verlangen. Es gelten dabei die mit meinem Kreditinstitut vereinbarten Bedingungen.
</div>
<div class="alert alert-info" role="alert">
Die Behandlung von nicht eingelösten Lastschriften und die damit verbundenen Kosten werden in der Gebührenordnung des
LeineLab&nbsp;e.V. geregelt.
</div>
<div class="alert alert-light" role="alert">
Gläuber-Identifikationsnummer des LeineLab e.V.: DE86MEM00002676494.
Gläuber-Identifikationsnummer des FNorden e.V.: DE-FIXME-Aiyion.
</div>

<h3 style="padding-top:30px">Datenschutz</h3>
Expand Down
5 changes: 1 addition & 4 deletions app/templates/mail.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ EMail: {{ request.form['email'] }}

Beitrag: {{ beitrag }} €/Monat
Mitgliedschaftsart: {{ request.form['mitgliedsart'] }}
Ermäßigt: {{ "Ja" if request.form['x-ermaessigt'] else "Nein" }}
Werkstatt: {{ "Ja" if request.form['x-werkstatt'] else "Nein" }}

Kontoinhabende Person(en): {{ request.form['sepa-kontoinhabende'] }}
Addresse der kontoinhabende(n) Person(en): {{ request.form['sepa-kontoinhabende_addresse'] }}
Expand All @@ -21,5 +19,4 @@ Ermächtigung SEPA-Einzug: Ja

Zustimmung Datenschutz: Ja

Viele Grüße und Tüdelü
Euer Mitgliedsformular
Zusammengetragen durch: https://signup.fnorden.net
6 changes: 3 additions & 3 deletions app/templates/success.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

{% block content %}
<div id="form" class="alert alert-success" role="alert" style="margin-top: 40px">
Cool, dass du bei uns Mitglied werden möchtest. <br><br>
Klasse, dass du bei uns Mitglied werden möchtest. <br><br>

Dein Antrag ist bei uns eingegangen. <br><br>

Wir melden uns bald bei dir. <br><br>

Viele Grüße<br>
Der LeineLab-Vorstand
Dein FNorden-Vorstand
</div>
{% endblock %}
{% endblock %}
59 changes: 12 additions & 47 deletions app/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,13 @@ def iban_validator(form, field):
parser = etree.HTMLParser(encoding="utf-8")

class NormalesMitgliedForm(FlaskForm):
ermaessigt = BooleanField("""Ermäßigter Beitrag %TAG% - Für Schüler*innen, Studierende,
Auszubildende, Empfänger*innen
von Sozial- oder Bürgergeld einschließlich Leistungen nach § 22 ohne
Zuschläge oder nach § 24 des zweiten Sozialgesetzbuchs (SGB II) sowie
Empfänger*innen von Ausbildungsförderung nach dem
Bundesausbildungsförderungsgesetz (BAföG)""")
werkstatt = BooleanField("Werkstattnutzung %TAG%")
pass

class SEPABase(FlaskForm):
mitglied_is_inhabende = BooleanField("Mitglied ist kontoinhabende Person", default="checked")
einwilligung = BooleanField("""Hiermit ermächtige ich den LeineLab e.V., wiederkehrende Zahlungen von
einwilligung = BooleanField("""Hiermit ermächtige ich den FNorden e.V., wiederkehrende Zahlungen von
meinem Konto mittels Lastschrift einzuziehen. Zugleich weise ich mein Kreditinstitut an,
die vom LeineLab e.V. auf mein Konto gezogenen Lastschriften einzulösen.
die vom FNorden e.V. auf mein Konto gezogenen Lastschriften einzulösen.
""", [validators.InputRequired("Zustimmung ist erforderlich.")])
iban = StringField('IBAN', [iban_validator])
kreditinstitut = StringField('Kreditinstitut', [Length(min=3, message="Der Name des Kreditinstituts sollte mindestens 3 Zeichen haben.")])
Expand All @@ -49,7 +43,7 @@ class SEPAAbweichendeInhabende(SEPABase):
])

class FoerderMitgliedForm(FlaskForm):
foerderbeitrag = DecimalRangeField("", default=10, render_kw={"min": 2.5, "step": 2.5, "max": 30})
foerderbeitrag = DecimalRangeField("", default=10, render_kw={"min": 5, "step": 2.5, "max": 30})

class BaseForm(FlaskForm):
name = StringField('Name', validators=[
Expand All @@ -63,33 +57,22 @@ class BaseForm(FlaskForm):
validators.Length(min=6, message='Ein bisschen kurz für eine EMail-Adresse?'),
validators.Email(message='Keine valide EMail-Adresse.')
])
mitgliedsart = RadioField('Mitgliedsart', default="Normale Mitgliedschaft", choices=["Normale Mitgliedschaft", "Fördermitgliedschaft (Kein Stimmrecht auf Mitgliederversammlungen, keine Werkstattnutzung, keine Schließberechtigung, beliebiger Beitrag)"])
mitgliedsart = RadioField('Mitgliedsart', default="Normale Mitgliedschaft", choices=["Normale Mitgliedschaft", "Fördermitgliedschaft (Kein Stimmrecht auf Mitgliederversammlungen, beliebiger Beitrag)"])

datenschutz = BooleanField("""Ich stimme zu, dass meine Stammdaten im
Rahmen der Datenschutzvereinbarung auf der Webseite des LeineLab e.V. verarbeitet
Rahmen der Datenschutzvereinbarung auf der Webseite des FNorden e.V. verarbeitet
werden.""", [InputRequired("Zustimmung ist erforderlich.")])

def calc_beitrag(ermaessigt, werkstatt, foerderbeitrag=None):
def calc_beitrag(foerderbeitrag=None):
if foerderbeitrag:
return foerderbeitrag

if ermaessigt:
if werkstatt:
return 10
else:
return 2.5
else:
if werkstatt:
return 28
else:
return 10

return 5.0

@app.route("/", methods=["GET", "POST"])
def home():
xCls = NormalesMitgliedForm

if request.form.get('mitgliedsart') == "Fördermitgliedschaft (Kein Stimmrecht auf Mitgliederversammlungen, keine Werkstattnutzung, keine Schließberechtigung, beliebiger Beitrag)":
if request.form.get('mitgliedsart') == "Fördermitgliedschaft (Kein Stimmrecht auf Mitgliederversammlungen, beliebiger Beitrag)":
#form = BaseFormFoerderMitglied()
xCls = FoerderMitgliedForm

Expand All @@ -103,38 +86,20 @@ class MyForm(BaseForm):

form = MyForm()

if xCls == NormalesMitgliedForm:
ermaessigt = form.x.ermaessigt.data
werkstatt = form.x.werkstatt.data

tag = ''
if not ermaessigt:
tag = '<span class="badge rounded-pill bg-success">%.2f €</span>' % (calc_beitrag(True, werkstatt)-calc_beitrag(False, werkstatt))

form.x.ermaessigt.label.text = form.x.ermaessigt.label.text.replace("%TAG%", tag)

tag = ''
if not werkstatt:
tag = '<span class="badge rounded-pill bg-info text-dark">%+.2f €</span>' % (calc_beitrag(ermaessigt, True)-calc_beitrag(ermaessigt, False))

form.x.werkstatt.label.text = form.x.werkstatt.label.text.replace("%TAG%", tag)

if sepaCls == SEPASameInhabende:
form.sepa.kontoinhabende.process_data(form.data['name'])
form.sepa.kontoinhabende_addresse.process_data(form.data['full_address'])


foerderbeitrag = None
werkstatt = request.form.get("x-werkstatt")
ermaessigt = request.form.get("x-ermaessigt")

if request.form.get("mitgliedsart") == "Fördermitgliedschaft (Kein Stimmrecht auf Mitgliederversammlungen, keine Werkstattnutzung, keine Schließberechtigung, beliebiger Beitrag)":
if request.form.get("mitgliedsart") == "Fördermitgliedschaft (Kein Stimmrecht auf Mitgliederversammlungen, beliebiger Beitrag)":
foerderbeitrag = request.form.get("x-foerderbeitrag", 10)

beitrag = calc_beitrag(ermaessigt, werkstatt, foerderbeitrag)
beitrag = calc_beitrag(foerderbeitrag)

if form.validate_on_submit() and "HX-Target" in request.headers and request.headers['HX-Target'] == 'form':
msg = Message(subject=f'Neue Mitgliedsanfrage von {form.data["name"]}!', sender='[email protected]', recipients=['[email protected]'])
msg = Message(subject=f'Neue Mitgliedsanfrage von {form.data["name"]}!', sender='[email protected]', recipients=['[email protected]'])
msg.body = render_template("mail.txt", form=form, beitrag=beitrag)
print(msg)
mail.send(msg)
Expand Down

0 comments on commit fd97e0f

Please sign in to comment.