X-Git-Url: https://git.immae.eu/?p=perso%2FDenise%2Foms.git;a=blobdiff_plain;f=gestion_donnees.py;h=b508706334e3a7c7797293368b0bf3dfcdd77232;hp=c24192ef1caeb01698102fbaa51f68e626ff4253;hb=bba98b24fa46099da0cec2b51fa3e0e57434dac9;hpb=e4ec2d3d510d6138430c48d5dc699c10ff8dc463 diff --git a/gestion_donnees.py b/gestion_donnees.py index c24192e..b508706 100644 --- a/gestion_donnees.py +++ b/gestion_donnees.py @@ -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