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

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