diff --git a/addons/stock_landed_costs/i18n/stock_landed_costs.pot b/addons/stock_landed_costs/i18n/stock_landed_costs.pot index 7a3bad085a3..96169c5391b 100644 --- a/addons/stock_landed_costs/i18n/stock_landed_costs.pot +++ b/addons/stock_landed_costs/i18n/stock_landed_costs.pot @@ -756,3 +756,11 @@ msgid "" "applied for products with automated inventory valuation and FIFO or average " "costing method." msgstr "" + +#. module: stock_landed_costs +#: code:addons/stock_landed_costs/models/product.py:0 +#, python-format +msgid "" +"You cannot change the product type or disable landed cost option because the" +" product is used in an account move line." +msgstr "" diff --git a/addons/stock_landed_costs/models/product.py b/addons/stock_landed_costs/models/product.py index 4318955cc71..52cec5828c8 100644 --- a/addons/stock_landed_costs/models/product.py +++ b/addons/stock_landed_costs/models/product.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import fields, models +from odoo import fields, models, _ from odoo.addons.stock_landed_costs.models.stock_landed_cost import SPLIT_METHOD +from odoo.exceptions import UserError class ProductTemplate(models.Model): @@ -11,3 +12,12 @@ class ProductTemplate(models.Model): landed_cost_ok = fields.Boolean('Is a Landed Cost', help='Indicates whether the product is a landed cost.') split_method_landed_cost = fields.Selection(SPLIT_METHOD, string="Default Split Method", help="Default Split Method when used for Landed Cost") + + def write(self, vals): + for product in self: + if (('type' in vals and vals['type'] != 'service') or ('landed_cost_ok' in vals and not vals['landed_cost_ok'])) and product.type == 'service' and product.landed_cost_ok: + if self.env['account.move.line'].search_count([('product_id', 'in', product.product_variant_ids.ids), ('is_landed_costs_line', '=', True)]): + raise UserError(_("You cannot change the product type or disable landed cost option because the product is used in an account move line.")) + else: + vals['landed_cost_ok'] = False + super(ProductTemplate, product).write(vals)