mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
59 lines
2.4 KiB
Python
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
|