From 608652866b91d6e5a9c67fb4398fc07a102b69cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Wed, 21 Feb 2024 09:50:37 +0100 Subject: [PATCH] [IMP]pms: force cancel reservation by action_cancel, and automatic cancel folio if all reservations are cancelled --- pms/models/pms_reservation.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py index 0496c7942..e65832922 100644 --- a/pms/models/pms_reservation.py +++ b/pms/models/pms_reservation.py @@ -1870,6 +1870,10 @@ class PmsReservation(models.Model): raise ValidationError( _("No person from reserve %s has arrived", record.name) ) + if record.state == "cancel" and not self.env.context.get("action_cancel"): + raise ValidationError( + _("The reservation must be canceled by action: action_cancel") + ) @api.constrains("arrival_hour") def _check_arrival_hour(self): @@ -2307,9 +2311,15 @@ class PmsReservation(models.Model): if not record.allowed_cancel: raise UserError(_("This reservation cannot be cancelled")) else: - record.state = "cancel" + record.with_context(action_cancel=True).state = "cancel" record._check_cancel_penalty() record.cancel_datetime = fields.Datetime.now() + if all( + record.folio_id.reservation_ids.filtered( + lambda r: r.state == "cancel" + ) + ): + record.folio_id.action_cancel() record.folio_id._compute_amount() def action_assign(self):