From 16f5de3ca5d18548998714fa7d61083cd57361d6 Mon Sep 17 00:00:00 2001 From: Nicolas Lempereur Date: Wed, 28 Jul 2021 16:39:35 +0000 Subject: [PATCH] [FIX] mrp_subcontracting: no operation if subcontracting When setting a Bill or Material to subcontracting, the "Operations" tab is hidden. But it still effect eg. BoM Structure & Cost report. With this changeset, we get an error when we save a subcontracting BoM that has operations. opw-2513637 closes odoo/odoo#74441 X-original-commit: 41c7bd1461a5346a030ab194b5f7fafa87a4c45a Signed-off-by: Nicolas Lempereur (nle) --- addons/mrp_subcontracting/i18n/mrp_subcontracting.pot | 6 ++++++ addons/mrp_subcontracting/models/mrp_bom.py | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/addons/mrp_subcontracting/i18n/mrp_subcontracting.pot b/addons/mrp_subcontracting/i18n/mrp_subcontracting.pot index 48f9b196e12..c5ceb1f552e 100644 --- a/addons/mrp_subcontracting/i18n/mrp_subcontracting.pot +++ b/addons/mrp_subcontracting/i18n/mrp_subcontracting.pot @@ -265,6 +265,12 @@ msgstr "" msgid "Warehouse" msgstr "" +#. module: mrp_subcontracting +#: code:addons/mrp_subcontracting/models/mrp_bom.py:0 +#, python-format +msgid "You can not set a Bill of Material with operations as subcontracting." +msgstr "" + #. module: mrp_subcontracting #: code:addons/mrp_subcontracting/models/mrp_production.py:0 #, python-format diff --git a/addons/mrp_subcontracting/models/mrp_bom.py b/addons/mrp_subcontracting/models/mrp_bom.py index d76c65dd4c2..34b439a8c8c 100644 --- a/addons/mrp_subcontracting/models/mrp_bom.py +++ b/addons/mrp_subcontracting/models/mrp_bom.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import fields, models +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError from odoo.osv.expression import AND class MrpBom(models.Model): @@ -19,3 +20,8 @@ class MrpBom(models.Model): return self.search(domain, order='sequence, product_id, id', limit=1) else: return self.env['mrp.bom'] + + @api.constrains('operation_ids', 'type') + def _check_subcontracting_no_operation(self): + if self.filtered_domain([('type', '=', 'subcontract'), ('operation_ids', '!=', False)]): + raise ValidationError(_('You can not set a Bill of Material with operations as subcontracting.'))