[IMP]: product_template daily_limit and list_price depends of property

This commit is contained in:
braisab
2021-12-22 20:13:44 +01:00
committed by Darío Lodeiros
parent cb76351f0a
commit 15c670b6da
3 changed files with 165 additions and 45 deletions

View File

@@ -3,11 +3,14 @@ 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")
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")
value = fields.Integer(string="Field Value")
value_integer = fields.Integer(string="Integer Field Value")
value_float = fields.Float(string="Float Field Value")
value_reference = fields.Text(string="Reference Field Value")

View File

@@ -38,6 +38,8 @@ class PmsBoardServiceLine(models.Model):
string="Amount",
help="Price for this Board Service Line/Product",
default=lambda self: self._get_default_price(),
compute="_compute_amount",
inverse="_inverse_ir_pms_property",
digits=("Product Price"),
)
@@ -45,6 +47,58 @@ class PmsBoardServiceLine(models.Model):
if self.product_id:
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
def _inverse_ir_pms_property(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,
}
)
@api.onchange("product_id")
def onchange_product_id(self):
if self.product_id:

View File

@@ -38,9 +38,11 @@ class ProductTemplate(models.Model):
string="Daily limit",
help="Indicates how much products can consumed in one day",
compute="_compute_daily_limit",
inverse="_inverse_ir_pms_property",
readonly=False,
store=True,
inverse="_inverse_daily_limit",
)
list_price = fields.Float(
compute="_compute_list_price",
inverse="_inverse_list_price",
)
is_extra_bed = fields.Boolean(
string="Is extra bed",
@@ -53,47 +55,108 @@ class ProductTemplate(models.Model):
default=False,
)
# @api.depends_context("allowed_pms_property_ids")
@api.depends("pms_property_ids")
@api.depends_context("allowed_pms_property_ids")
# @api.depends("pms_property_ids")
def _compute_daily_limit(self):
for record in self:
pms_property_id = False
if record.pms_property_ids:
pms_property_id = self.env.user.get_active_property_ids()[0]
pms_property_id = self.env.user.get_active_property_ids()[0]
if pms_property_id:
property = self.env["pms.property"].browse(pms_property_id)
else:
property = False
if property:
model_id = self.env["ir.model"].browse(self._name)
model = self.env["ir.model"].search([("id", "=", model_id)])
field_id = self.env["ir.model.fields"].search(
[("name", "=", "daily_limit"), ("model_id", "=", model)]
)
ir_pms_property = self.env["ir.pms.property"].search(
[
("pms_property_id", "=", property.id),
("field_id", "=", field_id.id),
("res_id", "=", record),
]
)
record.daily_limit = ir_pms_property.value
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
def _inverse_ir_pms_property(self):
@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]
field_id = self.env["ir.model.fields"].search(
[("name", "=", "daily_limit")]
)
model_id = self.env["ir.model"].search([("field_id", "=", field_id[1].id)])
ir_pms_property = self.env["ir.pms.property"].search(
[
("pms_property_id", "=", pms_property_id),
("model_id", "=", model_id.id),
("field_id", "=", field_id[1].id),
]
)
if ir_pms_property:
ir_pms_property.value = record.daily_limit
# else:
# crear
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
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,
}
)
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,
}
)