Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Déclaration et affichage de la durée d'un service (en nombre d'heures par semaines) #115

Merged
merged 23 commits into from
Dec 17, 2024

Conversation

jbuget
Copy link
Contributor

@jbuget jbuget commented Dec 6, 2024

ℹ️ PR re-créée à partir de #23

🍣 Problème

En tant que Éditeur d’un Service pour ma Structure, je souhaite indiquer, pour le-dit service, le temps passé (en nombre d'heures par semaine et en nombre de semaines) par le Bénéficiaire afin d’aider à l’orientation d’un service par les Accompagnateurs tout en satisfaisant aux obligations légales à venir (loi Travail 2025).

L'information doit apparaître dans la fiche service.

🦄 Solution

Ajouter 1 section ("Durée de la prestation") avec 2 champs dans le formulaire d'édition d'une structure :

  • 1 champ numérique pour indiquer le volume horaire hebdomadaire
  • 1 champ numérique pour préciser le nombre de semaines
  • 1 label intelligent qui calcule et indique le volume horaire total

Règles de gestion :

  • si un nombre est saisi (heures, ou semaines), ce doit être un entier positif supérieur ou égal à 1
  • sur la fiche service, on affiche le bloc "durée de la prestation" uniquement si les 2 valeurs ont été préalablement correctement saisies

✅ Pour tester

1/ Consultation

En tant qu'Utilisateur (connecté ou visiteur, Gestionnaire ou pas)

Quand j'accède à une fiche Service avec les 2 champs de Temps passé rempli
Alors je vois le bloc "Durée de la prestation"
Ainsi que l'information de volume horaire total

Quand j'accède à une fiche Service avec l'un, l'autre ou les 2 champs non saisi(s)
Alors je ne vois pas le bloc "Durée de la prestation"

2/ Edition
En tant que Gestionnaire de Structure connecté
Quand j'édite une Fiche service
Alors je vois une section "Durée de la prestation"
Et je peux renseigner le Volume horaire hebdomadaire
Ainsi que le Nombre de semaine
Et je suis indiqué en temps réel du volume horaire total (et sa répartition) de la prestation

3/ Gestion des erreurs

  • Les erreurs de saisie (texte plutôt qu'entier positif > 1) sont indiqués lors de la soumission du formulaire, de même que pour tous les autres champs-info
  • Il n'y a pas de modification des input à la volée
  • En cas de saisie d'un texte plutôt qu'un champs, dans le label "durée totale", on affiche bien "0" plutôt que "NaN"
  • Il doit être possible de supprimer une valeur anciennement saisie pour indiquer une valeur None / Null
Capture d’écran 2024-12-11 à 10 25 00 Capture d’écran 2024-12-11 à 10 26 08 Capture d’écran 2024-12-11 à 10 24 40

🍀 Misc

Les 2 champs ajoutés sont Service.durationWeeklyHours et Service.durationWeeks.

En base, ces champs sont tous deux de type integer nullable.

Il a fallu faire attention à bien les remonter dans les Modèles de service.

Côté front-end, c'était un peu plus compliqué que prévu. Étrangement, il n'y a pas grand chose côté <BasicInputField/> pour gérer les numériques. La raison, c'est que HTML prévoit que pour un champ <input type="number">, si la valeur saisie n'est pas un nombre valide, alors event.target.value vaut undefined, ce qui complique très fortement la gestion des erreurs.

Heureusement, dans le code, j'ai pu m'appuyer sur une fonctionnalité pre / post-processing des données lors de la validation des schémas de données pour m'en sortir.

En particulier, un point de difficulté a été d'envoyer la valeur null à l'API pour bien indiquer la volonté de "ne pas/plus renseigné" de valeur pour l'un ou l'autre champs. Sans la propriété service.schema.post, la requête PATCH qui partait n'embarquait pas le champs, et donc la valeur n'était pas mise à jour dans le système.

Dernière remarque, pour la partie métier de la consultation : en m'appuyant sur l'existant, j'en ai déduis que si une information est manquante, plutôt qu'afficher un label "non renseigné", on cache le bloc associé. Ainsi, si un service ne possède pas les 2 informations de durée, alors on n'affiche pas le bloc durée.

👓 Revue de code

On peut y aller commit-par-commit 🧘‍♂️.

@jbuget jbuget force-pushed the feat/temps-passe-service branch 4 times, most recently from ee6c497 to b151c10 Compare December 11, 2024 09:26
@jbuget
Copy link
Contributor Author

jbuget commented Dec 11, 2024

@jbuget
Copy link
Contributor Author

jbuget commented Dec 11, 2024

Copy link
Contributor

@ggounot ggounot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Beau travail ! Cela fonctionne bien. Juste quelques remarques sur le code.

Ça me frustre toujours un peu quand un composant de saisie de nombre renvoie du texte, et qu'on doive gérer les cas undefined, null et "" comme valides dans une fonction isInteger(). Mais je sais aussi qu'il est toujours compliqué de gérer les entrées de nombres. J'imagine que le système que tu as implémenté est le meilleur que tu aies trouvé. On pourra en discuter à l'occasion.

back/dora/data_inclusion/mappings.py Show resolved Hide resolved
back/dora/services/models.py Outdated Show resolved Hide resolved
back/dora/services/serializers.py Outdated Show resolved Hide resolved
back/dora/support/serializers.py Outdated Show resolved Hide resolved
back/dora/support/serializers.py Outdated Show resolved Hide resolved
front/src/lib/validation/schema-utils.ts Outdated Show resolved Hide resolved
@jbuget jbuget added the feature New feature or request label Dec 12, 2024
@jbuget jbuget changed the title Feat/temps passe service Déclaration et affichage de la durée d'un service (en nombre d'heures par semaines) Dec 12, 2024
@jbuget jbuget changed the title Déclaration et affichage de la durée d'un service (en nombre d'heures par semaines) feat: Déclaration et affichage de la durée d'un service (en nombre d'heures par semaines) Dec 13, 2024
Pour cela, on ajoute 2 informations :
* le temps hebdomaire nécessaire à la réalisation du service
* le nombre de semaines sur lequel s'étend le service
…orrectement compte des champs de type Number
…e, si et seulement si les champts "volume horaire hebdomadaire" et "nombre de semaine(s)" sont renseignés
@jbuget jbuget force-pushed the feat/temps-passe-service branch from d76f31c to af48028 Compare December 17, 2024 12:00
@jbuget jbuget requested a review from ggounot December 17, 2024 13:45
@jbuget jbuget self-assigned this Dec 17, 2024
ggounot
ggounot previously approved these changes Dec 17, 2024
@jbuget jbuget force-pushed the feat/temps-passe-service branch from b2b98bf to ceec899 Compare December 17, 2024 14:03
@jbuget jbuget requested a review from ggounot December 17, 2024 14:08
@jbuget jbuget merged commit 081d3a6 into main Dec 17, 2024
7 checks passed
@jbuget jbuget deleted the feat/temps-passe-service branch December 17, 2024 14:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants