]> 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"])
     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 = ""
     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"
         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
 
         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
 
 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:
     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:
         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 = ""
         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
         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)
 
         #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."""
     """ 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:
     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
 
         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"]):
     
     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
    
         sexe = "N"
     configuration["sexe"] = sexe
    
@@ -349,12 +354,25 @@ def gere_configuration(data,liste_err, court=False):
             nbextradata = 1
         configuration["non_sauve"]["nbextradata"] = nbextradata
         
             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_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"] = ""
         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"]:
         
         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)
         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), "")
             age=data.get("repere_age_"+str(i), "")
+            date=data.get("repere_date_"+str(i), "")
             trace=gere_checkbox(data.get("repere_trace_"+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
                 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   
             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)
     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)
                 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
         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)
                     # 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
                     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
     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
             
         gros_dico["data_dates_poids"]= l_dates_poids
         gros_dico["data_dates_taille"] = l_dates_taille