Development #50561
Évènements récurrents : permettre les exceptions
0%
Description
Surtout pour les vacances et les jours fériés, pour les exceptions ponctuelles je pense qu'on peut se contenter d'aller annuler l'évènement en question.
Fichiers
Demandes liées
Révisions associées
agendas: allow exceptions to recurring events (#50561)
api: prefetch exceptions for recurring events (#50561)
agendas: update recurrences asynchronously (#50561)
Historique
Mis à jour par Valentin Deniaud il y a environ 3 ans
- Fichier 0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch 0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch ajouté
- Fichier 0002-agendas-allow-exceptions-to-recurring-events-50561.patch 0002-agendas-allow-exceptions-to-recurring-events-50561.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Ça se fait plutôt bien en dotant les agendas évènements d'un Desk à usage interne, présent seulement pour contenir les exceptions.
Mis à jour par Lauréline Guérin il y a environ 3 ans
si tu fais du get_or_create pour le guichet unique, pourquoi faire une migration ?
j'ai créé le ticket #50672 - en fonction de la réponse apportée il peut être inutile dans manager_events_agenda_settings.html de proposer l'édition ou la suppression d'une exception (elles seront toutes read_only)
Mis à jour par Lauréline Guérin il y a environ 3 ans
Quel impact si on configure un event récurrent (disons tous les lundi) avec une date de fin de récurrence (les events sont créés en DB); puis on ajoute des exceptions. Que se passe-t-il pour les events déjà en DB, si certains sont impactés par une des exceptions ajoutées ?
Mis à jour par Lauréline Guérin il y a environ 3 ans
note: tu as géré l'import/export de ce guichet unique et de ses exceptions/sources/unavaibility ?
actuellement (main) on n'importe les desks que si kind == meetings
Mis à jour par Valentin Deniaud il y a environ 3 ans
- Statut changé de Solution proposée à En cours
Lauréline Guerin a écrit :
si tu fais du get_or_create pour le guichet unique, pourquoi faire une migration ?
J'aurais dû préciser que ce patch est encore WIP, je l'ai posé pour avoir des retours sur cette idée de guichet rattaché à un agenda évènement.
Notamment dans ce que tu fais remarquer mon cœur balance encore, j'aurais aimé créer ce guichet à l'ajout d'un agenda (+ migration pour l'existant), puis faire des get. Mais ça explose tous les tests parce que bien sûr les agendas créés à la main n'ont pas ce guichet... Je pense que je ne vais garder que les get_or_create, un peu moins propre mais vachement plus simple.
j'ai créé le ticket #50672 - en fonction de la réponse apportée il peut être inutile dans manager_events_agenda_settings.html de proposer l'édition ou la suppression d'une exception (elles seront toutes read_only)
Il reste quand même les exceptions ajoutées manuellement qui devront être éditables/supprimables, non ?
Quel impact si on configure un event récurrent (disons tous les lundi) avec une date de fin de récurrence (les events sont créés en DB); puis on ajoute des exceptions. Que se passe-t-il pour les events déjà en DB, si certains sont impactés par une des exceptions ajoutées ?
Pas encore géré mais c'est tout à fait nécessaire à faire dans ce ticket. J'imagine que dans ce cas là on va supprimer les évènements, avec une erreur si il y a des réservations. Et aussi dans l'autre sens, enlever l'exception doit créer l'évènement.
note: tu as géré l'import/export de ce guichet unique et de ses exceptions/sources/unavaibility ?
actuellement (main) on n'importe les desks que si kind == meetings
Pareil, todo, mais tu fais bien de me le faire remarquer :)
Mis à jour par Emmanuel Cazenave il y a environ 3 ans
- Statut changé de En cours à Solution proposée
Valentin Deniaud a écrit :
je pense qu'on peut se contenter d'aller annuler l'évènement en question.
Mais comment je fais ça pour un évènement sur lequel il n'y pas eu de réservation et donc pas persistant en DB et donc visible nulle part (si j'ai bien suivi) ?
Mis à jour par Lauréline Guérin il y a environ 3 ans
Valentin Deniaud a écrit :
Il reste quand même les exceptions ajoutées manuellement qui devront être éditables/supprimables, non ?
J'avais cru lire que tu ne gérais pas les exceptions manuelles ? Que tu disais qu'il suffisait d'annuler l'événement ?
Mis à jour par Valentin Deniaud il y a environ 3 ans
Emmanuel Cazenave a écrit :
Valentin Deniaud a écrit :
je pense qu'on peut se contenter d'aller annuler l'évènement en question.
Mais comment je fais ça pour un évènement sur lequel il n'y pas eu de réservation et donc pas persistant en DB et donc visible nulle part (si j'ai bien suivi) ?
Tu as fait tourner la branche ? Il n'y a aucune différence entre une récurrence persistante en DB ou pas, les deux sont bien entendu visibles, les deux sont annulables de manière transparente (et sous le capot si on va pour annuler un évènement qui n'était pas en DB, il va être créé automatiquement dans le processus, mais c'est un détail technique pas très gênant et tout à fait invisible).
Mis à jour par Valentin Deniaud il y a environ 3 ans
Lauréline Guerin a écrit :
Valentin Deniaud a écrit :
Il reste quand même les exceptions ajoutées manuellement qui devront être éditables/supprimables, non ?
J'avais cru lire que tu ne gérais pas les exceptions manuelles ? Que tu disais qu'il suffisait d'annuler l'événement ?
Pas vraiment, je disais que fonctionnellement ça aura plus de sens d'aller annuler la récurrence du 4 janvier plutôt que de mettre une exception le 4 janvier, par contre si il faut annuler toute une semaine c'est sûrement pratique de pouvoir poser une exception (et au niveau code c'est un bouton en plus, donc je me suis dit que ça mangeait pas de pain).
Ça m'irait de ne pas avoir ça ceci dit, ça pousserait vers l'utilisation systématique des calendriers d'indispo et c'est peut-être une bonne chose.
Mis à jour par Valentin Deniaud il y a environ 3 ans
Valentin Deniaud a écrit :
Lauréline Guerin a écrit :
Quel impact si on configure un event récurrent (disons tous les lundi) avec une date de fin de récurrence (les events sont créés en DB); puis on ajoute des exceptions. Que se passe-t-il pour les events déjà en DB, si certains sont impactés par une des exceptions ajoutées ?
Pas encore géré mais c'est tout à fait nécessaire à faire dans ce ticket. J'imagine que dans ce cas là on va supprimer les évènements, avec une erreur si il y a des réservations. Et aussi dans l'autre sens, enlever l'exception doit créer l'évènement.
Ça se fait bien, par contre tout le problème c'est
; puis on ajoute des exceptions.
Il n'y a pas de point d'entrée qui regroupe ajout/modif/suppression d'une exception, il y a d'un côté ce qui est faisable depuis la page de settings d'un agenda, depuis la page de config d'un calendrier d'indispo, et tous les imports d'exceptions asynchrones depuis ICS ou jours fériés.
Ça ne me semble pas jouable d'aller toucher tous ces endroits, ma seule idée pour l'instant c'est de jouer cette mise à jour des évènements également en asynchrone, ça permettrait de tourner sur tous les agendas sans devoir s'occuper de savoir si une exception a été modifiée.
Mis à jour par Valentin Deniaud il y a environ 3 ans
- Echéance mis à 16 avril 2020
- Début changé de 26 janvier 2021 à 16 avril 2020
- Suit Development #51218: Évènements récurrents : pouvoir spécifier une date de fin de récurrence ajouté
Mis à jour par Valentin Deniaud il y a environ 3 ans
- Echéance
16 avril 2020supprimé - Début
16 avril 2020supprimé
Mis à jour par Valentin Deniaud il y a environ 3 ans
- Statut changé de Solution proposée à En cours
Je vais retravailler là-dessus, à faire principalement cette histoire de mise à jour des évènements existants, et l'import/export.
Mis à jour par Valentin Deniaud il y a environ 3 ans
- Fichier 0004-agendas-update-recurrences-asynchronously-50561.patch 0004-agendas-update-recurrences-asynchronously-50561.patch ajouté
- Fichier 0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch 0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch ajouté
- Fichier 0002-agendas-allow-exceptions-to-recurring-events-50561.patch 0002-agendas-allow-exceptions-to-recurring-events-50561.patch ajouté
- Fichier 0003-api-prefetch-exceptions-for-recurring-events-50561.patch 0003-api-prefetch-exceptions-for-recurring-events-50561.patch ajouté
- Statut changé de En cours à Solution proposée
- Un agenda évènement gagne un guichet caché qui permet de contenir les exceptions
- Mêmes possibilités que pour les agendas rdv, on peut avoir une exception manuelle ou ICS/jours fériés ou calendriers d'indispo
- Les évènements déjà existants sont mis à jour de manière asynchrone, via cron toutes les 5 min
- Suppression ou création en fonction des cas
- Si des réservations sont posées sur un évènement qui aurait dû être supprimé, on ne fait rien et on pointe l'évènement concerné via un gros warning sur la page de paramétrage
Je trouve qu'il manque un truc qui montre les exceptions sur la vue mensuelle, mais je laisse pour un autre ticket.
Mis à jour par Emmanuel Cazenave il y a environ 3 ans
if created and self.kind == 'events': desk = Desk.objects.create(agenda=self, slug='_exceptions_holder') desk.import_timeperiod_exceptions_from_settings()
Ça met un desk sur et potentiellement des exceptions sur touts les agendas évènements, y compris ceux qui ont rien demandé en termes de récurrence/exceptions. J'imagine que tu as pris soin que ça ne mette pas la brouille dans ces les évènements exposés par des agendas évènements "standard" mais un test unitaire pour assurer la chose me paraîtrait bien.
Au passage ya pas non plus de test d'API qui vérifie qu'un évènement récurrent ne sort plus s'il est masqué par une exception (j'imagine que tu fais confiance à ce qui se passe dans tests_agendas.py mais un test au niveau supérieur/final c'est bien bien quand même).
Sur 0003 prefetch, la conjonction de l'intention d'optimiser et de ce qui suit fait bizarre, peut-être expliquer ou rendre le test plus proche d'une situation réelle :
- assert len(ctx.captured_queries) == 6 + assert len(ctx.captured_queries) == 7
Mis à jour par Valentin Deniaud il y a environ 3 ans
Emmanuel Cazenave a écrit :
Ça met un desk sur et potentiellement des exceptions sur touts les agendas évènements, y compris ceux qui ont rien demandé en termes de récurrence/exceptions. J'imagine que tu as pris soin que ça ne mette pas la brouille dans ces les évènements exposés par des agendas évènements "standard" mais un test unitaire pour assurer la chose me paraîtrait bien.
Comme le code que tu pointes est dans la méthode save(), il tourne déjà sur tous les évènements créés par les tests, et visiblement ils passent :)
Mais j'en profite pour souligner que ces exceptions n'ont d'effet que sur les évènements récurrents : on peut toujours ajouter un évènement normal sur une période d'exception sans que ça pose de problème.
OK pour le reste, je vais compléter les tests (et si tu veux à pousser en même temps il y aura aussi le petit #52115).
Mis à jour par Valentin Deniaud il y a presque 3 ans
- Fichier 0004-agendas-update-recurrences-asynchronously-50561.patch 0004-agendas-update-recurrences-asynchronously-50561.patch ajouté
- Fichier 0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch 0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch ajouté
- Fichier 0002-agendas-allow-exceptions-to-recurring-events-50561.patch 0002-agendas-allow-exceptions-to-recurring-events-50561.patch ajouté
- Fichier 0003-api-prefetch-exceptions-for-recurring-events-50561.patch 0003-api-prefetch-exceptions-for-recurring-events-50561.patch ajouté
Voilà j'ai ajouté dans 0002 un test pour montrer que les exceptions marchent dans l'api et un bout pour faire augmenter le nombre de requêtes, ce qui fait qu'il descend bien dans 0003.
Mis à jour par Emmanuel Cazenave il y a presque 3 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Valentin Deniaud il y a presque 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit c68902b967f2a9160eafc2576adb476284c59030 Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Tue Feb 9 14:09:41 2021 +0100 agendas: update recurrences asynchronously (#50561) commit 6aa49605cc845eaeff6718538f22898aaecccaec Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Thu Feb 4 15:10:29 2021 +0100 api: prefetch exceptions for recurring events (#50561) commit 80826930edc2c066e52948458c756ecc05191225 Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Thu Jan 28 15:40:57 2021 +0100 agendas: allow exceptions to recurring events (#50561) commit a4622337eb00075b96b23ba2082edcf65fc1cb98 Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Thu Jan 28 15:40:16 2021 +0100 manager: do not mention desk in messages if it has no label (#50561)
Mis à jour par Frédéric Péters il y a presque 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
manager: do not mention desk in messages if it has no label (#50561)