From: Denise sur ardoise Date: Tue, 19 Jul 2022 20:24:07 +0000 (+0200) Subject: Version 2.6 plus : pas mal de changements (voir changelog) X-Git-Url: https://git.immae.eu/?p=perso%2FDenise%2Foms.git;a=commitdiff_plain;h=7aac9b2adb63cf100afc6b97d263a53ef89b9c83 Version 2.6 plus : pas mal de changements (voir changelog) --- diff --git a/app.py b/app.py index 428416e..f60d3e2 100644 --- a/app.py +++ b/app.py @@ -71,6 +71,11 @@ def courbe_image(ext): # noter le nom de l'enfant pour l'export nomenfant = donnees.simplifie_nom(config['nom']) + # Les noms des autres enfants c'est sympa + nomsenfantsplus = "" + for dicoenfant in enfants_add: + nomsenfantsplus += "_"+donnees.simplifie_nom(dicoenfant["poids"][0]["nom"]) + existe_courbe = False # créer les figures try: @@ -101,7 +106,8 @@ def courbe_image(ext): if ext == "b64": reponse = { "result":result, "export_txt": texte, - "nomenfant": nomenfant} + "nomenfant": nomenfant, + "nomsenfantsplus": nomsenfantsplus} if result == "success": reponse["messages"] = liste_err[0]+liste_err[1] reponse["calculextra"] = liste_extracalculs @@ -132,9 +138,9 @@ def faq(): beta=initialise_mode_beta() table_faq = f.lire_fichier_csv_simple(f.fichier_FAQ) - l_categ,table_qr = f.extraire_tables_par_cat(table_faq) + l_categ, l_categsimple, table_qr = f.extraire_tables_par_cat(table_faq) - return flask.render_template("faq.html",lcateg=l_categ,tableqr=table_qr,err=[], beta=beta) + return flask.render_template("faq.html",lcateg=l_categ,lcategsimple= l_categsimple, tableqr=table_qr,err=[], beta=beta) @app.route("/changelog") def changelog(): diff --git a/configuration.py b/configuration.py index 4ad42e6..7b1d7c5 100644 --- a/configuration.py +++ b/configuration.py @@ -47,6 +47,7 @@ CONFIG["fichiersOMS"]["taille"] = { "z_mixte": "lhfa_mix_z_exp.txt", } +CONFIG["voyelles"] = ["a", "e", "i", "o", "u", "y"] # ajouter le chemin for typed in CONFIG["liste_typedonnees"]: diff --git a/data/FAQ_data.txt b/data/FAQ_data.txt index cbc3a56..605ca7f 100644 --- a/data/FAQ_data.txt +++ b/data/FAQ_data.txt @@ -12,12 +12,12 @@ Si vous manquez de lignes, vous pouvez cliquer sur ""Ajouter des lignes"" pour a "Utilisation - préférences du graphique","Pourquoi tracer des courbes vides ?","Cela peut servir à tracer une courbe de référence à imprimer pour tracer la courbe à la main. Cette option est désactivée par défaut." "Utilisation - préférences du graphique","C'est quoi la différence entre la courbe percentiles et moyenne/écarts-types ?","Ce sont deux manières de comparer son enfant à la « référence Â». Si vous ne savez pas la différence entre une moyenne et une médiane, retenez juste que ce sont des calculs un peu différents, mais cela ne change pas l'allure de la courbe, si votre enfant « suit Â» un couloir sur un type de courbe ce sera pareil sur l'autre. Vous pouvez au pire choisir celle que vous préférez. ;) -
Pour les curieuses et les curieux : +
Pour les curieuses et les curieux :

-Si la répartition des données est « bonne Â» (on parle de gaussienne entre matheuses et matheux), alors la moyenne correspond à la médiane, la moyenne + 1σ correspond environ au 84e percentile, la moyenne -1σ correspond au 16e percentile. Pour ces données, il semble que ce soit assez proche d'une gaussienne." +

Si la répartition des données est « bonne Â» (on parle de gaussienne entre matheuses et matheux), alors la moyenne correspond à la médiane, la moyenne + 1σ correspond environ au 84e percentile, la moyenne -1σ correspond au 16e percentile. Pour ces données, il semble que ce soit assez proche d'une gaussienne." "Utilisation - préférences du graphique","Que signifie même échelle d'âge sur tous les graphiques ?","Si, par exemple, vous avez des données de poids qui vont jusqu'à 2 ans et des données de taille qui vont jusqu'à 6 mois, alors chaque graphique (taille et poids) aura son échelle différente. Mais si vous cochez la case, alors tous seront sur une échelle similaire (c'est-à-dire jusqu'à 2 ans et un peu plus). Si vous saisissez un âge maximum du graphique, c'est cette limite maximum qui sera appliquée sur tous les graphiques." @@ -39,6 +39,7 @@ S'il y a plusieurs données, alors on cherche dans quel intervalle de courbes el "Utilisation - courbes multiples","C'est quoi les courbes multiples ?","Vous pouvez souhaiter tracer sur une même courbe de poids (par exemple) l'évolution du poids de deux (ou plus) enfants, du même âge ou d'âges différents. Pour cela, il faut avoir déjà sous forme de fichier les données des enfants additionnels. Seuls le nom de l'enfant et ses données sont extraites, les paramètres du graphiques seront ceux définis plus haut (donc pour l'enfant « principal Â»). C'est pourquoi vous pouvez choisir un symbole et une couleur pour chacun des graphiques additionnels. Par contre ces paramètres ne sont pas sauvegardés (seuls ceux de l'enfant « principal Â» le sont)." +"Utilisation - courbes multiples","C'est quoi l'alias ?","Vous avez enregistré un fichier de données d'un autre enfant, à son vrai nom, et vous voulez tracer des courbes multiples mais avec un surnom car vous avez l'intention de rendre cette courbe publique : vous pouvez mettre le surnom ici. Si vous laissez ce champ vide, le nom de l'enfant enregistré dans le fichier sera utilisé. Si vous n'avez pas très bien compris, essayez et vous verrez !" "Courbe","À quoi sert ce site ?","Il sert à tracer les courbes de croissance des bébés et jeunes enfants en fonction de leur âge, comme sur le carnet de santé, et la compare aux courbes de références de l'Organisation Mondiale de la Santé. Ces courbes sont a priori prévues pour des enfants nés à terme en bonne santé. Pour un enfant prématuré ou à situation particulière, référez vous à un.e professionnel.le de santé." @@ -70,6 +71,8 @@ Vous trouverez ici et flask, un petit framework de développement web en python. Il y a une petite dose de JavaScript pour assaisonner le tout, et voilà." +"Technique","Quand je clique sur ""Je veux les courbes"" je reste sur le message ""Calcul en cours"" mais rien ne se passe...","C'est un vilain bug, voir ci-dessous pour la marche à suivre !" + "Technique","J'ai trouvé un affreux bug !","N'hésitez pas à me contacter avec le plus de détails possibles à ce sujet. Par exemple quelles données, quelles manipulations vous ont amené.e à ce bug. Vous pouvez aussi préciser votre navigateur. Plus vous me fournissez d'informations, plus j'ai de chances de résoudre le bug !" "Technique","J'ai envie d'aider à trouver les bugs !","Il y a la version bêta du site ici. Si la bêta est en avance sur le site de production, c'est qu'il y a des choses à tester et des bugs à chasser (vérifier le changelog pour comparer les versions)." diff --git a/data/changelog_data.txt b/data/changelog_data.txt index 4fa79d6..229bdb2 100644 --- a/data/changelog_data.txt +++ b/data/changelog_data.txt @@ -1,9 +1,13 @@ -"Version 2.6","28/05/2022","

Des petites nouveautés :

+"Version 2.6","19/07/2022","

Des petites nouveautés :

" "Version 2.501","14/05/2022","

Petit bug mineur corrigé : si on met une donnée avec une date inférieure à la date de naissance, elle est ignorée et un petit message s'affiche.

" diff --git a/faq.py b/faq.py index 09cd9f3..45f28d6 100644 --- a/faq.py +++ b/faq.py @@ -8,7 +8,7 @@ chemin_data = "data/" fichier_FAQ = chemin_data+"FAQ_data.txt" fichier_changelog = chemin_data+"changelog_data.txt" - +from gestion_donnees import simplifie_nom def lire_fichier_csv_simple(fichier): @@ -31,9 +31,10 @@ def extraire_categories(table): return liste_cat def extraire_tables_par_cat(table): - """ construit deux tables : une de catégories, une de tables de (q,r) - categ[i] va correspondre à tableqr[i] en terme de catégorie""" + """ construit trois tables : une de catégories, une de tables de (q,r), une de catégories simplifées + categ[i] et categsimple[i] vont correspondre à tableqr[i] en terme de catégorie""" categ = extraire_categories(table) + categsimple = [ simplifie_nom(cat) for cat in categ ] tableqr = [ [] for i in range(len(categ)) ] for ligne in table: @@ -45,4 +46,4 @@ def extraire_tables_par_cat(table): except: print("Impossible de lire la ligne : "+str(ligne)) - return (categ,tableqr) + return (categ, categsimple, tableqr) diff --git a/gestion_donnees.py b/gestion_donnees.py index eab75e9..b508706 100644 --- a/gestion_donnees.py +++ b/gestion_donnees.py @@ -90,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: @@ -141,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 @@ -356,7 +358,7 @@ def gere_configuration(data,liste_err, court=False): configuration["non_sauve"]["calculextradata_type"] = data.get("calculextradata_type","") age = convertit_jours_vers_python(data.get("calculextradata_age","0j"),liste_err) - date = convertit_date_vers_python(data.get("calculextradata_date", ""), [[],[]]) + 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 @@ -437,7 +439,10 @@ def gere_donnees(data,naissance,typedonnee,liste_err): ## 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),"") - datep = convertit_date_vers_python(date,liste_err) + if date != "": + datep = convertit_date_vers_python(date,liste_err) + 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) @@ -490,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 diff --git a/static/requetes.js b/static/requetes.js index d374213..faa8706 100644 --- a/static/requetes.js +++ b/static/requetes.js @@ -21,6 +21,7 @@ function appelle_image() var liste_warnings = this.response.messages var texte = this.response.export_txt; var nomenfant = this.response.nomenfant ; + var nomsenfantsplus = this.response.nomsenfantsplus ; var calculextra = this.response.calculextra ; // on affiche l'export des données @@ -41,7 +42,7 @@ function appelle_image() document.getElementById('courbe_poids').src = 'data:image/png;base64,'+(image_poids); document.getElementById('courbe_poids').alt = 'Courbe de poids de '+nomenfant ; boutondl = document.getElementById("courbe_dl_poids") ; - boutondl.setAttribute('onclick',"download_file('courbe_poids_"+nomenfant+".png', 'image/png;base64','"+image_poids +"')") + boutondl.setAttribute('onclick',"download_file('courbe_poids_"+nomenfant+nomsenfantsplus+".png', 'image/png;base64','"+image_poids +"')") } else { document.getElementById('section_courbe_poids').style.display = "none" ; diff --git a/templates/contact.html b/templates/contact.html index 6da2e96..0ed2f1c 100644 --- a/templates/contact.html +++ b/templates/contact.html @@ -8,7 +8,7 @@
  • immae pour l'hébergement et l'aide technique,
  • cerise pour le coup de peinture sur la façade,
  • arcanmster pour le côté "je tape partout pour voir si ça casse",
  • -
  • les bêta-testeuses enthousiastes du forum LLL, entre autres MmeMarguerite, Maman-chat, bloom et Nerialka
  • +
  • les bêta-testeuses enthousiastes du forum LLL, entre autres MmeMarguerite, Maman-chat, bloom, Nerialka, ...
  • {% endblock %} diff --git a/templates/faq.html b/templates/faq.html index 162f68d..b382dd4 100644 --- a/templates/faq.html +++ b/templates/faq.html @@ -3,8 +3,8 @@

    Foire Aux Questions (FAQ)

    -
    @@ -13,7 +13,7 @@ {% for i in range(lcateg|length) %} {% set qr = tableqr[i] %} -

    {{ lcateg[i] }}

    +

    {{ lcateg[i] }}

    Plus d'enfants O_o

    + diff --git a/trace_courbe.py b/trace_courbe.py index e29359f..570a08c 100644 --- a/trace_courbe.py +++ b/trace_courbe.py @@ -3,7 +3,7 @@ from configuration import CONFIG import gestionOMS as oms import gestion_unites as u -from gestion_donnees import calcule_max_graphique, convertit_jours_vers_python +from gestion_donnees import calcule_max_graphique, convertit_jours_vers_python, simplifie_nom from gestion_erreurs import debug, erreur, warning from calculs_extrapole import calcule_donnee_extrapolee, calcule_age_extrapole, interpole_lineaire, interpole_lineaire_ordonnee, formate_resultat_donnee, formate_resultat_age, formate_interpole, formate_extrapole import datetime @@ -174,6 +174,8 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_extracalculs, liste_err, e if lj != []: # pas la peine de tracer si y'a rien à tracer # Ajouter le nom de cet enfant-là listenoms.append(conf_add["nom"]) + # Le mot "courbe" doit être au pluriel du coup ! + titre = titre.replace("Courbe ", "Courbes ") lj_conv = u.convertit_tableau(lj,unite,liste_err) debug("Tracé de la courbe additionnelle de "+conf_add["nom"]+" config : "+str(conf_add), liste_err) ax.plot(lj_conv, ld, label=conf_add["nom"], color=conf_add["couleurcourbe"],marker=conf_add["symbole"]) @@ -182,9 +184,22 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_extracalculs, liste_err, e warning("Attention, tous les enfants n'ont pas le même sexe. La courbe de référence est celle de "+conf["nom"]+" et ne sera pas forcément pertinente pour les autres. Vous pouvez éventuellement essayer la courbe neutre. Remarque : cette alerte s'affichera quand même.", liste_err) - # Si y'a un nom on met "courbe de machin" - if listenoms != []: - titre += " de " +", ".join(listenoms) + # Si y'a un nom on met "courbe de machin, de bidule, d'alala, de truc" + for i in range(len(listenoms)): + # Mot de liaison : , ou et ? + if i>0 and i!=len(listenoms)-1: + titre += ", " + elif i>0 and i == len(listenoms) -1: + titre+= " et " + else: + titre += " " + # Est-ce que la première lettre est une voyelle ? + lettre = simplifie_nom(listenoms[i]).lower()[0] + if lettre in CONFIG["voyelles"]: + titre += "d'" + else: + titre += "de " + titre += listenoms[i] if prema>0: titre+= ", préma de "+conf["prematurite"]