mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP]pms: unique board_service_room_type by property
This commit is contained in:
@@ -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">
|
||||
|
||||
@@ -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"])
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
|
||||
@@ -84,6 +84,7 @@
|
||||
decoration-primary="value_num_rooms_selected > 0"
|
||||
decoration-bf="value_num_rooms_selected > 0"
|
||||
>
|
||||
<field name="pms_property_id" invisible="1" />
|
||||
<field
|
||||
name="room_type_id"
|
||||
readonly="1"
|
||||
|
||||
@@ -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
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user