Open Lucanis opened 3 years ago
Pour le besoin de retrait sur une tranche horaire précise, il s'agit du click & collect classique, où le client doit choisir un jour et une heure de retrait parmis plusieurs créneaux disponible, de manière similaire à ce qui existe pour Chronodrive par exemple.
Le module de click & collect fopurnit donc une liste de jours, avec pour chaque jour plusieurs slots, actifs ou inactifs.
Le client doit choisir un des slots actifs pour pouvoir terminer le checkout.
Chaque slot possède un identifiant, qui est fourni par le module en plus su libellé du slot et de l'indication d'ouverture. Cet ID de slot est transmis au module d'une manière similaire à ce qui existe pour les points relais.
Le schéma devient alors :
{
"openingHours": [
{
"day": "1977-04-22T01:00:00-05:00",
"open": true,
"timeSlots": [
{
"slot": "8h-12h",
"open": true,
"id": 465687
},
{
"slot": "12h-14h",
"open": false,
"id": 465756
}
]
}
]
}
Pour ce qui est de la réponse fournie par le front pour le checkout, on a évoqué (sans statuer) la possibilité d'y placer un payload json, qui contiendrait si nécessaire des infos spécifiques pour 1) le module de livraison choisi, et 2) le module de paiement choisi, ce qui permettrait par exemple de faire du paiement CB directement depuis la page de checkout, et/ou de passer un id de pickup point ou de delivery slot...
Plutot que "open" je mettrais "available" car le créneau (ou le jour) peut être non disponible pour d'autre raison qu'une fermeture (créneau plein, trop proche, ...).
On peut di'ailleurs ajouter une clé description ou detail pour ajouter des infos
Donc après une longue discussion voici ce qu'il faut faire : Pour pouvoir afficher des créneaux horaires il faut créer 2 modèles : Day
{
"date": "2020-01-19",
"available": true,
"detail": "Exceptional opening",
"timeIntervals" : [
##TIME_INTERVALS##
]
}
TIme interval
{
"id": "9ff9636e",
"start": "12:00:00",
"end": "14:15:00",
"available": false,
"detail": "Slot full"
}
Et ajouté une propriété au modèle PickupLocation "timeSlots" par exemple qui contient une liste de Day avec ses plages horaires.
Ensuite certains modules auront besoin de pouvoir sélectionner un créneau, dans ce cas il faut qu'ils étendent le modèle checkout pour rajouter un paramètre selectedTimeSlotId par exemple. Donc ce paramètre pour être renseigné par le front au moment du passage de la commande mais pour que le module soit au courant du créneau sélectionné il faudrait qu'on rajoute des events aux routes de l'api.
Un a la réception de n'importe quelle route api et un autre après la réponse de l'api, attention pour celui de la réponse, 2 possibilités, soit l'event peut modifier la réponse mais dans ce cas il faut bien faire attention à ce que la nouvelle réponse correspondent toujours a la documentation swagger soit ne pas autoriser l'event à modifier la réponse.
Par contre, que fait on de la gestion actuelle des heures d'ouvertures sur le model PickupLocation du core ? https://github.com/thelia/thelia/blob/master/core/lib/Thelia/Model/PickupLocation.php#L37
On remplace ? ce n'est utilisé que par open api de toute facon je crois
Colissimo PickupPoint s'en sert à l'heure actuelle, mais on peut MAJ le module dans la foulée
A l'heure actuelle on a aucun moyen d'afficher/sélectionner les horaires de retrait pour les points-relais et local-pickup/click&collect.
Vincent et moi proposons de rajouter sur le model PickupLocation de l'API ainsi que l'event PickupLocationEvent du core, une propriété "openingHours" basé sur le schéma suivant:
Ainsi que l'ajout de deux nouveaux paramètres sur la route /delivery/pickup-locations, pour borner la recherche entre deux jours particuliers pour les entités qui possèdent des horaires d'ouvertures (par défaut: une semaine à partir du jour courant).
Franck a une problématique supplémentaire lié au choix d'un slot pour un retrait sur une tranche horaire précise, je le laisse préciser son besoin ici pour qu'on en discute avant de commencer toute implémentation.