Projet

Général

Profil

Development #33489

API : lors de la création d'une réservation, permettre d'en annuler une autre

Ajouté par Emmanuel Cazenave il y a presque 5 ans. Mis à jour il y a 11 mois.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
28 mai 2019
Echéance:
05 juin 2019
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

D'un mail : "ce que j'imaginais,
côté API, c'est que l'appel à 'fillslot' puisse prendre en paramètre
un identifiant de réservation existant, et que dans ce cas, le créneau
qui était attaché à la réservation se libère en même temps que le
nouveau est réservé."


Fichiers

Révisions associées

Révision ab9ff7ad (diff)
Ajouté par Emmanuel Cazenave il y a presque 5 ans

api: cancel a booking when making a new one (#33489)

Historique

#1

Mis à jour par Emmanuel Cazenave il y a presque 5 ans

  • Echéance mis à 12 juin 2019
#2

Mis à jour par Emmanuel Cazenave il y a presque 5 ans

Partis pris peut-être peu éclairé d'ignorer le problème si la réservation qu'on cherche à annuler n'existe pas ou est déjà annulée.

#3

Mis à jour par Frédéric Péters il y a presque 5 ans

Partis pris peut-être peu éclairé d'ignorer le problème si la réservation qu'on cherche à annuler n'existe pas ou est déjà annulée.

Retourner une erreur dans ces situations.

#4

Mis à jour par Emmanuel Cazenave il y a presque 5 ans

  • Echéance changé de 12 juin 2019 à 05 juin 2019
#6

Mis à jour par Frédéric Péters il y a presque 5 ans

Je me dis que ça pourrait être monté plus haut, histoire de ne pas avoir à calculer les créneaux dispos si la réservation ne peut de toute façon pas se faire.

Aussi, vérifier count, et là, au choix, soit obliger que ça soit nécessairement 1, soit prêter attention au primary_booking, et assurer que le count corresponde à celui qui avait servi à la réservation.

#7

Mis à jour par Emmanuel Cazenave il y a presque 5 ans

Flash : manque aussi d'encapsuler tout ça dans une transaction.

#8

Mis à jour par Emmanuel Cazenave il y a presque 5 ans

La totale.

#10

Mis à jour par Emmanuel Cazenave il y a presque 5 ans

Je me dis soudainement qu'on a besoin d'être plus subtil sur le calcul du nombre de places restantes : un événement pourrait être vu comme plein et la réservation refusée parce qu'on ne prends pas en compte les places libérées par l'annulation dans ce calcul.

#11

Mis à jour par Emmanuel Cazenave il y a presque 5 ans

Emmanuel Cazenave a écrit :

Je me dis soudainement qu'on a besoin d'être plus subtil sur le calcul du nombre de places restantes : un événement pourrait être vu comme plein et la réservation refusée parce qu'on ne prends pas en compte les places libérées par l'annulation dans ce calcul.

Ça n'a aucun sens.

#12

Mis à jour par Thomas Noël il y a presque 5 ans

Dans la réponse, s'il y a eu un cancel, je serais pour le dire, genre « response['cancelled'] = payload.get('cancel_booking_id') » dans l'idée que wcs stockera ça dans son retour, et on ainsi savoir que la réservation en a aussi annulé une autre (et le dire à l'usager, avec juste un "if response_data_cancelled" dans le mail, ce genre de truc). Je suis d'accord qu'on le sait déjà car on a fait l'appel webservice pour, mais il peut avoir un workflow avec différentes branches, etc...

Aussi, en fait, au lieu de juste faire « if 'cancel_booking_id' in payload » on devrait plutôt faire un « if payload.get('cancel_booking_id'): » dans l'idée qu'un appel webservice avec un cancel_booking_id vide, c'est acceptable, ça veut juste dire "y'a rien à annuler". Ca simplifiera l'appel via les workflows -- bon, j'imagine que le « cancel_booking_id = serializers.IntegerField() » va nous faire chier.

#13

Mis à jour par Emmanuel Cazenave il y a presque 5 ans

  • Statut changé de Solution proposée à Information nécessaire
  • Assigné à changé de Emmanuel Cazenave à Pierre Cros

Thomas Noël a écrit :

Dans la réponse, s'il y a eu un cancel, je serais pour le dire, genre « response['cancelled'] = payload.get('cancel_booking_id') » dans l'idée que wcs stockera ..

Pris en compte, j'ai mis cancelled_booking_id.

Aussi, en fait, au lieu de juste faire « if 'cancel_booking_id' in payload » on devrait plutôt faire un « if payload.get('cancel_booking_id'): » ...

Ça ouvre quand même en grand la porte à des annulations qui ne se font pas parce que paramétrage de l'action d'appel webservice foirée et pas de remontée d'erreur.

Input needed : Pierre, est-ce que dans l'utilisation que tu imagines tu as besoin que la même action d'appel webservice fasse tantôt une annulation tantôt n'en fasse pas ? (ça nous rassurerait que dans un appel donné, si le paramètre cancel_booking_id est passé, on n'autorise pas que la valeur en fasse soit vide)

#14

Mis à jour par Thomas Noël il y a presque 5 ans

Emmanuel Cazenave a écrit :

Aussi, en fait, au lieu de juste faire « if 'cancel_booking_id' in payload » on devrait plutôt faire un « if payload.get('cancel_booking_id'): » ...

Ça ouvre quand même en grand la porte à des annulations qui ne se font pas parce que paramétrage de l'action d'appel webservice foirée et pas de remontée d'erreur.

Effectivement, laissons tomber pour l'instant. On verra si c'est vraiment utile pour remplacer par quelque chose comme -1 ou 0... (oui, je sais, c'est moche)

Tu rajoutes un test qui faile avec params={'cancel_booking_id': ''} ? (pour le jour où ça changera) (oui, j'aime être pénible)

#15

Mis à jour par Emmanuel Cazenave il y a presque 5 ans

Thomas Noël a écrit :

Tu rajoutes un test qui faile avec params={'cancel_booking_id': ''} ? (pour le jour où ça changera) (oui, j'aime être pénible)

Voilà (tout à la fin du test).

#16

Mis à jour par Thomas Noël il y a presque 5 ans

  • Statut changé de Solution proposée à Solution validée
  • Assigné à changé de Pierre Cros à Emmanuel Cazenave
#17

Mis à jour par Pierre Cros il y a presque 5 ans

Si je comprends correctement, tu peux committer Manu ? Je testerai après déploiement sur la recette.

#18

Mis à jour par Pierre Cros il y a presque 5 ans

Un peu tardivement je vois la question sur les événements mais je comprends pas l'utilité de déplacer dans un événement, pour moi c'est un truc limité au RdV.

Mais c'est peut-être qu'on peut déplacer d'un événement à un autre ce que je n'avais pas compris.

#19

Mis à jour par Emmanuel Cazenave il y a presque 5 ans

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

Pierre Cros a écrit :

Mais c'est peut-être qu'on peut déplacer d'un événement à un autre ce que je n'avais pas compris.

Oui pas de restrictions sur rdv/évennement.

Author: Emmanuel Cazenave <ecazenave@entrouvert.com>
Date:   Tue May 28 16:32:30 2019 +0200

    api: cancel a booking when making a new one (#33489)
#20

Mis à jour par Frédéric Péters il y a presque 5 ans

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

Formats disponibles : Atom PDF