Skip to content

in admin RDV forms, warn when agents have other RDVs ending shortly before

Vincent Agnano requested to merge feature/warn-overlapping-rdvs into master

Created by: adipasquale

https://trello.com/c/fbebJ0G5/1173-ajuster-lheure-de-d%C3%A9but-du-rdv-avec-la-fin-du-pr%C3%A9c%C3%A9dent

Cette PR est relativement simple après le gros refacto des admin RDV forms.

Screenshots

Pour l'agent courant

Screenshot_2020-12-10_at_18 11 56

Pour un autre agent, dans le scope

Screenshot_2020-12-10_at_18 12 48

Pour un autre agent, hors scope

Screenshot_2020-12-22_at_14 03 10

Multi agent

Un point un peu tricky c'est le multi-agent. Il faut prendre en compte le fait que le RDV qu'on est en train de créer peut avoir plusieurs agents, et que le RDV qui est potentiellement en conflit a une autre liste d'agents et il faut faire l'intersection.

Aussi, on ne veut pas afficher plusieurs warnings pour des RDVs d'un même agent comme :

  • Attention, Martine a un RDV finissant à 15h30
  • Attention, Martine a un RDV finissant à 15h45
  • Attention, Martine a un RDV finissant à 16h00

etc, il faut bien prendre le dernier pour chaque agent.

RDVs s'enchainant

il faut aussi dans ce cas gerer le cas ou on aligne un RDV avec le dernier, mais ou les precedents pourraient etre considérés en conflit.

  • un RDV existe et finit a 14h15
  • un autre RDV existe et finit a 14h30
  • j'essaie de creer un autre RDV commencant a 14h30
  • => il faut accepter sans warning, ne pas dire "attention il y en a un qui finit a 15".

Implem

J'avais commencé par rajouter de la logique dans le modèle Rdv mais finalement je pense qu'il y en a assez pour l'extraire. J'ai fait un "service model" à part qui s'appelle RdvStartCoherence et qui a deux méthodes publiques : rdvs_ending_shortly_before et rdvs_ending_shortly_before?

Pour les specs rajoutées dans cette PR j'essaie de limiter au max le fait de tester des dépendances sans le vouloir. C'est à dire que si je teste la classe A qui fait appel à la classe B, je mocke les appels et les valeurs renvoyées par B. Je mets des expect ou des allow selon qu'il y ait des effets de bords attendus ou non, cf https://medium.com/@christiancarey1/writing-specs-like-sandi-metz-9f2acf5026cb

ecrire les specs m'ont fait réaliser qu'il y avait un gros défaut d'implem dans le rdvformconcern : un unless au lieu d'un if 😨 . Je ne comprends pas trop comment ça pouvait marcher correctement, j'imagine que le comportement était bizarre mais que ça passait à peu près. On ne contournait pas non plus les validations mais elles devaient être exécutées au mauvais moment.

Merge request reports