diff --git a/pms/__init__.py b/pms/__init__.py
index 7588e52c8..22280bdac 100644
--- a/pms/__init__.py
+++ b/pms/__init__.py
@@ -2,3 +2,4 @@
from . import models
from . import wizards
+from .init_hook import post_init_hook
diff --git a/pms/__manifest__.py b/pms/__manifest__.py
index 5fc1b87f1..b541bb84a 100644
--- a/pms/__manifest__.py
+++ b/pms/__manifest__.py
@@ -73,4 +73,5 @@
"qweb": [
"static/src/xml/pms_base_templates.xml",
],
+ "post_init_hook": "post_init_hook",
}
diff --git a/pms/init_hook.py b/pms/init_hook.py
new file mode 100644
index 000000000..5f6e4e47a
--- /dev/null
+++ b/pms/init_hook.py
@@ -0,0 +1,10 @@
+from odoo import SUPERUSER_ID
+from odoo.api import Environment
+
+
+def post_init_hook(cr, _):
+ with Environment.manage():
+ env = Environment(cr, SUPERUSER_ID, {})
+ env["ir.config_parameter"].sudo().set_param(
+ "product.product_pricelist_setting", "advanced"
+ )
diff --git a/pms/models/__init__.py b/pms/models/__init__.py
index 1547464c0..5343f0ca8 100644
--- a/pms/models/__init__.py
+++ b/pms/models/__init__.py
@@ -4,6 +4,7 @@
from . import ir_http
from . import ir_sequence
+from . import ir_config_parameter
# from . import payment_return
from . import pms_board_service_room_type
diff --git a/pms/models/ir_config_parameter.py b/pms/models/ir_config_parameter.py
new file mode 100644
index 000000000..a561369ac
--- /dev/null
+++ b/pms/models/ir_config_parameter.py
@@ -0,0 +1,22 @@
+from odoo import _, api, models
+from odoo.exceptions import ValidationError
+
+
+class IrConfigParameter(models.Model):
+ _inherit = "ir.config_parameter"
+
+ def unlink(self):
+ for record in self:
+ if (
+ record.key == "product.product_pricelist_setting"
+ and record.value == "advanced"
+ ):
+ raise ValidationError(_("Cannot delete this parameter"))
+ return super().unlink()
+
+ @api.constrains("key", "value")
+ def check_value(self):
+ if self.key == "product.product_pricelist_setting" and self.value != "advanced":
+ raise ValidationError(
+ _("The parameter Advanced price rules cannot be modified")
+ )
diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py
index 4cfb3fc8c..7ba04783f 100644
--- a/pms/models/pms_reservation.py
+++ b/pms/models/pms_reservation.py
@@ -225,6 +225,10 @@ class PmsReservation(models.Model):
store=True,
readonly=False,
)
+ children_occupying = fields.Integer(
+ string="Children occupying",
+ )
+
children = fields.Integer(
"Children",
readonly=False,
@@ -959,7 +963,7 @@ class PmsReservation(models.Model):
_logger.info("Modified Reservation - No Penalty")
record.write({"state": "cancelled", "cancelled_reason": cancel_reason})
# record._compute_cancelled_discount()
- record.folio_id.compute_amount()
+ record.folio_id._compute_amount()
def compute_cancelation_reason(self):
self.ensure_one()
diff --git a/pms/models/pms_reservation_line.py b/pms/models/pms_reservation_line.py
index 3787b7041..0247e891d 100644
--- a/pms/models/pms_reservation_line.py
+++ b/pms/models/pms_reservation_line.py
@@ -368,8 +368,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/__init__.py b/pms/tests/__init__.py
index 09291fa9f..cfbd2f1f4 100644
--- a/pms/tests/__init__.py
+++ b/pms/tests/__init__.py
@@ -20,3 +20,4 @@
#
##############################################################################
from . import test_pms_reservation
+from . import test_pms_pricelist
diff --git a/pms/tests/test_pms_pricelist.py b/pms/tests/test_pms_pricelist.py
new file mode 100644
index 000000000..d10756319
--- /dev/null
+++ b/pms/tests/test_pms_pricelist.py
@@ -0,0 +1,39 @@
+from odoo.exceptions import ValidationError
+from odoo.tests import common, tagged
+
+
+@tagged("standard", "nice")
+class TestPmsPricelist(common.TransactionCase):
+ def test_advanced_pricelist_exists(self):
+
+ # ARRANGE
+ key = "product.product_pricelist_setting"
+ value = "advanced"
+
+ # ACT
+ found_value = self.env["ir.config_parameter"].sudo().get_param(key)
+
+ # ASSERT
+ self.assertEqual(found_value, value, "Parameter doesn't exist")
+
+ def test_product_pricelist_setting_modified(self):
+
+ # ARRANGE
+ key = "product.product_pricelist_setting"
+ value = "basic"
+
+ # ACT & ASSERT
+ with self.assertRaises(ValidationError), self.cr.savepoint():
+ self.env["ir.config_parameter"].set_param(key, value)
+
+ def test_product_pricelist_setting_unlink(self):
+
+ # ARRANGE
+ key = "product.product_pricelist_setting"
+ value = "advanced"
+
+ # ACT & ASSERT
+ with self.assertRaises(ValidationError), self.cr.savepoint():
+ self.env["ir.config_parameter"].search(
+ [("key", "=", key), ("value", "=", value)]
+ ).unlink()
diff --git a/pms/tests/test_pms_reservation.py b/pms/tests/test_pms_reservation.py
index 80aa1e087..60a1726a9 100644
--- a/pms/tests/test_pms_reservation.py
+++ b/pms/tests/test_pms_reservation.py
@@ -7,6 +7,7 @@ from odoo.exceptions import ValidationError
from .common import TestHotel
+@freeze_time("2012-01-14")
class TestPmsReservations(TestHotel):
def create_common_scenario(self):
@@ -489,3 +490,22 @@ class TestPmsReservations(TestHotel):
with self.assertRaises(ValidationError):
r_test.flush()
+
+
+ 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 7fe2bdcd1..caa73059f 100644
--- a/pms/views/pms_reservation_views.xml
+++ b/pms/views/pms_reservation_views.xml
@@ -302,6 +302,10 @@
name="children"
attrs="{'invisible': [('reservation_type','in',('out'))]}"
/>
+