Projet

Général

Profil

Development #78086

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

Ajouté par Valentin Deniaud il y a 11 mois. Mis à jour il y a 7 mois.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
01 juin 2023
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

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.


Fichiers

workflow-reservation-semaine-type-creche.wcs (11,4 ko) workflow-reservation-semaine-type-creche.wcs Valentin Deniaud, 02 octobre 2023 16:07
form-reservation-creche(1).wcs (10,4 ko) form-reservation-creche(1).wcs Valentin Deniaud, 02 octobre 2023 16:07

Historique

#1

Mis à jour par Cédric Dourdent il y a 11 mois

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

Mis à jour par Valentin Deniaud il y a 11 mois

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

Mis à jour par Valentin Deniaud il y a 7 mois

  • Assigné à mis à 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

Mis à jour par Valentin Deniaud il y a 7 mois

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

Mis à jour par Valentin Deniaud il y a 7 mois

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

Mis à jour par Robot Gitea il y a 7 mois

  • Statut changé de Nouveau à En cours

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

#7

Mis à jour par Valentin Deniaud il y a 7 mois

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

Mis à jour par Robot Gitea il y a 7 mois

  • Statut changé de En cours à Solution proposée
#10

Mis à jour par Robot Gitea il y a 7 mois

  • Statut changé de Solution proposée à Solution validée

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

#11

Mis à jour par Robot Gitea il y a 7 mois

  • Statut changé de Solution validée à Résolu (à déployer)

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

#12

Mis à jour par Transition automatique il y a 7 mois

  • Statut changé de Résolu (à déployer) à Solution déployée
#13

Mis à jour par Transition automatique il y a 5 mois

Automatic expiration

Formats disponibles : Atom PDF