From 931302d883e111222aaebd8475eb4c7088af1a8f Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Mon, 8 Nov 2021 15:53:58 +0100 Subject: [PATCH] [REF] i18n/localization.rst: improve instruction for dev Reconciliation models section is deleted because it was obsolete and rarely used in localization modules --- .../developer/misc/i18n/images/tax-report.png | Bin 0 -> 59988 bytes content/developer/misc/i18n/localization.rst | 843 +++++++++++------- 2 files changed, 541 insertions(+), 302 deletions(-) create mode 100644 content/developer/misc/i18n/images/tax-report.png diff --git a/content/developer/misc/i18n/images/tax-report.png b/content/developer/misc/i18n/images/tax-report.png new file mode 100644 index 0000000000000000000000000000000000000000..cf31e49fb06fcba59d23c2c9edade26fa98831b0 GIT binary patch literal 59988 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 literal 0 HcmV?d00001 diff --git a/content/developer/misc/i18n/localization.rst b/content/developer/misc/i18n/localization.rst index 3aa6a336f..703e04d5f 100644 --- a/content/developer/misc/i18n/localization.rst +++ b/content/developer/misc/i18n/localization.rst @@ -8,136 +8,234 @@ Accounting Localization This tutorial requires knowledges about how to build a module in Odoo (see :doc:`/developer/howtos/backend`). + +How localization works +====================== + +On installing the `account `__ module, the localization module corresponding to the country code of the company is installed automatically. +In case of no country code set or no localization module found, the `l10n_generic_coa `__ (US) localization module is installed by default. +Check `post init hook `__ for details. + +For example, `l10n_ch `__ will be installed if the company has ``Switzerland`` as country. + Building a localization module -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +============================== -When installing the ``accounting`` module, the localization module corresponding to the country code of the company is installed automatically. -In case of no country code set or no localization module found, the ``l10n_generic_coa`` (US) localization module is installed by default. +Structure of a basic ``l10n_XX`` module may be described as following ``__manifest__.py`` file: -For example, ``l10n_be`` will be installed if the company has ``Belgium`` as country. +.. code-block:: py -This behavior is allowed by the presence of a *.xml* file containing the following code: + { + "name": "COUNTRY - Accounting", + "version": "1.0.0", + "category": "Accounting/Localizations/Account Charts", + "license": "LGPL-3", + "depends": [ + "account", + # "l10n_multilang", + ], + "data": [ + # Chart of Accounts + "data/account_chart_template_data.xml", + "data/account_account_tag_data.xml", + "data/account_account_template_data.xml", + "data/account.group.template.csv", + "data/l10n_XX_chart_post_data.xml", + "data/account_chart_template_configure_data.xml", + + # Taxes + "data/account_tax_group_data.xml", + "data/account_tax_report_data.xml", + "data/account_tax_template_data.xml", + "data/account_fiscal_position_template_data.xml", + ], + "demo": [ + "demo/demo_company.xml", + ] + } + + +In the first file `data/account_chart_template_data.xml` we give name for the Chart of Accounts and set some basic fields. For example, for Swiss localization the file looks as following .. code-block:: xml - - + + + + Plan comptable 2015 (Suisse) + 4 + 102 + 100 + 1090 + + + + + + + + +.. note:: + + Recommended **xmlid** for the record is `l10n_XX_chart_template`. + It will be used for field `chart_template_id`, for example. + If you need many chart of accounts, you can add some suffixes, i.e. `l10n_XX_chart_template_XXX`. + + **Number of digits** to use for account codes is specified in `code_digits` parameter. + + **Bank/cash code** prefixes are used to create *Suspense Account*, *Outstanding Payments*, *Outstanding Receipts* accounts, if those are not set implicitly in the chart template (see note below about `account_journal_suspense_account_id` field). It may be also used to create `default_account_id` in a new `account.journal` record. + + **Transfer code** is used to create a transfer account that is an intermediary + account used when moving money from a liquidity account to another, + e.g. internal transfer from one bank account to another bank account. + + **Spoken languages** instructs to load translations for Chart of Accounts on module installations. It's useful for countries with several official languages. To use this option you must add `l10n_multilang` to the module dependencies. List of supported lang codes can be found in `base/data/res.lang.csv `__. + + To check the **currency** codes open `base/data/res_currency_data.xml `__. And the **country** codes are listed in `base/data/res_country_data.xml `__. + +Next settings for the chart of accounts are set in a separate file, because we need to provide `list of accounts <#accounts>`__ first. In `data/l10n_XX_chart_post_data.xml` we set some default accounts: + +.. code-block:: xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +For example, the Swiss file `data/l10n_ch_chart_post_data.xml` looks as following: + +.. code-block:: xml + + + + + + + + + + + +The last step on installing Chart of Accounts is applying it on current company. File `data/account_chart_template_configure_data.xml` is responsible for that: + +.. code-block:: xml + + + -Where ``module.template_xmlid`` is the **fully-qualified** xmlid of the corresponding template. +Finally, you may add a demo company, so the localization can be easily tested in demo mode. Check `l10n_ch/demo/demo_company.xml `__ for example. -Usually located in the ``data`` folder, it must be loaded at the very last in the ``__manifest__.py`` file. +Chart of Accounts +================= -.. danger:: +Accounts +-------- - If the *.xml* file is missing, the right chart of accounts won't be loaded on time! - - -Configuring my own Chart of Accounts? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -First of all, before I proceed, we need to talk about the templates. A template is a record that allows replica of itself. -This mechanism is needed when working in multi-companies. For example, the creation of a new account is done using the ``account.account.template`` model. -However, each company using this chart of accounts will be linked to a replica having ``account.account`` as model. -So, the templates are never used directly by the company. - -Then, when a chart of accounts needs to be installed, all templates dependent of this one will create a replica and link this newly generated record to the company's user. -It means all such templates must be linked to the chart of accounts in some way. To do so, each one must reference the desired chart of accounts using the ``chart_template_id`` field. -For this reason, we need to define an instance of the ``account.chart.template`` model before creating its templates. - -.. code-block:: xml - - - - ... - - - - - - ... - - - ... - - - - - - ... - - - - - - - - - - - - - - -For example, let's take a look to the Belgium chart of accounts. - -.. code-block:: xml - - - Belgian PCMN - - 550 - 570 - - - -Now that the chart of accounts is created, we can focus on the creation of the templates. -As said previously, each record must reference this record through the ``chart_template_id`` field. -If not, the template will be ignored. The following sections show in details how to create these templates. - -Adding a new account to my Chart of Accounts -############################################ - -It's time to create our accounts. It consists to creating records of ``account.account.template`` type. -Each ``account.account.template`` is able to create an ``account.account`` for each company. +Obviously, *Chart of Accounts* cannot exist without *Accounts*. You need to specify them in `data/account_account_template_data.xml`. .. code-block:: xml - - ... + + XXX + XXX + + - - ... - - - ... - - - + + This account is used for ... - + - + - - - - - + + -Some of the described fields above deserve a bit more explanation. +.. note:: + + You may use csv format instead. Check `l10n_ch/data/account.account.template.csv `__ for example. The ``user_type_id`` field requires a value of type ``account.account.type``. -Although some additional types could be created in a localization module, we encourage the usage of the existing types in the `account/data/data_account_type.xml `_ file. +Although some additional types could be created in a localization module, we encourage the usage of the existing types in the `account/data/data_account_type.xml `_ file. The usage of these generic types ensures the generic reports working correctly in addition to those that you could create in your localization module. .. warning:: @@ -149,94 +247,145 @@ The usage of these generic types ensures the generic reports working correctly i Only one account of type payable/receivable is enough. -Although the ``tag_ids`` field is optional, this one remains a very powerful feature. -Indeed, this one allows you to define some tags for your accounts to spread them correctly on your reports. -For example, suppose you want to create a financial report having multiple lines but you have no way to find a rule to dispatch the accounts according their ``code`` or ``name``. -The solution is the usage of tags, one for each report line, to spread and aggregate your accounts like you want. - -Like any other record, a tag can be created with the following xml structure: - -.. code-block:: xml - - - - ... - - - ... - - -As you can well imagine with the usage of tags, this feature can also be used with taxes. - -An examples coming from the ``l10n_be`` module: - -.. code-block:: xml - - - Clients - 4000 - - - - .. warning:: Don't create too much accounts: 200-300 is enough. -Adding a new tax to my Chart of Accounts -######################################## +Account tags +------------ -To create a new tax record, you just need to follow the same process as the creation of accounts. -The only difference being that you must use the ``account.tax.template`` model. +Tags is a way to sort accounts. +For example, imagine you want to create a financial report having multiple lines but you have no way to find a rule to dispatch the accounts according their ``code`` or ``name``. +The solution is the usage of tags, one for each report line, to filter accounts like you want. + +Put the tags in `data/account_account_tag_data.xml` file: .. code-block:: xml - - + ... + + accounts + + + + + + +Then apply tags on some accounts (field `tag_ids`). Examples: + +* csv: `l10n_lt/data/account.account.template.csv `__ +* xml: `l10n_at/data/account_account_template.xml `__ + +Account groups +-------------- + +Account groups allows to describe structure of chart of accounts. Just check example from `l10n_il/data/account.group.template.csv `__: + + ++-----------------+-------------------+-----------------+-------------------------+---------------------------+ +| id | code_prefix_start | code_prefix_end | name | chart_template_id/id | ++-----------------+-------------------+-----------------+-------------------------+---------------------------+ +| il_group_100100 | 100100 | 100499 | Fixed Assets | l10n_il.il_chart_template | ++-----------------+-------------------+-----------------+-------------------------+---------------------------+ +| il_group_101110 | 101110 | 101400 | Current Assets | l10n_il.il_chart_template | ++-----------------+-------------------+-----------------+-------------------------+---------------------------+ +| il_group_101401 | 101401 | 101799 | Bank And Cash | l10n_il.il_chart_template | ++-----------------+-------------------+-----------------+-------------------------+---------------------------+ +| il_group_111000 | 111000 | 111999 | Current Liabilities | l10n_il.il_chart_template | ++-----------------+-------------------+-----------------+-------------------------+---------------------------+ +| il_group_112000 | 112000 | 112210 | Non-current Liabilities | l10n_il.il_chart_template | ++-----------------+-------------------+-----------------+-------------------------+---------------------------+ +| il_group_200000 | 200000 | 200199 | Sales Income | l10n_il.il_chart_template | ++-----------------+-------------------+-----------------+-------------------------+---------------------------+ +| il_group_200200 | 200200 | 200300 | Other Income | l10n_il.il_chart_template | ++-----------------+-------------------+-----------------+-------------------------+---------------------------+ +| il_group_201000 | 201000 | 201299 | Cost of Goods | l10n_il.il_chart_template | ++-----------------+-------------------+-----------------+-------------------------+---------------------------+ +| il_group_202000 | 202000 | 220900 | Expenses | l10n_il.il_chart_template | ++-----------------+-------------------+-----------------+-------------------------+---------------------------+ +| il_group_300000 | 300000 | 399999 | Capital And Shares | l10n_il.il_chart_template | ++-----------------+-------------------+-----------------+-------------------------+---------------------------+ + + +Taxes +----- + +To add taxes you first need to specify tax groups. It has just two fields: name and country. Create file `data/account_tax_group_data.xml` and list the groups: + +.. code-block:: xml + + + + + + TVA 0% + + + + ... + + + + +Examples: + +* xml: `l10n_ch/data/account_tax_group_data.xml `__ +* csv: `l10n_uk/data/account.tax.group.csv `__ + + +Now you can add the taxes via `data/account_tax_template_data.xml` file: + +.. code-block:: xml + + + + XXX + + + + + + + - - - - - - - - - - - - - ... + - + percent - + + + + sale - + - ... + VAT 20% - + If price_include = False, the computed tax amount will be 132 * 0.2 = 26.4. + If price_include = True, the computed tax amount will be 132 - (132 / 1.2) = 132 - 110 = 22. --> + - + - + - - + + on_invoice - - + + - - ... - - - + + + -An example found in the ``l10n_pl`` module: +Check `l10n_ae/data/account_tax_template_data.xml `__ for example. + +Tax Report +---------- + +In previous section you noticed fields `invoice_repartition_line_ids` / `refund_repartition_line_ids` and probably understand nothing about it. Good news: you are not alone on this incomprehension. Bad news: you have to figure it out a bit. The topic is complicated indeed: + +.. image:: images/tax-report.png + +But lucky we have a presentation explaining the tax reports in details: + +.. youtube:: PuXE_NyFRTM + :align: right + :width: 700 + :height: 394 + +So, once you have properly configured taxes, you just need to add `data/account_tax_report_data.xml` file with a single record for `account.tax.report` in beginning: .. code-block:: xml - - - VAT - leasing pojazdu(sale) - VLP - 1.00 - - group - sale - - - - + + + + Tax Report + + + + ... + + +... following by a list of records for `account.tax.report.line`. Check for example `l10n_au/data/account_tax_report_data.xml `__. Meaning of the fields can be found directly in the `code `__: + +.. code-block:: py + + class AccountTaxReportLine(models.Model): + _name = "account.tax.report.line" + _description = "Account Tax Report Line" + _order = "sequence" + _parent_store = True + + name = fields.Char( + string="Name", + required=True, + help="Complete name for this report line, to be used in report.", + ) + tag_ids = fields.Many2many( + string="Tags", + comodel_name="account.account.tag", + relation="account_tax_report_line_tags_rel", + help="Tax tags populating this line", + ) + report_action_id = fields.Many2one( + string="Report Action", + comodel_name="ir.actions.act_window", + help="The optional action to call when clicking on this line in accounting reports.", + ) + children_line_ids = fields.One2many( + string="Children Lines", + comodel_name="account.tax.report.line", + inverse_name="parent_id", + help="Lines that should be rendered as children of this one", + ) + parent_id = fields.Many2one( + string="Parent Line", comodel_name="account.tax.report.line" + ) + sequence = fields.Integer( + string="Sequence", + required=True, + help="Sequence determining the order of the lines in the report (smaller ones come first). " + "This order is applied locally per section " + "(so, children of the same line are always rendered one after the other).", + ) + parent_path = fields.Char(index=True) + report_id = fields.Many2one( + string="Tax Report", + required=True, + comodel_name="account.tax.report", + ondelete="cascade", + help="The parent tax report of this line", + ) + + # helper to create tags (positive and negative) on report line creation + tag_name = fields.Char( + string="Tag Name", + help="Short name for the tax grid corresponding to this report line. " + "Leave empty if this report line should not correspond to any such grid.", + ) + + # fields used in specific localization reports, + # where a report line isn't simply the given by the sum of account.move.line with selected tags + code = fields.Char( + string="Code", + help="Optional unique code to refer to this line in total formulas", + ) + formula = fields.Char( + string="Formula", + help="Python expression used to compute the value of a total line. " + "This field is mutually exclusive with tag_name, setting it turns the line to a total line. " + "Tax report line codes can be used as variables in this expression to refer to the balance " + "of the corresponding lines in the report. A formula cannot refer to another line using a formula.", + ) + + # fields used to carry over amounts between periods + + # The selection should be filled in localizations using the system + carry_over_condition_method = fields.Selection( + selection=[ + ("no_negative_amount_carry_over_condition", "No negative amount"), + ("always_carry_over_and_set_to_0", "Always carry over and set to 0"), + ], + string="Method", + help="The method used to determine if this line should be carried over.", + ) + carry_over_destination_line_id = fields.Many2one( + string="Destination", + comodel_name="account.tax.report.line", + domain="[('report_id', '=', report_id)]", + help="The line to which the value of this line will be carried over to if needed." + " If left empty the line will carry over to itself.", + ) + carryover_line_ids = fields.One2many( + string="Carryover lines", + comodel_name="account.tax.carryover.line", + inverse_name="tax_report_line_id", + ) + is_carryover_persistent = fields.Boolean( + string="Persistent", + help="Defines how this report line creates carry over lines when performing tax closing." + "If true, the amounts carried over will always be added on top of each other: " + "for example, a report line with a balance of 10 with an existing carryover of 50 " + "will add an additional 10 to it when doing the closing, making a total carryover of 60. " + "If false, the total carried over amount will be forced to the total of this report line: " + "a report line with a balance of 10 with an existing carryover of 50 will create a new " + "carryover line of -40, so that the total carryover becomes 10.", + default=True, + ) + is_carryover_used_in_balance = fields.Boolean( + string="Used in line balance", + help="If set, the carryover amount for this line will be used when calculating its balance in the report." + "This means that the carryover could affect other lines if they are using this one in their computation.", + ) -Adding a new fiscal position to my Chart of Accounts -#################################################### + +Fiscal positions +---------------- .. note:: If you need more information about what is a fiscal position and how it works in Odoo, please refer to :doc:`/applications/finance/accounting/taxation/taxes/fiscal_positions`. -To create a new fiscal position, simply use the ``account.fiscal.position.template`` model: +Specify fiscal positions in `data/account_fiscal_position_template_data.xml` file as following: .. code-block:: xml @@ -303,123 +591,74 @@ To create a new fiscal position, simply use the ``account.fiscal.position.templa ... - + + + + 10 ... + + + + + + + + + + ... + ... + -Adding the properties to my Chart of Accounts -############################################# +You may have as many fiscal position as you need. Check `l10n_es/data/account_fiscal_position_template_data.xml `__ for example. -When the whole accounts are generated, you have the possibility to override the newly generated chart of accounts by adding some properties that correspond to default accounts used in certain situations. -This must be done after the creation of accounts before each one must be linked to the chart of accounts. +Accounting reports +================== -.. code-block:: xml +Accounting reports should be added via a separate module **l10n_XX_reports** that should go to the `enterprise repository `__. - - - +Basic `__manifest__.py` file for such a module looks as following: - - - - - - - - - - - - - - - - - - - - - - - - -For example, let's come back to the Belgium PCMN. This chart of accounts is override in this way to add some properties. - -.. code-block:: xml - - - - - - - - - - - -How to create a new bank operation model? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. note:: - - How a bank operation model works exactly in Odoo? See :doc:`/applications/finance/accounting/bank/reconciliation/reconciliation_models`. - -Since ``V10``, a new feature is available in the bank statement reconciliation widget: the bank operation model. -This allows the user to pre-fill some accounting entries with a single click. -The creation of an ``account.reconcile.model.template`` record is quite easy: - -.. code-block:: xml - - - - ... - - - - - - - - - - - - ... - - - ... - - - ... - - - - - - - - ... - ... - ... - - - -How to create a new dynamic report? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -If you need to add some reports on your localization, you need to create a new module named **l10n_xx_reports**. -Furthermore, this additional module must be present in the ``enterprise`` repository and must have at least two dependencies, -one to bring all the stuff for your localization module and one more, ``account_reports``, to design dynamic reports. .. code-block:: py - 'depends': ['l10n_xx', 'account_reports'], + { + "name": "COUNTRY - Accounting Reports", + "category": "Accounting/Localizations/Reporting", + "version": "1.0.0", + "license": "OEEL-1", + "depends": [ + "l10n_XX", "account_reports" + ], + "data": [ + "data/account_financial_html_report_data.xml", + ], + "auto_install": True, + } -Once it's done, you can start the creation of your report statements. The documentation is available in the following `slides `_. + +Functional overview of financial reports is here: :doc:`/applications/finance/accounting/reporting/overview/main_reports`. + +Some good examples: + +* `l10n_ch_reports/data/account_financial_html_report_data.xml `__ +* `l10n_be_reports/data/account_financial_html_report_data.xml `__ + +For the fields meaning dive directly to the source: + +* `account.financial.html.report (v15) `__ +* `account.financial.html.report.line (v15) `__ + +Menu for the new report is created automatically. By default it's located under *Accounting >> Reporting* menu. +To create a dedicated section in Reporting menu, you need to create new `ir.ui.menu` record (usually in the main `l10n_XX` module) and set it as `parent_id` field in `account.financial.html.report` model. Example for Belgium localization: + +* `ir.ui.menu record in l10n_be `__ +* `parent_id field in l10n_be_reports (v15) `__