sauvegarde des dates + version de l'app dans le fichier de sauvegarde
[perso/Denise/oms.git] / gestion_donnees.py
index 5876c5abac245e32b9a99b0103fdefd17d956523..372d6aa4b8dcdce9e9aa48b70868b0f200c4ab71 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)
@@ -150,8 +150,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,6 +164,7 @@ 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):
@@ -417,6 +418,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 +428,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 +447,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 +478,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 +509,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():