]> git.immae.eu Git - perso/Denise/oms.git/blobdiff - gestion_donnees.py
petites amélios, textes explicatifs, liens corrigés
[perso/Denise/oms.git] / gestion_donnees.py
index c24192ef1caeb01698102fbaa51f68e626ff4253..b508706334e3a7c7797293368b0bf3dfcdd77232 100644 (file)
@@ -63,6 +63,7 @@ def convertit_age_vers_texte(nombre):
     annees = int(nombre / CONFIG["jours_dans_annee"])
     restant = nombre - annees*CONFIG["jours_dans_annee"]
     mois = int(restant/CONFIG["jours_dans_mois"])
+    #print("mois : ",mois, ", restant : ",nombre - mois*CONFIG["jours_dans_mois"])
     jours= round(nombre - mois*CONFIG["jours_dans_mois"] - annees*CONFIG["jours_dans_annee"])
     
     chaine = ""
@@ -70,7 +71,7 @@ def convertit_age_vers_texte(nombre):
         chaine += str(annees)+"a"
     if mois >0:
         chaine += str(mois)+"m"
-    if jours>0 or  nombre ==0: # si c'est la naissance, faut beien écrire 0j quand même
+    if jours>0 or  nombre ==0: # si c'est la naissance, faut bien écrire 0j quand même
         chaine += str(jours)+"j"
     return chaine
 
@@ -89,7 +90,7 @@ def calcule_max_graphique(l_jours):
 
 def simplifie_nom(chaine):
     """ simplifie le nom chaine afin d'en faire une extension
-    pour le nom du fichier. Met tout en minuscules et vire les caractères spéciaux
+    pour le nom du fichier. Vire les caractères spéciaux
     et max 15 caractères"""
     chaine2 = ""
     for l in chaine:
@@ -140,12 +141,14 @@ def convertit_date_vers_python(chaine,liste_err):
         warning("La date : "+chaine+" est invalide !",liste_err)
         return ""
     else:
+        print(liste_err)
+
         debug("Conversion de la date "+chaine+". Découpage : "+str(liste),liste_err)
         try:
             date = datetime.date(int(liste[0]),int(liste[1]),int(liste[2]))
         except:
             date = ""
-            warning("Impossible de lire la date "+chaine+". Format accepté : aaaa-mm-jj",liste_err)
+            warning("Impossible de lire la date "+chaine+". Format accepté : aaaa-mm-jj ou aaaa/mm/jj",liste_err)
         return date
   
 # python -> json
@@ -157,13 +160,15 @@ def convertit_date_vers_texte(date):
         #return (str(date.year)+"-"+str(date.month)+"-"+str(date.day))
         return str(date)
 
-def delta_date(date1,datenaissance):
+def delta_date(date1,datenaissance, liste_err):
     """ renvoie le nombre de jours (entier) entre date1 et datenaissance format "datetime"
     datenaissance est supposée antérieure. Erreur sinon."""
+    if type(date1) != datetime.date or type(datenaissance) != datetime.date:
+        return -1
     d = date1 - datenaissance
     jours = d.days
     if jours<0:
-        warning("La différence entre les dates est négative... :/")
+        warning("Une des dates saisies ("+str(date1)+") est inférieure à la date de naissance (la donnée est donc ignorée)", liste_err)
         return -1
     return jours
 
@@ -239,7 +244,7 @@ def gere_configuration(data,liste_err, court=False):
     
     sexe = data.get("sexe","")
     if not (sexe in ["F","M","N"]):
-        warning("Le sexe de l'enfant est invalide ! "+sexe,liste_err)
+        warning("Le sexe de l'enfant est invalide. "+sexe,liste_err)
         sexe = "N"
     configuration["sexe"] = sexe
    
@@ -349,12 +354,25 @@ def gere_configuration(data,liste_err, court=False):
             nbextradata = 1
         configuration["non_sauve"]["nbextradata"] = nbextradata
         
-        if data.get("calculextradata_type","") in CONFIG["liste_typedonnees"]:
+        if data.get("calculextradata_type","") in CONFIG["liste_typedonnees"]: # Si on a choisi un type de données à calculer
+            
             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)
+            age = convertit_jours_vers_python(data.get("calculextradata_age","0j"),liste_err)
+            date = convertit_date_vers_python(data.get("calculextradata_date", ""), liste_err)
+            agecalcule = delta_date(date, configuration["naissance"], liste_err)
+            if configuration["naissance"] != "" and agecalcule != -1: # On garde plutôt la date
+                configuration["non_sauve"]["calculextradata_age"] = agecalcule
+                configuration["non_sauve"]["calculextradata_date"] = date
+            else: # On garde l'âge
+                configuration["non_sauve"]["calculextradata_age"] = age
+                if type(configuration["naissance"]) == datetime.date:
+#                    print(configuration["naissance"], type(configuration["naissance"]))
+                    configuration["non_sauve"]["calculextradata_date"] = configuration["naissance"] + datetime.timedelta(days=round(age))
+                else:
+                    configuration["non_sauve"]["calculextradata_date"] = None
         else:
             configuration["non_sauve"]["calculextradata_type"] = ""
-            # On ne met rien dans l'âge, pas la peine
+            # On ne met rien dans les autres données, pas la peine
         
         ctyped = data.get("calculextratemps_type","")
         if ctyped in CONFIG["liste_typedonnees"]:
@@ -373,12 +391,26 @@ def gere_configuration(data,liste_err, court=False):
         i=0
         while "repere_texte_"+str(i) in data: # Tant qu'il y a des trucs définis
             debug("Repère trouvé", liste_err)
+            jegardecerepere = False # On va passer à True uniquementsi tout va bien
+
             age=data.get("repere_age_"+str(i), "")
+            date=data.get("repere_date_"+str(i), "")
             trace=gere_checkbox(data.get("repere_trace_"+str(i), ""))
-            if age !="":
-                agec=convertit_jours_vers_python(age, liste_err)
+            affichedate=gere_checkbox(data.get("repere_affichedate_"+str(i), ""))
+
+            if date!="" and configuration['naissance'] != "": # Si on a saisi une date (et qu'il y a la date de naissance)
+                datepython = convertit_date_vers_python(date,liste_err)
+                if datepython !="": # Si la conversion s'est bien passée
+                    nbjours = delta_date(datepython, configuration['naissance'], liste_err)
+                    if nbjours != -1: # Si tout va bien jusque là
+                        jegardecerepere=True
+            elif age !="":
+                nbjours=convertit_jours_vers_python(age, liste_err)
+                jegardecerepere=True
+
+            if jegardecerepere:
                 texte = data.get("repere_texte_"+str(i), "") # Même si le texte est vide, osef
-                configuration["liste_reperes"].append({"typed": "age", "donnee": agec, "texte": texte, "trace": trace})
+                configuration["liste_reperes"].append({"typed": "age", "donnee": nbjours, "date": date, "texte": texte, "trace": trace, "affichedate":affichedate})
             i+=1
     
     return configuration   
@@ -404,19 +436,25 @@ def gere_donnees(data,naissance,typedonnee,liste_err):
     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 !="":
-                age = convertit_jours_vers_python(age,liste_err)
-                liste_donnees.append((age,donnee))
-            else: 
-                date = data.get("date_"+str(i),"")
+
+            ## Si une date est saisie, on la prend en priorité car c'est des entiers et les entiers c'est BIEN
+            date = data.get("date_"+str(i),"")
+            if date != "":
                 datep = convertit_date_vers_python(date,liste_err)
-                # on vérifie la date
-                if naissance == "":
-                    warning("La date de naissance n'a pas été précisée. Du coup on ne peut pas calculer l'âge de l'enfant le "+date,liste_err)
-                elif datep != "":  # la date est valide et on a une date de naissance
-                    age = delta_date(datep,naissance)
-                    liste_donnees.append((age,donnee))
+            else:
+                datep = ""
+            
+            if naissance != "" and datep != "": # On ne peut pas calculer l'âge si on n'a pas ces deux données      
+                age = delta_date(datep,naissance, liste_err)
+                if age != -1: # -1 signifie une erreur donc on ne garde pas la donnée
+                        liste_donnees.append((age,donnee))
+            else: # Sinon, on regarde si on a saisi l'âge
+                age = data.get("age_"+str(i),"")
+                if age == "":
+                    warning("gere_donnees : ni l'âge ni la date ne sont saisies... donnée ignorée", liste_err)
+                else:
+                    age = convertit_jours_vers_python(age,liste_err)
+                    liste_donnees.append((age,donnee))                    
         i+=1
         
     # Trier la liste
@@ -457,6 +495,11 @@ def gere_enfants_additionnels(data, files, liste_err):
                     # Le symbole et la couleur
                     symb2 = gere_symbole(data.get("symbole_donnees_"+str(i)))
                     coul2 = rgb_vers_tuple(data.get("couleur_donnees_"+str(i),""),CONFIG["couleurs"]["cadretxt"],liste_err)
+                    alias = data.get("alias_"+str(i), "")
+                    if alias != "": # Si l'alias n'est pas vide, il remplace le prénom
+                        print(conf2)
+                        conf2["nom"] = alias
+                    
                     enfant2 = eclate_donnees_additionnelles(conf2, ljours2, listes_donnees2, symb2, coul2)
                     enfants_add.append(enfant2)
         i+=1
@@ -484,8 +527,8 @@ def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config):
     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]
+        l_dates_poids = [convertit_date_vers_texte( config["naissance"] + datetime.timedelta(days=round(jours)) ) for jours in l_jours]
+        l_dates_taille = [convertit_date_vers_texte( config["naissance"] + datetime.timedelta(days=round(jours)) ) for jours in l_jourst]
         gros_dico["data_dates_poids"]= l_dates_poids
         gros_dico["data_dates_taille"] = l_dates_taille