Files
tradon/modules/stock_supply_production/stock.py
2026-03-14 09:42:12 +00:00

101 lines
3.1 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.i18n import gettext
from trytond.modules.stock_supply.exceptions import SupplyWarning
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval, If
from trytond.transaction import check_access
from trytond.wizard import StateAction
class OrderPoint(metaclass=PoolMeta):
__name__ = 'stock.order_point'
@classmethod
def __setup__(cls):
super().__setup__()
cls.product.domain = [
cls.product.domain,
If(Eval('type') == 'production',
('producible', '=', True),
()),
]
option = ('production', 'Production')
if option not in cls.type.selection:
cls.type.selection.append(option)
@property
def warehouse_location(self):
location = super().warehouse_location
if self.type == 'production':
location = self.location
return location
class LocationLeadTime(metaclass=PoolMeta):
__name__ = 'stock.location.lead_time'
@classmethod
def _get_extra_lead_times(cls):
pool = Pool()
Configuration = pool.get('production.configuration')
config = Configuration(1)
supply_period = config.get_multivalue('supply_period')
extra = super()._get_extra_lead_times()
extra.append(supply_period or datetime.timedelta(0))
return extra
class StockSupply(metaclass=PoolMeta):
__name__ = 'stock.supply'
production = StateAction('stock_supply_production.act_production_request')
@classmethod
def types(cls):
return super().types() + ['production']
def transition_create_(self):
pool = Pool()
Date = pool.get('ir.date')
Move = pool.get('stock.move')
Warning = pool.get('res.user.warning')
today = Date.today()
with check_access():
moves = Move.search([
('from_location.type', '=', 'production'),
('to_location.type', '=', 'storage'),
('state', '=', 'draft'),
('planned_date', '<', today),
('production', 'not where', [
('state', '=', 'request'),
('origin', 'like', 'stock.order_point,%'),
]),
], order=[])
if moves:
key = '%s@%s' % (self.__name__, today)
if Warning.check(key):
raise SupplyWarning(
key,
gettext('stock_supply_production.msg_late_productions'))
return super().transition_create_()
@property
def _production_parameters(self):
return {
'warehouses': self.start.warehouses,
}
def generate_production(self, clean):
pool = Pool()
Production = pool.get('production')
return Production.generate_requests(
clean=clean, **self._production_parameters)
def transition_production(self):
return self.next_action('production')