Project

General

Profile

Développement #78086

plages libres, permettre de réserver une semaine type à horaires variables

Added by Valentin Deniaud over 1 year ago. Updated about 1 year ago.

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

0%

Estimated time:
Patch proposed:
No
Planning:
No

Description

Actuellement, on peut choisir les jours qu'on réserve mais la plage horaire est identique pour chaque jour.

Il faut permettre une plage horaire différente par jour.


Files

workflow-reservation-semaine-type-creche.wcs (11.4 KB) workflow-reservation-semaine-type-creche.wcs Valentin Deniaud, 02 October 2023 04:07 PM
form-reservation-creche(1).wcs (10.4 KB) form-reservation-creche(1).wcs Valentin Deniaud, 02 October 2023 04:07 PM

History

#1

Updated by Cédric Dourdent over 1 year ago

L'horaire identique tous les jours peut convenir pour certains besoin de certaines familles, ex : 5 jours semaine (Lun-Ven) de 0830 à 1800. Le contrat en or, régulier en tout point.
Et avoir la possibilité de sélectionner des tranches horaires différentes selon le jour, ex : (Lun-Mar) de 0800 à 1700 puis les jeudis de 0830 à 1630.
L'idée c'est de pouvoir avec le choix selon le cas rencontré.

#2

Updated by Valentin Deniaud over 1 year ago

L'autre problème c'est que je ne vois pas trop comment construire ce formulaire actuellement, ça nécessitera peut-être un widget custom.

#3

Updated by Valentin Deniaud about 1 year ago

  • Assignee set to Valentin Deniaud

Valentin Deniaud a écrit :

L'autre problème c'est que je ne vois pas trop comment construire ce formulaire actuellement, ça nécessitera peut-être un widget custom.

Approche discutée en eoday :
  • Définir un appel webservice vers l'api qui liste les évènements récurrents de l'agenda, api_recurring_datetimes.
  • Avoir dans le formulaire 5 groupes de champs identiques pour chaque jour de la semaine
    • Pour lundi ça pourrait donner par exemple simplement « Horaire d'arrivée le lundi » et « Horaire de départ le lundi »
  • L'affichaque de chaque champs du groupe est conditionné en fonction du retour du webservice
    • Pour éviter d'afficher le mercredi si la structure n'est pas ouverte, ça donnerait la condition {% for slot in webservice.api_recurring_datetimes %}{% if slot.day == 'Wednesday' %}OK{% endif %}{% endfor %}
#4

Updated by Valentin Deniaud about 1 year ago

Le trou qu'il reste dans la raquette c'est que OK on sait récupérer les horaires par jour mais on ne sait pas les lier aux évènements à réserver.

Actuellement pour un évènement récurrent configuré sur le lundi et le mardi l'API répond :

[
    {'id': 'id-de-l-agenda@id-de-l-event:1', 'text': 'Ouverture', 'day': 'Lundi'},
    {'id': 'id-de-l-agenda@id-de-l-event:2', 'text': 'Ouverture', 'day': 'Mardi'},
]

Ensuite c'est présenté dans une liste à choix multiple et c'est envoyé dans l'API avec simplement slots={{ form_var_events|join:',' }}.

La seule parade que j'imagine c'est la fête aux données calculées, pour chaque jour on alimente une variable genre form_var_event_mardi qui vaut {% for slot in webservice.api_recurring_datetimes %}{% if slot.day == 'Tuesday' %}{{ slot.id }}{% endif %}{% endfor %}.

(ça simplifie la condition présenté plus haut qui devient simplement {{ form_var_event_mardi }}).

Ensuite dans l'appel de réservation on passe slots={% if form_var_horaire_debut_lundi %}{{ form_var_event_lundi }}:{{ form_var_horaire_debut_lundi }}:{{ form_var_horaire_fin_lundi }},{% endif %}{% if form_var_horaire_debut_mardi %}{{ form_var_event_mardi }}:{{ form_var_horaire_debut_mardi }}:{{ form_var_horaire_fin_mardi }},{% endif %}...

La question d'avoir un widget custom se pose donc toujours.

#5

Updated by Valentin Deniaud about 1 year ago

Autre idée nettement plus simple : on garde le select multiple avec les jours, form_var_events.

Puis à chaque jours cochés les choix d'horaires apparaissent en dessous, par exemple pour le lundi les champs « Horaire d'arrivée le lundi » et « Horaire de départ le lundi » s'affichent si la condition {{ 'Lundi' in form_var_events|getlist:'day' }} est vraie.

Puis dans l'appel WS on accepte de perdre en généricité, on passe slots={{ form_var_events|join:',' }} comme d'hab et on ajoute une ligne pour chaque jours possibles, pour le lundi ça donnerait monday={{ form_var_horaire_debut_lundi }}-{{ form_var_horaire_fin_lundi }}. (on ne peut plus sélectionner un horaire par évènement, juste un horaire par jour, dans notre cas c'est équivalent)

#6

Updated by Robot Gitea about 1 year ago

  • Status changed from Nouveau to En cours

Valentin Deniaud (vdeniaud) a ouvert une pull request sur Gitea concernant cette demande :

#7

Updated by Valentin Deniaud about 1 year ago

J'ai pas mal cogité (j'ai même embêté Fred) et au final l'approche retenue c'est l'ajout d'une nouvelle API, qui au lieu de prendre un paramètre slots avec les jours à réserver tous aux même horaires, prend les jours de la semaine en paramètre avec un horaire pour chacun.

L'avantage d'une nouvelle API c'est qu'on peut introduire une limitation, dans notre cas ce sera limité à un seul agenda de type plage libre (dont découle la limite à un évènement par jour).

Niveau formulaire, si on part de :

< champ de sélection des jours >
< heure de début >
< heure de fin >

ça devient

< champ de sélection des jours >
< horaires identiques chaque jour : oui >
  < heure de début > 
  < heure de fin >
< horaires identiques chaque jour : non >
  < Lundi : >
  < heure de début > 
  < heure de fin >
  < Mardi : >
  < heure de début > 
  < heure de fin >
  ...

Et le switch entre les deux API se fait simplement dans l'URL de l'action webservice : {{agendas_url}}api/agendas/recurring-events/{% if form_var_horaires_identiques %}fillslots{% else %}fillslots-by-day{% endif %}/

#8

Updated by Robot Gitea about 1 year ago

  • Status changed from En cours to Solution proposée
#10

Updated by Robot Gitea about 1 year ago

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

Lauréline Guérin (lguerin) a approuvé une pull request sur Gitea concernant cette demande :

#11

Updated by Robot Gitea about 1 year ago

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

Valentin Deniaud (vdeniaud) a mergé une pull request sur Gitea concernant cette demande :

#12

Updated by Transition automatique about 1 year ago

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

Updated by Transition automatique about 1 year ago

Automatic expiration

Also available in: Atom PDF