diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index fc0bfea51b0..afd2ffe09c0 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -8,7 +8,7 @@ from odoo import api, fields, models, SUPERUSER_ID, _ from odoo.osv import expression from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT from odoo.tools.float_utils import float_compare -from odoo.exceptions import UserError, AccessError +from odoo.exceptions import AccessError, UserError, ValidationError from odoo.tools.misc import formatLang @@ -124,6 +124,14 @@ class PurchaseOrder(models.Model): company_id = fields.Many2one('res.company', 'Company', required=True, index=True, states=READONLY_STATES, default=lambda self: self.env.company.id) currency_rate = fields.Float("Currency Rate", compute='_compute_currency_rate', compute_sudo=True, store=True, readonly=True, help='Ratio between the purchase order currency and the company currency') + @api.constrains('company_id', 'order_line') + def _check_order_line_company_id(self): + for order in self: + companies = order.order_line.product_id.company_id + if companies and companies != order.company_id: + bad_products = order.order_line.product_id.filtered(lambda p: p.company_id and p.company_id != order.company_id) + raise ValidationError((_("Your quotation contains products from company %s whereas your quotation belongs to company %s. \n Please change the company of your quotation or remove the products from other companies (%s).") % (', '.join(companies.mapped('display_name')), order.company_id.display_name, ', '.join(bad_products.mapped('display_name'))))) + def _compute_access_url(self): super(PurchaseOrder, self)._compute_access_url() for order in self: diff --git a/addons/purchase/views/purchase_views.xml b/addons/purchase/views/purchase_views.xml index 27f53bc8f9d..eba32f0b995 100644 --- a/addons/purchase/views/purchase_views.xml +++ b/addons/purchase/views/purchase_views.xml @@ -204,7 +204,7 @@ 'required': [('display_type', '=', False)], }" context="{'partner_id':parent.partner_id, 'quantity':product_qty,'uom':product_uom, 'company_id': parent.company_id}" - force_save="1"/> + force_save="1" domain="[('purchase_ok', '=', True), '|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"/> @@ -232,9 +232,9 @@