Files
manufacture/mrp_subcontracting/models/mrp_bom.py

59 lines
2.4 KiB
Python

# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl).
# Copyright 2019 Odoo
# Copyright 2020 Tecnativa - Alexandre Díaz
# Copyright 2020 Tecnativa - Pedro M. Baeza
from odoo import api, fields, models
from odoo.osv.expression import AND
class MrpBom(models.Model):
_inherit = 'mrp.bom'
type = fields.Selection(selection_add=[('subcontract', 'Subcontracting')])
subcontractor_ids = fields.Many2many(
'res.partner', 'mrp_bom_subcontractor', string='Subcontractors')
def _bom_subcontract_find(self, product_tmpl=None, product=None,
picking_type=None, company_id=False,
bom_type='subcontract', subcontractor=False):
domain = self._bom_find_domain(product_tmpl=product_tmpl,
product=product,
picking_type=picking_type,
company_id=company_id,
bom_type=bom_type)
if subcontractor:
domain = AND([domain, [
('subcontractor_ids', 'parent_of', subcontractor.ids),
]])
return self.search(domain, order='sequence, product_id', limit=1)
else:
return self.env['mrp.bom']
@api.model
def _bom_find_domain(self, product_tmpl=None, product=None,
picking_type=None, company_id=False, bom_type=False):
"""Helper method that is present on v13 but not in v12. We recreate
it here with v12 conditions.
"""
if product:
if not product_tmpl:
product_tmpl = product.product_tmpl_id
domain = [
'|', ('product_id', '=', product.id),
'&', ('product_id', '=', False),
('product_tmpl_id', '=', product_tmpl.id),
]
elif product_tmpl:
domain = [('product_tmpl_id', '=', product_tmpl.id)]
if picking_type:
domain += ['|', ('picking_type_id', '=', picking_type.id),
('picking_type_id', '=', False)]
if company_id or self.env.context.get('company_id'):
domain = domain + [
('company_id', '=',
company_id or self.env.context.get('company_id'))]
if bom_type:
domain += [('type', '=', bom_type)]
return domain