kalenislims/lims_analysis_sheet_stock/stock.py

80 lines
2.6 KiB
Python

# This file is part of lims_analysis_sheet_stock module for Tryton.
# The COPYRIGHT file at the top level of this repository contains
# the full copyright notices and license terms.
from trytond.model import ModelSQL, ModelView, fields, DictSchemaMixin
from trytond.pool import PoolMeta
from trytond.pyson import Eval
class LotAttributeType(ModelSQL, ModelView):
'Lot Attribute Type'
__name__ = 'stock.lot.attribute.type'
name = fields.Char('Name', required=True)
attributes = fields.One2Many('stock.lot.attribute', 'type',
'Attributes')
class LotAttribute(DictSchemaMixin, ModelSQL, ModelView):
'Lot Attribute'
__name__ = 'stock.lot.attribute'
_rec_name = 'name'
type = fields.Many2One('stock.lot.attribute.type', 'Type',
required=True, ondelete='CASCADE', select=True)
@staticmethod
def default_type_():
return 'char'
class ProductCategory(metaclass=PoolMeta):
__name__ = 'product.category'
lot_attribute_types = fields.Many2Many(
'product.category-stock.lot.attribute.type',
'category', 'attribute_type', 'Lot Attribute Types')
class ProductCategoryLotAttributeType(ModelSQL):
'Product Category - Lot Attribute Type'
__name__ = 'product.category-stock.lot.attribute.type'
_table = 'product_category_stock_lot_attribute_type'
category = fields.Many2One('product.category',
'Product Category', required=True, ondelete='CASCADE', select=True)
attribute_type = fields.Many2One('stock.lot.attribute.type',
'Lot Attribute Type', required=True, ondelete='CASCADE', select=True)
class Lot(metaclass=PoolMeta):
__name__ = 'stock.lot'
attributes = fields.Dict('stock.lot.attribute', 'Attributes',
domain=[('type', 'in', Eval('attribute_types_domain'))],
depends=['attribute_types_domain'])
attributes_string = attributes.translated('attributes')
attribute_types_domain = fields.Function(fields.Many2Many(
'stock.lot.attribute.type', None, None, 'Attribute Types domain'),
'on_change_with_attribute_types_domain')
@fields.depends('product', '_parent_product.template')
def on_change_with_attribute_types_domain(self, name=None):
a_types = []
if self.product and self.product.template.categories:
for cat in self.product.template.categories:
for a_type in cat.lot_attribute_types:
a_types.append(a_type.id)
return a_types
class Move(metaclass=PoolMeta):
__name__ = 'stock.move'
@classmethod
def _get_origin(cls):
models = super()._get_origin()
models.append('lims.analysis_sheet')
return models