diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py index 10b8dc92e..df687a661 100644 --- a/pms/models/pms_reservation.py +++ b/pms/models/pms_reservation.py @@ -228,6 +228,10 @@ class PmsReservation(models.Model): store=True, readonly=False, ) + children_occupying = fields.Integer( + string="Children occupying", + ) + children = fields.Integer( "Children", readonly=False, diff --git a/pms/models/pms_reservation_line.py b/pms/models/pms_reservation_line.py index a844d9f25..a8a9f140f 100644 --- a/pms/models/pms_reservation_line.py +++ b/pms/models/pms_reservation_line.py @@ -309,8 +309,9 @@ class PmsReservationLine(models.Model): extra_bed = record.reservation_id.service_ids.filtered( lambda r: r.product_id.is_extra_bed is True ) - if record.reservation_id.adults > record.room_id.get_capacity( - len(extra_bed) + if ( + record.reservation_id.adults + record.reservation_id.children_occupying + > record.room_id.get_capacity(len(extra_bed)) ): raise ValidationError(_("Persons can't be higher than room capacity")) # if record.reservation_id.adults == 0: diff --git a/pms/tests/test_pms_reservation.py b/pms/tests/test_pms_reservation.py index 0e568ff83..3fc967ce9 100644 --- a/pms/tests/test_pms_reservation.py +++ b/pms/tests/test_pms_reservation.py @@ -1,15 +1,19 @@ -from datetime import timedelta +import datetime + +from freezegun import freeze_time from odoo import fields +from odoo.exceptions import ValidationError from .common import TestHotel +@freeze_time("2012-01-14") class TestPmsReservations(TestHotel): def test_create_reservation(self): today = fields.date.today() - checkin = today + timedelta(days=8) - checkout = checkin + timedelta(days=11) + checkin = today + datetime.timedelta(days=8) + checkout = checkin + datetime.timedelta(days=11) demo_user = self.env.ref("base.user_demo") customer = self.env.ref("base.res_partner_12") reservation_vals = { @@ -30,6 +34,24 @@ class TestPmsReservations(TestHotel): ) self.assertEqual( reservation.reservation_line_ids[-1].date, - checkout - timedelta(1), + checkout - datetime.timedelta(1), "Reservation lines don't end in the correct date", ) + + def test_manage_children_raise(self): + + # ARRANGE + PmsReservation = self.env["pms.reservation"] + + # ACT & ASSERT + with self.assertRaises(ValidationError), self.cr.savepoint(): + + PmsReservation.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, + } + ) diff --git a/pms/views/pms_reservation_views.xml b/pms/views/pms_reservation_views.xml index 6cfd976e7..ce6b98f0f 100644 --- a/pms/views/pms_reservation_views.xml +++ b/pms/views/pms_reservation_views.xml @@ -301,6 +301,10 @@ name="children" attrs="{'invisible': [('reservation_type','in',('out'))]}" /> +