Files
@ 68ea3e6dd3a6
Branch filter:
Location: C3L/C3L-Membership-Online-Form/c3l_membership/views.py - annotation
68ea3e6dd3a6
4.4 KiB
text/x-python
Make the birthday mandatory
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | 587a9a50643f 6f06fc328a13 6f06fc328a13 6f06fc328a13 ade19bdcb84a 4005eddcc559 805cb46ada9a 6f06fc328a13 6f06fc328a13 6f06fc328a13 001f20e494f4 6f06fc328a13 4005eddcc559 6f06fc328a13 587a9a50643f 587a9a50643f 6f06fc328a13 4005eddcc559 4005eddcc559 4005eddcc559 4005eddcc559 4005eddcc559 4005eddcc559 4005eddcc559 8e2c954d832f 8e2c954d832f 8e2c954d832f 4005eddcc559 4005eddcc559 6f06fc328a13 6f06fc328a13 6f06fc328a13 7cf7d1e162a4 805cb46ada9a 805cb46ada9a 805cb46ada9a 805cb46ada9a 7cf7d1e162a4 10cfc4437178 568ea5d76267 10cfc4437178 bcd9fd777f07 bcd9fd777f07 bcd9fd777f07 dbf7ee7956eb dbf7ee7956eb dbf7ee7956eb dbf7ee7956eb dbf7ee7956eb dbf7ee7956eb dbf7ee7956eb 10cfc4437178 7cf7d1e162a4 7cf7d1e162a4 6f06fc328a13 6f06fc328a13 0b4955bdc703 001f20e494f4 68ea3e6dd3a6 0b4955bdc703 0b4955bdc703 68ea3e6dd3a6 0b4955bdc703 68ea3e6dd3a6 7cf7d1e162a4 34a737f6fb8d 34a737f6fb8d b314c40f5920 b314c40f5920 b314c40f5920 52127f437376 ade19bdcb84a 68ea3e6dd3a6 ade19bdcb84a 587a9a50643f ade19bdcb84a 587a9a50643f ade19bdcb84a 587a9a50643f 10cfc4437178 ade19bdcb84a 53bbd1295ee2 53bbd1295ee2 53bbd1295ee2 ade19bdcb84a ade19bdcb84a 53bbd1295ee2 ade19bdcb84a ade19bdcb84a ade19bdcb84a ade19bdcb84a ade19bdcb84a ade19bdcb84a bcd9fd777f07 6f06fc328a13 6f06fc328a13 001f20e494f4 81d8f0641a9c 81d8f0641a9c 81d8f0641a9c 81d8f0641a9c 81d8f0641a9c 81d8f0641a9c 81d8f0641a9c 81d8f0641a9c 262323080d4e 262323080d4e 262323080d4e 262323080d4e 262323080d4e 262323080d4e 262323080d4e 262323080d4e 262323080d4e 262323080d4e 262323080d4e 262323080d4e 81d8f0641a9c 81d8f0641a9c 0b4955bdc703 81d8f0641a9c 6f06fc328a13 587a9a50643f 81d8f0641a9c 81d8f0641a9c 81d8f0641a9c 0b4955bdc703 de9af48b4e60 81d8f0641a9c 68ea3e6dd3a6 587a9a50643f a65e79a6c323 a65e79a6c323 a65e79a6c323 a65e79a6c323 53bbd1295ee2 53bbd1295ee2 | import re
import subprocess
from datetime import date
import requests
from flask import Blueprint, current_app, g, render_template, request
from flask_babel import gettext
from flask_weasyprint import HTML, render_pdf
from .forms import MembershipForm
from .utils import calculate_age
root_page = Blueprint("root", __name__, url_prefix="/<lang_code>")
xml_template = "<member><numm>{name}</numm><gebuertsdag>{birthday:%d.%m.%Y}</gebuertsdag><address>{address}</address><nick>{username}</nick><email>{email}</email><status>{status}</status><stemmrecht>{voting}</stemmrecht></member>"
@root_page.url_defaults
def add_lang_code(endpoint, values):
values.setdefault("lang_code", g.lang_code)
@root_page.url_value_preprocessor
def pull_lang_code(endpoint, values):
lang_code = values.pop("lang_code")
if lang_code != "favicon.ico":
g.lang_code = lang_code
@root_page.route("/", methods=("GET", "POST"))
def index():
form = MembershipForm()
choices = [
("cash", gettext("by cash")),
("wire transfer", gettext("by wire transfer")),
]
if current_app.config["DIGICASH_ENABLED"]:
choices.append(("digicash", gettext("by DigiCash/Payconiq")))
if current_app.config["SATISPAY_ENABLED"]:
choices.append(("satispay", gettext("by Satispay")))
choices.extend(
(cryptocurrency_label, " ".join((gettext("by"), cryptocurrency_label.title())))
for cryptocurrency_label, options in current_app.config[
"CRYPTOCURRENCIES"
].items()
if options["ENABLED"]
)
form.payment.choices = choices
if form.validate_on_submit():
if form.birthday.data:
if calculate_age(form.birthday.data) < 18:
minor_member = True
form.student.data = True
else:
minor_member = False
if minor_member or form.student.data or form.membership.data == "supporting":
price = current_app.config["SUPPORTING_FEE"]
elif form.starving.data:
price = 1
else:
price = current_app.config["REGULAR_FEE"]
if form.starving.data:
status = "Starving"
elif minor_member or form.student.data:
status = "Student"
elif form.membership.data == "supporting":
status = "Supporter"
else:
status = "Regular"
if form.payment.data in current_app.config["CRYPTOCURRENCIES"]:
try:
current_conversion_r = requests.get(
current_app.config["CONVERSION_URL"], timeout=30
)
current_conversion_r.raise_for_status()
except:
return render_template("index.html", form=form, crypto_error=True), 503
else:
current_conversion = current_conversion_r.json()
commodity = current_app.config["CRYPTOCURRENCIES"][form.payment.data][
"COMMODITY"
]
price = current_conversion[commodity][status.upper()]
elif form.payment.data in ("digicash", "satispay"):
price = price * 100
today = date.today()
xml_data = {
"status": status,
"name": form.fullname.data,
"birthday": form.birthday.data
if form.birthday.data is not None
else date(9999, 12, 12),
"username": form.username.data,
"email": form.email.data,
"address": re.sub(
"\s+",
" ",
" ".join(
(
form.street.data,
form.zip.data,
form.city.data,
form.state.data,
form.country.data,
)
),
),
"voting": 1 if form.membership.data == "regular" else 0,
"date": today,
}
html = render_template(
"member.html",
form=form,
price=price,
year=today.year,
voting=True if form.membership.data == "regular" else False,
xml=xml_template.format(**xml_data),
minor_member=minor_member,
)
return render_pdf(
HTML(string=html),
download_filename=f"C3L_Membership_{form.username.data}.pdf",
)
return render_template("index.html", form=form, crypto_error=False)
|