Merge PR #170 into 14.0

Signed-off-by DarioLodeiros
This commit is contained in:
OCA-git-bot
2022-07-30 10:38:04 +00:00
3 changed files with 20 additions and 103 deletions

View File

@@ -82,7 +82,11 @@ class PmsAvailabilityPlan(models.Model):
@api.model
def update_quota(
self, pricelist_id, room_type_id, date, pms_property_id, impacts_quota_id=False
self,
pricelist_id,
room_type_id,
date,
pms_property_id,
):
if pricelist_id and room_type_id and date:
rule = self.env["pms.availability.plan.rule"].search(
@@ -97,38 +101,8 @@ class PmsAvailabilityPlan(models.Model):
if rule:
rule.ensure_one()
if rule and rule.quota != -1 and rule.quota > 0:
# the line has no rule item applied before
if not impacts_quota_id:
rule.quota -= 1
return rule.id
# the line has a rule item applied before
elif impacts_quota_id != rule.id:
# decrement quota on current rule item
rule.quota -= 1
# check old rule item
old_rule = self.env["pms.availability.plan.rule"].search(
[("id", "=", impacts_quota_id)]
)
# restore quota in old rule item
if old_rule:
old_rule.quota += 1
return rule.id
# in any case, check old rule item
if impacts_quota_id:
old_rule = self.env["pms.availability.plan.rule"].search(
[("id", "=", impacts_quota_id)]
)
# and restore quota in old rule item
if old_rule and (not rule or rule.id != old_rule.id):
old_rule.quota += 1
rule.quota -= 1
return True
return False
# Action methods

View File

@@ -102,13 +102,6 @@ class PmsReservationLine(models.Model):
store=True,
compute="_compute_occupies_availability",
)
impacts_quota = fields.Integer(
string="Impacts quota",
help="This line has been taken into account in the avail quota",
readonly=True,
store=True,
compute="_compute_impacts_quota",
)
overnight_room = fields.Boolean(
related="reservation_id.overnight_room",
store=True,
@@ -341,19 +334,6 @@ class PmsReservationLine(models.Model):
# no matter what it is
line.room_id = list(bests.keys())[0]
@api.depends("reservation_id.room_type_id", "reservation_id.pricelist_id")
def _compute_impacts_quota(self):
for line in self:
reservation = line.reservation_id
impacts_quota_id = line.impacts_quota
line.impacts_quota = self.env["pms.availability.plan"].update_quota(
pricelist_id=reservation.pricelist_id.id,
room_type_id=reservation.room_type_id.id,
date=line.date,
pms_property_id=reservation.pms_property_id.id,
impacts_quota_id=impacts_quota_id,
)
@api.depends(
"reservation_id",
"reservation_id.room_type_id",
@@ -498,6 +478,19 @@ class PmsReservationLine(models.Model):
else:
record.overbooking = False
@api.model_create_multi
def create(self, vals_list):
records = super().create(vals_list)
for line in records:
reservation = line.reservation_id
self.env["pms.availability.plan"].update_quota(
pricelist_id=reservation.pricelist_id.id,
room_type_id=reservation.room_type_id.id,
date=line.date,
pms_property_id=reservation.pms_property_id.id,
)
return records
# Constraints and onchanges
@api.constrains("date")
def constrains_duplicated_date(self):

View File

@@ -604,53 +604,3 @@ class TestPmsRoomTypeAvailabilityRules(TestPms):
"partner_id": self.partner1.id,
}
)
def test_rule_update_quota_on_update_reservation(self):
"""
Checks that an availability rule is maintained if its pricelist is modified.
---------------------
Quota rule is restored after creating a reservation with pricelist linked
to an availability rule that applies and then modify the pricelist of the
reservation and no rules applies
"""
# ARRANGE
test_quota = 2
test_pricelist3 = self.env["product.pricelist"].create(
{
"name": "test pricelist 2",
}
)
self.pricelist2.pms_property_ids = [
(4, self.pms_property1.id),
(4, self.pms_property2.id),
(4, self.pms_property3.id),
]
rule = self.env["pms.availability.plan.rule"].create(
{
"availability_plan_id": self.test_room_type_availability1.id,
"room_type_id": self.test_room_type_double.id,
"date": datetime.date.today(),
"quota": test_quota,
"pms_property_id": self.pms_property3.id,
}
)
reservation = self.env["pms.reservation"].create(
{
"pms_property_id": self.pms_property3.id,
"checkin": datetime.date.today(),
"checkout": datetime.date.today() + datetime.timedelta(days=1),
"adults": 2,
"room_type_id": self.test_room_type_double.id,
"pricelist_id": self.pricelist2.id,
"partner_id": self.partner1.id,
}
)
# ACT
reservation.pricelist_id = test_pricelist3.id
reservation.flush()
self.assertEqual(
test_quota,
rule.quota,
"The quota should be restored after changing the reservation's pricelist",
)