mirror of
https://bitbucket.org/presik/trytonpsk-sale_pos_frontend_rest.git
synced 2023-12-14 06:12:59 +01:00
41 lines
1.7 KiB
Python
41 lines
1.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 fields, ModelSQL
|
|
from trytond.pool import PoolMeta
|
|
from .exceptions import ProductMixRequiredError
|
|
from trytond.i18n import gettext
|
|
|
|
|
|
class Product(metaclass=PoolMeta):
|
|
__name__ = 'product.product'
|
|
products_mix = fields.Many2Many('product.product-mix.option',
|
|
'product', 'option', 'Mix')
|
|
tasks = fields.One2Many('production.configuration_task', 'product', 'Tasks')
|
|
quantity_mix_required = fields.Integer('Quantity Mix Required')
|
|
|
|
@fields.depends('products_mix', 'quantity_mix_required')
|
|
def on_change_quantity_mix_required(self, name=None):
|
|
if self.products_mix and self.quantity_mix_required and len(self.products_mix) < self.quantity_mix_required:
|
|
raise ProductMixRequiredError(
|
|
gettext(
|
|
"sale_pos_frontend_rest.msg_quantity_mix_error",
|
|
product_mix=len(self.products_mix),
|
|
quantity=self.quantity_mix_required))
|
|
|
|
@classmethod
|
|
def copy(cls, records, default=None):
|
|
if default is None:
|
|
default = {}
|
|
else:
|
|
default = default.copy()
|
|
default.setdefault('tasks', None)
|
|
return super(Product, cls).copy(records, default=default)
|
|
|
|
|
|
class ProductMixOption(ModelSQL):
|
|
'Product Mix Option'
|
|
__name__ = 'product.product-mix.option'
|
|
product = fields.Many2One('product.product', 'Product',
|
|
ondelete='CASCADE', required=True, select=True)
|
|
option = fields.Many2One('product.product', 'Product',
|
|
ondelete='CASCADE', required=True, select=True)
|