Changeset - 001f20e494f4
[Not reviewed]
default
0 1 1
Dennis Fink - 3 years ago 2022-05-10 23:36:08
dennis.fink@c3l.lu
Move age calculation to own module
2 files changed with 18 insertions and 13 deletions:
0 comments (0 inline, 0 general)
c3l_membership/utils.py
Show inline comments
 
new file 100644
 
from datetime import date
 

	
 

	
 
def calculate_age(birthday):
 
    today = date.today()
 
    born = birthday
 
    try:
 
        birthday = born.replace(year=today.year)
 
    except ValueError:
 
        birthday = born.replace(year=today.year, month=born.month + 1, day=1)
 

	
 
    age = today.year - born.year
 
    if birthday > today:
 
        age -= 1
 
    return age
c3l_membership/views.py
Show inline comments
 
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
 
@@ -44,38 +45,26 @@ def index():
 
    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():
 

	
 
        today = date.today()
 
        if form.birthday.data:
 
            born = form.birthday.data
 
            try:
 
                birthday = born.replace(year=today.year)
 
            except ValueError:
 
                birthday = born.replace(year=today.year, month=born.month + 1, day=1)
 

	
 
            age = today.year - born.year
 

	
 
            if birthday > today:
 
                age -= 1
 

	
 
            if age < 18:
 
            if calculate_age(form.birthday.data) < 18:
 
                form.minor_member.data = True
 
                form.student.data = True
 
            else:
 
                form.minor_member.data = False
 

	
 
        if (
 
            form.minor_member.data
 
            or form.student.data
 
            or form.membership.data == "supporting"
 
        ):
 
            price = current_app.config["SUPPORTING_FEE"]
 
        elif form.starving.data:
 
@@ -100,24 +89,25 @@ def index():
 
                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(
0 comments (0 inline, 0 general)