[REF] account: refactoring of code generating the COA from template

bzr revid: qdp-launchpad@openerp.com-20111208114159-hhzftkic9rvtpms5
This commit is contained in:
Quentin (OpenERP) 2011-12-08 12:41:59 +01:00
parent 3f7c296563
commit 650eb7f6e8
3 changed files with 128 additions and 82 deletions

View File

@ -2485,6 +2485,8 @@ class account_account_template(osv.osv):
#deactivate the parent_store functionnality on account_account for rapidity purpose #deactivate the parent_store functionnality on account_account for rapidity purpose
ctx = context.copy() ctx = context.copy()
ctx.update({'defer_parent_store_computation': True}) ctx.update({'defer_parent_store_computation': True})
#import pdb;pdb.set_trace()
#TODO: this is where the program currently fail as the search doesn't return the template id 16 (bank view id of demo chart C)
children_acc_template = self.search(cr, uid, [('parent_id','child_of', [template.account_root_id.id]),'|', ('chart_template_id','=', [template_id]),('chart_template_id','=', False), ('nocreate','!=',True)], order='id') children_acc_template = self.search(cr, uid, [('parent_id','child_of', [template.account_root_id.id]),'|', ('chart_template_id','=', [template_id]),('chart_template_id','=', False), ('nocreate','!=',True)], order='id')
for account_template in self.browse(cr, uid, children_acc_template, context=context): for account_template in self.browse(cr, uid, children_acc_template, context=context):
tax_ids = [] tax_ids = []
@ -2592,6 +2594,41 @@ class account_tax_code_template(osv.osv):
'notprintable': False, 'notprintable': False,
} }
def generate_tax_code(self, cr, uid, tax_code_root_id, company_id, context=None):
'''
This function generates the tax codes from the templates of tax code that are children of the given one passed
in argument. Then it returns a dictionary with the mappping between the templates and the real objects.
:param tax_code_root_id: id of the root of all the tax code templates to process
:param company_id: id of the company the wizard is running for
:returns: dictionary with the mappping between the templates and the real objects.
:rtype: dict
'''
obj_tax_code_template = self.pool.get('account.tax.code.template')
obj_tax_code = self.pool.get('account.tax.code')
tax_code_template_ref = {}
company = self.pool.get('res.company').browse(cr, uid, company_id, context=context)
#find all the children of the tax_code_root_id
children_tax_code_template = obj_tax_code_template.search(cr, uid, [('parent_id','child_of',[tax_code_root_id])], order='id')
for tax_code_template in obj_tax_code_template.browse(cr, uid, children_tax_code_template, context=context):
vals = {
'name': (tax_code_root_id == tax_code_template.id) and company.name or tax_code_template.name,
'code': tax_code_template.code,
'info': tax_code_template.info,
'parent_id': tax_code_template.parent_id and ((tax_code_template.parent_id.id in tax_code_template_ref) and tax_code_template_ref[tax_code_template.parent_id.id]) or False,
'company_id': company_id,
'sign': tax_code_template.sign,
}
#check if this tax code already exists
rec_list = obj_tax_code.search(cr, uid, [('name', '=', vals['name']),('company_id', '=', vals['company_id'])], context=context)
if not rec_list:
#if not yet, create it
new_tax_code = obj_tax_code.create(cr, uid, vals)
#recording the new tax code to do the mapping
tax_code_template_ref[tax_code_template.id] = new_tax_code
return tax_code_template_ref
def name_get(self, cr, uid, ids, context=None): def name_get(self, cr, uid, ids, context=None):
if not ids: if not ids:
return [] return []
@ -2727,16 +2764,14 @@ class account_tax_template(osv.osv):
@param company_id: if tax generated from account multi wizard at that time company_id is wizard company_id field @param company_id: if tax generated from account multi wizard at that time company_id is wizard company_id field
or logged user company_id. or logged user company_id.
@param Return: @param Return:
{'taxes_id': New generated taxes ids, {'tax_template_to_tax': New generated taxes ids,
'account_dict': Used this reference value for Account Tax, 'account_dict': Used this reference value for Account Tax,
'tax_template_ref': Used this reference value for Fiscal Position
} }
""" """#TODO: improve this docstring
if context is None: if context is None:
context = {} context = {}
res = {} res = {}
todo_dict = {} todo_dict = {}
tax_template_ref = {}
tax_template_to_tax = {} tax_template_to_tax = {}
for tax in tax_templates: for tax in tax_templates:
vals_tax = { vals_tax = {
@ -2746,7 +2781,7 @@ class account_tax_template(osv.osv):
'type': tax.type, 'type': tax.type,
'applicable_type': tax.applicable_type, 'applicable_type': tax.applicable_type,
'domain': tax.domain, 'domain': tax.domain,
'parent_id': tax.parent_id and ((tax.parent_id.id in tax_template_ref) and tax_template_ref[tax.parent_id.id]) or False, 'parent_id': tax.parent_id and ((tax.parent_id.id in tax_template_to_tax) and tax_template_to_tax[tax.parent_id.id]) or False,
'child_depend': tax.child_depend, 'child_depend': tax.child_depend,
'python_compute': tax.python_compute, 'python_compute': tax.python_compute,
'python_compute_inv': tax.python_compute_inv, 'python_compute_inv': tax.python_compute_inv,
@ -2772,8 +2807,7 @@ class account_tax_template(osv.osv):
'account_collected_id': tax.account_collected_id and tax.account_collected_id.id or False, 'account_collected_id': tax.account_collected_id and tax.account_collected_id.id or False,
'account_paid_id': tax.account_paid_id and tax.account_paid_id.id or False, 'account_paid_id': tax.account_paid_id and tax.account_paid_id.id or False,
} }
tax_template_ref[tax.id] = new_tax res.update({'tax_template_to_tax': tax_template_to_tax, 'account_dict': todo_dict})
res.update({'taxes_id': tax_template_to_tax, 'account_dict': todo_dict, 'tax_template_ref': tax_template_ref})
return res return res
account_tax_template() account_tax_template()
@ -3059,7 +3093,7 @@ class wizard_multi_charts_accounts(osv.osv_memory):
self.check_created_journals(cr, uid, vals_journal, company_id, context=context) self.check_created_journals(cr, uid, vals_journal, company_id, context=context)
return True return True
def _prepare_all_journals(cr, uid, chart_template_id, acc_template_ref, company_id, context=None): def _prepare_all_journals(self, cr, uid, chart_template_id, acc_template_ref, company_id, context=None):
def _get_analytic_journal(journal_type): def _get_analytic_journal(journal_type):
# Get the analytic journal # Get the analytic journal
analytic_journal_ids = [] analytic_journal_ids = []
@ -3118,7 +3152,6 @@ class wizard_multi_charts_accounts(osv.osv_memory):
journal_data = [] journal_data = []
for journal_type in ['sale', 'purchase', 'sale_refund', 'purchase_refund', 'general', 'situation']: for journal_type in ['sale', 'purchase', 'sale_refund', 'purchase_refund', 'general', 'situation']:
default_account_id = _get_default_account_id(type)
vals = { vals = {
'type': journal_type, 'type': journal_type,
'name': journal_names[journal_type], 'name': journal_names[journal_type],
@ -3174,95 +3207,83 @@ class wizard_multi_charts_accounts(osv.osv_memory):
property_obj.create(cr, uid, vals, context=context) property_obj.create(cr, uid, vals, context=context)
return True return True
def _install_template(self, cr, uid, template_id, company_id, code_digits=None, obj_wizard=None, context=None): def _install_template(self, cr, uid, template_id, company_id, code_digits=None, obj_wizard=None, acc_ref={}, taxes_ref={}, context=None):
''' '''
This function recursively loads the template objects and create the real objects from them.i This function recursively loads the template objects and create the real objects from them.
:param template_id: id of the chart template to load :param template_id: id of the chart template to load
:param company_id: id of the company the wizard is running for :param company_id: id of the company the wizard is running for
:param code_digits: integer that depicts the number of digits the accounts code should have in the COA :param code_digits: integer that depicts the number of digits the accounts code should have in the COA
:param obj_wizard: the current wizard for generating the COA from the templates :param obj_wizard: the current wizard for generating the COA from the templates
:returns: return a dictionary containing the mapping between the account template ids and the ids of the real :returns: return a tuple with a dictionary containing the mapping between the account template ids and the ids
accounts that have been generated from them. of the real accounts that have been generated from them, as first item, and a similar dictionary for mapping
:rtype: dict between tax templates and taxes
:rtype: tuple(dict, dict)
''' '''
res = {} #import pdb;pdb.set_trace()
template = self.pool.get('account.chart.template').browse(cr, uid, template_id, context=context) template = self.pool.get('account.chart.template').browse(cr, uid, template_id, context=context)
if template.parent_id: if template.parent_id:
res.update(self._install_template(cr, uid, template.parent_id.id, company_id, code_digits=code_digits, context=context)) tmp1, tmp2 = self._install_template(cr, uid, template.parent_id.id, company_id, code_digits=code_digits, acc_ref=acc_ref, taxes_ref=taxes_ref, context=context)
res.update(self._load_template(cr, uid, template_id, company_id, code_digits=code_digits, obj_wizard=obj_wizard, context=context)) acc_ref.update(tmp1)
return res taxes_ref.update(tmp2)
#import pdb;pdb.set_trace()
tmp1, tmp2 = self._load_template(cr, uid, template_id, company_id, code_digits=code_digits, obj_wizard=obj_wizard, account_ref=acc_ref, taxes_ref=taxes_ref, context=context)
acc_ref.update(tmp1)
taxes_ref.update(tmp2)
return acc_ref, taxes_ref
def _load_template(self, cr, uid, template_id, company_id, code_digits=None, obj_wizard=None, context=None): def _load_template(self, cr, uid, template_id, company_id, code_digits=None, obj_wizard=None, account_ref={}, taxes_ref={}, context=None):
#TODO docstring me '''
#TODO refactor me This function generates all the objects from the templates
:param template_id: id of the chart template to load
:param company_id: id of the company the wizard is running for
:param code_digits: integer that depicts the number of digits the accounts code should have in the COA
:param obj_wizard: the current wizard for generating the COA from the templates
:returns: return a tuple with a dictionary containing the mapping between the account template ids and the ids
of the real accounts that have been generated from them, as first item, and a similar dictionary for mapping
between tax templates and taxes
:rtype: tuple(dict, dict)
'''
template = self.pool.get('account.chart.template').browse(cr, uid, template_id, context=context) template = self.pool.get('account.chart.template').browse(cr, uid, template_id, context=context)
obj_tax_code_template = self.pool.get('account.tax.code.template') obj_tax_code_template = self.pool.get('account.tax.code.template')
obj_acc_tax = self.pool.get('account.tax') obj_acc_tax = self.pool.get('account.tax')
obj_tax_code = self.pool.get('account.tax.code')
obj_tax_temp = self.pool.get('account.tax.template') obj_tax_temp = self.pool.get('account.tax.template')
obj_acc_template = self.pool.get('account.account.template') obj_acc_template = self.pool.get('account.account.template')
obj_fiscal_position_template = self.pool.get('account.fiscal.position.template') obj_fiscal_position_template = self.pool.get('account.fiscal.position.template')
ir_values_obj = self.pool.get('ir.values')
# create all the tax code. # create all the tax code.
#TODO in a separated method tax_code_template_ref = obj_tax_code_template.generate_tax_code(cr, uid, template.tax_code_root_id.id, company_id, context=context)
tax_code_template_ref = {}
tax_code_root_id = template.tax_code_root_id.id
children_tax_code_template = obj_tax_code_template.search(cr, uid, [('parent_id','child_of',[tax_code_root_id])], order='id')
company_name = self.pool.get('res.company').browse(cr, uid, company_id, context=context)
for tax_code_template in obj_tax_code_template.browse(cr, uid, children_tax_code_template, context=context):
vals = {
'name': (tax_code_root_id == tax_code_template.id) and company_name.name or tax_code_template.name,
'code': tax_code_template.code,
'info': tax_code_template.info,
'parent_id': tax_code_template.parent_id and ((tax_code_template.parent_id.id in tax_code_template_ref) and tax_code_template_ref[tax_code_template.parent_id.id]) or False,
'company_id': company_id,
'sign': tax_code_template.sign,
}
rec_list = obj_tax_code.search(cr, uid, [('name', '=', vals['name']),('company_id', '=', vals['company_id'])], context=context)
if not rec_list:
new_tax_code = obj_tax_code.create(cr, uid, vals)
#recording the new tax code to do the mapping
tax_code_template_ref[tax_code_template.id] = new_tax_code
# Generate taxes from templates. # Generate taxes from templates.
tax_template_to_tax = {}
tax_templates = [x for x in template.tax_template_ids if x.installable] tax_templates = [x for x in template.tax_template_ids if x.installable]
taxes_ref = obj_tax_temp.generate_tax(cr, uid, tax_templates, tax_code_template_ref, company_id, context=context) generated_tax_res = obj_tax_temp.generate_tax(cr, uid, tax_templates, tax_code_template_ref, company_id, context=context)
taxes_ref.update(generated_tax_res['tax_template_to_tax'])
# Generating Accounts from templates. # Generating Accounts from templates.
acc_template_ref = obj_acc_template.generate_account(cr, uid, template_id, taxes_ref['tax_template_ref'], code_digits, company_id, context=context) account_template_ref = obj_acc_template.generate_account(cr, uid, template_id, taxes_ref, code_digits, company_id, context=context)
account_ref.update(account_template_ref)
# writing account values on tax after creation of accounts # writing account values on tax after creation of accounts
for key,value in taxes_ref['account_dict'].items(): for key,value in generated_tax_res['account_dict'].items():
if value['account_collected_id'] or value['account_paid_id']: if value['account_collected_id'] or value['account_paid_id']:
obj_acc_tax.write(cr, uid, [key], { obj_acc_tax.write(cr, uid, [key], {
'account_collected_id': acc_template_ref.get(value['account_collected_id'], False), 'account_collected_id': account_ref.get(value['account_collected_id'], False),
'account_paid_id': acc_template_ref.get(value['account_paid_id'], False), 'account_paid_id': account_ref.get(value['account_paid_id'], False),
}) })
# Create Journals # Create Journals
self.generate_journals(cr, uid, template_id, acc_template_ref, company_id, code_digits, context) self.generate_journals(cr, uid, template_id, account_ref, company_id, context)
# generate properties function # generate properties function
self.generate_properties(cr, uid, template_id, acc_template_ref, company_id, context=context) self.generate_properties(cr, uid, template_id, account_ref, company_id, context=context)
# Generate Fiscal Position , Fiscal Position Accounts and Fiscal Position Taxes from templates # Generate Fiscal Position , Fiscal Position Accounts and Fiscal Position Taxes from templates
obj_fiscal_position_template.generate_fiscal_position(cr, uid, template_id, taxes_ref['tax_template_ref'], acc_template_ref, company_id, context=context) obj_fiscal_position_template.generate_fiscal_position(cr, uid, template_id, taxes_ref, account_ref, company_id, context=context)
# write values of default taxes for product return account_ref, taxes_ref
if tax_data:
if tax_data['sale_tax'] and taxes_ref['taxes_id']:
ir_values_obj.set(cr, uid, key='default', key2=False, name="taxes_id", company=company_id,
models =[('product.product',False)], value=[taxes_ref['taxes_id'][tax_data['sale_tax']]])
if tax_data['purchase_tax'] and taxes_ref['taxes_id']:
ir_values_obj.set(cr, uid, key='default', key2=False, name="supplier_taxes_id", company=company_id,
models =[('product.product',False)], value=[taxes_ref['taxes_id'][tax_data['purchase_tax']]])
return acc_template_ref
def _create_tax_templates(self, cr, uid, obj_wizard, company_id, context=None): def _create_tax_templates_from_rates(self, cr, uid, obj_wizard, company_id, context=None):
''' '''
This function checks if the chosen chart template is configured as containing a full set of taxes, and if This function checks if the chosen chart template is configured as containing a full set of taxes, and if
it's not the case, it creates the templates for account.tax.code and for account.account.tax objects accordingly it's not the case, it creates the templates for account.tax.code and for account.account.tax objects accordingly
@ -3275,6 +3296,7 @@ class wizard_multi_charts_accounts(osv.osv_memory):
obj_tax_code_template = self.pool.get('account.tax.code.template') obj_tax_code_template = self.pool.get('account.tax.code.template')
obj_tax_temp = self.pool.get('account.tax.template') obj_tax_temp = self.pool.get('account.tax.template')
chart_template = obj_wizard.chart_template_id chart_template = obj_wizard.chart_template_id
vals = {}
# create tax templates and tax code templates from purchase_tax_rate and sale_tax_rate fields # create tax templates and tax code templates from purchase_tax_rate and sale_tax_rate fields
if not chart_template.complete_tax_set: if not chart_template.complete_tax_set:
tax_data = { tax_data = {
@ -3287,33 +3309,37 @@ class wizard_multi_charts_accounts(osv.osv_memory):
if value >= 0.0: if value >= 0.0:
#create the tax code templates for base and tax #create the tax code templates for base and tax
base_code_vals = { base_code_vals = {
'name': (tax_type == 'sale' and _('Taxable Sales at %s') or _('Taxable Purchases at %')) % value, 'name': (tax_type == 'sale' and _('Taxable Sales at %s') or _('Taxable Purchases at %s')) % value,
'code': (tax_type == 'sale' and _('BASE-S-%s') or _('BASE-P-%s')) %value, 'code': (tax_type == 'sale' and _('BASE-S-%s') or _('BASE-P-%s')) %value,
'parent_id': chart_template.tax_code_root_id.id, 'parent_id': chart_template.tax_code_root_id.id,
'company_id': company_id, 'company_id': company_id,
} }
new_base_code_id = obj_tax_code_template.create(cr, uid, base_code_vals, context=context) new_base_code_id = obj_tax_code_template.create(cr, uid, base_code_vals, context=context)
tax_code_vals = { tax_code_vals = {
'name': (tax_type == 'sale' and _('Tax Received at %s') or _('Tax Paid at %')) % value, 'name': (tax_type == 'sale' and _('Tax Received at %s') or _('Tax Paid at %s')) % value,
'code': (tax_type == 'sale' and _('TAX-S-%s') or _('TAX-P-%s')) %value, 'code': (tax_type == 'sale' and _('TAX-S-%s') or _('TAX-P-%s')) %value,
'parent_id': chart_template.tax_code_root_id.id, 'parent_id': chart_template.tax_code_root_id.id,
'company_id': company_id, 'company_id': company_id,
} }
new_tax_code_id = obj_tax_code_template.create(cr, uid, tax_code_vals, context=context) new_tax_code_id = obj_tax_code_template.create(cr, uid, tax_code_vals, context=context)
#create the tax #create the tax
obj_tax_temp.create(cr, uid, { tax_template_id = obj_tax_temp.create(cr, uid, {
'name': _('Tax %s%%') % value, 'name': _('Tax %s%%') % value,
'amount': value/100, 'amount': value/100,
'base_code_id': new_tax_code_id, 'base_code_id': new_base_code_id,
'tax_code_id': new_paid_tax_code_id, 'tax_code_id': new_tax_code_id,
'ref_base_code_id': new_tax_code_id, 'ref_base_code_id': new_base_code_id,
'ref_tax_code_id': new_paid_tax_code_id, 'ref_tax_code_id': new_tax_code_id,
'type_tax_use': tax_type, 'type_tax_use': tax_type,
'installable': True, 'installable': True,
'type': 'percent', 'type': 'percent',
'sequence': 0, 'sequence': 0,
'chart_template_id': template.id or False, 'chart_template_id': chart_template.id or False,
}, context=context) }, context=context)
#record this new tax_template as default for this chart template
field_name = tax_type == 'sale' and 'sale_tax' or 'purchase_tax'
vals[field_name] = tax_template_id
self.write(cr, uid, obj_wizard.id, vals, context=context)
return True return True
def execute(self, cr, uid, ids, context=None): def execute(self, cr, uid, ids, context=None):
@ -3322,16 +3348,26 @@ class wizard_multi_charts_accounts(osv.osv_memory):
all the provided information to create the accounts, the banks, the journals, the taxes, the tax codes, the all the provided information to create the accounts, the banks, the journals, the taxes, the tax codes, the
accounting properties... accordingly for the chosen company. accounting properties... accordingly for the chosen company.
''' '''
ir_values_obj = self.pool.get('ir.values')
obj_wizard = self.browse(cr, uid, ids[0]) obj_wizard = self.browse(cr, uid, ids[0])
company_id = obj_wizard.company_id.id company_id = obj_wizard.company_id.id
# If the floats for sale/purchase rates have been filled, create templates from them # If the floats for sale/purchase rates have been filled, create templates from them
self._create_tax_templates_from_rates(cr, uid, obj_wizard, company_id, context=context) self._create_tax_templates_from_rates(cr, uid, obj_wizard, company_id, context=context)
# Install all the templates objects and generate the real objects # Install all the templates objects and generate the real objects
acc_template_ref = self._install_template(cr, uid, obj_wizard.chart_template_id.id, company_id, code_digits=obj_wizard.code_digits, obj_wizard=obj_wizard, context=context) acc_template_ref, taxes_ref = self._install_template(cr, uid, obj_wizard.chart_template_id.id, company_id, code_digits=obj_wizard.code_digits, obj_wizard=obj_wizard, context=context)
# write values of default taxes for product
if obj_wizard.sale_tax and taxes_ref:
ir_values_obj.set(cr, uid, key='default', key2=False, name="taxes_id", company=company_id,
models =[('product.product',False)], value=[taxes_ref[obj_wizard.sale_tax.id]])
if obj_wizard.purchase_tax and taxes_ref['taxes_id']:
ir_values_obj.set(cr, uid, key='default', key2=False, name="supplier_taxes_id", company=company_id,
models =[('product.product',False)], value=[taxes_ref[obj_wizard.purchase_tax.id]])
# Create Bank journals # Create Bank journals
self._create_bank_journals_from_o2m(cr, uid, obj_wizard, company_id, acc_template_ref, context=context) self._create_bank_journals_from_o2m(cr, uid, obj_wizard, company_id, acc_template_ref, context=context)
#import pdb;pdb.set_trace()
return True return True
def _prepare_bank_journal(self, cr, uid, line, current_num, default_account_id, company_id, context=None): def _prepare_bank_journal(self, cr, uid, line, current_num, default_account_id, company_id, context=None):
@ -3363,10 +3399,10 @@ class wizard_multi_charts_accounts(osv.osv_memory):
'default_debit_account_id': default_account_id, 'default_debit_account_id': default_account_id,
} }
if line['currency_id']: if line['currency_id']:
vals_journal['view_id'] = view_id_cur vals['view_id'] = view_id_cur
vals_journal['currency'] = line['currency_id'] vals['currency'] = line['currency_id']
else: else:
vals_journal['view_id'] = view_id_cash vals['view_id'] = view_id_cash
return vals return vals
def _prepare_bank_account(self, cr, uid, line, new_code, acc_template_ref, ref_acc_bank, company_id, context=None): def _prepare_bank_account(self, cr, uid, line, new_code, acc_template_ref, ref_acc_bank, company_id, context=None):
@ -3414,6 +3450,7 @@ class wizard_multi_charts_accounts(osv.osv_memory):
''' '''
obj_acc = self.pool.get('account.account') obj_acc = self.pool.get('account.account')
obj_journal = self.pool.get('account.journal') obj_journal = self.pool.get('account.journal')
code_digits = obj_wizard.code_digits
# Build a list with all the data to process # Build a list with all the data to process
journal_data = [] journal_data = []

View File

@ -36,9 +36,9 @@
"depends" : ['account_accountant'], "depends" : ['account_accountant'],
'update_xml': [ 'update_xml': [
'l10n_multilang.xml', 'l10n_multilang.xml',
'l10n_multilang_demo.xml'
], ],
'demo_xml': [ 'demo_xml': [
'l10n_multilang_demo.xml'
], ],
'installable': True, 'installable': True,
'active': False, 'active': False,

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<openerp> <openerp>
<data noupdate="0"> <data>
<!-- Account Types --> <!-- Account Types -->
@ -42,7 +42,7 @@
<field name="report_type">asset</field> <field name="report_type">asset</field>
</record> </record>
<!-- Chart template --> <!-- Chart template (will be completed later) -->
<record id="account_chart_template_a" model="account.chart.template"> <record id="account_chart_template_a" model="account.chart.template">
<field name="name">Demo Chart A</field> <field name="name">Demo Chart A</field>
</record> </record>
@ -173,6 +173,15 @@
</record> </record>
<!-- Account Templates for C --> <!-- Account Templates for C -->
<record model="account.account.template" id="chart_c_root">
<field name="name">Chart of Account C</field>
<field name="code">c0</field>
<field name="type">view</field>
<field ref="chart_a_root" name="parent_id"/>
<field name="user_type" ref="account_type_view"/>
<field name="reconcile" eval="False"/>
<field name="chart_template_id" ref="account_chart_template_c"/>
</record>
<record model="account.account.template" id="chart_c1"> <record model="account.account.template" id="chart_c1">
<field name="name">Assets C</field> <field name="name">Assets C</field>
@ -180,7 +189,7 @@
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="acct_type_asset_view"/> <field name="user_type" ref="acct_type_asset_view"/>
<field name="reconcile" eval="False"/> <field name="reconcile" eval="False"/>
<field name="parent_id" ref="chart_a0"/> <field name="parent_id" ref="chart_c_root"/>
<field name="chart_template_id" ref="account_chart_template_c"/> <field name="chart_template_id" ref="account_chart_template_c"/>
</record> </record>
@ -190,7 +199,7 @@
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="acct_type_liability_view"/> <field name="user_type" ref="acct_type_liability_view"/>
<field name="reconcile" eval="False"/> <field name="reconcile" eval="False"/>
<field name="parent_id" ref="chart_a0"/> <field name="parent_id" ref="chart_c_root"/>
<field name="chart_template_id" ref="account_chart_template_c"/> <field name="chart_template_id" ref="account_chart_template_c"/>
</record> </record>
@ -200,7 +209,7 @@
<field name="type">view</field> <field name="type">view</field>
<field name="user_type" ref="account_type_receivable"/> <field name="user_type" ref="account_type_receivable"/>
<field name="reconcile" eval="False"/> <field name="reconcile" eval="False"/>
<field name="parent_id" ref="chart_a1"/> <field name="parent_id" ref="chart_a1"/> <!-- conflict: should we use the parent_id or the chart_templat_id? to find all the accounts to install?? -->
<field name="chart_template_id" ref="account_chart_template_c"/> <field name="chart_template_id" ref="account_chart_template_c"/>
</record> </record>
@ -241,7 +250,7 @@
<record id="account_chart_template_c" model="account.chart.template"> <record id="account_chart_template_c" model="account.chart.template">
<field name="name">Demo Chart C</field> <field name="name">Demo Chart C</field>
<field name="account_root_id" ref="chart_a_root"/> <field name="account_root_id" ref="chart_c_root"/>
<field name="tax_code_root_id" ref="atax0"/> <field name="tax_code_root_id" ref="atax0"/>
<field name="bank_account_view_id" ref="chart_c5"/> <field name="bank_account_view_id" ref="chart_c5"/>
<field name="parent_id" ref="account_chart_template_a"/> <field name="parent_id" ref="account_chart_template_a"/>