Développement #78086
plages libres, permettre de réserver une semaine type à horaires variables
0%
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
History
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é.
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.
Updated by Valentin Deniaud about 1 year ago
- Assignee set to Valentin Deniaud
Valentin Deniaud a écrit :
Approche discutée en eoday :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.
- 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 %}
- Pour éviter d'afficher le mercredi si la structure n'est pas ouverte, ça donnerait la condition
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.
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)
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 :
- URL : https://git.entrouvert.org/entrouvert/chrono/pulls/153
- Titre : WIP: api: allow different hours per day in partial bookings recurring fillslots (#78086)
- Modifications : https://git.entrouvert.org/entrouvert/chrono/pulls/153/files
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 %}/
Updated by Valentin Deniaud about 1 year ago
- File form-reservation-creche(1).wcs form-reservation-creche(1).wcs added
- File workflow-reservation-semaine-type-creche.wcs workflow-reservation-semaine-type-creche.wcs added
Pour référence, formulaire/workflow de démo
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 :
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 :
- URL : https://git.entrouvert.org/entrouvert/chrono/pulls/153
- Titre : api: allow different hours per day in partial bookings recurring fillslots (#78086)
- Modifications : https://git.entrouvert.org/entrouvert/chrono/pulls/153/files
Updated by Transition automatique about 1 year ago
- Status changed from Résolu (à déployer) to Solution déployée