[IMP]pms: overbooking reservation _compute

This commit is contained in:
Darío Lodeiros
2024-03-16 09:37:57 +01:00
parent a34587023d
commit 5c06ffb6e5
2 changed files with 23 additions and 29 deletions

View File

@@ -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 = {}

View File

@@ -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