From c64c8c480a1d0906dd6d34a135b7bb1637ef7077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Sat, 30 Jul 2022 10:20:05 +0200 Subject: [PATCH] [RFC]pms: Refactor quota compute to inherit create --- pms/models/pms_availability_plan.py | 40 +++------------ pms/models/pms_reservation_line.py | 33 +++++------- pms/tests/test_pms_availability_plan_rules.py | 50 ------------------- 3 files changed, 20 insertions(+), 103 deletions(-) diff --git a/pms/models/pms_availability_plan.py b/pms/models/pms_availability_plan.py index f51314127..68065a699 100644 --- a/pms/models/pms_availability_plan.py +++ b/pms/models/pms_availability_plan.py @@ -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 diff --git a/pms/models/pms_reservation_line.py b/pms/models/pms_reservation_line.py index ba348384d..aa64e0d1b 100644 --- a/pms/models/pms_reservation_line.py +++ b/pms/models/pms_reservation_line.py @@ -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): diff --git a/pms/tests/test_pms_availability_plan_rules.py b/pms/tests/test_pms_availability_plan_rules.py index d04cda41d..3bb5c2c62 100644 --- a/pms/tests/test_pms_availability_plan_rules.py +++ b/pms/tests/test_pms_availability_plan_rules.py @@ -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", - )