From 15c670b6da2e0df31e7dfbfc04f04ff345bebee8 Mon Sep 17 00:00:00 2001 From: braisab Date: Wed, 22 Dec 2021 20:13:44 +0100 Subject: [PATCH] [IMP]: product_template daily_limit and list_price depends of property --- pms/models/ir_pms_property.py | 11 +- pms/models/pms_board_service_line.py | 54 ++++++++++ pms/models/product_template.py | 145 +++++++++++++++++++-------- 3 files changed, 165 insertions(+), 45 deletions(-) diff --git a/pms/models/ir_pms_property.py b/pms/models/ir_pms_property.py index fba6756b4..df74ccbb7 100644 --- a/pms/models/ir_pms_property.py +++ b/pms/models/ir_pms_property.py @@ -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") diff --git a/pms/models/pms_board_service_line.py b/pms/models/pms_board_service_line.py index 9be0d7d3c..c83a6e3f0 100644 --- a/pms/models/pms_board_service_line.py +++ b/pms/models/pms_board_service_line.py @@ -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: diff --git a/pms/models/product_template.py b/pms/models/product_template.py index a2c20cf88..c70bbf45f 100644 --- a/pms/models/product_template.py +++ b/pms/models/product_template.py @@ -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, + } + )