Skip to content

warn overlapping plage ouvertures conflicts on RDVs creation

Created by: adipasquale

https://trello.com/c/6HOfDMIF/1170-alerter-lors-de-la-cr%C3%A9ation-de-rdvs-en-conflit-avec-des-plages-douvertures

Screenshots

agent rdv wizard tunnel step 3

Screenshot_2020-12-07_at_15 56 45

rdvs show

Screenshot_2020-12-07_at_15 55 31

(ca apparait de la meme maniere dans la liste des RDVs)

calendar

Screenshot_2020-12-07_at_15 55 53

Implementation

TimeSlot

J'ai créé un petit modele hors AR qui represente un créneau temporel : TimeSlot. C'est un datetime de début + un datetime de fin. Il a deux comportements :

  • il valide que les datetimes appartiennent à la même journée et sont consécutifs
  • on peut calculer si deux time slots se chevauchent ou non avec #intersects?

Un Creneau peut etre vu comme un TimeSlot qualifié car il correspond a une plage d'ouverture + une duree de rdv etc

Dans les specs j'ai essayé de bien découper ce que je teste et de mocker le niveau en dessous a chaque fois pour limiter les responsabilités de chaque test. c'est a dire que d'un coté je teste que les dates se chevauchent, puis d'un autre que les horaires se chevauchent par ex.

plage_ouverture.covers_date?

cette nouvelle methode est responsable de dire si une PO aura une occurence à une certaine date. Elle s'appuie sur la méthode #include? de Montrose, qui malheureusement n'a pas l'air de fonctionner pour des recurrences d'intervalles > 1 cf https://github.com/rossta/montrose/pull/132.

Dans cette PR j'ai un peu contourné le pb en ignorant explicitement ces plages d'ouvertures. Je pense que c'est OK car en prod il y en a moins de 5% dans ce cas (mais non negligeable qd meme). On pourra corriger ce pb upstream dans montrose plus tard, je n'ai pas trouvé le fix hyper rapidement donc je préfère ne pas y passer trop de temps (cette PR a déjà pris pas mal de temps)

bug lors creation rdv pour un autre agent

il y avait un bug lors d'une erreur de validation a la derniere etape du tunnel de prise de rdv agent. lorsqu'un agent créé un rdv pour un autre agent, on perdait le contexte de l'agent visé s'il y avait une erreur de validation. Le bug venait d'un manquement lors de l'instanciation de AgentRdvWizard dans la branche else du rdv.save dans le rdvs#create

irb(main):009:0> PlageOuverture.not_expired.where.not(recurrence: nil).to_a.select { (_1.recurrence.to_h[:interval] || 1) > 1 }.count
=> 104
irb(main):010:0> PlageOuverture.not_expired.count
=> 2862

Merge request reports