mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[REF]pms: added getter and setter field value in ir.pms.property
This commit is contained in:
@@ -4,7 +4,9 @@ from odoo import fields, models
|
||||
class IrPmsProperty(models.Model):
|
||||
_name = "ir.pms.property"
|
||||
_description = "IrPmsProperty"
|
||||
pms_property_id = fields.Many2one(string="Properties", comodel_name="pms.property")
|
||||
pms_property_id = fields.Many2one(
|
||||
string="Properties", help="", comodel_name="pms.property"
|
||||
)
|
||||
model_id = fields.Many2one(string="Model", comodel_name="ir.model")
|
||||
field_id = fields.Many2one(string="Field", comodel_name="ir.model.fields")
|
||||
record = fields.Integer(string="Record Id")
|
||||
@@ -14,3 +16,75 @@ class IrPmsProperty(models.Model):
|
||||
value_float = fields.Float(string="Float Field Value")
|
||||
|
||||
value_reference = fields.Text(string="Reference Field Value")
|
||||
|
||||
def get_field_value(
|
||||
self, pms_property_id, model_name, field_name, record_id, value_type
|
||||
):
|
||||
model_id = self.env["ir.model"].browse(model_name).id
|
||||
model = self.env["ir.model"].search([("model", "=", model_id)])
|
||||
if model:
|
||||
field_id = self.env["ir.model.fields"].search(
|
||||
[("name", "=", field_name), ("model_id", "=", model.id)]
|
||||
)
|
||||
ir_pms_property = self.env["ir.pms.property"].search(
|
||||
[
|
||||
("pms_property_id", "=", pms_property_id),
|
||||
("field_id", "=", field_id[0].id),
|
||||
("record", "=", record_id),
|
||||
]
|
||||
)
|
||||
if ir_pms_property:
|
||||
if value_type == int:
|
||||
value = ir_pms_property.value_integer
|
||||
elif value_type == float:
|
||||
value = ir_pms_property.value_float
|
||||
else:
|
||||
index_bracket = ir_pms_property.value_reference.index("(")
|
||||
index_comma = ir_pms_property.value_reference.index(",")
|
||||
model_name = ir_pms_property.value_reference[:index_bracket]
|
||||
resource_id = ir_pms_property.value_reference[
|
||||
index_bracket + 1 : index_comma
|
||||
]
|
||||
value = self.env[model_name].browse(int(resource_id))
|
||||
return value
|
||||
return False
|
||||
|
||||
def set_field_value(
|
||||
self, pms_property_id, model_name, field_name, record_id, value
|
||||
):
|
||||
model_id = self.env["ir.model"].browse(model_name).id
|
||||
model = self.env["ir.model"].search([("model", "=", model_id)])
|
||||
if model:
|
||||
field_id = self.env["ir.model.fields"].search(
|
||||
[("name", "=", field_name), ("model_id", "=", model.id)]
|
||||
)
|
||||
ir_pms_property = self.env["ir.pms.property"].search(
|
||||
[
|
||||
("pms_property_id", "=", pms_property_id),
|
||||
("field_id", "=", field_id[0].id),
|
||||
("record", "=", record_id),
|
||||
]
|
||||
)
|
||||
if type(value) == int:
|
||||
value_type = "value_integer"
|
||||
elif type(value) == float:
|
||||
value_type = "value_float"
|
||||
else:
|
||||
value_type = "value_reference"
|
||||
value = str(value)
|
||||
if ir_pms_property:
|
||||
ir_pms_property.write(
|
||||
{
|
||||
value_type: value,
|
||||
}
|
||||
)
|
||||
else:
|
||||
self.env["ir.pms.property"].create(
|
||||
{
|
||||
"pms_property_id": pms_property_id,
|
||||
"model_id": model.id,
|
||||
"field_id": field_id[0].id,
|
||||
value_type: value,
|
||||
"record": record_id,
|
||||
}
|
||||
)
|
||||
|
||||
@@ -48,56 +48,27 @@ class PmsBoardServiceLine(models.Model):
|
||||
return self.product_id.list_price
|
||||
|
||||
@api.depends_context("allowed_pms_property_ids")
|
||||
# @api.depends("pms_property_ids")
|
||||
def _compute_amount(self):
|
||||
for record in self:
|
||||
pms_property_id = self.env.user.get_active_property_ids()[0]
|
||||
if pms_property_id:
|
||||
model_id = self.env["ir.model"].browse(self._name).id
|
||||
model = self.env["ir.model"].search([("model", "=", model_id)])
|
||||
if model:
|
||||
field_id = self.env["ir.model.fields"].search(
|
||||
[("name", "=", "amount"), ("model_id", "=", model.id)]
|
||||
)
|
||||
ir_pms_property = self.env["ir.pms.property"].search(
|
||||
[
|
||||
("pms_property_id", "=", pms_property_id),
|
||||
("field_id", "=", field_id[0].id),
|
||||
("record", "=", record.id),
|
||||
]
|
||||
)
|
||||
if ir_pms_property:
|
||||
record.amount = ir_pms_property.value_float
|
||||
record.amount = self.env["ir.pms.property"].get_field_value(
|
||||
pms_property_id,
|
||||
self._name,
|
||||
"amount",
|
||||
record.id,
|
||||
type(record.amount),
|
||||
)
|
||||
|
||||
def _inverse_amount(self):
|
||||
for record in self:
|
||||
pms_property_id = self.env.user.get_active_property_ids()[0]
|
||||
if pms_property_id:
|
||||
model_id = self.env["ir.model"].browse(self._name).id
|
||||
model = self.env["ir.model"].search([("model", "=", model_id)])
|
||||
if model:
|
||||
field_id = self.env["ir.model.fields"].search(
|
||||
[("name", "=", "amount"), ("model_id", "=", model.id)]
|
||||
)
|
||||
ir_pms_property = self.env["ir.pms.property"].search(
|
||||
[
|
||||
("pms_property_id", "=", pms_property_id),
|
||||
("field_id", "=", field_id[0].id),
|
||||
("record", "=", record.id),
|
||||
]
|
||||
)
|
||||
if ir_pms_property:
|
||||
ir_pms_property.value_float = record.amount
|
||||
else:
|
||||
self.env["ir.pms.property"].create(
|
||||
{
|
||||
"pms_property_id": pms_property_id,
|
||||
"model_id": model.id,
|
||||
"field_id": field_id[0].id,
|
||||
"value_float": record.amount,
|
||||
"record": record.id,
|
||||
}
|
||||
)
|
||||
self.env["ir.pms.property"].set_field_value(
|
||||
pms_property_id,
|
||||
self._name,
|
||||
"amount",
|
||||
record.id,
|
||||
record.amount,
|
||||
)
|
||||
|
||||
@api.onchange("product_id")
|
||||
def onchange_product_id(self):
|
||||
|
||||
@@ -56,107 +56,43 @@ class ProductTemplate(models.Model):
|
||||
)
|
||||
|
||||
@api.depends_context("allowed_pms_property_ids")
|
||||
# @api.depends("pms_property_ids")
|
||||
def _compute_daily_limit(self):
|
||||
for record in self:
|
||||
pms_property_id = self.env.user.get_active_property_ids()[0]
|
||||
if pms_property_id:
|
||||
model_id = self.env["ir.model"].browse(self._name).id
|
||||
model = self.env["ir.model"].search([("model", "=", model_id)])
|
||||
if model:
|
||||
field_id = self.env["ir.model.fields"].search(
|
||||
[("name", "=", "daily_limit"), ("model_id", "=", model.id)]
|
||||
)
|
||||
ir_pms_property = self.env["ir.pms.property"].search(
|
||||
[
|
||||
("pms_property_id", "=", pms_property_id),
|
||||
("field_id", "=", field_id[0].id),
|
||||
("record", "=", record.id),
|
||||
]
|
||||
)
|
||||
if ir_pms_property:
|
||||
record.daily_limit = ir_pms_property.value_integer
|
||||
else:
|
||||
record.daily_limit = False
|
||||
record.daily_limit = self.env["ir.pms.property"].get_field_value(
|
||||
pms_property_id,
|
||||
self._name,
|
||||
"daily_limit",
|
||||
record.id,
|
||||
type(record.daily_limit),
|
||||
)
|
||||
|
||||
@api.depends_context("allowed_pms_property_ids")
|
||||
# @api.depends("pms_property_ids")
|
||||
def _compute_list_price(self):
|
||||
for record in self:
|
||||
pms_property_id = self.env.user.get_active_property_ids()[0]
|
||||
if pms_property_id:
|
||||
model_id = self.env["ir.model"].browse(self._name).id
|
||||
model = self.env["ir.model"].search([("model", "=", model_id)])
|
||||
if model:
|
||||
field_id = self.env["ir.model.fields"].search(
|
||||
[("name", "=", "list_price"), ("model_id", "=", model.id)]
|
||||
)
|
||||
ir_pms_property = self.env["ir.pms.property"].search(
|
||||
[
|
||||
("pms_property_id", "=", pms_property_id),
|
||||
("field_id", "=", field_id[0].id),
|
||||
("record", "=", record.id),
|
||||
]
|
||||
)
|
||||
if ir_pms_property:
|
||||
record.list_price = ir_pms_property.value_float
|
||||
record.list_price = self.env["ir.pms.property"].get_field_value(
|
||||
pms_property_id,
|
||||
self._name,
|
||||
"list_price",
|
||||
record.id,
|
||||
type(record.list_price),
|
||||
)
|
||||
|
||||
def _inverse_daily_limit(self):
|
||||
for record in self:
|
||||
pms_property_id = self.env.user.get_active_property_ids()[0]
|
||||
if pms_property_id:
|
||||
model_id = self.env["ir.model"].browse(self._name).id
|
||||
model = self.env["ir.model"].search([("model", "=", model_id)])
|
||||
if model:
|
||||
field_id = self.env["ir.model.fields"].search(
|
||||
[("name", "=", "daily_limit"), ("model_id", "=", model.id)]
|
||||
)
|
||||
ir_pms_property = self.env["ir.pms.property"].search(
|
||||
[
|
||||
("pms_property_id", "=", pms_property_id),
|
||||
("field_id", "=", field_id[0].id),
|
||||
("record", "=", record.id),
|
||||
]
|
||||
)
|
||||
if ir_pms_property:
|
||||
ir_pms_property.value_integer = record.daily_limit
|
||||
else:
|
||||
self.env["ir.pms.property"].create(
|
||||
{
|
||||
"pms_property_id": pms_property_id,
|
||||
"model_id": model.id,
|
||||
"field_id": field_id[0].id,
|
||||
"value_integer": record.daily_limit,
|
||||
"record": record.id,
|
||||
}
|
||||
)
|
||||
self.env["ir.pms.property"].set_field_value(
|
||||
pms_property_id,
|
||||
self._name,
|
||||
"daily_limit",
|
||||
record.id,
|
||||
record.daily_limit,
|
||||
)
|
||||
|
||||
def _inverse_list_price(self):
|
||||
for record in self:
|
||||
pms_property_id = self.env.user.get_active_property_ids()[0]
|
||||
if pms_property_id:
|
||||
model_id = self.env["ir.model"].browse(self._name).id
|
||||
model = self.env["ir.model"].search([("model", "=", model_id)])
|
||||
if model:
|
||||
field_id = self.env["ir.model.fields"].search(
|
||||
[("name", "=", "list_price"), ("model_id", "=", model.id)]
|
||||
)
|
||||
ir_pms_property = self.env["ir.pms.property"].search(
|
||||
[
|
||||
("pms_property_id", "=", pms_property_id),
|
||||
("field_id", "=", field_id[0].id),
|
||||
("record", "=", record.id),
|
||||
]
|
||||
)
|
||||
if ir_pms_property:
|
||||
ir_pms_property.value_float = record.list_price
|
||||
else:
|
||||
self.env["ir.pms.property"].create(
|
||||
{
|
||||
"pms_property_id": pms_property_id,
|
||||
"model_id": model.id,
|
||||
"field_id": field_id[0].id,
|
||||
"value_float": record.list_price,
|
||||
"record": record.id,
|
||||
}
|
||||
)
|
||||
self.env["ir.pms.property"].set_field_value(
|
||||
pms_property_id, self._name, "list_price", record.id, record.list_price
|
||||
)
|
||||
|
||||
@@ -12,6 +12,12 @@ _logger = logging.getLogger(__name__)
|
||||
class ResPartner(models.Model):
|
||||
_inherit = "res.partner"
|
||||
|
||||
property_product_pricelist = fields.Many2one(
|
||||
string="Pricelist",
|
||||
comodel_name="product.pricelist",
|
||||
compute="_compute_product_pricelist",
|
||||
inverse="_inverse_product_pricelist",
|
||||
)
|
||||
reservations_count = fields.Integer(
|
||||
string="Number of Reservations",
|
||||
help="Number of reservations of the partner",
|
||||
@@ -806,6 +812,31 @@ class ResPartner(models.Model):
|
||||
action["context"] = context
|
||||
return action
|
||||
|
||||
@api.depends_context("allowed_pms_property_ids")
|
||||
def _compute_product_pricelist(self):
|
||||
for record in self:
|
||||
pms_property_id = self.env.user.get_active_property_ids()[0]
|
||||
record.property_product_pricelist = self.env[
|
||||
"ir.pms.property"
|
||||
].get_field_value(
|
||||
pms_property_id,
|
||||
self._name,
|
||||
"property_product_pricelist",
|
||||
record.id,
|
||||
type(record.property_product_pricelist),
|
||||
)
|
||||
|
||||
def _inverse_product_pricelist(self):
|
||||
for record in self:
|
||||
pms_property_id = self.env.user.get_active_property_ids()[0]
|
||||
self.env["ir.pms.property"].set_field_value(
|
||||
pms_property_id,
|
||||
self._name,
|
||||
"property_product_pricelist",
|
||||
record.id,
|
||||
record.property_product_pricelist,
|
||||
)
|
||||
|
||||
@api.constrains("is_agency", "sale_channel_id")
|
||||
def _check_is_agency(self):
|
||||
for record in self:
|
||||
|
||||
@@ -104,7 +104,9 @@ class TestPmsRoomTypeAvailabilityRules(TestPms):
|
||||
}
|
||||
)
|
||||
# partner
|
||||
self.partner1 = self.env["res.partner"].create({"name": "Charles"})
|
||||
self.partner1 = self.env["res.partner"].create(
|
||||
{"name": "Charles", "property_product_pricelist": self.pricelist1}
|
||||
)
|
||||
|
||||
def test_availability_rooms_all(self):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user