From c4096a31445ffae8d3c1eba3d0bddb438d428ab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 11 Mar 2010 16:45:27 +0100 Subject: [PATCH] New interface for Function/Property fields --- account.py | 64 ++++++++++++++++++++++---------------------- journal.py | 60 ++++++++++++++++++++--------------------- move.py | 45 +++++++++++++++---------------- party.py | 78 ++++++++++++++++++++++++++---------------------------- tax.py | 27 ++++++++++--------- 5 files changed, 135 insertions(+), 139 deletions(-) diff --git a/account.py b/account.py index d287a5d874..e43a8df759 100644 --- a/account.py +++ b/account.py @@ -41,7 +41,7 @@ class TypeTemplate(ModelSQL, ModelView): def default_display_balance(self, cursor, user, context=None): return 'debit-credit' - def get_rec_name(self, cursor, user, ids, name, arg, context=None): + def get_rec_name(self, cursor, user, ids, name, context=None): if not ids: return {} res = {} @@ -153,11 +153,11 @@ class Type(ModelSQL, ModelView): childs = fields.One2Many('account.account.type', 'parent', 'Children') sequence = fields.Integer('Sequence', required=True, help='Use to order the account type') - currency_digits = fields.Function('get_currency_digits', type='integer', - string='Currency Digits') - amount = fields.Function('get_amount', - digits=(16, Eval('currency_digits', 2)), - string='Amount', depends=['currency_digits']) + currency_digits = fields.Function(fields.Integer('Currency Digits'), + 'get_currency_digits') + amount = fields.Function(fields.Numeric('Amount', + digits=(16, Eval('currency_digits', 2)), depends=['currency_digits']), + 'get_amount') balance_sheet = fields.Boolean('Balance Sheet') income_statement = fields.Boolean('Income Statement') display_balance = fields.Selection([ @@ -181,13 +181,13 @@ class Type(ModelSQL, ModelView): def default_display_balance(self, cursor, user, context=None): return 'debit-credit' - def get_currency_digits(self, cursor, user, ids, name, arg, context=None): + def get_currency_digits(self, cursor, user, ids, name, context=None): res = {} for type in self.browse(cursor, user, ids, context=context): res[type.id] = type.company.currency.digits return res - def get_amount(self, cursor, user, ids, name, arg, context=None): + def get_amount(self, cursor, user, ids, name, context=None): account_obj = self.pool.get('account.account') currency_obj = self.pool.get('currency.currency') @@ -225,7 +225,7 @@ class Type(ModelSQL, ModelView): res[type.id] = - res[type.id] return res - def get_rec_name(self, cursor, user, ids, name, arg, context=None): + def get_rec_name(self, cursor, user, ids, name, context=None): if not ids: return {} res = {} @@ -348,7 +348,7 @@ class AccountTemplate(ModelSQL, ModelView): def default_deferral(self, cursor, user, context=None): return True - def get_rec_name(self, cursor, user, ids, name, arg, context=None): + def get_rec_name(self, cursor, user, ids, name, context=None): if not ids: return {} res = {} @@ -525,10 +525,10 @@ class Account(ModelSQL, ModelView): active = fields.Boolean('Active', select=2) company = fields.Many2One('company.company', 'Company', required=True, ondelete="RESTRICT") - currency = fields.Function('get_currency', type='many2one', - relation='currency.currency', string='Currency') - currency_digits = fields.Function('get_currency_digits', type='integer', - string='Currency Digits') + currency = fields.Function(fields.Many2One('currency.currency', + 'Currency'), 'get_currency') + currency_digits = fields.Function(fields.Integer('Currency Digits'), + 'get_currency_digits') second_currency = fields.Many2One('currency.currency', 'Secondary currency', help='Force all moves for this account \n' \ 'to have this secondary currency.', ondelete="RESTRICT") @@ -542,15 +542,15 @@ class Account(ModelSQL, ModelView): left = fields.Integer('Left', required=True, select=1) right = fields.Integer('Right', required=True, select=1) childs = fields.One2Many('account.account', 'parent', 'Children') - balance = fields.Function('get_balance', - digits=(16, Eval('currency_digits', 2)), - string='Balance', depends=['currency_digits']) - credit = fields.Function('get_credit_debit', - digits=(16, Eval('currency_digits', 2)), - string='Credit', depends=['currency_digits']) - debit = fields.Function('get_credit_debit', - digits=(16, Eval('currency_digits', 2)), - string='Debit', depends=['currency_digits']) + balance = fields.Function(fields.Numeric('Balance', + digits=(16, Eval('currency_digits', 2)), depends=['currency_digits']), + 'get_balance') + credit = fields.Function(fields.Numeric('Credit', + digits=(16, Eval('currency_digits', 2)), depends=['currency_digits']), + 'get_credit_debit') + debit = fields.Function(fields.Numeric('Debit', + digits=(16, Eval('currency_digits', 2)), depends=['currency_digits']), + 'get_credit_debit') reconcile = fields.Boolean('Reconcile', help='Allow move lines of this account \n' \ 'to be reconciled.', @@ -617,20 +617,20 @@ class Account(ModelSQL, ModelView): def default_kind(self, cursor, user, context=None): return 'view' - def get_currency(self, cursor, user, ids, name, arg, context=None): + def get_currency(self, cursor, user, ids, name, context=None): currency_obj = self.pool.get('currency.currency') res = {} for account in self.browse(cursor, user, ids, context=context): res[account.id] = account.company.currency.id return res - def get_currency_digits(self, cursor, user, ids, name, arg, context=None): + def get_currency_digits(self, cursor, user, ids, name, context=None): res = {} for account in self.browse(cursor, user, ids, context=context): res[account.id] = account.company.currency.digits return res - def get_balance(self, cursor, user, ids, name, arg, context=None): + def get_balance(self, cursor, user, ids, name, context=None): res = {} company_obj = self.pool.get('company.company') currency_obj = self.pool.get('currency.currency') @@ -737,7 +737,7 @@ class Account(ModelSQL, ModelView): res[account_id]) return res - def get_credit_debit(self, cursor, user, ids, names, arg, context=None): + def get_credit_debit(self, cursor, user, ids, names, context=None): ''' Function to compute debit, credit for account ids. @@ -853,7 +853,7 @@ class Account(ModelSQL, ModelView): currency, res[name][account_id]) return res - def get_rec_name(self, cursor, user, ids, name, arg, context=None): + def get_rec_name(self, cursor, user, ids, name, context=None): if not ids: return {} res = {} @@ -1039,8 +1039,8 @@ class AccountDeferral(ModelSQL, ModelView): depends=['currency_digits']) credit = fields.Numeric('Credit', digits=(16, Eval('currency_digits', 2)), depends=['currency_digits']) - currency_digits = fields.Function('get_currency_digits', type='integer', - string='Currency Digits') + currency_digits = fields.Function(fields.Integer('Currency Digits'), + 'get_currency_digits') def __init__(self): super(AccountDeferral, self).__init__() @@ -1052,13 +1052,13 @@ class AccountDeferral(ModelSQL, ModelView): 'write_deferral': 'You can not modify Account Deferral records', }) - def get_currency_digits(self, cursor, user, ids, name, arg, context=None): + def get_currency_digits(self, cursor, user, ids, name, context=None): res = {} for deferral in self.browse(cursor, user, ids, context=context): res[deferral.id] = deferral.account.currency_digits return res - def get_rec_name(self, cursor, user, ids, name, arg, context=None): + def get_rec_name(self, cursor, user, ids, name, context=None): if not ids: return {} res = {} diff --git a/journal.py b/journal.py index 0ab29e4597..0e0096c863 100644 --- a/journal.py +++ b/journal.py @@ -85,34 +85,34 @@ class Journal(ModelSQL, ModelView): view = fields.Many2One('account.journal.view', 'View') centralised = fields.Boolean('Centralised counterpart') update_posted = fields.Boolean('Allow cancelling moves') - sequence = fields.Property(type='many2one', relation='ir.sequence', - string='Sequence', required=True, - domain=[('code', '=', 'account.journal')], - context={'code': 'account.journal'}) - credit_account = fields.Property(type='many2one', - relation='account.account', string='Default Credit Account', - domain=[ - ('kind', '!=', 'view'), - ('company', '=', Get(Eval('context', {}), 'company', 0)), - ], - states={ - 'required': Or(Bool(Eval('centralised')), - And(Equal(Eval('type'), 'cash'), - Bool(Get(Eval('context', {}), 'company', 0)))), - 'invisible': Not(Bool(Get(Eval('context', {}), 'company', 0))), - }, depends=['type', 'centralised']) - debit_account = fields.Property(type='many2one', - relation='account.account', string='Default Debit Account', - domain=[ - ('kind', '!=', 'view'), - ('company', '=', Get(Eval('context', {}), 'company', 0)), - ], - states={ - 'required': Or(Bool(Eval('centralised')), - And(Equal(Eval('type'), 'cash'), - Bool(Get(Eval('context', {}), 'company', 0)))), - 'invisible': Not(Bool(Get(Eval('context', {}), 'company', 0))), - }, depends=['type', 'centralised']) + sequence = fields.Property(fields.Many2One('ir.sequence', 'Sequence', + domain=[('code', '=', 'account.journal')], + context={'code': 'account.journal'}, + states={ + 'required': Bool(Get(Eval('context', {}), 'company', 0)), + })) + credit_account = fields.Property(fields.Many2One('account.account', + 'Default Credit Account', domain=[ + ('kind', '!=', 'view'), + ('company', '=', Get(Eval('context', {}), 'company', 0)), + ], + states={ + 'required': Or(Bool(Eval('centralised')), + And(Equal(Eval('type'), 'cash'), + Bool(Get(Eval('context', {}), 'company', 0)))), + 'invisible': Not(Bool(Get(Eval('context', {}), 'company', 0))), + }, depends=['type', 'centralised'])) + debit_account = fields.Property(fields.Many2One('account.account', + 'Default Debit Account', domain=[ + ('kind', '!=', 'view'), + ('company', '=', Get(Eval('context', {}), 'company', 0)), + ], + states={ + 'required': Or(Bool(Eval('centralised')), + And(Equal(Eval('type'), 'cash'), + Bool(Get(Eval('context', {}), 'company', 0)))), + 'invisible': Not(Bool(Get(Eval('context', {}), 'company', 0))), + }, depends=['type', 'centralised'])) def __init__(self): super(Journal, self).__init__() @@ -177,7 +177,7 @@ class Period(ModelSQL, ModelView): ondelete='CASCADE', states=STATES, depends=DEPENDS) period = fields.Many2One('account.period', 'Period', required=True, ondelete='CASCADE', states=STATES, depends=DEPENDS) - icon = fields.Function('get_icon', string='Icon', type='char') + icon = fields.Function(fields.Char('Icon'), 'get_icon') active = fields.Boolean('Active', select=2, states=STATES, depends=DEPENDS) state = fields.Selection([ ('open', 'Open'), @@ -206,7 +206,7 @@ class Period(ModelSQL, ModelView): def default_state(self, cursor, user, context=None): return 'open' - def get_icon(self, cursor, user, ids, name, arg, context=None): + def get_icon(self, cursor, user, ids, name, context=None): res = {} for period in self.browse(cursor, user, ids, context=context): res[period.id] = _ICONS.get(period.state, '') diff --git a/move.py b/move.py index bf01455d37..a9b04b1cf1 100644 --- a/move.py +++ b/move.py @@ -456,15 +456,15 @@ class Line(ModelSQL, ModelView): 'journal', 'move']) move = fields.Many2One('account.move', 'Move', states=_LINE_STATES, select=1, required=True) - journal = fields.Function('get_move_field', fnct_inv='set_move_field', - type='many2one', relation='account.journal', string='Journal', - fnct_search='search_move_field') - period = fields.Function('get_move_field', fnct_inv='set_move_field', - type='many2one', relation='account.period', string='Period', - fnct_search='search_move_field') - date = fields.Function('get_move_field', fnct_inv='set_move_field', - type='date', string='Effective Date', required=True, - fnct_search='search_move_field') + journal = fields.Function(fields.Many2One('account.journal', 'Journal'), + 'get_move_field', setter='set_move_field', + searcher='search_move_field') + period = fields.Function(fields.Many2One('account.period', 'Period'), + 'get_move_field', setter='set_move_field', + searcher='search_move_field') + date = fields.Function(fields.Date('Effective Date', required=True), + 'get_move_field', setter='set_move_field', + searcher='search_move_field') reference = fields.Char('Reference', size=None) amount_second_currency = fields.Numeric('Amount Second Currency', digits=(16, Eval('second_currency_digits', 2)), @@ -487,15 +487,14 @@ class Line(ModelSQL, ModelView): reconciliation = fields.Many2One('account.move.reconciliation', 'Reconciliation', readonly=True, ondelete='SET NULL', select=2) tax_lines = fields.One2Many('account.tax.line', 'move_line', 'Tax Lines') - move_state = fields.Function('get_move_field', type='selection', - selection=[ - ('draft', 'Draft'), - ('posted', 'Posted'), - ], string='Move State', fnct_search='search_move_field') - currency_digits = fields.Function('get_currency_digits', type='integer', - string='Currency Digits') - second_currency_digits = fields.Function('get_currency_digits', - type='integer', string='Second Currency Digits') + move_state = fields.Function(fields.Selection([ + ('draft', 'Draft'), + ('posted', 'Posted'), + ], 'Move State'), 'get_move_field', searcher='search_move_field') + currency_digits = fields.Function(fields.Integer('Currency Digits'), + 'get_currency_digits') + second_currency_digits = fields.Function(fields.Integer( + 'Second Currency Digits'), 'get_currency_digits') def __init__(self): super(Line, self).__init__() @@ -718,7 +717,7 @@ class Line(ModelSQL, ModelView): ] return values - def get_currency_digits(self, cursor, user, ids, names, arg, context=None): + def get_currency_digits(self, cursor, user, ids, names, context=None): res = {} for line in self.browse(cursor, user, ids, context=context): for name in names: @@ -936,7 +935,7 @@ class Line(ModelSQL, ModelView): res['account.rec_name'] = party.account_payable.rec_name return res - def get_move_field(self, cursor, user, ids, name, arg, context=None): + def get_move_field(self, cursor, user, ids, name, context=None): if name == 'move_state': name = 'state' if name not in ('period', 'journal', 'date', 'state'): @@ -949,7 +948,7 @@ class Line(ModelSQL, ModelView): res[line.id] = line.move[name].id return res - def set_move_field(self, cursor, user, id, name, value, arg, context=None): + def set_move_field(self, cursor, user, ids, name, value, context=None): if name == 'move_state': name = 'state' if name not in ('period', 'journal', 'date', 'state'): @@ -957,8 +956,8 @@ class Line(ModelSQL, ModelView): if not value: return move_obj = self.pool.get('account.move') - line = self.browse(cursor, user, id, context=context) - move_obj.write(cursor, user, line.move.id, { + lines = self.browse(cursor, user, ids, context=context) + move_obj.write(cursor, user, [line.move.id for line in lines], { name: value, }, context=context) diff --git a/party.py b/party.py index 8b3805c41c..db08b95e16 100644 --- a/party.py +++ b/party.py @@ -7,48 +7,44 @@ from decimal import Decimal class Party(ModelSQL, ModelView): _name = 'party.party' - account_payable = fields.Property(type='many2one', - relation='account.account', string='Account Payable', - domain=[ - ('kind', '=', 'payable'), - ('company', '=', Eval('company')), - ], - states={ - 'required': Bool(Eval('company')), - 'invisible': Not(Bool(Eval('company'))), - }) - account_receivable = fields.Property(type='many2one', - relation='account.account', string='Account Receivable', - domain=[ - ('kind', '=', 'receivable'), - ('company', '=', Eval('company')), - ], - states={ - 'required': Bool(Eval('company')), - 'invisible': Not(Bool(Eval('company'))), - }) - customer_tax_rule = fields.Property(type='many2one', - relation='account.tax.rule', string='Customer Tax Rule', - domain=[('company', '=', Eval('company'))], - states={ - 'invisible': Not(Bool(Eval('company'))), - }, help='Apply this rule on taxes when party is customer.') - supplier_tax_rule = fields.Property(type='many2one', - relation='account.tax.rule', string='Supplier Tax Rule', - domain=[('company', '=', Eval('company'))], - states={ - 'invisible': Not(Bool(Eval('company'))), - }, help='Apply this rule on taxes when party is supplier.') - receivable = fields.Function('get_receivable_payable', - fnct_search='search_receivable_payable', string='Receivable') - payable = fields.Function('get_receivable_payable', - fnct_search='search_receivable_payable', string='Payable') - receivable_today = fields.Function('get_receivable_payable', - fnct_search='search_receivable_payable', string='Receivable Today') - payable_today = fields.Function('get_receivable_payable', - fnct_search='search_receivable_payable', string='Payable Today') + account_payable = fields.Property(fields.Many2One('account.account', + 'Account Payable', domain=[ + ('kind', '=', 'payable'), + ('company', '=', Eval('company')), + ], + states={ + 'required': Bool(Eval('company')), + 'invisible': Not(Bool(Eval('company'))), + })) + account_receivable = fields.Property(fields.Many2One('account.account', + 'Account Receivable', domain=[ + ('kind', '=', 'receivable'), + ('company', '=', Eval('company')), + ], + states={ + 'required': Bool(Eval('company')), + 'invisible': Not(Bool(Eval('company'))), + })) + customer_tax_rule = fields.Property(fields.Many2One('account.tax.rule', + 'Customer Tax Rule', domain=[('company', '=', Eval('company'))], + states={ + 'invisible': Not(Bool(Eval('company'))), + }, help='Apply this rule on taxes when party is customer.')) + supplier_tax_rule = fields.Property(fields.Many2One('account.tax.rule', + 'Supplier Tax Rule', domain=[('company', '=', Eval('company'))], + states={ + 'invisible': Not(Bool(Eval('company'))), + }, help='Apply this rule on taxes when party is supplier.')) + receivable = fields.Function(fields.Numeric('Receivable'), + 'get_receivable_payable', searcher='search_receivable_payable') + payable = fields.Function(fields.Numeric('Payable'), + 'get_receivable_payable', searcher='search_receivable_payable') + receivable_today = fields.Function(fields.Numeric('Receivable Today'), + 'get_receivable_payable', searcher='search_receivable_payable') + payable_today = fields.Function(fields.Numeric('Payable Today'), + 'get_receivable_payable', searcher='search_receivable_payable') - def get_receivable_payable(self, cursor, user_id, ids, names, arg, + def get_receivable_payable(self, cursor, user_id, ids, names, context=None): ''' Function to compute receivable, payable (today or not) for party ids. diff --git a/tax.py b/tax.py index 44a8c69386..8c8b271db2 100644 --- a/tax.py +++ b/tax.py @@ -154,10 +154,11 @@ class Code(ModelSQL, ModelView): domain=[('company', '=', Eval('company', 0))], depends=['company']) childs = fields.One2Many('account.tax.code', 'parent', 'Children', domain=[('company', '=', Eval('company', 0))], depends=['company']) - currency_digits = fields.Function('get_currency_digits', type='integer', - string='Currency Digits', on_change_with=['company']) - sum = fields.Function('get_sum', digits=(16, Eval('currency_digits', 2)), - string='Sum', depends=['currency_digits']) + currency_digits = fields.Function(fields.Integer('Currency Digits', + on_change_with=['company']), 'get_currency_digits') + sum = fields.Function(fields.Numeric('Sum', + digits=(16, Eval('currency_digits', 2)), depends=['currency_digits']), + 'get_sum') template = fields.Many2One('account.tax.code.template', 'Template') description = fields.Text('Description', translate=True) @@ -190,13 +191,13 @@ class Code(ModelSQL, ModelView): return company.currency.digits return 2 - def get_currency_digits(self, cursor, user, ids, name, arg, context=None): + def get_currency_digits(self, cursor, user, ids, name, context=None): res = {} for code in self.browse(cursor, user, ids, context=context): res[code.id] = code.company.currency.digits return res - def get_sum(self, cursor, user, ids, name, arg, context=None): + def get_sum(self, cursor, user, ids, name, context=None): res = {} move_line_obj = self.pool.get('account.move.line') currency_obj = self.pool.get('currency.currency') @@ -237,7 +238,7 @@ class Code(ModelSQL, ModelView): code.company.currency, res[code.id]) return res - def get_rec_name(self, cursor, user, ids, name, arg, context=None): + def get_rec_name(self, cursor, user, ids, name, context=None): if not ids: return {} res = {} @@ -601,8 +602,8 @@ class Tax(ModelSQL, ModelView): active = fields.Boolean('Active') sequence = fields.Integer('Sequence', help='Use to order the taxes') - currency_digits = fields.Function('get_currency_digits', type='integer', - string='Currency Digits', on_change_with=['company']) + currency_digits = fields.Function(fields.Integer('Currency Digits', + on_change_with=['company']), 'get_currency_digits') amount = fields.Numeric('Amount', digits=(16, Eval('currency_digits', 2)), states={ 'invisible': Not(Equal(Eval('type'), 'fixed')), @@ -736,7 +737,7 @@ class Tax(ModelSQL, ModelView): return company.currency.digits return 2 - def get_currency_digits(self, cursor, user, ids, name, arg, context=None): + def get_currency_digits(self, cursor, user, ids, name, context=None): res = {} for tax in self.browse(cursor, user, ids, context=context): res[tax.id] = tax.company.currency.digits @@ -940,8 +941,8 @@ class Line(ModelSQL, ModelView): _description = __doc__ _rec_name = 'amount' - currency_digits = fields.Function('get_currency_digits', type='integer', - string='Currency Digits', on_change_with=['move_line']) + currency_digits = fields.Function(fields.Integer('Currency Digits', + on_change_with=['move_line']), 'get_currency_digits') amount = fields.Numeric('Amount', digits=(16, Eval('currency_digits', 2)), depends=['currency_digits']) code = fields.Many2One('account.tax.code', 'Code', select=1, required=True) @@ -959,7 +960,7 @@ class Line(ModelSQL, ModelView): return move_line.currency_digits return 2 - def get_currency_digits(self, cursor, user, ids, name, arg, context=None): + def get_currency_digits(self, cursor, user, ids, name, context=None): res = {} for line in self.browse(cursor, user, ids, context=context): res[line.id] = line.move_line.currency_digits