Bonjour,

J'ai créé un formulaire de réservation à partir duquel un client peut réserver une embarcation avec son équipage pour une durée unique de 3 heures. Au delà de 3 heures, la réservation se fait en backoffice.

Rechercher les créneaux disponibles à la réservation
Lorsque le client choisit une date de réservation via un date picker, je souhaiterais :
  • qu'il ne puisse choisir la date que s'il existe un créneau de 6 heures disponible entre 06:00 et 00:00. 6 heures ( 6 heures car il faut 01:30 heure à l'équipage pour préparer la sortie et 01:30 heure pour remettre en état l'embarcation après la sortie de 3 heures).


Veuillez noter que des entraînement et des événements internes, qui peuvent avoir des durées variables comprises entre 01:00 et X heures, sont également enregistrés dans la table
fab_booking
.

Les dates de début et de fin des sorties (réservations clients, entraînements et événements internes) existantes sont à vérifier | comparer dans les deux champs suivants de la table
fab_booking
sont :

book_crewstartdate = la date d'embarquement de l'équipage
book_crewenddate = la date de débarquement de l'équipage
Exemple 1 :
S'il existe une réservation client le jour même par exemple entre 12:00 à 18:00, une entraînement de 06:00 à 08:00, alors il existe un créneau de 6 heures entre 18:00 et 00:00 pour cette date.

Exemple 2 :
S'il un entraînement le jour même par exemple entre 14:00 et 16:00, alors il existe neuf créneaux de 6 heures entre 06:00 et 14:00 et entre 16:00 et 00:00.

Peupler un dropdown avec les heures d'embarquement disponibles
Lorsque les créneaux disponibles ont été trouvés, je souhaiterai peupler un dropdown avec les heures d'embarquement disponibles pour le client.

Les valeurs possible de ce dropdown sont rendues par tranche d'une demi-heure :

Code:
1 | 07:30
2 | 08:00
3 | 08:30
4 | 09:00
5 | 09:30
6 | 10:00
7 | 10:30
8 | 11:00
9 | 11:30
10 | 12:00
11 | 12:30
12 | 13:00
13 | 13:30
14 | 14:00
15 | 14:30
16 | 15:00
17 | 15:30
18 | 16:00
19 | 16:30
20 | 17:00
21 | 17:30
22 | 18:00
23 | 18:30
24 | 19:00
25 | 19:30
26 | 20:00
Attention : les entraînements enregistrer dans la table fab_booking peuvent débuter toutes les 15 minutes, les événements internes quant à eux toutes les 30 minutes comme c'est le cas pour les réservations clients. Je suppose que cela doit être pris en compte dans la recherche de créneaux disponibles.

Prenons l'exemple 1 :
Le créneau de 6 heures est de 16:00 à 00:00. L'équipage embarque 01:30 avant le client, l'heure d'embarquement du client peut donc intervenir à 19:30 uniquement :

19:30 étant la dernière heure d'embarquement possible : 19:30 à 22:30 (durée de 3 heures) + 01:30 nécessaire à l'équipage pour remettre en état l'embarcation et nous arrivons bien à 00:00.

Ma dropdown devrait être peuplée avec les valeurs suivantes afin que le client puisse choisir l'heure d'embarquement qui lui convient :

Code:
Valeur | Label
25       | 19:30
Prenons l'exemple 2 :
Les dix créneaux disponibles de 6 heures sont entre 06:00 et 14:00 et entre 16:00 et 00:00. L'heure d'embarquement du client peut donc intervenir à 07:30, 08:00, 08:30, 09:00, 09:30, 17:30, 18:00, 18:30, 19:00 et 19:30.

Ma dropdown devrait être peuplée avec les valeurs suivantes afin que le client puisse choisir l'heure d'embarquement qui lui convient :

Code:
Valeur | Label
1       | 07:30
2       | 08:00
3       | 08:30
4       | 09:00
5       | 09:30
21       | 17:30
22       | 18:00
23       | 18:30
24       | 19:00
25       | 19:30
Deux problèmes se posent donc à moi :

1. "Activer" les dates du date picker si au moins un créneau de 6 heures existe pour la date choisie par le client
2. Peupler les heures d'embarquement disponibles pour le client

Merci d'avance pour toute suggestion qui pourraient m'aider à avancer.

Marc