Projet

Général

Profil

Development #50561

Évènements récurrents : permettre les exceptions

Ajouté par Valentin Deniaud il y a environ 3 ans. Mis à jour il y a presque 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch (3,06 ko) 0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch Valentin Deniaud, 28 janvier 2021 17:21
0002-agendas-allow-exceptions-to-recurring-events-50561.patch (14,3 ko) 0002-agendas-allow-exceptions-to-recurring-events-50561.patch Valentin Deniaud, 28 janvier 2021 17:21
0004-agendas-update-recurrences-asynchronously-50561.patch (14,4 ko) 0004-agendas-update-recurrences-asynchronously-50561.patch Valentin Deniaud, 22 février 2021 15:25
0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch (3,63 ko) 0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch Valentin Deniaud, 22 février 2021 15:25
0002-agendas-allow-exceptions-to-recurring-events-50561.patch (18,6 ko) 0002-agendas-allow-exceptions-to-recurring-events-50561.patch Valentin Deniaud, 22 février 2021 15:25
0003-api-prefetch-exceptions-for-recurring-events-50561.patch (3,98 ko) 0003-api-prefetch-exceptions-for-recurring-events-50561.patch Valentin Deniaud, 22 février 2021 15:25
0004-agendas-update-recurrences-asynchronously-50561.patch (14,4 ko) 0004-agendas-update-recurrences-asynchronously-50561.patch Valentin Deniaud, 27 avril 2021 18:01
0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch (3,63 ko) 0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch Valentin Deniaud, 27 avril 2021 18:01
0002-agendas-allow-exceptions-to-recurring-events-50561.patch (21,2 ko) 0002-agendas-allow-exceptions-to-recurring-events-50561.patch Valentin Deniaud, 27 avril 2021 18:01
0003-api-prefetch-exceptions-for-recurring-events-50561.patch (3,98 ko) 0003-api-prefetch-exceptions-for-recurring-events-50561.patch Valentin Deniaud, 27 avril 2021 18:01

Demandes liées

Suit Chrono - Development #51218: Évènements récurrents : pouvoir spécifier une date de fin de récurrenceFermé

Actions

Révisions associées

Révision a4622337 (diff)
Ajouté par Valentin Deniaud il y a presque 3 ans

manager: do not mention desk in messages if it has no label (#50561)

Révision 80826930 (diff)
Ajouté par Valentin Deniaud il y a presque 3 ans

agendas: allow exceptions to recurring events (#50561)

Révision 6aa49605 (diff)
Ajouté par Valentin Deniaud il y a presque 3 ans

api: prefetch exceptions for recurring events (#50561)

Révision c68902b9 (diff)
Ajouté par Valentin Deniaud il y a presque 3 ans

agendas: update recurrences asynchronously (#50561)

Historique

#1

Mis à jour par Valentin Deniaud il y a environ 3 ans

  • Assigné à mis à Valentin Deniaud
#2

Mis à jour par Valentin Deniaud il y a environ 3 ans

Ça se fait plutôt bien en dotant les agendas évènements d'un Desk à usage interne, présent seulement pour contenir les exceptions.

#3

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)

#4

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 ?

#5

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

#6

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 :)

#7

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) ?

#8

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 ?

#9

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).

#10

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.

#11

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.

#12

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é
#13

Mis à jour par Valentin Deniaud il y a environ 3 ans

  • Echéance 16 avril 2020 supprimé
  • Début 16 avril 2020 supprimé
#14

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.

#15

Mis à jour par Valentin Deniaud il y a environ 3 ans

Voilà, récap :
  • 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.

#17

Mis à jour par Valentin Deniaud il y a environ 3 ans

Rebasé.

#18

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
#19

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).

#21

Mis à jour par Emmanuel Cazenave il y a presque 3 ans

  • Statut changé de Solution proposée à Solution validée
#22

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)
#23

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

Formats disponibles : Atom PDF