[REF]pms: added getter and setter field value in ir.pms.property

This commit is contained in:
braisab
2021-12-27 19:25:12 +01:00
committed by Darío Lodeiros
parent adcf775cc0
commit ad2454354d
5 changed files with 147 additions and 133 deletions

View File

@@ -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,
}
)

View File

@@ -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):

View File

@@ -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
)

View File

@@ -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:

View File

@@ -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):
"""