first commit
This commit is contained in:
80
modules/product_classification/product.py
Normal file
80
modules/product_classification/product.py
Normal file
@@ -0,0 +1,80 @@
|
||||
# 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 (
|
||||
DeactivableMixin, ModelStorage, ModelView, fields, tree)
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
|
||||
|
||||
class ClassificationMixin(DeactivableMixin):
|
||||
__slots__ = ()
|
||||
name = fields.Char('Name', translate=True, required=True)
|
||||
selectable = fields.Boolean("Selectable")
|
||||
|
||||
@classmethod
|
||||
def default_selectable(cls):
|
||||
return True
|
||||
|
||||
|
||||
def classification_tree(name):
|
||||
'Return a ClassificationMixin with tree structure'
|
||||
|
||||
class ClassificationTreeMixin(tree(separator=' / '), ClassificationMixin):
|
||||
__slots__ = ()
|
||||
parent = fields.Many2One(name, "Parent")
|
||||
childs = fields.One2Many(name, 'parent', 'Children')
|
||||
|
||||
return ClassificationTreeMixin
|
||||
|
||||
|
||||
class Template(metaclass=PoolMeta):
|
||||
__name__ = 'product.template'
|
||||
|
||||
classification = fields.Reference(
|
||||
"Classification", selection='get_classification')
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
for model in cls._get_classification():
|
||||
if model in cls.classification.domain:
|
||||
cls.classification.domain[model] = [
|
||||
cls.classification.domain[model],
|
||||
('selectable', '=', True),
|
||||
]
|
||||
else:
|
||||
cls.classification.domain[model] = [
|
||||
('selectable', '=', True),
|
||||
]
|
||||
|
||||
@classmethod
|
||||
def _get_classification(cls):
|
||||
'Return list of Model names for classification Reference'
|
||||
return []
|
||||
|
||||
@classmethod
|
||||
def get_classification(cls):
|
||||
pool = Pool()
|
||||
Model = pool.get('ir.model')
|
||||
get_name = Model.get_name
|
||||
models = cls._get_classification()
|
||||
return [(None, '')] + [(m, get_name(m)) for m in models]
|
||||
|
||||
|
||||
class Product(metaclass=PoolMeta):
|
||||
__name__ = 'product.product'
|
||||
|
||||
@classmethod
|
||||
def get_classification(cls):
|
||||
pool = Pool()
|
||||
Template = pool.get('product.template')
|
||||
return Template.get_classification()
|
||||
|
||||
|
||||
class ClassificationDummy(ClassificationMixin, ModelStorage, ModelView):
|
||||
__name__ = 'product.classification.dummy'
|
||||
|
||||
|
||||
class ClassificationTreeDummy(
|
||||
classification_tree('product.classification_tree.dummy'),
|
||||
ModelStorage, ModelView):
|
||||
__name__ = 'product.classification_tree.dummy'
|
||||
Reference in New Issue
Block a user