]> git.immae.eu Git - perso/Denise/oms.git/blobdiff - gestion_donnees.py
dates au format aaaa/mm/dd acceptées.
[perso/Denise/oms.git] / gestion_donnees.py
index 5876c5abac245e32b9a99b0103fdefd17d956523..137849d7e6701725c94efedcbcf8ecb57cc22345 100644 (file)
@@ -46,7 +46,7 @@ def convertit_jours_vers_python(chaine,liste_err):
                 chainenombre = ""
             elif lettre != ' ':
                 # autre caractère : bizarre ?
-                warning("convertit_jour_vers_python : caractère invalide : "+lettre,liste_err)
+                warning("problème à la conversion de "+chaine+". Caractère invalide : "+lettre,liste_err)
     # à la fin s'il reste qqch on le garde dans les jours
     if chainenombre != "":
         agejours += int(chainenombre)
@@ -130,8 +130,12 @@ def convertit_donnee_vers_python(chaine,typedonnee,liste_err):
 def convertit_date_vers_python(chaine,liste_err):
     """ prend une chaine comme renvoyée par un champ de formulaire date
     aaaa-mm-jj et en fait une date python
-    renvoie "" si ne marche pas"""
-    liste = chaine.split("-")
+    renvoie "" si ne marche pas.
+    Si jamais la date est au format avec des / ça devrait passer aussi."""
+    if "/" in chaine:
+        liste = chaine.split("/")
+    else:
+        liste = chaine.split("-")
     if len(liste) != 3:
         warning("La date : "+chaine+" est invalide !",liste_err)
         return ""
@@ -150,8 +154,8 @@ def convertit_date_vers_texte(date):
     if date == "":
         return ""
     else:
-        return (str(date.year)+"-"+str(date.month)+"-"+str(date.day))
-     
+        #return (str(date.year)+"-"+str(date.month)+"-"+str(date.day))
+        return str(date)
 
 def delta_date(date1,datenaissance):
     """ renvoie le nombre de jours (entier) entre date1 et datenaissance format "datetime"
@@ -164,11 +168,12 @@ def delta_date(date1,datenaissance):
     return jours
 
 
+
 ################### On regroupe tout ce qui gère les données en une fonction
     
 def web_vers_python(data,liste_err, court=False):
     """ prend en argument le dictionnaire de requête et renvoie la config, et les
-    tableaux de donnée
+    tableaux de données
     court : si True est précisé, on ne met que le nom dans la config (enfant
     additionnel)"""
     
@@ -383,8 +388,8 @@ def gere_donnees(data,naissance,typedonnee,liste_err):
 
     i = 0
     # On va chercher si y'a des données à donnee_i
-    while typedonnee+"_"+str(i) in data.keys():
-        if data[typedonnee+"_"+str(i)] != "":
+    while "age_"+str(i) in data.keys():
+        if data.get(typedonnee+"_"+str(i), "") != "": # si la donne de ce type existe
             donnee = convertit_donnee_vers_python(data[typedonnee+"_"+str(i)],typedonnee,liste_err)
             age = data.get("age_"+str(i),"")
             if age !="":
@@ -417,6 +422,7 @@ def gere_donnees(data,naissance,typedonnee,liste_err):
 def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config):
     """ retourne le json à renvoyer"""
     gros_dico = copy.deepcopy(config)
+    gros_dico["version"] = CONFIG["version"]
     l_jours2 = [convertit_age_vers_texte(d) for d in l_jours]
     l_jourst2 = [convertit_age_vers_texte(d) for d in l_jourst]
     gros_dico["data_j"] = l_jours2
@@ -426,6 +432,13 @@ def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config):
     # gérer la date de naissance
     if gros_dico.get("naissance","") != "":
         gros_dico["naissance"] = convertit_date_vers_texte(gros_dico["naissance"])
+        # Calcul de toutes les dates de données
+        l_dates_poids = [convertit_date_vers_texte( config["naissance"] + datetime.timedelta(days=jours) ) for jours in l_jours]
+        l_dates_taille = [convertit_date_vers_texte( config["naissance"] + datetime.timedelta(days=jours) ) for jours in l_jourst]
+        gros_dico["data_dates_poids"]= l_dates_poids
+        gros_dico["data_dates_taille"] = l_dates_taille
+            
+        
     # gérer l'age maxi
     gros_dico["maxi"] = convertit_age_vers_texte(gros_dico["maxi"])
     # gérer les couleurs
@@ -438,11 +451,12 @@ def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config):
         
     return json.dumps(gros_dico, indent=2,ensure_ascii=False )
 
-def fusionne_donnees(listes_jours,listes_donnees):
+def fusionne_donnees(listes_jours,listes_donnees, listes_dates):
     """ prend en argument deux dicos de listes. Chaque liste de jours est associée à une liste 
     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"""
+    {"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
+    Le troisième paquet de listes (les dates) peut être vide ou bien simiaire : même clés."""
 
     def fini(lj):
         """ teste si les listes sont toutes vides """
@@ -468,11 +482,18 @@ def fusionne_donnees(listes_jours,listes_donnees):
         # On extrait les données dans les deux listes (jours et données)
         jour = listes_jours[typedonnee].pop(0)
         donnee = listes_donnees[typedonnee].pop(0)
+            
         if liste_f == [] or jour != liste_f[-1]["age"]: # Si le jour est un "nouveau" jour
             liste_f.append({"age":jour})
-        # On met à jour l'élément
+        # On met à jour l'élément (ou on l'ajoute)
         liste_f[-1][typedonnee] = donnee
         
+        # Si il y a une date associée, on la met !
+        if listes_dates[typedonnee] != []:
+            date = listes_dates[typedonnee].pop(0)
+            liste_f[-1]["date"] = convertit_date_vers_texte(date)
+
+        
     return liste_f
     
 
@@ -492,16 +513,20 @@ def fichier_json_vers_configdonnees(chaine,liste_err):
     
     listes_jours = {}
     listes_donnees = {}
+    listes_dates = {}
     for typed in CONFIG["liste_typedonnees"]:
         if typed == "poids": # pour la rétrocompatibilité            
             listes_jours[typed] = valform.get("data_j",[])
             listes_donnees[typed] = valform.get("data_p",[])
+            listes_dates[typed] = valform.get("data_dates_"+typed,[])
         else:
             listes_jours[typed] = valform.get("data_jours_"+typed,[])
             listes_donnees[typed] = valform.get("data_"+typed,[])
+            listes_dates[typed] = valform.get("data_dates_"+typed,[])
+            
     
     debug("Avant fusion : listes jours "+str(listes_jours),liste_err)
-    liste_donnees = fusionne_donnees(listes_jours,listes_donnees)
+    liste_donnees = fusionne_donnees(listes_jours,listes_donnees, listes_dates)
     debug("Fusion de listes ok. Liste moche : "+str(liste_donnees),liste_err)
     for i in range(len(liste_donnees)):
         for (cle,val) in liste_donnees[i].items():
@@ -520,6 +545,7 @@ def eclate_donnees_additionnelles(conf, ljours, ldonnees, symb, couleur):
     symb est le symbole choisi pour cette courbe additionnelle (déjà vérifié)
     On fabrique un joli dictionnaire typed -> (conf lj, ldonnee) avec le nom de l'enfant,
     et les données pour chaque typed"""
+    print("test conf avant "+str(ldonnees)+str(ljours))
     
     retour = {}
     conf["symbole"] = symb # On ajoute le symbole additionnel
@@ -527,4 +553,5 @@ def eclate_donnees_additionnelles(conf, ljours, ldonnees, symb, couleur):
     for typed in CONFIG["liste_typedonnees"]:
         retour[typed] = (conf, ljours[typed], ldonnees[typed])
         
+    print("test "+str(retour))
     return retour
\ No newline at end of file