Project

General

Profile

Développement #50561

Évènements récurrents : permettre les exceptions

Added by Valentin Deniaud almost 4 years ago. Updated over 3 years ago.

Status:
Fermé
Priority:
Normal
Category:
-
Target version:
-
Start date:
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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

0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch (3.06 KB) 0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch Valentin Deniaud, 28 January 2021 05:21 PM
0002-agendas-allow-exceptions-to-recurring-events-50561.patch (14.3 KB) 0002-agendas-allow-exceptions-to-recurring-events-50561.patch Valentin Deniaud, 28 January 2021 05:21 PM
0004-agendas-update-recurrences-asynchronously-50561.patch (14.4 KB) 0004-agendas-update-recurrences-asynchronously-50561.patch Valentin Deniaud, 22 February 2021 03:25 PM
0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch (3.63 KB) 0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch Valentin Deniaud, 22 February 2021 03:25 PM
0002-agendas-allow-exceptions-to-recurring-events-50561.patch (18.6 KB) 0002-agendas-allow-exceptions-to-recurring-events-50561.patch Valentin Deniaud, 22 February 2021 03:25 PM
0003-api-prefetch-exceptions-for-recurring-events-50561.patch (3.98 KB) 0003-api-prefetch-exceptions-for-recurring-events-50561.patch Valentin Deniaud, 22 February 2021 03:25 PM
0004-agendas-update-recurrences-asynchronously-50561.patch (14.4 KB) 0004-agendas-update-recurrences-asynchronously-50561.patch Valentin Deniaud, 27 April 2021 06:01 PM
0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch (3.63 KB) 0001-manager-do-not-mention-desk-in-messages-if-it-has-no.patch Valentin Deniaud, 27 April 2021 06:01 PM
0002-agendas-allow-exceptions-to-recurring-events-50561.patch (21.2 KB) 0002-agendas-allow-exceptions-to-recurring-events-50561.patch Valentin Deniaud, 27 April 2021 06:01 PM
0003-api-prefetch-exceptions-for-recurring-events-50561.patch (3.98 KB) 0003-api-prefetch-exceptions-for-recurring-events-50561.patch Valentin Deniaud, 27 April 2021 06:01 PM

Related issues

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

Actions

Associated revisions

Revision a4622337 (diff)
Added by Valentin Deniaud over 3 years ago

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

Revision 80826930 (diff)
Added by Valentin Deniaud over 3 years ago

agendas: allow exceptions to recurring events (#50561)

Revision 6aa49605 (diff)
Added by Valentin Deniaud over 3 years ago

api: prefetch exceptions for recurring events (#50561)

Revision c68902b9 (diff)
Added by Valentin Deniaud over 3 years ago

agendas: update recurrences asynchronously (#50561)

History

#1

Updated by Valentin Deniaud almost 4 years ago

  • Assignee set to Valentin Deniaud
#2

Updated by Valentin Deniaud almost 4 years ago

Ç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

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)

#4

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 ?

#5

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

#6

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

#7

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

#8

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 ?

#9

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

#10

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.

#11

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.

#12

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

Updated by Valentin Deniaud almost 4 years ago

  • Due date deleted (16 April 2020)
  • Start date deleted (16 April 2020)
#14

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.

#15

Updated by Valentin Deniaud almost 4 years ago

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

Updated by Valentin Deniaud over 3 years ago

Rebasé.

#18

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

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

#21

Updated by Emmanuel Cazenave over 3 years ago

  • Status changed from Solution proposée to Solution validée
#22

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

Updated by Frédéric Péters over 3 years ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF