From 28cfb6ba42b843c882673d196a50d1bd2aec4b5e Mon Sep 17 00:00:00 2001 From: Sergi Almacellas Abellana Date: Wed, 20 Sep 2017 12:17:21 +0200 Subject: [PATCH] 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 --- product.py | 106 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 61 insertions(+), 45 deletions(-) diff --git a/product.py b/product.py index 23d4c9d03d..a29f0cc3b7 100644 --- a/product.py +++ b/product.py @@ -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):