Développement #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.
Files
Related issues
Associated revisions
agendas: allow exceptions to recurring events (#50561)
api: prefetch exceptions for recurring events (#50561)
agendas: update recurrences asynchronously (#50561)
History
Updated by Valentin Deniaud almost 4 years ago
- File 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 added
- File 0002-agendas-allow-exceptions-to-recurring-events-50561.patch 0002-agendas-allow-exceptions-to-recurring-events-50561.patch added
- Status changed from Nouveau to Solution proposée
- Patch proposed changed from No to Yes
Ça se fait plutôt bien en dotant les agendas évènements d'un Desk à usage interne, présent seulement pour contenir les exceptions.
Updated by Lauréline Guérin almost 4 years ago
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)
Updated by Lauréline Guérin almost 4 years ago
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 ?
Updated by Lauréline Guérin almost 4 years ago
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
Updated by Valentin Deniaud almost 4 years ago
- Status changed from Solution proposée to 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 :)
Updated by Emmanuel Cazenave almost 4 years ago
- Status changed from En cours to 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) ?
Updated by Lauréline Guérin almost 4 years ago
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 ?
Updated by Valentin Deniaud almost 4 years ago
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).
Updated by Valentin Deniaud almost 4 years ago
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.
Updated by Valentin Deniaud almost 4 years ago
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.
Updated by Valentin Deniaud almost 4 years ago
- Due date set to 16 April 2020
- Start date changed from 26 January 2021 to 16 April 2020
- Follows Développement #51218: Évènements récurrents : pouvoir spécifier une date de fin de récurrence added
Updated by Valentin Deniaud almost 4 years ago
- Due date deleted (
16 April 2020) - Start date deleted (
16 April 2020)
Updated by Valentin Deniaud almost 4 years ago
- Status changed from Solution proposée to En cours
Je vais retravailler là-dessus, à faire principalement cette histoire de mise à jour des évènements existants, et l'import/export.
Updated by Valentin Deniaud almost 4 years ago
- File 0004-agendas-update-recurrences-asynchronously-50561.patch 0004-agendas-update-recurrences-asynchronously-50561.patch added
- File 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 added
- File 0002-agendas-allow-exceptions-to-recurring-events-50561.patch 0002-agendas-allow-exceptions-to-recurring-events-50561.patch added
- File 0003-api-prefetch-exceptions-for-recurring-events-50561.patch 0003-api-prefetch-exceptions-for-recurring-events-50561.patch added
- Status changed from En cours to 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.
Updated by Emmanuel Cazenave over 3 years ago
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
Updated by Valentin Deniaud over 3 years ago
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).
Updated by Valentin Deniaud over 3 years ago
- File 0004-agendas-update-recurrences-asynchronously-50561.patch 0004-agendas-update-recurrences-asynchronously-50561.patch added
- File 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 added
- File 0002-agendas-allow-exceptions-to-recurring-events-50561.patch 0002-agendas-allow-exceptions-to-recurring-events-50561.patch added
- File 0003-api-prefetch-exceptions-for-recurring-events-50561.patch 0003-api-prefetch-exceptions-for-recurring-events-50561.patch added
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.
Updated by Emmanuel Cazenave over 3 years ago
- Status changed from Solution proposée to Solution validée
Updated by Valentin Deniaud over 3 years ago
- Status changed from Solution validée to 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)
Updated by Frédéric Péters over 3 years ago
- Status changed from Résolu (à déployer) to Solution déployée
manager: do not mention desk in messages if it has no label (#50561)