Odoo accounting setup

Odoo accounting setup can be done in many different ways.

If your installation is “new”and your client doesn’t have any requirement regading the Chart of Account, the easiest way would be to:

  • Use the standard COA provided with the Odoo accounting setup.
  • Complement it manually wth your extra needs.

Yet, if your client wants to integrate his own Chat of accounts because he is familiar with it by mere corporate culture or because it is so big that inputing manually would be a great waste of time, then, you merely have two different alternatives:

  1. Odoo accounting setup using CSV: The following required fields will be required:
    1. “user_type/id”
    2. “code”
    3. “company_id/id”
    4. “type”
    5. “name”
    6. “currency_mode”

Excel will be your best friend in that case and you can use the import engine directly from the “Accounts” section.

2. Odoo accounting setup using module creation and XML:

Let’s get started with the standard __openerp__.py

 {
'name': 'Example of Indonesian Chart of accounts',
'version': '1.0',
'author': 'odoo-consultants',
'category': 'Localization/Account Charts',
'description': """
Indonesia - Chart of accounts.
==================================
""",
'website': 'http://www.odoo-consultants.com',
'depends': ['account_chart'],
'data': [
'l10n_id_account_type.xml',
'account_chart_template.xml',
'account.account.template.csv',
"data/template_whatever/account.account.template.csv",
'account_tax_code_template.xml',
'account_tax_template.xml',
'account_chart_template_after.xml',
'l10n_id_wizard.xml',
'tax_reports.xml',
],
'demo': [],
'test': [],
'installable': True,
'auto_install': False,
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

Let’s get started with the standard l10n_id_account_type.xml

 <?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>

<!-- account.account.type -->
<record id="user_type_view" model="account.account.type">
<field name="name">View</field>
<field name="code">view</field>
<field name="close_method">none</field>
</record>

<!-- Asset -->

<record id="user_type_current_asset" model="account.account.type">
<field name="name">Current Asset</field>
<field name="code">current asset</field>
<field name="report_type">asset</field>
<field name="close_method">balance</field>
</record>
<record id="user_type_cash" model="account.account.type">
<field name="name">Cash</field>
<field name="code">cash</field>
<field name="report_type">asset</field>
<field name="close_method">balance</field>
</record>
<record id="user_type_account_receivable" model="account.account.type">
<field name="name">Account Receivable</field>
<field name="code">account rec</field>
<field name="report_type">asset</field>
<field name="close_method">unreconciled</field>
</record>
<record id="user_type_other_current_asset" model="account.account.type">
<field name="name">Other Current Asset</field>
<field name="code">other-current asset</field>
<field name="report_type">asset</field>
<field name="close_method">balance</field>
</record>
<record id="user_type_fixed_asset" model="account.account.type">
<field name="name">Fixed Asset</field>
<field name="code">fixed asset</field>
<field name="report_type">asset</field>
<field name="close_method">balance</field>
</record>
<record id="user_type_accumulated_depreciation" model="account.account.type">
<field name="name">Accumulated Depreciation</field>
<field name="code">Accumulated Depreciation</field>
<field name="report_type">asset</field>
<field name="close_method">balance</field>
</record>
<record id="user_type_other_asset" model="account.account.type">
<field name="name">Other Asset</field>
<field name="code">other-asset</field>
<field name="report_type">asset</field>
<field name="close_method">balance</field>
</record>
<record id="user_type_intangible_asset" model="account.account.type">
<field name="name">Intangible Asset</field>
<field name="code">intangible-asset</field>
<field name="report_type">asset</field>
<field name="close_method">balance</field>
</record>

<!-- liability -->
<record id="user_type_account_payable" model="account.account.type">
<field name="name">Accounts Payable</field>
<field name="code">account-pay</field>
<field name="report_type">liability</field>
<field name="close_method">unreconciled</field>
</record>
<record id="user_type_credit_card" model="account.account.type">
<field name="name">Credit Card</field>
<field name="code">credit-card</field>
<field name="report_type">liability</field>
<field name="close_method">balance</field>
</record>
<record id="user_type_current_liability" model="account.account.type">
<field name="name">Current Liability</field>
<field name="code">current-liability</field>
<field name="report_type">liability</field>
<field name="close_method">balance</field>
</record>
<record id="user_type_other_current_liability" model="account.account.type">
<field name="name">Other Current Liability</field>
<field name="code">other current-liability</field>
<field name="report_type">liability</field>
<field name="close_method">balance</field>
</record>
<record id="user_type_long_term_liability" model="account.account.type">
<field name="name">Long term Liability</field>
<field name="code">long term-liability</field>
<field name="report_type">liability</field>
<field name="close_method">balance</field>
</record>
<record id="user_type_liability" model="account.account.type">
<field name="name">Liability</field>
<field name="code">liability</field>
<field name="report_type">liability</field>
<field name="close_method">balance</field>
</record>
<!-- Equity -->
<record id="user_type_equity" model="account.account.type">
<field name="name">Equity</field>
<field name="code">equity</field>
<field name="report_type">liability</field>
<field name="close_method">balance</field>
</record>

<!-- Income -->
<record id="user_type_income" model="account.account.type">
<field name="name">Income</field>
<field name="code">income</field>
<field name="report_type">income</field>
<field name="close_method">none</field>
</record>
<record id="user_type_other_income" model="account.account.type">
<field name="name">Other Income</field>
<field name="code">other-income</field>
<field name="report_type">income</field>
<field name="close_method">none</field>
</record>

<!-- Expense -->
<record id="user_type_expense" model="account.account.type">
<field name="name">Expense</field>
<field name="code">expense</field>
<field name="report_type">expense</field>
<field name="close_method">none</field>
</record>
<record id="user_type_other_expense" model="account.account.type">
<field name="name">Other Expense</field>
<field name="code">other-expense</field>
<field name="report_type">expense</field>
<field name="close_method">none</field>
</record>

<record id="user_type_cogs" model="account.account.type">
<field name="name">Cost of Goods Sold</field>
<field name="code">cogs</field>
<field name="report_type">expense</field>
<field name="close_method">none</field>
</record>

<!--record model="account.tax.code.template" id="tax_code">
<field name="name">Tax</field>
</record-->
</data>
</openerp> 

Then the account.account.template.csv

id,code,name,type,user_type/id,parent_id/id,reconcile,chart_template_id/id
coa_basic,0,Basic,view,l10n_id.user_type_view,,FALSE,l10n_id.account_chart_template_basic
asset,100000,AKTIVA,view,account.data_account_type_asset,coa_basic,FALSE,l10n_id.account_chart_template_basic
current_asset,110000,Aktiva Lancar,view,l10n_id.user_type_current_asset,asset,FALSE,l10n_id.account_chart_template_basic
cash_expenditure,111000,Kas,view,l10n_id.user_type_cash,current_asset,FALSE,l10n_id.account_chart_template_basic
111010,111010,Kas IDR,liquidity,l10n_id.user_type_cash,cash_expenditure,FALSE,l10n_id.account_chart_template_basic
111020,111020,Kas USD,liquidity,l10n_id.user_type_cash,cash_expenditure,FALSE,l10n_id.account_chart_template_basic
bank_expenditure,112000,Bank,view,l10n_id.user_type_cash,current_asset,FALSE,l10n_id.account_chart_template_basic

That type of Odoo accounting setup has great benefits: You can pre-integrate all the accounting automatically so when opening a new database from the wizard, all the accounting setup will be done and finished for the future users. The integration is quite fast during system initialization and will spare you a lot of chunking and importing in sequential CSV files with the import wizard.