diff --git a/pms/models/pms_folio.py b/pms/models/pms_folio.py index ce8e19c1f..7749a9eda 100644 --- a/pms/models/pms_folio.py +++ b/pms/models/pms_folio.py @@ -639,10 +639,6 @@ class PmsFolio(models.Model): for folio in self: if folio.agency_id and folio.agency_id.invoice_to_agency: folio.partner_id = folio.agency_id.id - elif folio.agency_id and not folio.partner_name: - # if the customer not is the agency but we dont know the customer's name, - # set the name provisional - folio.partner_name = _("Reservation from ") + folio.agency_id.name elif not folio.partner_id: folio.partner_id = False @@ -765,53 +761,20 @@ class PmsFolio(models.Model): else: order.invoice_status = "no" - @api.depends("partner_id", "partner_id.name", "reservation_ids.partner_name") + @api.depends("partner_id", "partner_id.name") def _compute_partner_name(self): for record in self: - if record.partner_id and not record.partner_name: - record.partner_name = record.partner_id.name - # if there is only one customer name in the folio reservations - # we update the partner name of the folio when the partner name of - # the reservations is modified - elif ( - len(record.reservation_ids.mapped("partner_name")) == 1 - and not record.partner_name - ): - record.partner_name = record.reservation_ids[0].partner_name - elif not record.partner_name: - record.partner_name = False + self._apply_partner_name(record) - @api.depends("partner_id", "partner_id.email", "reservation_ids.partner_email") + @api.depends("partner_id", "partner_id.email") def _compute_email(self): for record in self: - if record.partner_id and not record.email: - record.email = record.partner_id.email - # if there is only one customer email in the folio reservations - # we update the partner email of the folio when the partner email of - # the reservations is modified - elif ( - len(record.reservation_ids.mapped("partner_email")) == 1 - and not record.email - ): - record.email = record.reservation_ids[0].partner_email - elif not record.email: - record.email = False + self._apply_email(record) - @api.depends("partner_id", "partner_id.mobile", "reservation_ids.partner_mobile") + @api.depends("partner_id", "partner_id.mobile") def _compute_mobile(self): for record in self: - if record.partner_id and not record.mobile: - record.mobile = record.partner_id.mobile - # if there is only one customer mobile in the folio reservations - # we update the partner mobile of the folio when the partner mobile of - # the reservations is modified - elif ( - len(record.reservation_ids.mapped("partner_mobile")) == 1 - and not record.mobile - ): - record.mobile = record.reservation_ids[0].partner_mobile - elif not record.mobile: - record.mobile = False + self._apply_mobile(record) @api.depends( "partner_name", @@ -1706,3 +1669,32 @@ class PmsFolio(models.Model): discount_factor = discount_factor * ((100.0 - discount) / 100.0) final_discount = 100.0 - (discount_factor * 100.0) return final_discount + + @api.model + def _apply_partner_name(self, record): + if record.partner_id and not record.partner_name: + record.partner_name = record.partner_id.name + elif ( + record.agency_id + and not record.agency_id.invoice_to_agency + and not record.partner_name + ): + # if the customer not is the agency but we dont know the customer's name, + # set the name provisional + record.partner_name = _("Reservation from ") + record.agency_id.name + elif not record.partner_name: + record.partner_name = False + + @api.model + def _apply_mobile(self, record): + if record.partner_id and not record.mobile: + record.mobile = record.partner_id.mobile + elif not record.mobile: + record.mobile = False + + @api.model + def _apply_email(self, record): + if record.partner_id and not record.email: + record.email = record.partner_id.email + elif not record.email: + record.email = False diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py index 2d7fb57f4..d518e9e57 100644 --- a/pms/models/pms_reservation.py +++ b/pms/models/pms_reservation.py @@ -466,14 +466,14 @@ class PmsReservation(models.Model): readonly=False, compute="_compute_partner_name", ) - partner_email = fields.Char( + email = fields.Char( string="E-mail", help="Customer E-mail", store=True, readonly=False, compute="_compute_email", ) - partner_mobile = fields.Char( + mobile = fields.Char( string="Mobile", help="Customer Mobile", store=True, @@ -752,10 +752,12 @@ class PmsReservation(models.Model): def _compute_partner_id(self): for reservation in self: if not reservation.partner_id: - if reservation.folio_id: + if reservation.folio_id and reservation.folio_id.partner_id: reservation.partner_id = reservation.folio_id.partner_id - elif reservation.agency_id: + elif reservation.agency_id and reservation.agency_id.invoice_to_agency: reservation.partner_id = reservation.agency_id + elif not reservation.folio_id and not reservation.agency_id: + reservation.partner_id = False @api.depends("checkin", "checkout") def _compute_reservation_line_ids(self): @@ -1210,47 +1212,32 @@ class PmsReservation(models.Model): else: record.shared_folio = False - @api.depends("partner_id", "partner_id.name", "folio_id.partner_name") + @api.depends("partner_id", "partner_id.name") def _compute_partner_name(self): for record in self: - if record.partner_id and not record.partner_name: - record.partner_name = record.partner_id.name - elif record.folio_id.partner_name and not record.partner_name: - record.partner_name = record.folio_id.partner_name - elif not record.partner_name: - record.partner_name = False + self.env["pms.folio"]._apply_partner_name(record) @api.depends("partner_id", "partner_id.email") def _compute_email(self): for record in self: - if record.partner_id and not record.partner_email: - record.partner_email = record.partner_id.email - elif record.folio_id.email and not record.partner_email: - record.partner_email = record.folio_id.partner_email - elif not record.partner_email: - record.partner_email = False + self.env["pms.folio"]._apply_email(record) @api.depends("partner_id", "partner_id.mobile") def _compute_mobile(self): for record in self: - if record.partner_id and not record.partner_mobile: - record.partner_mobile = record.partner_id.mobile - elif record.folio_id.mobile and not record.partner_mobile: - record.partner_mobile = record.folio_id.partner_mobile - elif not record.partner_mobile: - record.partner_mobile = False + self.env["pms.folio"]._apply_mobile(record) @api.depends( "partner_name", - "partner_email", - "partner_mobile", + "email", + "mobile", "partner_id", ) def _compute_partner_incongruences(self): fields_mapping = { "partner_name": "name", - "partner_email": "email", - "partner_mobile": "mobile", + "email": "email", + "mobile": "mobile", } for record in self: incongruous_fields = False @@ -1581,8 +1568,8 @@ class PmsReservation(models.Model): default_vals["partner_id"] = folio.partner_id.id elif folio.partner_name: default_vals["partner_name"] = folio.partner_name - default_vals["partner_mobile"] = folio.mobile - default_vals["partner_email"] = folio.email + default_vals["mobile"] = folio.mobile + default_vals["email"] = folio.email else: raise ValidationError(_("Partner contact name is required")) vals.update(default_vals) @@ -1598,8 +1585,8 @@ class PmsReservation(models.Model): folio_vals["agency_id"] = vals.get("agency_id") elif vals.get("partner_name"): folio_vals["partner_name"] = vals.get("partner_name") - folio_vals["mobile"] = vals.get("partner_mobile") - folio_vals["email"] = vals.get("partner_email") + folio_vals["mobile"] = vals.get("mobile") + folio_vals["email"] = vals.get("email") else: raise ValidationError(_("Partner contact name is required")) # Create the folio in case of need diff --git a/pms/models/res_partner.py b/pms/models/res_partner.py index 6ce4fafc1..744678e0a 100644 --- a/pms/models/res_partner.py +++ b/pms/models/res_partner.py @@ -176,7 +176,7 @@ class ResPartner(models.Model): "pms_checkin_partner_ids", "pms_checkin_partner_ids.email", "pms_reservation_ids", - "pms_reservation_ids.partner_email", + "pms_reservation_ids.email", "pms_folio_ids", "pms_folio_ids.email", ) @@ -194,7 +194,7 @@ class ResPartner(models.Model): None, set( record.pms_checkin_partner_ids.mapped("email") - + record.pms_reservation_ids.mapped("partner_email") + + record.pms_reservation_ids.mapped("email") + record.pms_folio_ids.mapped("email"), ), ) @@ -210,7 +210,7 @@ class ResPartner(models.Model): "pms_checkin_partner_ids", "pms_checkin_partner_ids.mobile", "pms_reservation_ids", - "pms_reservation_ids.partner_mobile", + "pms_reservation_ids.mobile", "pms_folio_ids", "pms_folio_ids.mobile", ) @@ -228,7 +228,7 @@ class ResPartner(models.Model): None, set( record.pms_checkin_partner_ids.mapped("mobile") - + record.pms_reservation_ids.mapped("partner_mobile") + + record.pms_reservation_ids.mapped("mobile") + record.pms_folio_ids.mapped("mobile"), ), ) diff --git a/pms/tests/test_pms_reservation.py b/pms/tests/test_pms_reservation.py index fa0289411..e65e6ba47 100644 --- a/pms/tests/test_pms_reservation.py +++ b/pms/tests/test_pms_reservation.py @@ -4,82 +4,35 @@ from freezegun import freeze_time from odoo import fields from odoo.exceptions import UserError, ValidationError -from odoo.tests import common + +from .common import TestPms -@freeze_time("2012-01-14") -class TestPmsReservations(common.SavepointCase): - def create_common_scenario(self): - - self.test_pricelist1 = self.env["product.pricelist"].create( - { - "name": "test pricelist 1", - } - ) +class TestPmsReservations(TestPms): + def setUp(self): + super().setUp() # create a room type availability self.room_type_availability = self.env["pms.availability.plan"].create( { "name": "Availability plan for TEST", - "pms_pricelist_ids": [(6, 0, [self.test_pricelist1.id])], + "pms_pricelist_ids": [(6, 0, [self.pricelist1.id])], } ) - # create a sequences - self.folio_sequence = self.env["ir.sequence"].create( - { - "name": "PMS Folio", - "code": "pms.folio", - "padding": 4, - "company_id": self.env.ref("base.main_company").id, - } - ) - self.reservation_sequence = self.env["ir.sequence"].create( - { - "name": "PMS Reservation", - "code": "pms.reservation", - "padding": 4, - "company_id": self.env.ref("base.main_company").id, - } - ) - self.checkin_sequence = self.env["ir.sequence"].create( - { - "name": "PMS Checkin", - "code": "pms.checkin.partner", - "padding": 4, - "company_id": self.env.ref("base.main_company").id, - } - ) - # create a property - self.property = self.env["pms.property"].create( - { - "name": "MY PMS TEST", - "company_id": self.env.ref("base.main_company").id, - "default_pricelist_id": self.test_pricelist1.id, - "folio_sequence_id": self.folio_sequence.id, - "reservation_sequence_id": self.reservation_sequence.id, - "checkin_sequence_id": self.checkin_sequence.id, - } - ) - - # create room type class - self.room_type_class = self.env["pms.room.type.class"].create( - {"name": "Room", "default_code": "ROOM"} - ) - # create room type self.room_type_double = self.env["pms.room.type"].create( { - "pms_property_ids": [self.property.id], + "pms_property_ids": [self.pms_property1.id], "name": "Double Test", "default_code": "DBL_Test", - "class_id": self.room_type_class.id, + "class_id": self.room_type_class1.id, } ) # create rooms self.room1 = self.env["pms.room"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "name": "Double 101", "room_type_id": self.room_type_double.id, "capacity": 2, @@ -88,7 +41,7 @@ class TestPmsReservations(common.SavepointCase): self.room2 = self.env["pms.room"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "name": "Double 102", "room_type_id": self.room_type_double.id, "capacity": 2, @@ -97,63 +50,25 @@ class TestPmsReservations(common.SavepointCase): self.room3 = self.env["pms.room"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "name": "Double 103", "room_type_id": self.room_type_double.id, "capacity": 2, } ) - self.demo_user = self.env.ref("base.user_admin") + self.partner1 = self.env["res.partner"].create( + { + "firstname": "Jaime", + "lastname": "García", + "email": "jaime@example.com", + "birthdate_date": "1983-03-01", + "gender": "male", + } + ) self.id_category = self.env["res.partner.id_category"].create( {"name": "DNI", "code": "D"} ) - def create_multiproperty_scenario(self): - self.create_common_scenario() - self.property1 = self.env["pms.property"].create( - { - "name": "Property_1", - "company_id": self.env.ref("base.main_company").id, - "default_pricelist_id": self.env.ref("product.list0").id, - "folio_sequence_id": self.folio_sequence.id, - "reservation_sequence_id": self.reservation_sequence.id, - "checkin_sequence_id": self.checkin_sequence.id, - } - ) - - self.property2 = self.env["pms.property"].create( - { - "name": "Property_2", - "company_id": self.env.ref("base.main_company").id, - "default_pricelist_id": self.env.ref("product.list0").id, - "folio_sequence_id": self.folio_sequence.id, - "reservation_sequence_id": self.reservation_sequence.id, - "checkin_sequence_id": self.checkin_sequence.id, - } - ) - - self.property3 = self.env["pms.property"].create( - { - "name": "Property_3", - "company_id": self.env.ref("base.main_company").id, - "default_pricelist_id": self.env.ref("product.list0").id, - "folio_sequence_id": self.folio_sequence.id, - "reservation_sequence_id": self.reservation_sequence.id, - "checkin_sequence_id": self.checkin_sequence.id, - } - ) - self.room_type_class = self.env["pms.room.type.class"].create( - {"name": "Room Class", "default_code": "RCTEST"} - ) - - self.board_service = self.env["pms.board.service"].create( - { - "name": "Board Service Test", - "default_code": "CB", - } - ) - - @freeze_time("1980-11-01") def test_reservation_dates_not_consecutive(self): """ Check the constrain if not consecutive dates @@ -161,8 +76,6 @@ class TestPmsReservations(common.SavepointCase): Create correct reservation set 3 reservation lines consecutives (nights) """ # ARRANGE - self.create_common_scenario() - customer = self.env.ref("base.res_partner_12") today = fields.date.today() tomorrow = fields.date.today() + datetime.timedelta(days=1) three_days_later = fields.date.today() + datetime.timedelta(days=3) @@ -175,8 +88,8 @@ class TestPmsReservations(common.SavepointCase): self.env["pms.reservation"].create( { "room_type_id": self.room_type_double.id, - "partner_id": customer.id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, "reservation_line_ids": [ (0, False, {"date": today}), (0, False, {"date": tomorrow}), @@ -185,7 +98,6 @@ class TestPmsReservations(common.SavepointCase): } ) - @freeze_time("1980-11-01") def test_reservation_dates_compute_checkin_out(self): """ Check the reservation creation with specific reservation lines @@ -197,8 +109,6 @@ class TestPmsReservations(common.SavepointCase): (view checkout assertEqual) """ # ARRANGE - self.create_common_scenario() - customer = self.env.ref("base.res_partner_12") today = fields.date.today() tomorrow = fields.date.today() + datetime.timedelta(days=1) two_days_later = fields.date.today() + datetime.timedelta(days=2) @@ -207,8 +117,8 @@ class TestPmsReservations(common.SavepointCase): reservation = self.env["pms.reservation"].create( { "room_type_id": self.room_type_double.id, - "partner_id": customer.id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, "reservation_line_ids": [ (0, False, {"date": today}), (0, False, {"date": tomorrow}), @@ -231,23 +141,25 @@ class TestPmsReservations(common.SavepointCase): not correspond to the last day indicated in the dates", ) - @freeze_time("1980-11-01") def test_create_reservation_start_date(self): - # TEST CASE + """ + Check that the reservation checkin and the first reservation date are equal. + ---------------- + Create a reservation and check if the first reservation line date are the same + date that the checkin date. + """ # reservation should start on checkin day # ARRANGE - self.create_common_scenario() today = fields.date.today() checkin = today + datetime.timedelta(days=8) checkout = checkin + datetime.timedelta(days=11) - customer = self.env.ref("base.res_partner_12") reservation_vals = { "checkin": checkin, "checkout": checkout, "room_type_id": self.room_type_double.id, - "partner_id": customer.id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } # ACT @@ -259,22 +171,23 @@ class TestPmsReservations(common.SavepointCase): "Reservation lines don't start in the correct date", ) - @freeze_time("1980-11-01") def test_create_reservation_end_date(self): - # TEST CASE - # reservation should end on checkout day - self.create_common_scenario() + """ + Check that the reservation checkout and the last reservation date are equal. + ---------------- + Create a reservation and check if the last reservation line date are the same + date that the checkout date. + """ # ARRANGE today = fields.date.today() checkin = today + datetime.timedelta(days=8) checkout = checkin + datetime.timedelta(days=11) - customer = self.env.ref("base.res_partner_12") reservation_vals = { "checkin": checkin, "checkout": checkout, "room_type_id": self.room_type_double.id, - "partner_id": customer.id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } # ACT @@ -286,7 +199,6 @@ class TestPmsReservations(common.SavepointCase): "Reservation lines don't end in the correct date", ) - @freeze_time("1980-11-01") def test_split_reservation01(self): """ # TEST CASE @@ -301,17 +213,16 @@ class TestPmsReservations(common.SavepointCase): +------------+------+------+------+----+----+----+ """ # ARRANGE - self.create_common_scenario() # ACT r_test = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=3), "adults": 2, "preferred_room_id": self.room1.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r_test.flush() @@ -325,7 +236,6 @@ class TestPmsReservations(common.SavepointCase): "The entire reservation should be allocated in the preferred room", ) - @freeze_time("1980-11-01") def test_split_reservation02(self): """ # TEST CASE @@ -340,17 +250,16 @@ class TestPmsReservations(common.SavepointCase): +------------+------+------+------+----+----+----+ """ # ARRANGE - self.create_common_scenario() # ACT r_test = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=2), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r_test.flush() @@ -358,7 +267,6 @@ class TestPmsReservations(common.SavepointCase): # ASSERT self.assertFalse(r_test.splitted, "The reservation shouldn't be splitted") - @freeze_time("1980-11-01") def test_split_reservation03(self): """ # TEST CASE @@ -374,16 +282,15 @@ class TestPmsReservations(common.SavepointCase): +------------+------+------+------+------+----+----+ """ # ARRANGE - self.create_common_scenario() r1 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=1), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r1.reservation_line_ids[0].room_id = self.room2.id @@ -391,12 +298,12 @@ class TestPmsReservations(common.SavepointCase): r2 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=1), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r2.reservation_line_ids[0].room_id = self.room3.id @@ -404,12 +311,12 @@ class TestPmsReservations(common.SavepointCase): r3 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now() + datetime.timedelta(days=1), "checkout": datetime.datetime.now() + datetime.timedelta(days=2), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r3.reservation_line_ids[0].room_id = self.room1.id @@ -417,12 +324,12 @@ class TestPmsReservations(common.SavepointCase): r4 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now() + datetime.timedelta(days=1), "checkout": datetime.datetime.now() + datetime.timedelta(days=2), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r4.reservation_line_ids[0].room_id = self.room3.id @@ -432,12 +339,12 @@ class TestPmsReservations(common.SavepointCase): # ACT r_test = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=4), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r_test.flush() @@ -448,7 +355,6 @@ class TestPmsReservations(common.SavepointCase): "The reservation shouldn't have more than 2 changes", ) - @freeze_time("1980-11-01") def test_split_reservation04(self): """ # TEST CASE @@ -463,16 +369,15 @@ class TestPmsReservations(common.SavepointCase): +------------+------+------+------+------+----+----+ """ # ARRANGE - self.create_common_scenario() r1 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=1), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r1.reservation_line_ids[0].room_id = self.room2.id @@ -480,12 +385,12 @@ class TestPmsReservations(common.SavepointCase): r2 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=1), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r2.reservation_line_ids[0].room_id = self.room3.id @@ -493,12 +398,12 @@ class TestPmsReservations(common.SavepointCase): r3 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now() + datetime.timedelta(days=1), "checkout": datetime.datetime.now() + datetime.timedelta(days=2), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r3.reservation_line_ids[0].room_id = self.room1.id @@ -506,12 +411,12 @@ class TestPmsReservations(common.SavepointCase): r4 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now() + datetime.timedelta(days=1), "checkout": datetime.datetime.now() + datetime.timedelta(days=2), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r4.reservation_line_ids[0].room_id = self.room3.id @@ -519,12 +424,12 @@ class TestPmsReservations(common.SavepointCase): r5 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now() + datetime.timedelta(days=2), "checkout": datetime.datetime.now() + datetime.timedelta(days=3), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r5.reservation_line_ids[0].room_id = self.room2.id @@ -533,12 +438,12 @@ class TestPmsReservations(common.SavepointCase): # ACT r_test = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=4), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r_test.flush() @@ -555,7 +460,6 @@ class TestPmsReservations(common.SavepointCase): 3, rooms, "The reservation shouldn't be splitted in more than 3 roomss" ) - @freeze_time("1980-11-01") def test_split_reservation05(self): """ # TEST CASE @@ -569,16 +473,15 @@ class TestPmsReservations(common.SavepointCase): +------------+------+------+------+----+----+----+ """ # ARRANGE - self.create_common_scenario() r1 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=1), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r1.reservation_line_ids[0].room_id = self.room1 @@ -588,17 +491,16 @@ class TestPmsReservations(common.SavepointCase): with self.assertRaises(ValidationError): r_test = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=1), "adults": 2, "preferred_room_id": self.room1.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r_test.flush() - @freeze_time("1980-11-01") def test_split_reservation06(self): """ # TEST CASE @@ -612,16 +514,15 @@ class TestPmsReservations(common.SavepointCase): +------------+------+------+------+----+----+----+ """ # ARRANGE - self.create_common_scenario() r1 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=2), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r1.reservation_line_ids[0].room_id = self.room1 @@ -632,17 +533,16 @@ class TestPmsReservations(common.SavepointCase): with self.assertRaises(ValidationError): r_test = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now() + datetime.timedelta(days=1), "checkout": datetime.datetime.now() + datetime.timedelta(days=3), "adults": 2, "preferred_room_id": self.room1.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r_test.flush() - @freeze_time("1980-11-01") def test_split_reservation07(self): """ # TEST CASE @@ -656,16 +556,14 @@ class TestPmsReservations(common.SavepointCase): +------------+------+------+------+----+----+----+ """ # ARRANGE - self.create_common_scenario() - r1 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=3), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r1.reservation_line_ids[0].room_id = self.room1 @@ -675,12 +573,12 @@ class TestPmsReservations(common.SavepointCase): r2 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=3), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r2.reservation_line_ids[0].room_id = self.room2 @@ -690,12 +588,12 @@ class TestPmsReservations(common.SavepointCase): r3 = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=3), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) r3.reservation_line_ids[0].room_id = self.room3 @@ -707,35 +605,41 @@ class TestPmsReservations(common.SavepointCase): with self.assertRaises(ValidationError): self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=1), "adults": 2, "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, + "partner_id": self.partner1.id, } ) def test_manage_children_raise(self): # TEST CASE - # reservation with 2 adults and 1 children occupyin - # shouldn be higher than room capacity - # the capacity for xid pms.pms_room_type_0 is 2 in demo data + """ + Check if the error occurs when trying to put more people than the capacity of the room. + -------------- + Create a reservation with a double room whose capacity is two and try to create + it with two adults and a child occupying the room. + """ # NO ARRANGE # ACT & ASSERT - with self.assertRaises(ValidationError), self.cr.savepoint(): + with self.assertRaises( + ValidationError, + msg="The number of people is lower than the capacity of the room", + ): self.env["pms.reservation"].create( { "adults": 2, "children_occupying": 1, "checkin": datetime.datetime.now(), "checkout": datetime.datetime.now() + datetime.timedelta(days=1), - "room_type_id": self.browse_ref("pms.pms_room_type_0").id, - "partner_id": self.env.ref("base.res_partner_12").id, + "room_type_id": self.room_type_double.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) - @freeze_time("1981-11-10") def test_to_assign_priority_reservation(self): """ To assign reservation must have priority = 1 @@ -762,7 +666,6 @@ class TestPmsReservations(common.SavepointCase): """ # ARRANGE expected_priority = 1 - self.create_common_scenario() # ACT res = self.env["pms.reservation"].create( @@ -770,8 +673,8 @@ class TestPmsReservations(common.SavepointCase): "checkin": fields.date.today() + datetime.timedelta(days=30), "checkout": fields.date.today() + datetime.timedelta(days=31), "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) computed_priority = res.priority @@ -791,7 +694,6 @@ class TestPmsReservations(common.SavepointCase): error_msm, ) - @freeze_time("1981-11-10") def test_arrival_delayed_priority_reservation(self): """ Arrival delayed reservation must have priority = 1 @@ -801,14 +703,13 @@ class TestPmsReservations(common.SavepointCase): """ # ARRANGE expected_priority = 1 - self.create_common_scenario() res = self.env["pms.reservation"].create( { "checkin": fields.date.today() + datetime.timedelta(days=-1), "checkout": fields.date.today() + datetime.timedelta(days=1), "preferred_room_id": self.room1.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) @@ -842,7 +743,6 @@ class TestPmsReservations(common.SavepointCase): """ # ARRANGE expected_priority = 1 - self.create_common_scenario() freezer = freeze_time("1981-10-08") freezer.start() res = self.env["pms.reservation"].create( @@ -850,8 +750,8 @@ class TestPmsReservations(common.SavepointCase): "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=1), "preferred_room_id": self.room2.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) host1 = self.env["res.partner"].create( @@ -895,7 +795,6 @@ class TestPmsReservations(common.SavepointCase): error_msm, ) - @freeze_time("1981-11-10") def test_cancel_pending_amount_priority_reservation(self): """ Cancelled with pending payments reservation must have priority = 2 @@ -905,14 +804,13 @@ class TestPmsReservations(common.SavepointCase): """ # ARRANGE expected_priority = 2 - self.create_common_scenario() res = self.env["pms.reservation"].create( { "checkin": fields.date.today() + datetime.timedelta(days=55), "checkout": fields.date.today() + datetime.timedelta(days=56), "preferred_room_id": self.room2.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) @@ -945,7 +843,6 @@ class TestPmsReservations(common.SavepointCase): regardless of the rest of the fields the priority must be 3 """ # ARRANGE - self.create_common_scenario() expected_priority = 3 freezer = freeze_time("1981-10-08") freezer.start() @@ -954,8 +851,8 @@ class TestPmsReservations(common.SavepointCase): "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=1), "preferred_room_id": self.room2.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) host1 = self.env["res.partner"].create( @@ -1015,7 +912,6 @@ class TestPmsReservations(common.SavepointCase): regardless of the rest of the fields the priority must be 2 """ # ARRANGE - self.create_common_scenario() expected_priority = 3 freezer = freeze_time("1981-10-08") freezer.start() @@ -1024,8 +920,8 @@ class TestPmsReservations(common.SavepointCase): "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=3), "preferred_room_id": self.room2.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) host1 = self.env["res.partner"].create( @@ -1068,7 +964,6 @@ class TestPmsReservations(common.SavepointCase): error_msm, ) - @freeze_time("1981-11-10") def test_confirm_arriva_lt_3_days_priority_reservation(self): """ Confirm reservation with arrival in less than 3 days, priority = 2 * days for checkout @@ -1077,7 +972,6 @@ class TestPmsReservations(common.SavepointCase): regardless of the rest of the fields the priority must be 2 * 2 = 4 """ # ARRANGE - self.create_common_scenario() expected_priority = 4 # ACT @@ -1086,8 +980,8 @@ class TestPmsReservations(common.SavepointCase): "checkin": fields.date.today() + datetime.timedelta(days=2), "checkout": fields.date.today() + datetime.timedelta(days=5), "preferred_room_id": self.room2.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) computed_priority = res.priority @@ -1107,7 +1001,6 @@ class TestPmsReservations(common.SavepointCase): error_msm, ) - @freeze_time("1981-11-10") def test_onboard_all_pay_priority_reservation(self): """ Onboard with all pay reservation must have priority = 3 * days for checkout @@ -1117,15 +1010,14 @@ class TestPmsReservations(common.SavepointCase): regardless of the rest of the fields the priority must be 3 * 3 = 9 """ # ARRANGE - self.create_common_scenario() expected_priority = 9 res = self.env["pms.reservation"].create( { "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=3), "preferred_room_id": self.room2.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) host1 = self.env["res.partner"].create( @@ -1181,7 +1073,6 @@ class TestPmsReservations(common.SavepointCase): regardless of the rest of the fields the priority must be 6 """ # ARRANGE - self.create_common_scenario() expected_priority = 6 freezer = freeze_time("1981-10-08") freezer.start() @@ -1190,8 +1081,8 @@ class TestPmsReservations(common.SavepointCase): "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=1), "preferred_room_id": self.room2.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) host1 = self.env["res.partner"].create( @@ -1248,7 +1139,6 @@ class TestPmsReservations(common.SavepointCase): error_msm, ) - @freeze_time("1981-11-10") def test_confirm_arriva_bt_3_and_20_days_priority_reservation(self): """ Confirm reservation with arrival between 3 and 20 days, priority = 3 * days for checkout @@ -1257,7 +1147,6 @@ class TestPmsReservations(common.SavepointCase): regardless of the rest of the fields the priority must be 3 * 15 = 45 """ # ARRANGE - self.create_common_scenario() expected_priority = 45 # ACT @@ -1266,8 +1155,8 @@ class TestPmsReservations(common.SavepointCase): "checkin": fields.date.today() + datetime.timedelta(days=15), "checkout": fields.date.today() + datetime.timedelta(days=20), "preferred_room_id": self.room2.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) computed_priority = res.priority @@ -1287,7 +1176,6 @@ class TestPmsReservations(common.SavepointCase): error_msm, ) - @freeze_time("1981-11-10") def test_confirm_arrival_more_than_20_days_priority_reservation(self): """ Confirm reservation with arrival more than 20 days, priority = 4 * days for checkout @@ -1296,7 +1184,6 @@ class TestPmsReservations(common.SavepointCase): regardless of the rest of the fields the priority must be 4 * 21 = 84 """ # ARRANGE - self.create_common_scenario() expected_priority = 84 # ACT @@ -1305,8 +1192,8 @@ class TestPmsReservations(common.SavepointCase): "checkin": fields.date.today() + datetime.timedelta(days=21), "checkout": fields.date.today() + datetime.timedelta(days=25), "preferred_room_id": self.room2.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) computed_priority = res.priority @@ -1338,7 +1225,6 @@ class TestPmsReservations(common.SavepointCase): regardless of the rest of the fields the priority must be 6 * 5 = 30 """ # ARRANGE - self.create_common_scenario() expected_priority = 30 freezer = freeze_time("1981-10-09") freezer.start() @@ -1347,8 +1233,8 @@ class TestPmsReservations(common.SavepointCase): "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=1), "preferred_room_id": self.room2.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) host1 = self.env["res.partner"].create( @@ -1417,7 +1303,6 @@ class TestPmsReservations(common.SavepointCase): regardless of the rest of the fields the priority must be 10 * 45 = 450 """ # ARRANGE - self.create_common_scenario() expected_priority = 450 freezer = freeze_time("1981-10-09") freezer.start() @@ -1426,8 +1311,8 @@ class TestPmsReservations(common.SavepointCase): "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=1), "preferred_room_id": self.room2.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) host1 = self.env["res.partner"].create( @@ -1496,7 +1381,6 @@ class TestPmsReservations(common.SavepointCase): regardless of the rest of the fields the priority must be 100 * 91 = 9100 """ # ARRANGE - self.create_common_scenario() expected_priority = 9100 freezer = freeze_time("1981-10-09") freezer.start() @@ -1505,8 +1389,8 @@ class TestPmsReservations(common.SavepointCase): "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=1), "preferred_room_id": self.room2.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) host1 = self.env["res.partner"].create( @@ -1570,14 +1454,13 @@ class TestPmsReservations(common.SavepointCase): Create a new reservation with only room_type(autoassign -> to_assign = True), and the we call to action_assign method to confirm the assignation """ - self.create_common_scenario() res = self.env["pms.reservation"].create( { "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=1), "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) # ACT @@ -1594,7 +1477,6 @@ class TestPmsReservations(common.SavepointCase): "to_assign" should be set to false automatically """ # ARRANGE - self.create_common_scenario() # ACT res = self.env["pms.reservation"].create( @@ -1602,8 +1484,8 @@ class TestPmsReservations(common.SavepointCase): "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=1), "preferred_room_id": self.room1.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) @@ -1622,7 +1504,6 @@ class TestPmsReservations(common.SavepointCase): be set to false automatically """ # ARRANGE - self.create_common_scenario() # set the priority of the rooms to control the room chosen by auto assign self.room1.sequence = 1 self.room2.sequence = 2 @@ -1632,8 +1513,8 @@ class TestPmsReservations(common.SavepointCase): "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=1), "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) @@ -1649,18 +1530,19 @@ class TestPmsReservations(common.SavepointCase): ) def test_reservation_to_assign_on_create(self): - # TEST CASE - # the reservation action assign - # change the reservation to 'to_assign' = False + """ + Check the reservation action assign. + Create a reservation and change the reservation to 'to_assign' = False + through action_assign() method + """ # ARRANGE - self.create_common_scenario() res = self.env["pms.reservation"].create( { "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=1), "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) # ACT @@ -1668,20 +1550,21 @@ class TestPmsReservations(common.SavepointCase): # ASSERT self.assertFalse(res.to_assign, "The reservation should be marked as assigned") - @freeze_time("1981-11-01") def test_reservation_action_cancel(self): - # TEST CASE - # the reservation action cancel - # change the state of the reservation to 'cancel' + """ + Check if the reservation has been cancelled correctly. + ------------- + Create a reservation and change his state to cancelled + through the action_cancel() method. + """ # ARRANGE - self.create_common_scenario() res = self.env["pms.reservation"].create( { "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=1), "room_type_id": self.room_type_double.id, - "partner_id": self.env.ref("base.res_partner_12").id, - "pms_property_id": self.property.id, + "partner_id": self.partner1.id, + "pms_property_id": self.pms_property1.id, } ) # ACT @@ -1692,10 +1575,14 @@ class TestPmsReservations(common.SavepointCase): @freeze_time("1981-11-01") def test_reservation_action_checkout(self): # TEST CASE - # the reservation action checkout - # change the state of the reservation to 'done' + """ + Check that when the date of a reservation passes, it goes to the 'done' status. + ------------- + Create a host, a reservation and a check-in partner. Assign the partner and the + reservation to the check-in partner and after one day of the reservation it + must be in the 'done' status + """ # ARRANGE - self.create_common_scenario() host = self.env["res.partner"].create( { "name": "Miguel", @@ -1719,7 +1606,7 @@ class TestPmsReservations(common.SavepointCase): "checkout": fields.date.today() + datetime.timedelta(days=1), "room_type_id": self.room_type_double.id, "partner_id": host.id, - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, } ) r1.flush() @@ -1756,7 +1643,28 @@ class TestPmsReservations(common.SavepointCase): +---------------+------+------+------+----+----+ """ # ARRANGE - self.create_multiproperty_scenario() + self.property2 = self.env["pms.property"].create( + { + "name": "Property_2", + "company_id": self.company1.id, + "default_pricelist_id": self.pricelist1.id, + } + ) + + self.property3 = self.env["pms.property"].create( + { + "name": "Property_3", + "company_id": self.company1.id, + "default_pricelist_id": self.pricelist1.id, + } + ) + + self.board_service = self.env["pms.board.service"].create( + { + "name": "Board Service Test", + "default_code": "CB", + } + ) host = self.env["res.partner"].create( { "name": "Miguel", @@ -1768,7 +1676,7 @@ class TestPmsReservations(common.SavepointCase): { "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=1), - "pms_property_id": self.property1.id, + "pms_property_id": self.pms_property1.id, "partner_id": host.id, } ) @@ -1781,7 +1689,7 @@ class TestPmsReservations(common.SavepointCase): ], "name": "Single", "default_code": "SIN", - "class_id": self.room_type_class.id, + "class_id": self.room_type_class1.id, "list_price": 30, } ) @@ -1823,16 +1731,18 @@ class TestPmsReservations(common.SavepointCase): with self.assertRaises(UserError): self.reservation_test.write(test_case) - @freeze_time("1950-11-01") def _test_check_date_order(self): - self.create_common_scenario() - customer = self.env.ref("base.res_partner_12") + """ + Check that the date order of a reservation is correct. + --------------- + Create a reservation with today's date and then check that the date order is also today + """ reservation = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=3), - "partner_id": customer.id, + "partner_id": self.partner1.id, } ) @@ -1844,14 +1754,18 @@ class TestPmsReservations(common.SavepointCase): ) def _test_check_checkin_datetime(self): - self.create_common_scenario() - customer = self.env.ref("base.res_partner_12") + """ + Check that the checkin datetime of a reservation is correct. + ------------------ + Create a reservation and then check if the checkin datetime + it is correct + """ reservation = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": fields.date.today() + datetime.timedelta(days=300), "checkout": fields.date.today() + datetime.timedelta(days=305), - "partner_id": customer.id, + "partner_id": self.partner1.id, } ) r = reservation.checkin @@ -1865,11 +1779,17 @@ class TestPmsReservations(common.SavepointCase): ) def test_check_allowed_room_ids(self): - self.create_common_scenario() - customer = self.env.ref("base.res_partner_12") + """ + Check available rooms after creating a reservation. + ----------- + Create an availability rule, create a reservation, + and then check that the allopwed_room_ids field of the + reservation and the room_type_id.room_ids field of the + availability rule match. + """ availability_rule = self.env["pms.availability.plan.rule"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "room_type_id": self.room_type_double.id, "availability_plan_id": self.room_type_availability.id, "date": fields.date.today() + datetime.timedelta(days=153), @@ -1877,12 +1797,12 @@ class TestPmsReservations(common.SavepointCase): ) reservation = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": fields.date.today() + datetime.timedelta(days=150), "checkout": fields.date.today() + datetime.timedelta(days=152), - "partner_id": customer.id, + "partner_id": self.partner1.id, "room_type_id": self.room_type_double.id, - "pricelist_id": self.test_pricelist1.id, + "pricelist_id": self.pricelist1.id, } ) self.assertEqual( @@ -1891,8 +1811,15 @@ class TestPmsReservations(common.SavepointCase): "Rooms allowed don't match", ) - def _test_partner_is_agency(self): - self.create_common_scenario() + def test_partner_is_agency(self): + """ + Check that a reservation created with an agency and without a partner + assigns that agency as a partner. + ------------- + Create an agency and then create a reservation to which that agency + assigns but does not associate any partner. + Then check that the partner of that reservation is the same as the agency + """ sale_channel1 = self.env["pms.sale.channel"].create( {"name": "Test Indirect", "channel_type": "indirect"} ) @@ -1901,17 +1828,16 @@ class TestPmsReservations(common.SavepointCase): "name": "partner1", "is_agency": True, "sale_channel_id": sale_channel1.id, + "invoice_to_agency": True, } ) reservation = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": fields.date.today() + datetime.timedelta(days=150), "checkout": fields.date.today() + datetime.timedelta(days=152), - # "partner_id": False, "agency_id": agency.id, - # "folio_id":False, } ) @@ -1924,12 +1850,21 @@ class TestPmsReservations(common.SavepointCase): ) def test_agency_pricelist(self): - self.create_common_scenario() + """ + Check that a pricelist of a reservation created with an + agency and without a partner and the pricelist of that + agency are the same. + ------------- + Create an agency with field apply_pricelist is True and + then create a reservation to which that agency + assigns but does not associate any partner. + Then check that the pricelist of that reservation is the same as the agency + """ sale_channel1 = self.env["pms.sale.channel"].create( { "name": "Test Indirect", "channel_type": "indirect", - "product_pricelist_ids": [(6, 0, [self.test_pricelist1.id])], + "product_pricelist_ids": [(6, 0, [self.pricelist1.id])], } ) agency = self.env["res.partner"].create( @@ -1943,13 +1878,12 @@ class TestPmsReservations(common.SavepointCase): reservation = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": fields.date.today() + datetime.timedelta(days=150), "checkout": fields.date.today() + datetime.timedelta(days=152), "agency_id": agency.id, } ) - self.assertEqual( reservation.pricelist_id.id, reservation.agency_id.property_product_pricelist.id, @@ -1957,14 +1891,18 @@ class TestPmsReservations(common.SavepointCase): ) def test_compute_access_url(self): - self.create_common_scenario() - customer = self.env.ref("base.res_partner_12") + """ + Check that the access_url field of the reservation is created with a correct value. + ------------- + Create a reservation and then check that the access_url field has the value + my/reservation/(reservation.id) + """ reservation = self.env["pms.reservation"].create( { - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "checkin": fields.date.today() + datetime.timedelta(days=150), "checkout": fields.date.today() + datetime.timedelta(days=152), - "partner_id": customer.id, + "partner_id": self.partner1.id, } ) @@ -1972,7 +1910,15 @@ class TestPmsReservations(common.SavepointCase): self.assertEqual(reservation.access_url, url, "Reservation url isn't correct") def test_compute_ready_for_checkin(self): - self.create_common_scenario() + """ + Check that the ready_for_checkin field is True when the reservation + checkin day is today. + --------------- + Create two hosts, create a reservation with a checkin date today, + and associate two checkin partners with that reservation and with + each of the hosts. + Then check that the ready_for_checkin field of the reservation is True + """ self.host1 = self.env["res.partner"].create( { "name": "Miguel", @@ -2013,7 +1959,7 @@ class TestPmsReservations(common.SavepointCase): "checkout": "2012-01-17", "partner_id": self.host1.id, "allowed_checkin": True, - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "adults": 3, } ) @@ -2033,14 +1979,19 @@ class TestPmsReservations(common.SavepointCase): self.reservation.checkin_partner_ids = [ (6, 0, [self.checkin1.id, self.checkin2.id]) ] - self.assertTrue( self.reservation.ready_for_checkin, "Reservation should is ready for checkin", ) - def test_check_checkin_less_checkout(self): - self.create_common_scenario() + def test_check_checkout_less_checkin(self): + """ + Check that a reservation cannot be created with the + checkin date greater than the checkout date + --------------- + Create a reservation with the checkin date 3 days + after the checkout date, this should throw an error. + """ self.host1 = self.env["res.partner"].create( { "name": "Host1", @@ -2051,13 +2002,20 @@ class TestPmsReservations(common.SavepointCase): { "checkin": fields.date.today() + datetime.timedelta(days=3), "checkout": fields.date.today(), - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "partner_id": self.host1.id, } ) - def test_check_adults(self): - self.create_common_scenario() + def test_check_more_adults_than_beds(self): + """ + Check that a reservation cannot be created when the field + adults is greater than the capacity of the room. + ------------- + Try to create a reservation with a double room and the + field 'adults'=4, this should throw a mistake because the + room capacity is lesser than the number of adults. + """ self.host1 = self.env["res.partner"].create( { "name": "Host1", @@ -2068,15 +2026,20 @@ class TestPmsReservations(common.SavepointCase): { "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=3), - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "partner_id": self.host1.id, "room_type_id": self.room_type_double.id, "adults": 4, } ) - def test_check_arrival_hour(self): - self.create_common_scenario() + def test_check_format_arrival_hour(self): + """ + Check that the format of the arrival_hour field is correct(HH:mm) + ------------- + Create a reservation with the wrong arrival hour date + format (HH:mm:ss), this should throw an error. + """ self.host1 = self.env["res.partner"].create( { "name": "Host1", @@ -2087,14 +2050,19 @@ class TestPmsReservations(common.SavepointCase): { "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=3), - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "partner_id": self.host1.id, "arrival_hour": "14:00:00", } ) - def test_check_departure_hour(self): - self.create_common_scenario() + def test_check_format_departure_hour(self): + """ + Check that the format of the departure_hour field is correct(HH:mm) + ------------- + Create a reservation with the wrong departure hour date + format (HH:mm:ss), this should throw an error. + """ self.host1 = self.env["res.partner"].create( { "name": "Host1", @@ -2105,22 +2073,26 @@ class TestPmsReservations(common.SavepointCase): { "checkin": fields.date.today(), "checkout": fields.date.today() + datetime.timedelta(days=3), - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "partner_id": self.host1.id, "departure_hour": "14:00:00", } ) def test_check_property_integrity_room(self): - self.create_common_scenario() + """ + Check that a reservation cannot be created with a room + of a different property. + ------------ + Try to create a reservation for property2 with a + preferred_room that belongs to property1, this + should throw an error . + """ self.property2 = self.env["pms.property"].create( { "name": "MY PMS TEST", - "company_id": self.env.ref("base.main_company").id, - "default_pricelist_id": self.test_pricelist1.id, - "folio_sequence_id": self.folio_sequence.id, - "reservation_sequence_id": self.reservation_sequence.id, - "checkin_sequence_id": self.checkin_sequence.id, + "company_id": self.company1.id, + "default_pricelist_id": self.pricelist1.id, } ) self.host1 = self.env["res.partner"].create( @@ -2129,7 +2101,7 @@ class TestPmsReservations(common.SavepointCase): } ) self.room_type_double.pms_property_ids = [ - (6, 0, [self.property.id, self.property2.id]) + (6, 0, [self.pms_property1.id, self.property2.id]) ] with self.assertRaises(ValidationError): self.env["pms.reservation"].create( @@ -2144,7 +2116,14 @@ class TestPmsReservations(common.SavepointCase): ) def test_shared_folio_true(self): - self.create_common_scenario() + """ + Check that the shared_folio field of a reservation whose + folio has other reservations is True. + --------- + Create a reservation and then create another reservation with + its folio_id = folio_id of the previous reservation. This + should set shared_folio to True + """ self.host1 = self.env["res.partner"].create( { "name": "Host1", @@ -2154,7 +2133,7 @@ class TestPmsReservations(common.SavepointCase): { "checkin": fields.date.today() + datetime.timedelta(days=60), "checkout": fields.date.today() + datetime.timedelta(days=65), - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "partner_id": self.host1.id, } ) @@ -2162,7 +2141,7 @@ class TestPmsReservations(common.SavepointCase): { "checkin": fields.date.today() + datetime.timedelta(days=60), "checkout": fields.date.today() + datetime.timedelta(days=64), - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "partner_id": self.host1.id, "folio_id": self.reservation.folio_id.id, } @@ -2173,7 +2152,10 @@ class TestPmsReservations(common.SavepointCase): ) def test_shared_folio_false(self): - self.create_common_scenario() + """ + Check that the shared_folio field for a reservation whose folio has no + other reservations is False. + """ self.host1 = self.env["res.partner"].create( { "name": "Host1", @@ -2183,7 +2165,7 @@ class TestPmsReservations(common.SavepointCase): { "checkin": fields.date.today() + datetime.timedelta(days=60), "checkout": fields.date.today() + datetime.timedelta(days=65), - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "partner_id": self.host1.id, } ) @@ -2192,9 +2174,16 @@ class TestPmsReservations(common.SavepointCase): "Folio.reservations = 1, so reservation.shared_folio must be False", ) - @freeze_time("1982-11-01") def test_reservation_action_cancel_fail(self): - self.create_common_scenario() + """ + Check that a reservation cannot be in the cancel state if + the cancellation is not allowed. + --------- + Create a reservation, put its state = "canceled" and then try to + pass its state to cancel using the action_cancel () method. This + should throw an error because a reservation with state cancel cannot + be canceled again. + """ self.host1 = self.env["res.partner"].create( { "name": "Host1", @@ -2206,7 +2195,7 @@ class TestPmsReservations(common.SavepointCase): "checkout": fields.date.today() + datetime.timedelta(days=1), "room_type_id": self.room_type_double.id, "partner_id": self.host1.id, - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, } ) @@ -2215,14 +2204,20 @@ class TestPmsReservations(common.SavepointCase): with self.assertRaises(UserError): reservation.action_cancel() - @freeze_time("1983-11-01") def test_cancelation_reason_noshow(self): - self.create_common_scenario() + """ + Check that if a reservation has already passed and there is no check-in, + the reason for cancellation must be 'no-show' + ------ + Create a cancellation rule that is assigned to a pricelist. Then create + a reservation with a past date and the action_cancel method is launched. + The canceled_reason field is verified to be is equal to "no_show" + """ Pricelist = self.env["product.pricelist"] self.cancelation_rule = self.env["pms.cancelation.rule"].create( { "name": "Cancelation Rule Test", - "pms_property_ids": [self.property.id], + "pms_property_ids": [self.pms_property1.id], "penalty_noshow": 50, } ) @@ -2230,7 +2225,7 @@ class TestPmsReservations(common.SavepointCase): self.pricelist = Pricelist.create( { "name": "Pricelist Test", - "pms_property_ids": [self.property.id], + "pms_property_ids": [self.pms_property1.id], "cancelation_rule_id": self.cancelation_rule.id, } ) @@ -2246,7 +2241,7 @@ class TestPmsReservations(common.SavepointCase): "checkout": fields.date.today() + datetime.timedelta(days=-3), "room_type_id": self.room_type_double.id, "partner_id": self.host1.id, - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "pricelist_id": self.pricelist.id, } ) @@ -2260,14 +2255,21 @@ class TestPmsReservations(common.SavepointCase): "cancelled_reason must be 'noshow'", ) - @freeze_time("1984-11-01") def test_cancelation_reason_intime(self): - self.create_common_scenario() + """ + Check that if a reservation is canceled on time according + to the cancellation rules the canceled_reason field must be "intime" + ------ + Create a cancellation rule assigned to a price list with + the field days_intime = 3. Then create a reservation with + a checkin date within 5 days and launch the action_cancel method. + canceled_reason field must be "intime" + """ Pricelist = self.env["product.pricelist"] self.cancelation_rule = self.env["pms.cancelation.rule"].create( { "name": "Cancelation Rule Test", - "pms_property_ids": [self.property.id], + "pms_property_ids": [self.pms_property1.id], "days_intime": 3, } ) @@ -2275,7 +2277,7 @@ class TestPmsReservations(common.SavepointCase): self.pricelist = Pricelist.create( { "name": "Pricelist Test", - "pms_property_ids": [self.property.id], + "pms_property_ids": [self.pms_property1.id], "cancelation_rule_id": self.cancelation_rule.id, } ) @@ -2291,7 +2293,7 @@ class TestPmsReservations(common.SavepointCase): "checkout": fields.date.today() + datetime.timedelta(days=8), "room_type_id": self.room_type_double.id, "partner_id": self.host1.id, - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "pricelist_id": self.pricelist.id, } ) @@ -2299,16 +2301,25 @@ class TestPmsReservations(common.SavepointCase): reservation.action_cancel() reservation.flush() - self.assertEqual(reservation.cancelled_reason, "intime", "-----------") + self.assertEqual( + reservation.cancelled_reason, "intime", "Cancelled reason must be 'intime'" + ) - @freeze_time("1985-11-01") def _test_cancelation_reason_late(self): - self.create_common_scenario() + """ + Check that if a reservation is canceled outside the cancellation + period, the canceled_reason field of the reservation must be "late" . + --------- + Create a cancellation rule with the days_late = 3 field. + A reservation is created with a check-in date for tomorrow and the + action_cancel method is launched. As the reservation was canceled + after the deadline, the canceled_reason field must be late + """ Pricelist = self.env["product.pricelist"] self.cancelation_rule = self.env["pms.cancelation.rule"].create( { "name": "Cancelation Rule Test", - "pms_property_ids": [self.property.id], + "pms_property_ids": [self.pms_property1.id], "days_late": 3, } ) @@ -2316,7 +2327,7 @@ class TestPmsReservations(common.SavepointCase): self.pricelist = Pricelist.create( { "name": "Pricelist Test", - "pms_property_ids": [self.property.id], + "pms_property_ids": [self.pms_property1.id], "cancelation_rule_id": self.cancelation_rule.id, } ) @@ -2332,7 +2343,7 @@ class TestPmsReservations(common.SavepointCase): "checkout": fields.date.today() + datetime.timedelta(days=4), "room_type_id": self.room_type_double.id, "partner_id": self.host1.id, - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "pricelist_id": self.pricelist.id, } ) @@ -2341,7 +2352,14 @@ class TestPmsReservations(common.SavepointCase): self.assertEqual(reservation.cancelled_reason, "late", "-----------") def test_compute_checkin_partner_count(self): - self.create_common_scenario() + """ + Check that the number of guests of a reservation is equal + to the checkin_partner_count field of that same reservation. + ------------- + Create 2 checkin partners. Create a reservation with those + two checkin partners. The checkin_partner_count field must + be equal to the number of checkin partners in the reservation. + """ self.host1 = self.env["res.partner"].create( { "name": "Miguel", @@ -2361,7 +2379,7 @@ class TestPmsReservations(common.SavepointCase): "checkin": "2013-01-14", "checkout": "2013-01-17", "partner_id": self.host1.id, - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "adults": 3, } ) @@ -2389,7 +2407,17 @@ class TestPmsReservations(common.SavepointCase): ) def test_compute_checkin_partner_pending_count(self): - self.create_common_scenario() + """ + Check that the checkin_partner_count field gives + the expected result. + -------------- + Create a reservation with 3 adults and associate 2 + checkin partners with that reservation. The + checkin_partner_pending_count field must be the + same as the difference between the adults in the + reservation and the number of checkin_partner_ids in + the reservation + """ self.host1 = self.env["res.partner"].create( { "name": "Miguel", @@ -2409,7 +2437,7 @@ class TestPmsReservations(common.SavepointCase): "checkin": "2014-01-14", "checkout": "2014-01-17", "partner_id": self.host1.id, - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, "adults": 3, } ) @@ -2439,9 +2467,16 @@ class TestPmsReservations(common.SavepointCase): "Checkin_partner_pending_count isn't correct", ) - @freeze_time("1982-11-01") def test_reservation_action_checkout_fail(self): - self.create_common_scenario() + """ + Check that a reservation cannot be checkout because + the checkout is not allowed. + --------------- + Create a reservation and try to launch the action_reservation_checkout + method, but this should throw an error, because for the + checkout to be allowed, the reservation must be in "onboard" + or "departure_delayed" state + """ host = self.env["res.partner"].create( { "name": "Miguel", @@ -2455,9 +2490,82 @@ class TestPmsReservations(common.SavepointCase): "checkout": fields.date.today() + datetime.timedelta(days=1), "partner_id": host.id, "allowed_checkout": True, - "pms_property_id": self.property.id, + "pms_property_id": self.pms_property1.id, } ) with self.assertRaises(UserError): reservation.action_reservation_checkout() + + def test_partner_name_folio(self): + """ + Check that a reservation without a partner_name + is associated with the partner_name of its folio + ---------- + Create a folio with a partner_name. Then create a + reservation with folio_id = folio.id and without + partner_name. The partner name of the reservation + and the folio must be the same + """ + + # ARRANGE + self.folio1 = self.env["pms.folio"].create( + { + "pms_property_id": self.pms_property1.id, + "partner_name": "Solón", + } + ) + + self.reservation = self.env["pms.reservation"].create( + { + "checkin": "2014-01-14", + "checkout": "2014-01-17", + "pms_property_id": self.pms_property1.id, + "folio_id": self.folio1.id, + } + ) + # ACT AND ASSERT + self.assertEqual( + self.folio1.partner_name, + self.reservation.partner_name, + "The folio partner name and the reservation partner name doesn't correspond", + ) + + def test_partner_is_agency_not_invoice_to_agency(self): + """ + Check that a reservation without partner_name but with + an agency whose field invoice_to_agency = False will + be set as partner_name "Reservation_from (agency name)" + ------------- + Create an agency with invoice_to_agency = False + and then create a reservation to which that agency + assigns but does not associate any partner. + Then check that the partner_name of that reservation is "Reservation from (agency name)" + """ + sale_channel1 = self.env["pms.sale.channel"].create( + {"name": "Test Indirect", "channel_type": "indirect"} + ) + agency = self.env["res.partner"].create( + { + "name": "partner1", + "is_agency": True, + "sale_channel_id": sale_channel1.id, + } + ) + + reservation = self.env["pms.reservation"].create( + { + "pms_property_id": self.pms_property1.id, + "checkin": fields.date.today() + datetime.timedelta(days=150), + "checkout": fields.date.today() + datetime.timedelta(days=152), + "agency_id": agency.id, + } + ) + + reservation.flush() + + self.assertEqual( + reservation.partner_name, + "Reservation from " + agency.name, + "Partner name doesn't match with to the expected", + ) diff --git a/pms/views/pms_reservation_views.xml b/pms/views/pms_reservation_views.xml index 79495c32f..5b83161da 100644 --- a/pms/views/pms_reservation_views.xml +++ b/pms/views/pms_reservation_views.xml @@ -304,13 +304,13 @@ attrs="{'invisible':[('reservation_type','in',('out'))]}" />