From cb76351f0a4211d0a1a0e1cd24f6680a816b97e1 Mon Sep 17 00:00:00 2001 From: braisab Date: Mon, 20 Dec 2021 18:32:28 +0100 Subject: [PATCH 1/7] [WIP]pms:added ir.pms.property model --- pms/models/__init__.py | 1 + pms/models/ir_pms_property.py | 13 ++++++++ pms/models/product_template.py | 54 ++++++++++++++++++++++++++++++-- pms/security/ir.model.access.csv | 1 + 4 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 pms/models/ir_pms_property.py diff --git a/pms/models/__init__.py b/pms/models/__init__.py index cb2c8eb37..5f818c0e6 100644 --- a/pms/models/__init__.py +++ b/pms/models/__init__.py @@ -48,3 +48,4 @@ from . import pms_automated_mails from . import payment_transaction from . import res_partner_id_category from . import pms_team_member +from . import ir_pms_property diff --git a/pms/models/ir_pms_property.py b/pms/models/ir_pms_property.py new file mode 100644 index 000000000..fba6756b4 --- /dev/null +++ b/pms/models/ir_pms_property.py @@ -0,0 +1,13 @@ +from odoo import fields, models + + +class IrPmsProperty(models.Model): + _name = "ir.pms.property" + + 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") + + value = fields.Integer(string="Field Value") diff --git a/pms/models/product_template.py b/pms/models/product_template.py index 0b5c7a538..a2c20cf88 100644 --- a/pms/models/product_template.py +++ b/pms/models/product_template.py @@ -1,7 +1,7 @@ # Copyright 2017 Alexandre Díaz # Copyright 2017 Dario Lodeiros # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import api, fields, models class ProductTemplate(models.Model): @@ -35,7 +35,12 @@ class ProductTemplate(models.Model): default="before", ) daily_limit = fields.Integer( - string="Daily limit", help="Indicates how much products can consumed in one day" + 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, ) is_extra_bed = fields.Boolean( string="Is extra bed", @@ -47,3 +52,48 @@ class ProductTemplate(models.Model): help="Indicates if that product is a crib", default=False, ) + + # @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] + 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 + + def _inverse_ir_pms_property(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 diff --git a/pms/security/ir.model.access.csv b/pms/security/ir.model.access.csv index 878e87523..65eebb843 100644 --- a/pms/security/ir.model.access.csv +++ b/pms/security/ir.model.access.csv @@ -68,3 +68,4 @@ user_access_res_partner_portal,user_access_res_partner_portal,model_res_partner, user_access_pms_precheckin_portal,user_access_pms_precheckin_portal,model_pms_checkin_partner,base.group_portal,1,1,1,1 user_access_pms_booking_duplicate,user_access_pms_booking_duplicate,model_pms_booking_duplicate,pms.group_pms_user,1,1,1,1 user_access_pms_reservation_duplicate,user_access_pms_reservation_duplicate,model_pms_reservation_duplicate,pms.group_pms_user,1,1,1,1 +user_access_ir_pms_property,user_access_ir_pms_property,model_ir_pms_property,pms.group_pms_user,1,1,1,1 From 15c670b6da2e0df31e7dfbfc04f04ff345bebee8 Mon Sep 17 00:00:00 2001 From: braisab Date: Wed, 22 Dec 2021 20:13:44 +0100 Subject: [PATCH 2/7] [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, + } + ) From adcf775cc0686a13e703af8c95867064bb90bb2b Mon Sep 17 00:00:00 2001 From: braisab Date: Wed, 22 Dec 2021 20:14:09 +0100 Subject: [PATCH 3/7] [IMP]: pms_board_service_line amount depends of property --- pms/models/pms_board_service_line.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pms/models/pms_board_service_line.py b/pms/models/pms_board_service_line.py index c83a6e3f0..4d626240d 100644 --- a/pms/models/pms_board_service_line.py +++ b/pms/models/pms_board_service_line.py @@ -39,7 +39,7 @@ class PmsBoardServiceLine(models.Model): help="Price for this Board Service Line/Product", default=lambda self: self._get_default_price(), compute="_compute_amount", - inverse="_inverse_ir_pms_property", + inverse="_inverse_amount", digits=("Product Price"), ) @@ -69,7 +69,7 @@ class PmsBoardServiceLine(models.Model): if ir_pms_property: record.amount = ir_pms_property.value_float - def _inverse_ir_pms_property(self): + def _inverse_amount(self): for record in self: pms_property_id = self.env.user.get_active_property_ids()[0] if pms_property_id: From ad2454354dda0daae6e0adfabade8915248931f5 Mon Sep 17 00:00:00 2001 From: braisab Date: Mon, 27 Dec 2021 19:25:12 +0100 Subject: [PATCH 4/7] [REF]pms: added getter and setter field value in ir.pms.property --- pms/models/ir_pms_property.py | 76 +++++++++++- pms/models/pms_board_service_line.py | 57 +++------ pms/models/product_template.py | 112 ++++-------------- pms/models/res_partner.py | 31 +++++ pms/tests/test_pms_availability_plan_rules.py | 4 +- 5 files changed, 147 insertions(+), 133 deletions(-) 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): """ From 49ad1b22d23c69b3821a8213c6c58c2199467d99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Sat, 24 Sep 2022 15:53:04 +0200 Subject: [PATCH 5/7] [IMP]pms: property dependent check context property_id --- pms/models/pms_board_service_line.py | 10 +++++++-- pms/models/product_template.py | 20 ++++++++++++++---- pms/models/res_partner.py | 31 ---------------------------- 3 files changed, 24 insertions(+), 37 deletions(-) diff --git a/pms/models/pms_board_service_line.py b/pms/models/pms_board_service_line.py index 8c81068ee..93b8ef45b 100644 --- a/pms/models/pms_board_service_line.py +++ b/pms/models/pms_board_service_line.py @@ -50,7 +50,10 @@ class PmsBoardServiceLine(models.Model): @api.depends_context("allowed_pms_property_ids") def _compute_amount(self): for record in self: - pms_property_id = self.env.user.get_active_property_ids()[0] + pms_property_id = ( + self.env.context.get("property") + or self.env.user.get_active_property_ids()[0] + ) record.amount = self.env["ir.pms.property"].get_field_value( pms_property_id, self._name, @@ -61,7 +64,10 @@ class PmsBoardServiceLine(models.Model): def _inverse_amount(self): for record in self: - pms_property_id = self.env.user.get_active_property_ids()[0] + pms_property_id = ( + self.env.context.get("property") + or self.env.user.get_active_property_ids()[0] + ) self.env["ir.pms.property"].set_field_value( pms_property_id, self._name, diff --git a/pms/models/product_template.py b/pms/models/product_template.py index 685722256..b6b12f41c 100644 --- a/pms/models/product_template.py +++ b/pms/models/product_template.py @@ -58,7 +58,10 @@ class ProductTemplate(models.Model): @api.depends_context("allowed_pms_property_ids") def _compute_daily_limit(self): for record in self: - pms_property_id = self.env.user.get_active_property_ids()[0] + pms_property_id = ( + self.env.context.get("property") + or self.env.user.get_active_property_ids()[0] + ) record.daily_limit = self.env["ir.pms.property"].get_field_value( pms_property_id, self._name, @@ -70,7 +73,10 @@ class ProductTemplate(models.Model): @api.depends_context("allowed_pms_property_ids") def _compute_list_price(self): for record in self: - pms_property_id = self.env.user.get_active_property_ids()[0] + pms_property_id = ( + self.env.context.get("property") + or self.env.user.get_active_property_ids()[0] + ) record.list_price = self.env["ir.pms.property"].get_field_value( pms_property_id, self._name, @@ -81,7 +87,10 @@ class ProductTemplate(models.Model): def _inverse_daily_limit(self): for record in self: - pms_property_id = self.env.user.get_active_property_ids()[0] + pms_property_id = ( + self.env.context.get("property") + or self.env.user.get_active_property_ids()[0] + ) self.env["ir.pms.property"].set_field_value( pms_property_id, self._name, @@ -92,7 +101,10 @@ class ProductTemplate(models.Model): def _inverse_list_price(self): for record in self: - pms_property_id = self.env.user.get_active_property_ids()[0] + pms_property_id = ( + self.env.context.get("property") + or self.env.user.get_active_property_ids()[0] + ) 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 b2eb98c0b..1f1ba3d97 100644 --- a/pms/models/res_partner.py +++ b/pms/models/res_partner.py @@ -12,12 +12,6 @@ _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", @@ -812,31 +806,6 @@ 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: From 8726e8c6305930fd405f67029799e5942db8647f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Sat, 24 Sep 2022 16:21:06 +0200 Subject: [PATCH 6/7] [TMP]pms: Disabled constrain channel type ids reservation --- pms/tests/test_pms_reservation.py | 71 +++++++++++++++++-------------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/pms/tests/test_pms_reservation.py b/pms/tests/test_pms_reservation.py index 4d736e28c..6f9348c50 100644 --- a/pms/tests/test_pms_reservation.py +++ b/pms/tests/test_pms_reservation.py @@ -4214,36 +4214,41 @@ class TestPmsReservations(TestPms): "sale_channel_origin of rservation", ) - @freeze_time("2000-12-10") - def test_check_sale_channel_origin_in_reservation_lines(self): - """ - Check that a reservation has at least one reservation_line woth the - same sale_channel_id as its sale_channel_origin_id - """ - # ARRANGE - sale_channel_phone = self.env["pms.sale.channel"].create( - { - "name": "phone", - "channel_type": "direct", - } - ) - reservation_vals = { - "checkin": datetime.datetime.now(), - "checkout": datetime.datetime.now() + datetime.timedelta(days=1), - "room_type_id": self.room_type_double.id, - "partner_id": self.partner1.id, - "pms_property_id": self.pms_property1.id, - "sale_channel_origin_id": self.sale_channel_direct.id, - } - reservation1 = self.env["pms.reservation"].create(reservation_vals) - - # ACT & ASSERT - with self.assertRaises( - ValidationError, - msg="Error, there cannot be a reservation in which at least one of its reservation" - "lines doesn't have as sale_channel_id the sale_channel_origin_id of reservation", - ): - reservation1.reservation_line_ids.write( - {"sale_channel_id": sale_channel_phone} - ) - reservation1.flush() + # TEMPORAL UNABLE (_check_lines_with_sale_channel_id in pms_reservation.py + # unable to allow updagrade version) + # @freeze_time("2000-12-10") + # def test_check_sale_channel_origin_in_reservation_lines(self): + # """ + # Check that a reservation has at least one reservation_line woth the + # same sale_channel_id as its sale_channel_origin_id + # """ + # # ARRANGE + # sale_channel_phone = self.env["pms.sale.channel"].create( + # { + # "name": "phone", + # "channel_type": "direct", + # } + # ) + # reservation_vals = { + # "checkin": datetime.datetime.now(), + # "checkout": datetime.datetime.now() + datetime.timedelta(days=1), + # "room_type_id": self.room_type_double.id, + # "partner_id": self.partner1.id, + # "pms_property_id": self.pms_property1.id, + # "sale_channel_origin_id": self.sale_channel_direct.id, + # } + # reservation1 = self.env["pms.reservation"].create(reservation_vals) + # reservation1.fetch() + # # ACT & ASSERT + # with self.assertRaises( + # ValidationError, + # msg=""" + # Error, there cannot be a reservation + # in which at least one of its reservation + # """ + # "lines doesn't have as sale_channel_id the sale_channel_origin_id of reservation", + # ): + # reservation1.reservation_line_ids.write( + # {"sale_channel_id": sale_channel_phone} + # ) + # reservation1.flush() From 6c3f0380d2334eca08528efc17e7b202f9c09cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Lodeiros?= Date: Sat, 24 Sep 2022 20:17:24 +0200 Subject: [PATCH 7/7] [IMP]pms: list_price product property dependent with default value --- pms/models/product_template.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/pms/models/product_template.py b/pms/models/product_template.py index b6b12f41c..a47fbfb54 100644 --- a/pms/models/product_template.py +++ b/pms/models/product_template.py @@ -108,3 +108,20 @@ class ProductTemplate(models.Model): self.env["ir.pms.property"].set_field_value( pms_property_id, self._name, "list_price", record.id, record.list_price ) + # Set default value in other properties + other_properties = self.env["pms.property"].search([]) + for other_property in other_properties.ids: + if not self.env["ir.pms.property"].get_field_value( + other_property, + self._name, + "list_price", + record.id, + type(record.list_price), + ): + self.env["ir.pms.property"].set_field_value( + other_property, + self._name, + "list_price", + record.id, + record.list_price, + )