119 lines
3.5 KiB
Python
119 lines
3.5 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 DeactivableMixin, ModelSQL, ModelView, fields
|
|
from trytond.pool import Pool, PoolMeta
|
|
from trytond.pyson import Eval, If
|
|
|
|
|
|
class Template(metaclass=PoolMeta):
|
|
__name__ = 'product.template'
|
|
|
|
web_shop_description = fields.Text("Web Shop Description", translate=True)
|
|
|
|
|
|
class Product(metaclass=PoolMeta):
|
|
__name__ = 'product.product'
|
|
|
|
web_shops = fields.Many2Many(
|
|
'web.shop-product.product', 'product', 'shop', "Web Shops",
|
|
states={
|
|
'invisible': ~Eval('salable'),
|
|
},
|
|
domain=[
|
|
If(~Eval('active'),
|
|
('id', '=', -1),
|
|
()),
|
|
],
|
|
help="The list of web shops on which the product is published.")
|
|
web_shop_urls = fields.One2Many(
|
|
'product.web_shop_url', 'product', "Web Shop URLs", readonly=True)
|
|
|
|
@fields.depends('active', 'web_shops')
|
|
def on_change_active(self):
|
|
try:
|
|
super().on_change_active()
|
|
except AttributeError:
|
|
pass
|
|
if not self.active and self.web_shops:
|
|
self.web_shops = None
|
|
|
|
@classmethod
|
|
def copy(cls, products, default=None):
|
|
default = default.copy() if default is not None else {}
|
|
default.setdefault('web_shops')
|
|
return super().copy(products, default=default)
|
|
|
|
|
|
class ProductURL(DeactivableMixin, ModelSQL, ModelView):
|
|
__name__ = 'product.web_shop_url'
|
|
|
|
shop = fields.Many2One('web.shop', "Shop", required=True)
|
|
product = fields.Many2One('product.product', "Product", required=True)
|
|
url = fields.Function(fields.Char(
|
|
"Shop URL",
|
|
states={
|
|
'invisible': ~Eval('url'),
|
|
}),
|
|
'get_url')
|
|
|
|
@classmethod
|
|
def __setup__(cls):
|
|
super().__setup__()
|
|
cls.__access__.update(['shop', 'product'])
|
|
|
|
@classmethod
|
|
def table_query(cls):
|
|
return Pool().get('web.shop-product.product').__table__()
|
|
|
|
def get_url(self, name):
|
|
return
|
|
|
|
|
|
class Category(metaclass=PoolMeta):
|
|
__name__ = 'product.category'
|
|
|
|
web_shops = fields.Many2Many(
|
|
'web.shop-product.category', 'category', 'shop', "Web Shops",
|
|
help="The list of web shops on which the category is published.")
|
|
|
|
@classmethod
|
|
def copy(cls, categories, default=None):
|
|
default = default.copy() if default is not None else {}
|
|
default.setdefault('web_shops')
|
|
return super().copy(categories, default=default)
|
|
|
|
|
|
class Attribute(metaclass=PoolMeta):
|
|
__name__ = 'product.attribute'
|
|
|
|
web_shops = fields.Many2Many(
|
|
'web.shop-product.attribute', 'attribute', 'shop', "Web Shops",
|
|
help="The list of web shops on which the attribute is published.")
|
|
|
|
@classmethod
|
|
def copy(cls, attributes, default=None):
|
|
default = default.copy() if default is not None else {}
|
|
default.setdefault('web_shops')
|
|
return super().copy(attributes, default=default)
|
|
|
|
|
|
class Image(metaclass=PoolMeta):
|
|
__name__ = 'product.image'
|
|
|
|
web_shop = fields.Boolean("Web Shop")
|
|
|
|
@classmethod
|
|
def default_web_shop(cls):
|
|
return False
|
|
|
|
@classmethod
|
|
def allowed_match_keys(cls):
|
|
return super().allowed_match_keys() | {'web_shop'}
|
|
|
|
@classmethod
|
|
def copy(cls, images, default=None):
|
|
default = default.copy() if default is not None else {}
|
|
default.setdefault('web_shop', False)
|
|
return super().copy(images, default=default)
|