Projet

Général

Profil

Development #44157

Possibilité d'annuler un événement

Ajouté par Frédéric Péters il y a presque 4 ans. Mis à jour il y a plus de 3 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Aujourd'hui ça ne se fait pas, on est obligé de supprimer l'événement ou lui traffiquer sa date pour le mettre dans le passé, ou désormais lui mettre une date de publication dans le futur.

Ce serait bien d'avoir une action explicite.


Fichiers

Révisions associées

Révision 6ea150a0 (diff)
Ajouté par Valentin Deniaud il y a plus de 3 ans

templates: rename extra-actions block to just actions (#44157)

extra-actions should only designate options in kebab menu.

Révision 677ec534 (diff)
Ajouté par Valentin Deniaud il y a plus de 3 ans

templates: change scope of actions blocks (#44157)

It will allow adding extra-actions buttons in child templates.

Révision bde66b58 (diff)
Ajouté par Valentin Deniaud il y a plus de 3 ans

manager: add event cancellation (#44157)

Historique

#2

Mis à jour par Valentin Deniaud il y a presque 4 ans

  • Assigné à mis à Valentin Deniaud
#3

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

(peut-être commencer par #44159)

#4

Mis à jour par Valentin Deniaud il y a presque 4 ans

C'est plutôt WIP, je vais attendre que #44159 soit bon pour finir.

En passant, quid de l'action inverse, « désannuler » un évènement ?

#5

Mis à jour par Frédéric Péters il y a plus de 3 ans

C'est plutôt WIP, je vais attendre que #44159 soit bon pour finir.

Yep finissons l'autre d'abord.

En passant, quid de l'action inverse, « désannuler » un évènement ?

Je dirais que non ne considérons pas ça.

#6

Mis à jour par Valentin Deniaud il y a plus de 3 ans

Valentin Deniaud a écrit :

C'est plutôt WIP, je vais attendre que #44159 soit bon pour finir.

Maintenant qu'il est bon, j'ai repris ça, avec les mêmes logiques (pouvoir forcer la suppression si il y a une erreur lors du callback, interdire si backoffice_url sans callback_url).

Est-ce que le flag Event.cancelled doit plutôt s'appeler cancellation_datetime pour coller au flag de Booking ?

Remarque également, on se retrouve à devoir faire un appel à wcs par réservation, il y aurait une réflexion peut-être conséquente à mener pour améliorer ça.

#7

Mis à jour par Frédéric Péters il y a plus de 3 ans

Je pense ça ne va pas tenir de faire la même chose, on va trop rapidement arriver à des événements avec trop de réservations pour gérer ça de manière synchrone; pour moi ça doit du coup se passer en deux temps, genre un attribut supplémentaire "en cours d'annulation" et passer dessus lors d'un cron. Et clairement ça empêche la gestion d'erreur fine, j'imagine que le seul truc possible c'est produire un rapport d'annulation, qui serait annoncé en haut de la page de l'événement s'il y a eu des erreurs.

#8

Mis à jour par Valentin Deniaud il y a plus de 3 ans

Je peux faire ça, mais avoir un endpoint /jump/ générique auquel on puisse balancer le nom du trigger et les identifiants des demandes ça ne serait pas plus simple et mieux sur le long terme ?

#9

Mis à jour par Frédéric Péters il y a plus de 3 ans

Je peux faire ça, mais avoir un endpoint /jump/ générique auquel on puisse balancer le nom du trigger et les identifiants des demandes ça ne serait pas plus simple et mieux sur le long terme ?

Il y a un peu ça avec les actions de masse mais ça ne change pas tellement l'affaire, un appel ou 150 appels, ça doit de toute façon être asynchrone.

#10

Mis à jour par Valentin Deniaud il y a plus de 3 ans

Frédéric Péters a écrit :

Je peux faire ça, mais avoir un endpoint /jump/ générique auquel on puisse balancer le nom du trigger et les identifiants des demandes ça ne serait pas plus simple et mieux sur le long terme ?

Il y a un peu ça avec les actions de masse mais ça ne change pas tellement l'affaire, un appel ou 150 appels, ça doit de toute façon être asynchrone.

OK, je me disais que temps d'un appel << temps de 150 appels, et qu'on pouvait rester sur du synchrone comme pour l'annulation d'une réservation.

Là j'ai peur que ça soit peu agréable d'utilisation, vouloir annuler un évènement puis devoir attendre x minutes pour savoir ce qu'il en est finalement, avec rien de mieux à faire que de rafraîchir la page. Pour améliorer ça peut-être envoyer une notification par mail à l'annulateur quand la suppression est terminée, avec les éventuelles erreurs rencontrées ?

Ça risque également d'être très pénible dès lors qu'il y a des erreurs. Dans le cas où un wf est mal configuré et que l'appel au trigger échoue, il faut clairement alerter et aller agir là-bas. Par contre quand l'échec vient d'un formulaire qui n'existe plus, peut-être le cas majoritaire, ça pourrait être ignoré ? Je crois qu'en l'état actuel des choses le retour de l'API ne permet pas de distinguer les deux, à vérifier.

#11

Mis à jour par Valentin Deniaud il y a plus de 3 ans

Ça pourrait donc donner ça (je suis en train d'écrire les tests).

Un autre problème des appels multiples à l'API que je n'avais pas noté c'est qu'on a pas d'atomicité, on peut se retrouver à annuler une partie des réservations associées à l'évènement avant d'avoir une erreur. Tant qu'à faire donc, j'ai pris le parti d'essayer d'annuler tout ce qui peut l'être, c'est à dire de ne pas s'arrêter au premier échec.

Je pense qu'il n'est pas vraiment utile de garder les rapports d'erreur en base de donnée ad vitam eternam, est-ce que j'ajoute quelque chose dans la commande pour les supprimer après un mois ?

#12

Mis à jour par Frédéric Péters il y a plus de 3 ans

        for event in Event.objects.filter(cancellation_scheduled=True):

Je récupérerais les events, les marquerait cancellation_scheduled=False, puis ferais le reste; dans l'idée qu'un cron un peu long ne vienne pas rejouer la même chose.

Un autre problème des appels multiples à l'API que je n'avais pas noté c'est qu'on a pas d'atomicité, on peut se retrouver à annuler une partie des réservations associées à l'évènement avant d'avoir une erreur. Tant qu'à faire donc, j'ai pris le parti d'essayer d'annuler tout ce qui peut l'être, c'est à dire de ne pas s'arrêter au premier échec.

Oui, très bien, on n'a pas à s'arrêter parce qu'une réservation pose problème.

    font-weight: bold;

n'est pas indentée comme les autres.

{% blocktrans }The {{ bookings_count }} related bookings will also be cancelled.{ endblocktrans %}

et

({% blocktrans with count=report.bookings.count }{{ count }} failures{ endblocktrans %})

et peut-être d'autres aussi.

Gérer {% plural %}

Je pense qu'il n'est pas vraiment utile de garder les rapports d'erreur en base de donnée ad vitam eternam, est-ce que j'ajoute quelque chose dans la commande pour les supprimer après un mois ?

Yep.

#14

Mis à jour par Frédéric Péters il y a plus de 3 ans

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

Mis à jour par Valentin Deniaud il y a plus de 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit bde66b58e0364b915df43425969326d80adf8e2a
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Thu Jul 9 12:46:13 2020 +0200

    manager: add event cancellation (#44157)

commit 677ec53426c3f1453fb71be30806375caccd626f
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Tue Aug 11 16:10:21 2020 +0200

    templates: change scope of actions blocks (#44157)

    It will allow adding extra-actions buttons in child templates.

commit 6ea150a0ed089a56d9353c8b835d2961e64949f0
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Tue Aug 11 10:26:24 2020 +0200

    templates: rename extra-actions block to just actions (#44157)

    extra-actions should only designate options in kebab menu.
#16

Mis à jour par Frédéric Péters il y a plus de 3 ans

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

Formats disponibles : Atom PDF