New interface for Function/Property fields

This commit is contained in:
Cédric Krier
2010-03-11 16:45:27 +01:00
parent 3f0993e793
commit c4096a3144
5 changed files with 135 additions and 139 deletions
+32 -32
View File
@@ -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 = {}
+30 -30
View File
@@ -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, '')
+22 -23
View File
@@ -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)
+37 -41
View File
@@ -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.
+14 -13
View File
@@ -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