[IMP]pms: unique board_service_room_type by property

This commit is contained in:
Darío Lodeiros
2022-12-07 11:29:36 +01:00
parent 19b1280494
commit 8be6287863
16 changed files with 66 additions and 114 deletions

View File

@@ -808,6 +808,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_breakfast" />
<field name="pms_room_type_id" ref="pms_room_type_economic" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record
id="pms_board_service_room_eco_half_board"
@@ -815,6 +816,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_half_board" />
<field name="pms_room_type_id" ref="pms_room_type_economic" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record
id="pms_board_service_room_eco_full_board"
@@ -822,6 +824,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_full_board" />
<field name="pms_room_type_id" ref="pms_room_type_economic" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<!-- Room Single -->
<record
@@ -830,6 +833,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_breakfast" />
<field name="pms_room_type_id" ref="pms_room_type_single" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record
id="pms_board_service_room_single_half_board"
@@ -837,6 +841,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_half_board" />
<field name="pms_room_type_id" ref="pms_room_type_single" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record
id="pms_board_service_room_single_full_board"
@@ -844,6 +849,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_full_board" />
<field name="pms_room_type_id" ref="pms_room_type_single" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<!-- Room Double -->
<record
@@ -852,6 +858,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_breakfast" />
<field name="pms_room_type_id" ref="pms_room_type_double" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record
id="pms_board_service_room_double_half_board"
@@ -859,6 +866,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_half_board" />
<field name="pms_room_type_id" ref="pms_room_type_double" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record
id="pms_board_service_room_full_board"
@@ -866,6 +874,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_full_board" />
<field name="pms_room_type_id" ref="pms_room_type_double" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<!-- Room Triple -->
<record
@@ -874,6 +883,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_breakfast" />
<field name="pms_room_type_id" ref="pms_room_type_triple" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<record
id="pms_board_service_room_triple_full_board"
@@ -881,6 +891,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_full_board" />
<field name="pms_room_type_id" ref="pms_room_type_triple" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<!-- Room Quadruple -->
<record
@@ -889,6 +900,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_breakfast" />
<field name="pms_room_type_id" ref="pms_room_type_quadruple" />
<field name="pms_property_id" ref="pms.main_pms_property" />
</record>
<!-- Room Grand suite -->
<record
@@ -897,6 +909,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_breakfast" />
<field name="pms_room_type_id" ref="demo_pms_room_type_grand_suite" />
<field name="pms_property_id" ref="san_carlos_property" />
</record>
<record
id="pms_board_service_room_grand_suite_half_board"
@@ -904,6 +917,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_half_board" />
<field name="pms_room_type_id" ref="demo_pms_room_type_grand_suite" />
<field name="pms_property_id" ref="san_carlos_property" />
</record>
<record
id="pms_board_service_room_grand_suite_full_board"
@@ -911,6 +925,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_full_board" />
<field name="pms_room_type_id" ref="demo_pms_room_type_grand_suite" />
<field name="pms_property_id" ref="san_carlos_property" />
</record>
<!-- Room Junior suite -->
<record
@@ -919,6 +934,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_breakfast" />
<field name="pms_room_type_id" ref="demo_pms_room_type_junior_suite" />
<field name="pms_property_id" ref="san_carlos_property" />
</record>
<record
id="pms_board_service_room_junior_suite_half_board"
@@ -926,6 +942,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_half_board" />
<field name="pms_room_type_id" ref="demo_pms_room_type_junior_suite" />
<field name="pms_property_id" ref="san_carlos_property" />
</record>
<record
id="pms_board_service_room_junior_suite_full_board"
@@ -933,6 +950,7 @@
>
<field name="pms_board_service_id" ref="pms_board_service_full_board" />
<field name="pms_room_type_id" ref="demo_pms_room_type_junior_suite" />
<field name="pms_property_id" ref="san_carlos_property" />
</record>
<!-- room.closure.reason -->
<record id="pms_room_closure_reason_maintenance" model="room.closure.reason">

View File

@@ -21,18 +21,14 @@ class PmsBoardServiceRoomType(models.Model):
ondelete="cascade",
check_pms_properties=True,
)
pms_property_ids = fields.Many2many(
string="Properties",
help="Properties with access to the element;"
" if not set, all properties can access",
pms_property_id = fields.Many2one(
string="Property",
help="Property with access to the element;"
" if not set, all property can access",
required=False,
ondelete="restrict",
comodel_name="pms.property",
relation="pms_board_service_room_type_pms_property_rel",
column1="pms_board_service_room_type_id",
column2="pms_property_id",
check_pms_properties=True,
compute="_compute_pms_property_ids",
store=True,
)
pms_room_type_id = fields.Many2one(
@@ -64,43 +60,6 @@ class PmsBoardServiceRoomType(models.Model):
help="Indicates if this board service is applied by default in the room type",
)
@api.depends(
"pms_room_type_id",
"pms_room_type_id.pms_property_ids",
"pms_board_service_id",
"pms_board_service_id.pms_property_ids",
)
def _compute_pms_property_ids(self):
for record in self:
if (
record.pms_room_type_id.pms_property_ids
and record.pms_board_service_id.pms_property_ids
):
record.pms_property_ids = self.env["pms.property"].search(
[
(
"id",
"in",
list(
set(record.pms_room_type_id.pms_property_ids.ids)
& set(record.pms_board_service_id.pms_property_ids.ids)
),
)
]
)
elif (
record.pms_room_type_id.pms_property_ids
and not record.pms_board_service_id.pms_property_ids
):
record.pms_property_ids = record.pms_room_type_id.pms_property_ids
elif (
not record.pms_room_type_id.pms_property_ids
and record.pms_board_service_id.pms_property_ids
):
record.pms_property_ids = record.pms_board_service_id.pms_property_ids
else:
record.pms_property_ids = False
@api.depends("board_service_line_ids.amount")
def _compute_board_amount(self):
for record in self:
@@ -119,7 +78,7 @@ class PmsBoardServiceRoomType(models.Model):
return res
@api.constrains("by_default")
def constrains_duplicated_board_defaul(self):
def constrains_duplicated_board_default(self):
for record in self:
default_boards = (
record.pms_room_type_id.board_service_room_type_ids.filtered(
@@ -127,7 +86,12 @@ class PmsBoardServiceRoomType(models.Model):
)
)
# TODO Check properties (with different propertys is allowed)
if any(default_boards.filtered(lambda l: l.id != record.id)):
if any(
default_boards.filtered(
lambda l: l.id != record.id
and l.pms_property_id == record.pms_property_id
)
):
raise UserError(_("""Only can set one default board service"""))
def open_board_lines_form(self):
@@ -156,14 +120,14 @@ class PmsBoardServiceRoomType(models.Model):
@api.model
def create(self, vals):
# properties = False
if "pms_board_service_id" in vals:
if "pms_board_service_id" in vals and "board_service_line_ids" not in vals:
vals.update(
self.prepare_board_service_reservation_ids(vals["pms_board_service_id"])
)
return super(PmsBoardServiceRoomType, self).create(vals)
def write(self, vals):
if "pms_board_service_id" in vals:
if "pms_board_service_id" in vals and "board_service_line_ids" not in vals:
vals.update(
self.prepare_board_service_reservation_ids(vals["pms_board_service_id"])
)

View File

@@ -1,6 +1,6 @@
# Copyright 2017 Dario Lodeiros
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
from odoo import fields, models
class PmsBoardServiceRoomTypeLine(models.Model):
@@ -16,15 +16,13 @@ class PmsBoardServiceRoomTypeLine(models.Model):
comodel_name="pms.board.service.room.type",
ondelete="cascade",
)
pms_property_ids = fields.Many2many(
string="Properties",
help="Properties with access to the element;"
pms_property_id = fields.Many2one(
string="Property",
help="Property with access to the element;"
" if not set, all properties can access",
comodel_name="pms.property",
relation="pms_board_service_room_type_line_pms_property_rel",
column1="pms_board_service_room_type_id",
column2="pms_property_id",
check_pms_properties=True,
related="pms_board_service_room_type_id.pms_property_id",
)
product_id = fields.Many2one(
string="Product",
@@ -34,41 +32,12 @@ class PmsBoardServiceRoomTypeLine(models.Model):
check_pms_properties=True,
domain="[('is_pms_available', '=', True)]",
)
# TODO def default_amount "amount of service"
amount = fields.Float(
string="Amount",
help="Price for this Board Service Room Type Line/Product",
default=0.0,
default=lambda self: self._default_amount(),
digits=("Product Price"),
)
@api.model
def create(self, vals):
properties = False
if "pms_board_service_room_type_id" in vals:
board_service = self.env["pms.board.service.room.type"].browse(
vals["pms_board_service_room_type_id"]
)
properties = board_service.pms_property_ids
if properties:
vals.update(
{
"pms_property_ids": properties,
}
)
return super(PmsBoardServiceRoomTypeLine, self).create(vals)
def write(self, vals):
properties = False
if "pms_board_service_room_type_id" in vals:
board_service = self.env["pms.board.service.room.type"].browse(
vals["pms_board_service_room_type_id"]
)
properties = board_service.pms_property_ids
if properties:
vals.update(
{
"pms_property_ids": properties,
}
)
return super(PmsBoardServiceRoomTypeLine, self).write(vals)
def _default_amount(self):
return self.product_id.list_price

View File

@@ -827,6 +827,7 @@ class PmsReservation(models.Model):
[
("pms_room_type_id", "=", reservation.room_type_id.id),
("by_default", "=", True),
("pms_property_id", "=", reservation.pms_property_id.id),
]
)
if (

View File

@@ -144,25 +144,6 @@ class ProductPricelist(models.Model):
)
return items
@api.constrains("pricelist_type", "item_ids", "pms_property_ids")
def _check_pricelist_type(self):
for record in self:
if record.item_ids:
for item in record.item_ids:
if record.pricelist_type == "daily" and (
item.compute_price != "fixed"
or len(item.pms_property_ids) != 1
or not item.date_end_consumption
or not item.date_start_consumption
or item.date_end_consumption != item.date_start_consumption
):
raise ValidationError(
_(
"Daily Plan must have fixed price, "
"only one property and its items must be daily"
)
)
@api.constrains("is_pms_available", "availability_plan_id")
def _check_is_pms_available(self):
for record in self:

View File

@@ -23,6 +23,10 @@ class ProductProduct(models.Model):
super(ProductProduct, self)._compute_product_price()
def _compute_board_price(self):
pms_property_id = (
self.env.context.get("property")
or self.env.user.get_active_property_ids()[0]
)
for record in self:
if self._context.get("board_service"):
record.board_price = (
@@ -35,6 +39,7 @@ class ProductProduct(models.Model):
self._context.get("board_service"),
),
("product_id", "=", record.id),
("pms_property_id", "=", pms_property_id),
]
)
.amount

View File

@@ -102,7 +102,7 @@
<field name="model_id" ref="model_pms_board_service_room_type" />
<field name="global" eval="True" />
<field name="domain_force">
['|',('pms_property_ids','=',False),('pms_property_ids', 'in',
['|',('pms_property_id','=',False),('pms_property_id', 'in',
user.get_active_property_ids())]
</field>
</record>

View File

@@ -770,6 +770,7 @@ class TestPmsBookingEngine(TestPms):
{
"pms_room_type_id": self.test_room_type_double.id,
"pms_board_service_id": self.board_service_test.id,
"pms_property_id": self.pms_property1.id,
}
)
# self.board_service_room_type.flush()
@@ -853,6 +854,7 @@ class TestPmsBookingEngine(TestPms):
{
"pms_room_type_id": self.test_room_type_double.id,
"pms_board_service_id": self.board_service_test.id,
"pms_property_id": self.pms_property1.id,
}
)
discount = 15

View File

@@ -493,6 +493,7 @@ class TestPmsFolioInvoice(TestPms):
{
"pms_room_type_id": self.room_type_double.id,
"pms_board_service_id": self.board_service1.id,
"pms_property_id": self.property.id,
}
)
self.reservation1 = self.env["pms.reservation"].create(
@@ -549,6 +550,7 @@ class TestPmsFolioInvoice(TestPms):
{
"pms_room_type_id": self.room_type_double.id,
"pms_board_service_id": self.board_service1.id,
"pms_property_id": self.property.id,
}
)
self.reservation1 = self.env["pms.reservation"].create(
@@ -606,6 +608,7 @@ class TestPmsFolioInvoice(TestPms):
{
"pms_room_type_id": self.room_type_double.id,
"pms_board_service_id": self.board_service1.id,
"pms_property_id": self.property.id,
}
)
self.reservation1 = self.env["pms.reservation"].create(
@@ -761,6 +764,7 @@ class TestPmsFolioInvoice(TestPms):
{
"pms_room_type_id": self.demo_room_type_double.id,
"pms_board_service_id": self.board_service1.id,
"pms_property_id": self.pms_property_demo.id,
}
)
# ACT
@@ -863,6 +867,7 @@ class TestPmsFolioInvoice(TestPms):
{
"pms_room_type_id": self.room_type_double.id,
"pms_board_service_id": self.board_service1.id,
"pms_property_id": self.property.id,
}
)
# ACT

View File

@@ -72,6 +72,7 @@ class TestPmsFolioSaleLine(TestPms):
{
"pms_room_type_id": self.room_type_double.id,
"pms_board_service_id": self.board_service_test.id,
"pms_property_id": self.pms_property1.id,
}
)
self.extra_service = self.env["pms.service"].create(

View File

@@ -389,6 +389,7 @@ class TestPmsMultiproperty(TestPms):
{
"pms_room_type_id": room_type_double.id,
"pms_board_service_id": board_service_test.id,
"pms_property_id": self.pms_property1.id,
}
)
# ASSERT

View File

@@ -8,7 +8,7 @@
<group>
<field name="amount" />
<field name="board_service_line_ids">
<field name="pms_property_ids" invisible="1" />
<field name="pms_property_id" />
<tree editable="bottom">
<field
name="pms_board_service_room_type_id"
@@ -16,7 +16,7 @@
/>
<field name="product_id" />
<field name="amount" />
<field name="pms_property_ids" invisible="1" />
<field name="pms_property_id" invisible="1" />
</tree>
</field>
</group>

View File

@@ -66,7 +66,7 @@
<field name="pms_room_type_id" invisible="1" />
<field name="pms_board_service_id" />
<field name="amount" />
<field name="pms_property_ids" invisible="1" />
<field name="pms_property_id" />
<button
type="object"
class="oe_stat_button"

View File

@@ -353,7 +353,12 @@ class AvailabilityWizard(models.TransientModel):
string="Board Service",
help="Board Service included in the room",
comodel_name="pms.board.service.room.type",
domain="[('pms_room_type_id','=',room_type_id)]",
domain="""
[
('pms_room_type_id','=',room_type_id),
('pms_property_id','=',pms_property_id)
]
""",
check_pms_properties=True,
)

View File

@@ -84,6 +84,7 @@
decoration-primary="value_num_rooms_selected &gt; 0"
decoration-bf="value_num_rooms_selected &gt; 0"
>
<field name="pms_property_id" invisible="1" />
<field
name="room_type_id"
readonly="1"

View File

@@ -386,8 +386,7 @@ class WizardFolioChanges(models.TransientModel):
lambda x: x.pms_board_service_id.id == new_board_service_id
and (
reservation.folio_id.pms_property_id.id
in x.pms_property_ids.ids
or not x.pms_property_ids
== x.pms_property_id.ids
)
)
)