65 lines
2.0 KiB
Python
65 lines
2.0 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.
|
|
import datetime
|
|
|
|
from trytond.model import fields
|
|
from trytond.pool import Pool, PoolMeta
|
|
from trytond.pyson import Eval
|
|
|
|
|
|
class Location(metaclass=PoolMeta):
|
|
__name__ = 'stock.location'
|
|
|
|
provisioning_location = fields.Many2One('stock.location',
|
|
'Provisioning Location',
|
|
states={
|
|
'invisible': Eval('type') != 'storage',
|
|
},
|
|
domain=[
|
|
('type', 'in', ['storage', 'view']),
|
|
],
|
|
help='Leave empty for no default provisioning.')
|
|
overflowing_location = fields.Many2One('stock.location',
|
|
'Overflowing Location',
|
|
states={
|
|
'invisible': Eval('type') != 'storage',
|
|
},
|
|
domain=[
|
|
('type', 'in', ['storage', 'view']),
|
|
],
|
|
help='Leave empty for no default overflowing.')
|
|
|
|
|
|
class LocationLeadTime(metaclass=PoolMeta):
|
|
__name__ = 'stock.location.lead_time'
|
|
|
|
@classmethod
|
|
def get_max_lead_time(cls):
|
|
"""Return the biggest lead time
|
|
increased by the maximum extra lead times"""
|
|
lead_time = datetime.timedelta(0)
|
|
lead_times = cls.search([])
|
|
if lead_times:
|
|
lead_time = sum(
|
|
(r.lead_time for r in lead_times if r.lead_time),
|
|
datetime.timedelta(0))
|
|
extra_lead_times = cls._get_extra_lead_times()
|
|
if extra_lead_times:
|
|
lead_time += max(extra_lead_times)
|
|
return lead_time
|
|
|
|
@classmethod
|
|
def _get_extra_lead_times(cls):
|
|
'Return a list of extra lead time'
|
|
pool = Pool()
|
|
ProductSupplier = pool.get('purchase.product_supplier')
|
|
extra = []
|
|
|
|
product_suppliers = ProductSupplier.search(
|
|
[('lead_time', '!=', None)],
|
|
order=[('lead_time', 'DESC')], limit=1)
|
|
if product_suppliers:
|
|
product_supplier, = product_suppliers
|
|
extra.append(product_supplier.lead_time)
|
|
return extra
|