]> git.immae.eu Git - perso/Denise/oms.git/blobdiff - gestion_donnees.py
Extrapolation améliorée + possibilité de voir le point voulu
[perso/Denise/oms.git] / gestion_donnees.py
index c378b5e653a043334dbbeeae658a7555902d8878..2153a55f814cf0cb6660d71ca4842e475b3a5544 100644 (file)
@@ -2,9 +2,9 @@
 # -*- coding: utf-8 -*-
 
 from configuration import CONFIG,DEFAUT
 # -*- coding: utf-8 -*-
 
 from configuration import CONFIG,DEFAUT
-from gestion_erreurs import *
-from gestion_couleurs import *
-from gestion_unites import *
+from gestion_erreurs import debug, warning, erreur, initialise_erreurs
+from gestion_couleurs import rgb_vers_tuple, tuple_vers_rgb
+from gestion_unites import choix_unite
 import datetime
 import json
 import unidecode
 import datetime
 import json
 import unidecode
@@ -73,6 +73,7 @@ def convertit_age_vers_texte(nombre):
     if jours>0 or  nombre ==0: # si c'est la naissance, faut beien écrire 0j quand même
         chaine += str(jours)+"j"
     return chaine
     if jours>0 or  nombre ==0: # si c'est la naissance, faut beien écrire 0j quand même
         chaine += str(jours)+"j"
     return chaine
+
 ##########################
     
 # fonction qui calcule "auto" le maxi du graphique en fonction du max
 ##########################
     
 # fonction qui calcule "auto" le maxi du graphique en fonction du max
@@ -109,8 +110,12 @@ def convertit_donnee_vers_python(chaine,typedonnee,liste_err):
     except:
         warning(typedonnee+" impossible à lire : "+chaine,liste_err)
         donnee = 0
     except:
         warning(typedonnee+" impossible à lire : "+chaine,liste_err)
         donnee = 0
+        
+    # Pour le poids, un cas particulier
+    if typedonnee == "poids" and donnee > CONFIG["poids_maxi_conversion"]:
+        donnee = donnee/1000 # conversion en grammes
     if not( 0<=donnee<CONFIG[typedonnee+"_maxi"]):
     if not( 0<=donnee<CONFIG[typedonnee+"_maxi"]):
-        warning(typedonnee+"incohérent(e) : "+str(donnee),liste_err)
+        warning(typedonnee+" incohérent(e) : "+str(donnee),liste_err)
         donnee = 0
     return donnee    
 
         donnee = 0
     return donnee    
 
@@ -150,7 +155,7 @@ def delta_date(date1,datenaissance):
     d = date1 - datenaissance
     jours = d.days
     if jours<0:
     d = date1 - datenaissance
     jours = d.days
     if jours<0:
-        erreur_continue("La différence entre les dates est négative... :/")
+        warning("La différence entre les dates est négative... :/")
         return -1
     return jours
 
         return -1
     return jours
 
@@ -179,7 +184,7 @@ def web_vers_python(data,liste_err):
 
 
 
 
 
 
-########### Fonctions qui gèretn les données
+########### Fonctions qui gèretn les données web vers python
 
 def gere_checkbox(chaine):
     """ prend en arg une chaine, et renvoie "oui" si c'est "on" (sortie de la checkbox)
 
 def gere_checkbox(chaine):
     """ prend en arg une chaine, et renvoie "oui" si c'est "on" (sortie de la checkbox)
@@ -193,7 +198,8 @@ def gere_configuration(data,liste_err):
     """ prend en argument le dictionnaire de requête (configuration imparfaite), et
     construit le dictionnaire de configuration qui va bien.
     Vérifie que chaque entrée est cohérente évidemment."""
     """ prend en argument le dictionnaire de requête (configuration imparfaite), et
     construit le dictionnaire de configuration qui va bien.
     Vérifie que chaque entrée est cohérente évidemment."""
-    configuration = {}
+    # Initialisation
+    configuration = {"non_sauve": {}}
     
     # Pour le nom, osef qu'il soit vide
     nom = data.get("nom","")
     
     # Pour le nom, osef qu'il soit vide
     nom = data.get("nom","")
@@ -289,22 +295,54 @@ def gere_configuration(data,liste_err):
     if not(positionlegende in ['upper left','upper right','lower left','lower right']):
         positionlegende = "upper left"
     configuration["positionlegende"] = positionlegende
     if not(positionlegende in ['upper left','upper right','lower left','lower right']):
         positionlegende = "upper left"
     configuration["positionlegende"] = positionlegende
-
-    configuration["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes",""))
-
     
     configuration["couleurs"] = {}
     # gérer les couleurs
     for clecouleur in DEFAUT["couleurs"]:
         coul = rgb_vers_tuple(data.get("couleur_"+clecouleur,""),CONFIG["couleurs"][clecouleur],liste_err)
         configuration["couleurs"][clecouleur] = coul
     
     configuration["couleurs"] = {}
     # gérer les couleurs
     for clecouleur in DEFAUT["couleurs"]:
         coul = rgb_vers_tuple(data.get("couleur_"+clecouleur,""),CONFIG["couleurs"][clecouleur],liste_err)
         configuration["couleurs"][clecouleur] = coul
+
+
+    configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio",""))
+
+
+    #### La partie extrapolation n'a pas besoin d'être sauvée
+    configuration["non_sauve"]["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes",""))
+
+    # Valeur par défaut : 1
+    debug(data.get("nbextradata", "aaargh"), liste_err)
+    nbextradata = data.get("nbextradata",1)
+    try:
+        nbextradata = int(nbextradata)
+    except:
+        warning("Le nombre de données sur lequel on extrapole est invalide : "+nbextradata, liste_err)
+        nbextradata = 1
+    configuration["non_sauve"]["nbextradata"] = nbextradata
     
     
-    # On y ajoute la partie "non sauvée" qui servira peut-être plus tard
-    configuration["non_sauve"] = {}
+    if data.get("calculextradata_type","") in CONFIG["liste_typedonnees"]:
+        configuration["non_sauve"]["calculextradata_type"] = data.get("calculextradata_type","")
+        configuration["non_sauve"]["calculextradata_age"] = convertit_jours_vers_python(data.get("calculextradata_age","0j"),liste_err)
+    else:
+        configuration["non_sauve"]["calculextradata_type"] = ""
+        # On ne met rien dans l'âge, pas la peine
+    
+    ctyped = data.get("calculextratemps_type","")
+    if ctyped in CONFIG["liste_typedonnees"]:
+        configuration["non_sauve"]["calculextratemps_type"] = ctyped
+        configuration["non_sauve"]["calculextratemps_val"] = convertit_donnee_vers_python(data.get("calculextratemps_val",""), ctyped, liste_err)
+    else:
+        configuration["non_sauve"]["calculextratemps_type"] = ""
+    
+    # Tracer les calculs sur la grille
+    configuration["non_sauve"]["calculextradata_trace"] = gere_checkbox(data.get("calculextradata_trace"))
+    configuration["non_sauve"]["calculextratemps_trace"] = gere_checkbox(data.get("calculextratemps_trace"))
+
     
     return configuration   
  
     
     return configuration   
  
+    
 
 
+## web vers python : données
 def gere_donnees(data,naissance,typedonnee,liste_err):
     """ prend en argument le dictionnaire de requête, et la date de
     naissance (éventuellement vide), et construit deux listes :
 def gere_donnees(data,naissance,typedonnee,liste_err):
     """ prend en argument le dictionnaire de requête, et la date de
     naissance (éventuellement vide), et construit deux listes :
@@ -348,6 +386,7 @@ def gere_donnees(data,naissance,typedonnee,liste_err):
     return (l_jours,l_donnee)    
 
 
     return (l_jours,l_donnee)    
 
 
+# python vers Json
 #### export vers json
 
 def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config):
 #### export vers json
 
 def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config):
@@ -379,7 +418,7 @@ def fusionne_donnees(listes_jours,listes_donnees):
     de données (par la même clé de type de données). Il faut les fusionner pour avoir une liste de dictionnaires, de type
     ("age":truc, "donnee1":truc, "donnee2":truc, ...) triée par ordre de jours. Si jamais une des données est vide,
     le champ du dictionnaire n'est pas rempli"""
     de données (par la même clé de type de données). Il faut les fusionner pour avoir une liste de dictionnaires, de type
     ("age":truc, "donnee1":truc, "donnee2":truc, ...) triée par ordre de jours. Si jamais une des données est vide,
     le champ du dictionnaire n'est pas rempli"""
-#    nb_donnees = len(listes_jours)
+
     def fini(lj):
         """ teste si les listes sont toutes vides """
         for l in lj.values():
     def fini(lj):
         """ teste si les listes sont toutes vides """
         for l in lj.values():
@@ -412,10 +451,11 @@ def fusionne_donnees(listes_jours,listes_donnees):
     return liste_f
     
 
     return liste_f
     
 
-
+### COnversion json vers formulaire
 # Json -> formulaire HTML
 def fichier_json_vers_configdonnees(chaine,liste_err):
 # Json -> formulaire HTML
 def fichier_json_vers_configdonnees(chaine,liste_err):
-    """ prend le json importé (chaine) et l'exporte vers les valeurs du formulaire """
+    """ prend le json importé (chaine) et l'exporte vers les valeurs du formulaire 
+    Renvoyé sous forme de dictionnaire (mais adapté au formulaire web)"""
     debug("json vers config : Prêt à interpréter le json",liste_err)
     try:    
         valform = json.loads(chaine)
     debug("json vers config : Prêt à interpréter le json",liste_err)
     try:    
         valform = json.loads(chaine)