Repalce MissingFunction with properties

Function fields may be called with a list of records which causes the
MissingFunction to raise an error if other products does not have this account
type set, which will be correct when mixing diferent products types

issue6634
review41441002
This commit is contained in:
Sergi Almacellas Abellana committed 2017-09-20 12:17:21 +02:00
1 parent f373c37103
commit 28cfb6ba42
1 file changed
+61 -45
+61 -45
View File
@@ -9,7 +9,8 @@ from trytond.pyson import Eval
from trytond.transaction import Transaction
from trytond.pool import Pool, PoolMeta
from trytond.modules.account_product import MissingFunction
from trytond.modules.account_product.product import (
account_used, template_property)
from trytond.modules.product import price_digits
__all__ = ['Category', 'CategoryAccount', 'Template', 'TemplateAccount',
@@ -83,20 +84,6 @@ class Category:
| ~Eval('accounting', False)),
},
depends=['account_parent', 'accounting']))
account_stock_used = MissingFunction(fields.Many2One('account.account',
'Account Stock Used'), 'missing_account', 'get_account')
account_stock_supplier_used = MissingFunction(fields.Many2One(
'account.account', 'Account Stock Supplier Used'),
'missing_account', 'get_account')
account_stock_customer_used = MissingFunction(fields.Many2One(
'account.account', 'Account Stock Customer Used'),
'missing_account', 'get_account')
account_stock_production_used = MissingFunction(fields.Many2One(
'account.account', 'Account Stock Production Used'),
'missing_account', 'get_account')
account_stock_lost_found_used = MissingFunction(fields.Many2One(
'account.account', 'Account Stock Lost and Found'),
'missing_account', 'get_account')
@classmethod
def multivalue_model(cls, field):
@@ -105,6 +92,31 @@ class Category:
return pool.get('product.category.account')
return super(Category, cls).multivalue_model(field)
@property
@account_used('account_stock')
def account_stock_used(self):
pass
@property
@account_used('account_stock_supplier')
def account_stock_supplier_used(self):
pass
@property
@account_used('account_stock_customer')
def account_stock_customer_used(self):
pass
@property
@account_used('account_stock_production')
def account_stock_production_used(self):
pass
@property
@account_used('account_stock_lost_found')
def account_stock_lost_found_used(self):
pass
class CategoryAccount:
__metaclass__ = PoolMeta
@@ -235,20 +247,6 @@ class Template:
}, help='This account will be used instead of the one defined '
'on the category.',
depends=['account_category', 'type']))
account_stock_used = MissingFunction(fields.Many2One('account.account',
'Account Stock Used'), 'missing_account', 'get_account')
account_stock_supplier_used = MissingFunction(fields.Many2One(
'account.account', 'Account Stock Supplier Used'),
'missing_account', 'get_account')
account_stock_customer_used = MissingFunction(fields.Many2One(
'account.account', 'Account Stock Customer Used'),
'missing_account', 'get_account')
account_stock_production_used = MissingFunction(fields.Many2One(
'account.account', 'Account Stock Production Used'),
'missing_account', 'get_account')
account_stock_lost_found_used = MissingFunction(fields.Many2One(
'account.account', 'Account Stock Lost and Found'),
'missing_account', 'get_account')
@classmethod
def __setup__(cls):
@@ -267,6 +265,31 @@ class Template:
return pool.get('product.template.account')
return super(Template, cls).multivalue_model(field)
@property
@account_used('account_stock')
def account_stock_used(self):
pass
@property
@account_used('account_stock_supplier')
def account_stock_supplier_used(self):
pass
@property
@account_used('account_stock_customer')
def account_stock_customer_used(self):
pass
@property
@account_used('account_stock_production')
def account_stock_production_used(self):
pass
@property
@account_used('account_stock_lost_found')
def account_stock_lost_found_used(self):
pass
class TemplateAccount:
__metaclass__ = PoolMeta
@@ -332,22 +355,15 @@ class TemplateAccount:
class Product:
__metaclass__ = PoolMeta
__name__ = 'product.product'
# Avoid raise of UserError from MissingFunction
account_stock_used = fields.Function(
fields.Many2One('account.account', 'Account Stock Used'),
'get_template')
account_stock_supplier_used = fields.Function(
fields.Many2One('account.account', 'Account Stock Supplier Used'),
'get_template')
account_stock_customer_used = fields.Function(
fields.Many2One('account.account', 'Account Stock Customer Used'),
'get_template')
account_stock_production_used = fields.Function(
fields.Many2One('account.account', 'Account Stock Production Used'),
'get_template')
account_stock_lost_found_used = fields.Function(
fields.Many2One('account.account', 'Account Stock Lost and Found'),
'get_template')
account_stock_used = template_property('account_stock_used')
account_stock_supplier_used = template_property(
'account_stock_supplier_used')
account_stock_customer_used = template_property(
'account_stock_customer_used')
account_stock_production_used = template_property(
'account_stock_production_used')
account_stock_lost_found_used = template_property(
'account_stock_lost_found_used')
class UpdateCostPriceAsk(ModelView):