From c579086094e0b97050658a9e2f3a0c2331c2f981 Mon Sep 17 00:00:00 2001 From: amandine-sahl Date: Fri, 30 Jun 2023 11:19:04 +0200 Subject: [PATCH] Display cancellation reason + disable cancellation form if event not cancelled in Geotrek --- backend/core/models.py | 13 +++++++++ backend/core/schemas.py | 8 ++++++ front-vite/src/components/EventCancelForm.vue | 6 ++--- front-vite/src/views/EventListingView.vue | 27 ++++++++++++------- 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/backend/core/models.py b/backend/core/models.py index a3e9e1ce..ed65537c 100644 --- a/backend/core/models.py +++ b/backend/core/models.py @@ -80,6 +80,9 @@ class GTEvents(db.Model): published = db.Column(db.Boolean) deleted = db.Column(db.Boolean) cancelled = db.Column(db.Boolean) + cancellation_reason_id = db.Column( + db.Integer, db.ForeignKey("public.tourism_cancellationreason.id") + ) meeting_point = db.Column(db.Unicode) start_time = db.Column(db.Time) @@ -87,6 +90,9 @@ class GTEvents(db.Model): "TReservations", lazy="joined", backref=db.backref("event", lazy="joined") ) bilan = db.relationship("TAnimationsBilans", lazy="joined", uselist=False) + cancellation_reason = db.relationship( + "GTCancellationReason", lazy="select", uselist=False + ) info = db.relationship("TEventInfo", lazy="joined", uselist=False) type = db.relationship("GTEventType", lazy="joined") @@ -164,6 +170,13 @@ def is_reservation_possible_for(self, nb_people): return False +class GTCancellationReason(db.Model): + __tablename__ = "tourism_cancellationreason" + __table_args__ = {"schema": "public"} + id = db.Column(db.Integer, primary_key=True) + label = db.Column(db.Unicode, nullable=False) + + class GTEventType(db.Model): __tablename__ = "tourism_touristiceventtype" __table_args__ = {"schema": "public"} diff --git a/backend/core/schemas.py b/backend/core/schemas.py index fd95b570..eb7af0af 100644 --- a/backend/core/schemas.py +++ b/backend/core/schemas.py @@ -9,6 +9,7 @@ TAnimationsBilans, VExportBilan, TEventInfo, + GTCancellationReason, ) @@ -122,6 +123,12 @@ class Meta: load_instance = True +class GTCancellationReasonSchema(SQLAlchemyAutoSchema): + class Meta: + model = GTCancellationReason + load_instance = True + + class TAnimationsBilansSchema(SQLAlchemyAutoSchema): class Meta: model = TAnimationsBilans @@ -158,6 +165,7 @@ class Meta: type = fields.Nested(lambda: GTEventTypeSchema) bilan = fields.Nested(lambda: TAnimationsBilansSchema) + cancellation_reason = fields.Nested(lambda: GTCancellationReasonSchema) sum_participants = fields.Integer(dump_only=True) sum_participants_liste_attente = fields.Integer(dump_only=True) sum_participants_adultes = fields.Integer(dump_only=True) diff --git a/front-vite/src/components/EventCancelForm.vue b/front-vite/src/components/EventCancelForm.vue index 1411da82..cae140e0 100644 --- a/front-vite/src/components/EventCancelForm.vue +++ b/front-vite/src/components/EventCancelForm.vue @@ -35,14 +35,14 @@ :disabled="Object.keys(errors).length > 0 || saving" @click="onSubmit($event, values)" > - + {{ saving ? 'Dé annulation en cours...' : 'Dé annuler l\'animation' }} {{ saving ? 'Annulation en cours...' : 'Annuler l\'animation' }} - +
Une erreur est survenue : @@ -72,7 +72,7 @@ const formSchema = yup.object().shape({ async function onSubmit (event: any, values: any) { confirm.require({ target: event.target, - message: props.annulation + message: props.annulation ? 'Êtes vous sûr de vouloir dé-annuler cette animation ?' : 'Êtes vous sûr de vouloir annuler cette animation ?', icon: 'pi pi-exclamation-triangle', diff --git a/front-vite/src/views/EventListingView.vue b/front-vite/src/views/EventListingView.vue index 0ab3746a..e405dbf6 100644 --- a/front-vite/src/views/EventListingView.vue +++ b/front-vite/src/views/EventListingView.vue @@ -161,7 +161,7 @@ :attente-nb="data.sum_participants_liste_attente" :display-text="false" /> - {{ formatDateString(data.begin_date) || '?' }} + {{ formatDateString(data.begin_date) || '?' }} - {{ formatDateString(data.end_date) }} @@ -208,6 +208,10 @@

Animation annulée

Raison: + {{ selectedEvent.cancellation_reason?.label }} +
+
+ Commentaire: {{ selectedEvent.bilan?.raison_annulation }}
@@ -358,7 +362,7 @@ :error="bilanError" :original-data="selectedEvent.bilan" :summary="selectedEventSummary" - + @submit="onSaveBilan" /> @@ -374,15 +378,17 @@
-

L'annulation d'une animation doit d'abord être faite dans GeoTrek.

-

À partir de l'outil de réservation, l'annulation va déclencher l'envoi d'un mail à tous les inscrits +

L'annulation d'une animation doit d'abord être faite dans GeoTrek.

+ +

Une fois l'animation annulée dans GeoTrek, le formulaire ci dessous va déclencher l'envoi d'un mail à tous les inscrits pour leur préciser l'annulation de l'animation.

@@ -396,7 +402,7 @@

Merci de sélectioner une animation dans la liste de gauche.

-
+ @@ -491,6 +497,7 @@ const formOpened = ref(false) const selectedEvent = ref(null) const selectedEventId = ref(parseInt(currentRoute.params.id as string)) const selectedEventCanceled = computed(() => selectedEvent.value?.cancelled === true) +const selectedEventBilanCanceled = computed(() => selectedEvent.value?.bilan?.annulation === true) const selectedEventInfoRDV = ref({ info_rdv: '' }) @@ -521,7 +528,7 @@ async function loadEvents () { if (currentValue instanceof Date) { params[key] = currentValue.toISOString() } - } + } }) try { const data = await getEvents(params) @@ -546,8 +553,8 @@ async function loadReservations (page: number = 0) { resas.value = { results: [], total: 0 } resas.value = await getReservations({ page: page + 1, - event_id: selectedEvent.value.id - }) + event_id: selectedEvent.value.id + }) } function onPageReservations($event: any) { loadReservations($event.page) @@ -712,7 +719,7 @@ onBeforeMount(async () => {