Bug mineur corrigé (date inférieure à la date de naissance)
[perso/Denise/oms.git] / gestion_unites.py
CommitLineData
5679dfd0
DL
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3
d03279e7 4from configuration import CONFIG
a680b2f7 5from gestion_erreurs import warning
cf0d4c8c 6from math import log
5679dfd0
DL
7
8##################### outils pour affichage et choix de l'unité
9
10def choix_unite(maxi):
685a5f75 11 """ en fonction de l'âge maxi, on choisit une unité pertinente : jours, semaine, mois, année"""
5679dfd0
DL
12 if maxi<40:
13 return "jours"
30158504
DL
14 elif maxi <100:
15 return "semaines"
d03279e7 16 elif maxi<25*CONFIG["jours_dans_mois"]:
5679dfd0
DL
17 return "mois"
18 else:
19 return "années"
20
685a5f75
DL
21def choix_echelle_data(typedonnees, donneemax):
22 """ en fonction du type de données et du maxi (on suppose qu'on part à 0),
23 on choisit un intervalle raisonnable
24 On renvoie le couple des pas (majeur, mineur)
25 (0,0) en cas de problème avec le typedonnnes """
26
27 if typedonnees not in CONFIG["liste_typedonnees"]:
28 print("Type de données non valide : "+typedonnees)
29 return (0,0)
30
31 if typedonnees == "poids":
32 if donneemax>15:
33 return (5,1)
34 elif donneemax > 10:
a680b2f7 35 return (1,0.5)
685a5f75
DL
36 else:
37 return (1,0.2)
38 if typedonnees == "taille":
39 if donneemax>100:
40 return (10,2)
41 else:
42 return (5,1)
43
44def choix_echelle_temps(unite, tempsmaxi):
45 """ en fonction de l'unité voulue et du temps maximal (donné dans l'unité),
46 on choisit un intervalle raisonnable entre les pas.
47 On renvoie le couple des pas (majeur, mineur).
48 (0,0) en cas de problème avec l'unité
49 On met 0 en 2e arg si pas de grille secondaire"""
50 if unite not in CONFIG["liste_unites"]:
51 print("Unité non valide ! "+unite)
52 return (0,0)
53
54 if unite=="jours":
55 if tempsmaxi > 60: # pourquoi mettre en jours ?
56 return (30,1)
a680b2f7 57 elif tempsmaxi >15:
685a5f75
DL
58 return (7,1)
59 else:
60 return (1,0)
61 if unite=="semaines":
62 if tempsmaxi >50:
63 return (5,1)
a680b2f7 64 elif tempsmaxi > 10:
685a5f75
DL
65 return (2,1)
66 else:
67 return (1,1/7) # On met en jours
68
69 if unite=="mois":
a680b2f7
DL
70 if tempsmaxi > 24:
71 return (12,1)
685a5f75
DL
72 elif tempsmaxi > 10:
73 return (1,0)
74 else:
a680b2f7 75 return (1,0.25) # on met en semaines à peu près (quart de mois)
685a5f75
DL
76
77 if unite=="années":
78 return (1,1/12) # années / mois
79
5679dfd0
DL
80def convertitunite(jours,unite,liste_err):
81 """ convertit des jours à l'unité voulue
82 renvoie des float"""
83 if unite=="jours":
84 return jours
85 elif unite=="mois":
d03279e7 86 return jours/CONFIG["jours_dans_mois"]
5679dfd0 87 elif unite=="années":
d03279e7 88 return jours/CONFIG["jours_dans_annee"]
5679dfd0 89 elif unite=="semaines":
d03279e7 90 return jours/CONFIG["jours_dans_semaine"]
5679dfd0
DL
91 else:
92 warning("erreur sur l'unité : "+unite+" On laisse en jours",liste_err)
93 return jours
94
95def convertit_tableau(tableau,unite,liste_err):
96 """ convertit un tableau de jours en une autre unité.
97 Renvoie le nouveau tableau"""
cf0d4c8c
DL
98 return [convertitunite(elt,unite,liste_err) for elt in tableau]
99
100def arrondit_donnee(donnee, typed, arrondi=0):
101 """ on arrondit la donnée de type typed (à voir dans CONFIG)
102 à arrondit près. SI y'a 0 on va voir dans la config.
103 Pour l'arrondit on met par ex 1 pour arrondir à 1 pr_s, 0.1 pour arrondir
104 au dixième etc"""
105 if arrondi==0:
106 arrondi = CONFIG["arrondis_typedonnees"][typed]
107 if arrondi==0:
108 print("Euuuh ça va merder, y'a une div par 0 dans arrondit_donnees !")
109
110 d_arr = round(donnee/arrondi)*arrondi
111 nbchiffresvoulus = int(log(1/arrondi, 10))+1 # max sur le nombre de chiffres après la virgule qu'on doit avoir
112 return round(d_arr, nbchiffresvoulus)