summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin (OpenERP) <qdp-launchpad@openerp.com>2012-01-30 16:47:01 +0100
committerQuentin (OpenERP) <qdp-launchpad@openerp.com>2012-01-30 16:47:01 +0100
commit4eb5a5824ccc33bd3d36e1bd65e6fc96e9249bd5 (patch)
tree47621882a97ae723dde12977784489c2a05d9a63
parentda2b80d351e1543ad9bb5a16c7de5ab8340d7d6a (diff)
[FIX] account: fix of level field computation at the generation from templates time
bzr revid: qdp-launchpad@openerp.com-20120130154701-o0j01ngsedcw0dwv
-rw-r--r--addons/account/account.py18
1 files changed, 15 insertions, 3 deletions
diff --git a/addons/account/account.py b/addons/account/account.py
index 50bad771c17..b97fd870749 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -381,8 +381,9 @@ class account_account(osv.osv):
def _get_level(self, cr, uid, ids, field_name, arg, context=None):
res = {}
- accounts = self.browse(cr, uid, ids, context=context)
- for account in accounts:
+ for account in self.browse(cr, uid, ids, context=context):
+ #we may not know the level of the parent at the time of computation, so we
+ # can't simply do res[account.id] = account.parent_id.level + 1
level = 0
parent = account.parent_id
while parent:
@@ -2525,6 +2526,7 @@ class account_account_template(osv.osv):
#deactivate the parent_store functionnality on account_account for rapidity purpose
ctx = context.copy()
ctx.update({'defer_parent_store_computation': True})
+ level_ref = {}
children_acc_criteria = [('chart_template_id','=', chart_template_id)]
if template.account_root_id.id:
children_acc_criteria = ['|'] + children_acc_criteria + ['&',('parent_id','child_of', [template.account_root_id.id]),('chart_template_id','=', False)]
@@ -2541,6 +2543,14 @@ class account_account_template(osv.osv):
code_acc = account_template.code or ''
if code_main > 0 and code_main <= code_digits and account_template.type != 'view':
code_acc = str(code_acc) + (str('0'*(code_digits-code_main)))
+ parent_id = account_template.parent_id and ((account_template.parent_id.id in acc_template_ref) and acc_template_ref[account_template.parent_id.id]) or False
+ #the level as to be given as well at the creation time, because of the defer_parent_store_computation in
+ #context. Indeed because of this, the parent_left and parent_right are not computed and thus the child_of
+ #operator does not return the expected values, with result of having the level field not computed at all.
+ if parent_id:
+ level = parent_id in level_ref and level_ref[parent_id] + 1 or obj_acc._get_level(cr, uid, [parent_id], 'level', None, context=context)[parent_id] + 1
+ else:
+ level = 0
vals={
'name': (template.account_root_id.id == account_template.id) and company_name or account_template.name,
'currency_id': account_template.currency_id and account_template.currency_id.id or False,
@@ -2551,12 +2561,14 @@ class account_account_template(osv.osv):
'shortcut': account_template.shortcut,
'note': account_template.note,
'financial_report_ids': account_template.financial_report_ids and [(6,0,[x.id for x in account_template.financial_report_ids])] or False,
- 'parent_id': account_template.parent_id and ((account_template.parent_id.id in acc_template_ref) and acc_template_ref[account_template.parent_id.id]) or False,
+ 'parent_id': parent_id,
'tax_ids': [(6,0,tax_ids)],
'company_id': company_id,
+ 'level': level,
}
new_account = obj_acc.create(cr, uid, vals, context=ctx)
acc_template_ref[account_template.id] = new_account
+ level_ref[new_account] = level
#reactivate the parent_store functionnality on account_account
obj_acc._parent_store_compute(cr)