100 lines
3.0 KiB
Python
100 lines
3.0 KiB
Python
import datetime
|
|
import re
|
|
from decimal import Decimal
|
|
|
|
import requests
|
|
from django import template
|
|
from django.utils.safestring import SafeText
|
|
|
|
from wcs.qommon import misc
|
|
from wcs.qommon.templatetags.qommon import unlazy
|
|
|
|
register = template.Library()
|
|
|
|
|
|
@register.filter
|
|
def check_class(value):
|
|
return str(type(value))
|
|
|
|
|
|
@register.filter
|
|
def is_valid_belgian_nrn(value):
|
|
return misc.validate_belgian_nrn(unlazy(value))
|
|
|
|
|
|
@register.filter
|
|
def is_strong_authentication(session_user):
|
|
"""
|
|
Anciennement town.py is_strong_authentication
|
|
session_user : session_user
|
|
return : (bool) True si le user est connecté avec une authentification forte
|
|
"""
|
|
return bool('_niss' in session_user.verified_fields)
|
|
|
|
|
|
@register.filter
|
|
def diff_dates(oldest_date, newest_date):
|
|
"""
|
|
Anciennement town.py diff_dates
|
|
oldest_date : datetime ou SafeText sous la forme "jj/mm/aaaa" ou "aaaa-mm-jj" ou "jj-mm-aaaa"
|
|
newest_date : datetime ou SafeText sous la forme "jj/mm/aaaa" ou "aaaa-mm-jj" ou "jj-mm-aaaa"
|
|
return : (str) nombre de jours de différence entre les 2 dates
|
|
"""
|
|
def transform_date(fdate):
|
|
if "/" in fdate:
|
|
return datetime.datetime.strptime(fdate, "%d/%m/%Y")
|
|
if "-" in fdate:
|
|
if len(fdate.split("-")[0]) == 4:
|
|
return datetime.datetime.strptime(fdate, "%Y-%m-%d")
|
|
if len(fdate.split("-")[0]) == 2:
|
|
return datetime.datetime.strptime(fdate, "%d-%m-%Y")
|
|
if type(oldest_date) == SafeText:
|
|
oldest_date = transform_date(oldest_date)
|
|
if type(newest_date) == SafeText:
|
|
newest_date = transform_date(newest_date)
|
|
diff = abs((oldest_date - newest_date).days)
|
|
return str(diff)
|
|
|
|
|
|
@register.filter
|
|
def liste_type_rdv_plusieurs_personnes(value):
|
|
"""
|
|
Anciennement liste_type_general_rdv.py
|
|
value : (str) url api liste des types de rendez-vous
|
|
return : (list[str]) liste des différent type de rendez-vous sans - x personnes
|
|
"""
|
|
headers = {'Accept': 'application/json'}
|
|
liste = requests.get(value, headers=headers).json()
|
|
return list(set([re.sub(r" (pour|-) [0-9]+ personne(s)?$", "", x["text"]) for x in liste["data"]]))
|
|
|
|
|
|
@register.filter
|
|
def liste_type_rdv_nombres_personnes(value, arg):
|
|
"""
|
|
Anciennement liste_type_rdv.py
|
|
value : (str) url api liste des type de rendez-vous
|
|
arg : (str) type de rendez-vous
|
|
return : (list[str]) liste des rendez-vous de type arg
|
|
"""
|
|
headers = {'Accept': 'application/json'}
|
|
liste = requests.get(value, headers=headers).json()
|
|
|
|
return [x for x in liste["data"] if arg in x["text"]]
|
|
|
|
|
|
@register.filter
|
|
def calcul_total_abonnement_stationnement(fields_bloc):
|
|
"""
|
|
Anciennement fields_bloc.py
|
|
fields_bloc : (list[dict]) Bloc de champ Abonnements de stationnement données bénéficiaires
|
|
return : (Decimal) addition des entrées price
|
|
"""
|
|
total = 0
|
|
|
|
for field in fields_bloc:
|
|
for value in field.values():
|
|
if isinstance(value, dict):
|
|
total += Decimal(value.get('price'))
|
|
|
|
return total
|