imio-teleservices-templatetags/imio_teleservices_templatetags/templatetags/imio_teleservices.py

173 lines
5.2 KiB
Python
Raw Normal View History

2022-07-29 09:32:13 +02:00
import datetime
import re
from decimal import Decimal
import requests
2022-08-05 12:23:58 +02:00
from dateutil.relativedelta import relativedelta
2022-04-02 14:15:22 +02:00
from django import template
2022-07-29 09:32:13 +02:00
from django.utils.safestring import SafeText
2022-04-02 14:15:22 +02:00
from wcs.qommon import misc
from wcs.qommon.templatetags.qommon import unlazy
register = template.Library()
2022-07-29 12:03:59 +02:00
@register.filter
def clean_string(value):
return value.replace(" ", "").replace(".", "").replace("-", "")
2022-07-29 09:32:13 +02:00
@register.filter
def check_class(value):
return str(type(value))
2022-04-02 14:15:22 +02:00
@register.filter
def is_valid_belgian_nrn(value):
return misc.validate_belgian_nrn(unlazy(value))
@register.filter
def is_strong_authentication(session_user):
2022-07-29 09:32:13 +02:00
"""
Anciennement town.py is_strong_authentication
session_user : session_user
return : (bool) True si le user est connecté avec une authentification forte
"""
2022-08-05 11:30:01 +02:00
return bool("_niss" in session_user.verified_fields)
2022-08-01 10:55:35 +02:00
@register.filter
def is_agent(session_user):
"""
Anciennement town.py is_agent
session_user : session_user
return : (bool) True si le user est autorisé à aller dans le backoffice.
"""
return session_user.can_go_in_backoffice()
2022-07-29 09:32:13 +02:00
@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
"""
2022-07-29 11:17:25 +02:00
2022-07-29 09:32:13 +02:00
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")
2022-07-29 11:17:25 +02:00
2022-07-29 09:32:13 +02:00
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)
2022-08-04 14:00:19 +02:00
@register.filter
def get_birthday_from_nn(numero_national):
"""
numero_national : (str) numero national peut contenir espace . et -
return : (datetime) la date de naissance
2022-08-04 14:00:19 +02:00
"""
numero_national = clean_string(numero_national)
date = numero_national[:6]
2022-08-05 12:23:58 +02:00
birthday = datetime.datetime.strptime(date, "%y%m%d")
if birthday > datetime.datetime.now():
birthday -= relativedelta(years=100)
return birthday
2022-08-04 14:00:19 +02:00
2022-07-29 11:17:25 +02:00
@register.filter
def is_valid_tva_number(tva_number, formatage=True):
"""
tva_number : (str) numéro de tva BE0000000097
formatage : (bool) True/False
return : (bool) True si le numéro est valide
"""
# si formatage alors enlève les espaces, points et tirets
if formatage:
2022-07-29 12:03:59 +02:00
tva_number = clean_string(tva_number)
2022-07-29 11:17:25 +02:00
if not tva_number[:2].upper() == "BE":
return False
if not len(tva_number) == 12:
if len(tva_number) == 11:
tva_number = tva_number[:2] + "0" + tva_number[2:]
else:
return False
if re.match(r"^\d{10}$", tva_number[2:]):
int_value = int(tva_number[2:10])
check_digit = int(int_value / 97) * 97
if (97 - (int_value - check_digit)) == int(tva_number[10:12]):
return True
else:
return False
2022-07-27 12:05:37 +02:00
@register.filter
def liste_type_rdv_plusieurs_personnes(value):
"""
Anciennement liste_type_general_rdv.py
2022-07-29 09:32:13 +02:00
value : (str) url api liste des types de rendez-vous
return : (list[str]) liste des différent type de rendez-vous sans - x personnes
"""
2022-08-05 11:30:01 +02:00
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
"""
2022-08-05 11:30:01 +02:00
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):
2022-08-05 11:30:01 +02:00
total += Decimal(value.get("price"))
return total
@register.filter
def autorisation_voyage_enfants_concernes(lst_enfants_concernes):
"""
Anciennement autorisation_voyage_enfants_concernes.py
lst_enfants_concernes : (list)
return : (str)
"""
enfants_concernes = ""
if lst_enfants_concernes is not None:
for e in lst_enfants_concernes:
2022-08-05 11:30:01 +02:00
enfants_concernes = enfants_concernes + "- " + e[0] + " né(e) à " + e[1] + " le " + e[2] + "\r\n"
return enfants_concernes