55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
from trytond.model import fields
|
|
from trytond.pool import PoolMeta
|
|
from trytond.pyson import Eval, If
|
|
|
|
|
|
class BOM(metaclass=PoolMeta):
|
|
__name__ = 'production.bom'
|
|
|
|
routings = fields.Many2Many(
|
|
'production.routing-production.bom', 'bom', 'routing', "Routings")
|
|
|
|
|
|
class Production(metaclass=PoolMeta):
|
|
__name__ = 'production'
|
|
routing = fields.Many2One('production.routing', 'Routing',
|
|
domain=[
|
|
If(Eval('state').in_(['request', 'draft']),
|
|
('boms', '=', Eval('bom', 0)),
|
|
()),
|
|
],
|
|
states={
|
|
'readonly': ~Eval('state').in_(['request', 'draft']),
|
|
'invisible': ~Eval('bom'),
|
|
})
|
|
|
|
@fields.depends('bom', 'routing')
|
|
def on_change_bom(self):
|
|
super().on_change_bom()
|
|
if self.bom:
|
|
if self.routing:
|
|
if self.bom not in self.routing.boms:
|
|
self.routing = None
|
|
else:
|
|
self.routing = None
|
|
|
|
@fields.depends('routing')
|
|
def compute_lead_time(self, pattern=None):
|
|
pattern = pattern.copy() if pattern is not None else {}
|
|
pattern.setdefault(
|
|
'routing', self.routing.id if self.routing else None)
|
|
return super().compute_lead_time(pattern=pattern)
|
|
|
|
@classmethod
|
|
def compute_request(
|
|
cls, product, warehouse, quantity, date, company,
|
|
order_point=None, bom_pattern=None):
|
|
production = super().compute_request(
|
|
product, warehouse, quantity, date, company,
|
|
order_point=order_point, bom_pattern=bom_pattern)
|
|
if bom := product.get_bom(bom_pattern):
|
|
production.routing = bom.routing
|
|
return production
|