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

84 lines
2.7 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 ModelSQL, ValueMixin, fields
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval, Id
class Configuration(metaclass=PoolMeta):
__name__ = 'product.configuration'
default_lot_sequence = fields.MultiValue(
fields.Many2One(
'ir.sequence', "Default Lot Sequence",
domain=[
('sequence_type', '=',
Id('stock_lot', 'sequence_type_stock_lot')),
('company', '=', None),
]))
class ConfigurationDefaultLotSequence(ModelSQL, ValueMixin):
__name__ = 'product.configuration.default_lot_sequence'
default_lot_sequence = fields.Many2One(
'ir.sequence', "Default Lot Sequence",
domain=[
('sequence_type', '=',
Id('stock_lot', 'sequence_type_stock_lot')),
('company', '=', None),
])
class Template(metaclass=PoolMeta):
__name__ = 'product.template'
lot_required = fields.MultiSelection([
('supplier', "Supplier"),
('customer', "Customer"),
('lost_found', "Lost and Found"),
('storage', "Storage"),
('production', "Production"),
], "Lot Required",
help='The type of location for which lot is required.',
states={
'invisible': ~Eval('type').in_(['goods', 'assets']),
})
lot_sequence = fields.Many2One(
'ir.sequence', "Lot Sequence",
domain=[
('sequence_type', '=', Id('stock_lot', 'sequence_type_stock_lot')),
('company', '=', None),
],
states={
'invisible': ~Eval('type').in_(['goods', 'assets']),
},
help="The sequence used to automatically number lots.")
@classmethod
def default_lot_sequence(cls, **pattern):
pool = Pool()
Configuration = pool.get('product.configuration')
sequence = Configuration(1).get_multivalue(
'default_lot_sequence', **pattern)
return sequence.id if sequence else None
class Product(metaclass=PoolMeta):
__name__ = 'product.product'
def lot_is_required(self, from_, to):
'Is product lot required for move with "from_" and "to" location ?'
return any(l.type in (self.lot_required or []) for l in [from_, to])
def create_lot(self):
pool = Pool()
Lot = pool.get('stock.lot')
if self.lot_sequence:
lot = Lot(product=self)
try:
lot.on_change_product()
except AttributeError:
pass
return lot