From 5c06ffb6e5181a29bb2dff90c1aa3069854da0f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Sat, 16 Mar 2024 09:37:57 +0100 Subject: [PATCH] [IMP]pms: overbooking reservation _compute --- pms/models/pms_reservation.py | 13 +++++----- pms/models/pms_reservation_line.py | 39 ++++++++++++------------------ 2 files changed, 23 insertions(+), 29 deletions(-) diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py index d4c7a6156..8a3275930 100644 --- a/pms/models/pms_reservation.py +++ b/pms/models/pms_reservation.py @@ -496,8 +496,8 @@ class PmsReservation(models.Model): overbooking = fields.Boolean( string="Is Overbooking", help="Indicate if exists overbooking", - default=False, - copy=False, + compute="_compute_overbooking", + store=True, ) nights = fields.Integer( string="Nights", @@ -1773,6 +1773,11 @@ class PmsReservation(models.Model): recs = self.search([]).filtered(lambda x: x.checkin_partner_pending_count > 0) return [("id", "in", [x.id for x in recs])] if recs else [] + @api.depends("reservation_line_ids", "reservation_line_ids.overbooking") + def _compute_overbooking(self): + for record in self: + record.overbooking = any(record.reservation_line_ids.mapped("overbooking")) + def _get_default_segmentation(self): folio = False segmentation_ids = False @@ -2290,10 +2295,6 @@ class PmsReservation(models.Model): reservations._compute_priority() return True - def overbooking_button(self): - self.ensure_one() - self.overbooking = not self.overbooking - def confirm(self): for record in self: vals = {} diff --git a/pms/models/pms_reservation_line.py b/pms/models/pms_reservation_line.py index 4bd2de447..e7e9385ae 100644 --- a/pms/models/pms_reservation_line.py +++ b/pms/models/pms_reservation_line.py @@ -245,10 +245,10 @@ class PmsReservationLine(models.Model): # if the preferred room is NOT available else: - if self.env.context.get("force_overbooking"): - line.overbooking = True - line.room_id = reservation.preferred_room_id - elif not line.occupies_availability: + if ( + self.env.context.get("force_overbooking") + or not line.occupies_availability + ): line.room_id = reservation.preferred_room_id else: raise ValidationError( @@ -275,7 +275,6 @@ class PmsReservationLine(models.Model): real_avail=True, ): if self.env.context.get("force_overbooking"): - reservation.overbooking = True line.room_id = reservation.room_type_id.room_ids.filtered( lambda r: r.pms_property_id == line.pms_property_id )[0] @@ -408,7 +407,7 @@ class PmsReservationLine(models.Model): for line in self: if ( line.reservation_id.state == "cancel" - or line.reservation_id.overbooking + or line.overbooking or line.is_reselling ): line.occupies_availability = False @@ -476,25 +475,19 @@ class PmsReservationLine(models.Model): discount = first_discount + cancel_discount line.price_day_total = line.price - discount - @api.depends("reservation_id.overbooking") + @api.depends("room_id") def _compute_overbooking(self): - for record in self: - if record.reservation_id.overbooking: - real_avail = ( - self.env["pms.availability"] - .search( - [ - ("room_type_id", "=", record.room_id.room_type_id.id), - ("date", "=", record.date), - ("pms_property_id", "=", record.pms_property_id.id), - ] - ) - .real_avail - ) - if real_avail == 0: + for record in self.filtered("room_id"): + if record.occupies_availability and not record.overbooking: + if self.env["pms.reservation.line"].search( + [ + ("date", "=", record.date), + ("room_id", "=", record.room_id.id), + ("id", "!=", record.id), + ("occupies_availability", "=", True), + ] + ): record.overbooking = True - else: - record.overbooking = False else: record.overbooking = False