Développement #62801
Garde partagée, permettre de configurer les règles de garde pendant les vacances
0%
Description
Tous les jugements de garde alternée spécifient une règle de garde pendant les vacances, par exemple http://www.cdad-yvelines.justice.fr/wp-content/uploads/2019/10/2-MODELE-CONVENTION-PARENTALE-GARDE-ALTERNEE.pdf (page 2).
Les dates des vacances scolaires changent tous les ans et sont connues environ un an à l'avance (avec le twist qu'elles peuvent changer en cours d'année).
On ne peut pas raisonnablement demander aux agents d'aller ressaisir ça tous les ans sur tous les agendas. Il faut donc un objet qui contienne les dates des vacances connues jusqu'à présent, auquel on attache des règles de garde.
La difficulté ici c'est de savoir comment récupérer les vacances.
Les ICS officiels sont dispo ici : https://www.data.gouv.fr/en/datasets/le-calendrier-scolaire/
À noter :- La seule chose qui caractérise, disons, les vacances de la Toussaint, comme les vacances de la Toussaint est leur nom, il n'y a pas d'identifiant.
- Il y a des choses dont on ne veut pas comme « Vacances d'Été (Enseignants) ».
- Un feature flag fait apparaître « Configurer les vacances scolaires » dans le menu kebab de l'accueil
- Sur cette page on peut importer un ICS
- L'import parse les évènements, les dépuplique suivant leur nom
- Page intermédiaire permettant de cocher les évènements à effectivement importer
- Après validation la page de configuration affiche les dates des vacances connues à partir de l'année en cours
- Chaque année il faut passer sur cette page réimporter le fichier
- Si un des libellés a changé, il y a une page intermédiaire de rattachement comme pour un changement de wf
- Si la date des vacances change ça se gère un peu pareil par réimport
Files
Related issues
Associated revisions
agendas: add shared custody holiday rules (#62801)
agendas: exceptional custody periods should override holiday rules (#62801)
agendas: add command to update shared custody holiday rules (#62801)
History
Updated by Valentin Deniaud over 2 years ago
Bon j'ai commencé à regarder et ça va faire beaucoup de code ad hoc bizarre (pour gérer les histoires liées à l'absence d'identifiant, à la mise à jour)...
Typiquement quand on a une URL officielle comme ça et des données un peu pourries on fait un connecteur, est-ce que ça ne pourrait pas être le cas ici ?
D'un côté il y aurait passerelle où on instancie le connecteur, avec l'URL copiée depuis data.gouv.fr mais on peut éventuellement mettre autre chose. On maintient un mapping explicite (nom, identifiant) : le jour où un nom change, hop commit pour ajouter un nouveau mapping (nouveau_nom, identifiant). Périodiquement on recharge le fichier et on ajoute/met à jour les nouvelles dates.
Côté chrono il n'y a quasiment plus rien à faire, on indique l'URL du connecteur, comme il garantit des identifiants stables on peut jouer l'ajout des nouvelles dates automatiquement.
Updated by Valentin Deniaud over 2 years ago
- Objet Holiday qui contient l'identifiant des vacances (« grandes-vacances », « noel ») et libellé correspondant
- Objet HolidayPeriod lié à un objet Holiday, indique les dates des vacances pour une année et contient juste une date de début et une date de fin
- Objet HolidayCustodyRules lié à (gardien, agenda, holiday) qui contient les règles de garde pendant ces vacances
Dans le formulaire de création d'un HolidayCustodyRules on a un select alimenté par les objets Holiday. À l'enregistrement, pour chaque dates connues (HolidayPeriod) on crée en base des objets SharedCustodyPeriod qui correspondent. À l'édition, on les vire et on les recrée. Enfin il y aura le cron qui viendra au moins une fois par an ajouter les nouvelles dates (on a déjà ça pour les jours fériés), ça sera facile de créer les nouvelles périodes qui vont bien.
Mais est-ce qu'on veut de ce modèle de données propre pour un truc aussi spécifique ?
Sur ce, encore un plan alternatif :- Traiter #52370 pour pouvoir synchroniser un ICS depuis un calendrier d'indispo
- Créer un calendrier d'indispo dont le slug serait « vacances »
- Synchroniser dedans le ICS de data.gouv.fr ou un ICS alternatif avec les vacances ou créer les vacances à la mano
- Avoir un écran où indiquer le slug du calendrier d'indipo contenant les vacances
Le seul truc spécifique Publik Famille garde partagée est le dernier point, et c'est flexible grâce à l'intermédiaire du calendrier d'indispo, en plus on peut visualiser facilement les dates.
Il faudrait sûrement aussi développer un truc générique « désactiver une exception » pour pallier aux vacances dont on ne veut pas comme noté dans la description.
Du modèle de données ci-dessus, on ne garderait que HolidayCustodyRules, cette fois-ci lié à (gardien, agenda, calendrier d'indipo) qui contient les règles de garde et le libellé des vacances.
Dans le formulaire de création d'un HolidayCustodyRules on a un select alimenté par les libellés dédupliqués des exceptions du calendrier d'indispo. À l'enregistrement, on récupère les exceptions correspondant au libellé et pour chaque exception on crée en base des objets SharedCustodyPeriod qui correspondent. À l'édition, on les vire et on les recrée. Enfin il y aura le cron qui viendra au moins une fois par an ajouter les nouvelles dates et on se sentira peut-être mal à l'aise de n'avoir que des libellés à se mettre sous la dent.
Mais en gros ça revient au même avec d'un côté trucs spécifiques et liens sur foreign keys et de l'autre trucs génériques et lien sur libellés genre « Vacances d'Été (Élèves) » (gloups, aller on pourra passer un coup de slugify dessus).
Updated by Valentin Deniaud over 2 years ago
- Related to Développement #63013: Connecteur vacances scolaires added
Updated by Valentin Deniaud over 2 years ago
- File 0003-agendas-exceptional-custody-periods-should-override-.patch 0003-agendas-exceptional-custody-periods-should-override-.patch added
- File 0001-agendas-add-time-period-exception-groups-62801.patch 0001-agendas-add-time-period-exception-groups-62801.patch added
- File 0002-agendas-add-shared-custody-holiday-rules-62801.patch 0002-agendas-add-shared-custody-holiday-rules-62801.patch added
- File 0004-agendas-add-command-to-update-shared-custody-holiday.patch 0004-agendas-add-command-to-update-shared-custody-holiday.patch added
- Status changed from Nouveau to Solution proposée
- Patch proposed changed from No to Yes
- Instancier un connecteur « Vacances scolaires » dans passerelle
- Créer un calendrier d'indispo qui doit avoir pour slug « chrono-holidays »¹
- L'alimenter par l'endpoint /holidays.ics du connecteur
- Ça débloque la section « Règles pendant les vacances » d'un agenda de garde
- On y trouve un formulaire avec un select alimenté depuis les vacances contenues dans la calendrier d'indispo
¹ Ça serait bien de trouver mieux que ce slug imposé, je n'avais pas trop d'inspiration pour faire autrement et c'était la solution la plus simple pour avancer.
0001 : on crée des groupes d'exception automatiquement depuis la catégorie liée au vevent d'un ICS. Le truc un peu bancal c'est que la catégorie est utilisée pour spécifier un slug, il manque donc le libellé : on prend donc celui du premier vevent en supposant qu'ils s'appellent tous pareil.
0002 : tout ce qu'il faut pour ajouter des règles spécifiques aux vacances.
0003 : il faut toujours qu'on puisse ajouter des périodes de garde exceptionnelles et qu'elles s'appliquent par dessus les règles des vacances.
0004 : la mise à jour pour prendre en compte les éventuelles nouvelles dates.
Updated by Lauréline Guérin over 2 years ago
- File FireShot Capture 015 - Agendas - Custody agenda of Papa and Maman - chrono.dev.publik.love.png FireShot Capture 015 - Agendas - Custody agenda of Papa and Maman - chrono.dev.publik.love.png added
- File Capture d’écran de 2022-03-31 09-19-58.png Capture d’écran de 2022-03-31 09-19-58.png added
0002:
if periodicity in ('first-half', 'second-half'): qs = qs.filter( periodicity__in=(periodicity, '', 'first-and-third-quarters', 'second-and-fourth-quarters') ) elif periodicity in ('first-and-third-quarters', 'second-and-fourth-quarters'): qs = qs.filter(periodicity__in=(periodicity, '', 'first-half', 'second-half'))
Ca revient pas à exclure l'autre valeur ?
if periodicity == 'first-half': qs = qs.exclude(periodicity='second-half') # etc
ok ça fait 4 if à écrire, mais c'est peut-être un peu plus facile à lire ? :)
(ou alors juste ajouter un commentaire)
Pour le form d'ajout de règles pour les vacances, ça serait pratique de pouvoir dire "toutes les vacances" et que ça crée automatiquement une règle par vacances, plutôt que de devoir écrire la même règle 5 fois. (ça peut être dans un autre ticket)
Je testais un peu l'ajout de règles de vacances et leur affichage sur la vue mensuelle. (cf screenshot)
J'ai un soucis sur l'affichage du mois de septembre, on y voit août et septembre. (cf screenshot)
note: c'est bizarre le changement de garde le dimanche, c'est la règle qu'on doit suivre ? Peut-être que ça pourrait se paramétrer ? (ça peut être dans un autre ticket)
note 2: sur la vue mensuelle du calendrier de garde, faire apparaître les vacances scolaires pour aider la lecture ? (ça peut être dans un autre ticket)
Updated by Valentin Deniaud over 2 years ago
Lauréline Guerin a écrit :
ok ça fait 4 if à écrire, mais c'est peut-être un peu plus facile à lire ? :)
Ouep totalement, branche à jour avec ça.
Pour le form d'ajout de règles pour les vacances, ça serait pratique de pouvoir dire "toutes les vacances" et que ça crée automatiquement une règle par vacances, plutôt que de devoir écrire la même règle 5 fois. (ça peut être dans un autre ticket)
On garde l'idée sous le coude et on attend de voir ce qu'en dit Stéphane : dans la grande majorité des cas il n'y aura que les grandes vacances + Noël à configurer, et l'objectif à terme est de contrôler tout ça par API.
Je testais un peu l'ajout de règles de vacances et leur affichage sur la vue mensuelle. (cf screenshot)
J'ai un soucis sur l'affichage du mois de septembre, on y voit août et septembre. (cf screenshot)
Yup je m'en étais aperçu pareil en testant, ça a été corrigé par #63328, j'ai rebasé la branche.
note: c'est bizarre le changement de garde le dimanche, c'est la règle qu'on doit suivre ? Peut-être que ça pourrait se paramétrer ? (ça peut être dans un autre ticket)
Oui je pense aussi que ça devra se paramétrer à terme, pour le moment je me base sur ce que dit le pdf « la deuxième moitié commence le samedi à 14h » et comme on a pas encore de notion de moitié j'ai décidé d'inclure tout le samedi.
À ce propos le calcul des quinzaines pour les vacances d'été est un enfer dès lors qu'elles ne commencent pas le samedi, on trouve mille sujets de gens perdus sur les forums et personne ne s'organise pareil. Difficile d'avancer plus loin sans retour métier, mais il faut s'attendre à devoir revoir ça.
note 2: sur la vue mensuelle du calendrier de garde, faire apparaître les vacances scolaires pour aider la lecture ? (ça peut être dans un autre ticket)
Bonne idée, faisons ça dans un autre ticket !
Updated by Lauréline Guérin over 2 years ago
- Status changed from Solution proposée to Solution validée
Updated by Valentin Deniaud over 2 years ago
- Status changed from Solution validée to Résolu (à déployer)
commit 41e9180ba83f4c50411e01f62038f43ab5c8d9a1 Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Tue Mar 29 16:28:39 2022 +0200 agendas: add command to update shared custody holiday rules (#62801) commit 403e4cd8fbb76fa9b538fb67c7b3ddbef3cbfe43 Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Thu Mar 24 17:04:53 2022 +0100 agendas: exceptional custody periods should override holiday rules (#62801) commit 3ca5b784be01a2d49724a33631962706173f3906 Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Thu Mar 24 17:05:17 2022 +0100 agendas: add shared custody holiday rules (#62801) commit bbd22d0597bb3a2848395ef0d398891d94a2ffd0 Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Wed Mar 23 16:46:56 2022 +0100 agendas: add time period exception groups (#62801)
Updated by Transition automatique over 2 years ago
- Status changed from Résolu (à déployer) to Solution déployée
agendas: add time period exception groups (#62801)