Skip to content

feat(invitations): Add external invitations actions and views

Created by: aminedhobb

Cette PR introduit un changement majeur sur la façon dont une personne est invitée sur RDV-Solidarités par une application tierce (en l'occurence RDV-Insertion): Au lieu de rediriger l'utilisateur vers la page d'accueil avec le formulaire de recherche pré-rempli (addresse, service et motifs), nous redirigeons carrément l'utilisateur vers une nouvelle url/action spécifique à cette invitation.

Motivations

Lorsqu'un utilisateur est invité à pendre RDV par une organisation depuis RDV-Insertion, nous connaissons l'organisation qui invite à prendre RDV. Nous connaissons aussi normalement l'adresse de l'utilisateur, et donc nous pouvons récupérer ses coordonnées géographiques (voir https://github.com/betagouv/rdv-insertion/pull/123). Cependant il peut arriver que l'adresse entrée pour l'utilisateur ne soit pas bonne ou carrément absente. Dans ce cas-là, si les motifs sont sectorisés par organisation, l'utilisateur invité ne verra pas de motifs disponible en utilisant le parcours classique alors qu'il a été invité par l'organisation.

=> L'idée est donc ici de tirer profit du fait que l'on sait pour quelle organisation l'utilisateur est invité pour fallback sur tous les motifs liés à l'organisation et au service indiqués sur l'invitation. Nous ne voulons en aucun que l'utilisateur invité se retrouve devant une page vide.

Incorporer cette logique dans des action dédiées aux invitations permet de garder la logique actuelle de RDV-Solidarités (à savoir récupérer uniquement les motifs liés au secteur de l'utilisateur) sur la page d'accueil. Il aurait été possible de combiner les 2 logiques en ajoutant plusieurs conditions (ma première idée) mais cela rend le code concerné encore - lisible et ça ajoute de la logique spécifique aux invitations externes là où nous n'en voulons pas. De plus cela permet d'avoir une mise en page spécifique à notre cas de figure, et il est possible que l'on introduise encore + de paramètres au moment de l'invitation (et donc + de logique spécifique). L'inconvénient est que l'on est pas DRY parce qu'une grande partie de la logique actuelle est reprise dans ces nouvelles actions.

Fonctionnement

J'introduis 3 nouvelles routes namespacées par external_invitations/:

  • /external_invitations/organisations/:organisation_id/services/:service_id/motifs: Retourne la liste des motifs disponibles pour une organisation et un service. Nous essayons d'abord de retrouver les motifs liés à la géolocalisation (dans le cas où des motifs sont sectorisés par agent), et si rien est trouvé nous retournons tous les motifs disponibles liés à l'organisation et au service en question.

image

  • /external_invitations/organisations/:organisation_id/services/:service_id/motifs/:motif_id/lieux: Très semblable à la page actuelle qui retourne les lieux d'invitations avec leurs disponibilités. Les lieux sont liés au motif choisi.

image

  • /external_invitations/organisations/:organisation_id/services/:service_id/motifs/:motif_id/lieux/:id: Très semblable à la page actuelle qui renvoie les créneaux disponibles pour le lieu sélectionné.

image

Je suis preneur de tous vos retours et dispo pour en parler de vive voix si besoin :) !

P.S: Je ne sais pas pourquoi le build fail 🤔

Merge request reports