diff --git a/pms/models/ir_pms_property.py b/pms/models/ir_pms_property.py index df74ccbb7..b10901958 100644 --- a/pms/models/ir_pms_property.py +++ b/pms/models/ir_pms_property.py @@ -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, + } + ) diff --git a/pms/models/pms_board_service_line.py b/pms/models/pms_board_service_line.py index 4d626240d..8c81068ee 100644 --- a/pms/models/pms_board_service_line.py +++ b/pms/models/pms_board_service_line.py @@ -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): diff --git a/pms/models/product_template.py b/pms/models/product_template.py index c70bbf45f..685722256 100644 --- a/pms/models/product_template.py +++ b/pms/models/product_template.py @@ -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 + ) diff --git a/pms/models/res_partner.py b/pms/models/res_partner.py index 1f1ba3d97..b2eb98c0b 100644 --- a/pms/models/res_partner.py +++ b/pms/models/res_partner.py @@ -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: diff --git a/pms/tests/test_pms_availability_plan_rules.py b/pms/tests/test_pms_availability_plan_rules.py index 58fc94ab6..664dc66ca 100644 --- a/pms/tests/test_pms_availability_plan_rules.py +++ b/pms/tests/test_pms_availability_plan_rules.py @@ -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): """