diff --git a/addons/account/__init__.py b/addons/account/__init__.py
index ff0074bead4..8e8f61f509e 100644
--- a/addons/account/__init__.py
+++ b/addons/account/__init__.py
@@ -1,16 +1,10 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from . import controllers
-from . import models
-from . import demo
-from . import wizard
-from . import report
-from . import populate
-from . import tools
-
-
-SYSCOHADA_LIST = ['BJ', 'BF', 'CM', 'CF', 'KM', 'CG', 'CI', 'GA', 'GN', 'GW', 'GQ', 'ML', 'NE', 'CD', 'SN', 'TD', 'TG']
+SYSCOHADA_LIST = ['BJ', 'BF', 'CM', 'CF', 'KM', 'CG', 'CI', 'GA', 'GN', 'GW', 'GQ', 'ML', 'NE',
+ 'CD', 'SN', 'TD', 'TG']
+VAT_LIST = ['AT', 'BE', 'CA', 'CO', 'DE', 'EC', 'ES', 'ET', 'FR', 'GR', 'IT', 'LU', 'MX', 'NL',
+ 'NO', 'PL', 'PT', 'RO', 'SI', 'TR', 'GB', 'VE', 'VN']
def _set_fiscal_country(env):
""" Sets the fiscal country on existing companies when installing the module.
@@ -22,36 +16,17 @@ def _set_fiscal_country(env):
def _auto_install_l10n(env):
- #check the country of the main company (only) and eventually load some module needed in that country
- country_code = env.company.country_id.code
+ # Check the country of the main company (only) and eventually load some module needed in that country
+ country = env.company.country_id
+ country_code = country.code
if country_code:
- #auto install localization module(s) if available
- to_install_l10n = env['ir.module.module'].search_count([
- ('category_id', '=', env.ref('base.module_category_accounting_localizations_account_charts').id),
- ('state', '=', 'to install'),
- ])
module_list = []
- if to_install_l10n:
- # We don't install a CoA if one was passed in the command line
- # or has been selected to install
- pass
- elif country_code in SYSCOHADA_LIST:
- #countries using OHADA Chart of Accounts
- module_list.append('l10n_syscohada')
- elif country_code == 'GB':
- module_list.append('l10n_uk')
- elif country_code == 'DE':
- module_list.append('l10n_de_skr03')
- module_list.append('l10n_de_skr04')
- else:
- if env['ir.module.module'].search([('name', '=', 'l10n_' + country_code.lower())]):
- module_list.append('l10n_' + country_code.lower())
- else:
- module_list.append('l10n_generic_coa')
- if country_code in SYSCOHADA_LIST + [
- 'AT', 'BE', 'CA', 'CO', 'DE', 'EC', 'ES', 'ET', 'FR', 'GR', 'IT', 'LU', 'MX', 'NL', 'NO',
- 'PL', 'PT', 'RO', 'SI', 'TR', 'GB', 'VE', 'VN'
- ]:
+ if not env.company.chart_template:
+ template_code = env['account.chart.template']._guess_chart_template(country)
+ module_list.extend(env['account.chart.template']._get_chart_template_mapping()[template_code]['modules'])
+ if country_code in ['US', 'CA']:
+ module_list.append('account_check_printing')
+ if country_code in SYSCOHADA_LIST + VAT_LIST:
module_list.append('base_vat')
module_ids = env['ir.module.module'].search([('name', 'in', module_list), ('state', '=', 'uninstalled')])
@@ -61,3 +36,13 @@ def _auto_install_l10n(env):
def _account_post_init(env):
_auto_install_l10n(env)
_set_fiscal_country(env)
+
+# imported here to avoid dependency cycle issues
+# pylint: disable=wrong-import-position
+from . import controllers
+from . import models
+from . import demo
+from . import wizard
+from . import report
+from . import populate
+from . import tools
diff --git a/addons/account/__manifest__.py b/addons/account/__manifest__.py
index c05398c9339..9d0564a9060 100644
--- a/addons/account/__manifest__.py
+++ b/addons/account/__manifest__.py
@@ -39,7 +39,6 @@ You could use this simplified accounting in case you work with an (external) acc
'views/account_tax_views.xml',
'views/account_full_reconcile_views.xml',
'views/account_payment_term_views.xml',
- 'views/account_chart_template_views.xml',
'views/res_partner_bank_views.xml',
'views/report_statement.xml',
'views/terms_template.xml',
diff --git a/addons/account/data/account_data.xml b/addons/account/data/account_data.xml
index b5d0f940578..67422853461 100644
--- a/addons/account/data/account_data.xml
+++ b/addons/account/data/account_data.xml
@@ -145,12 +145,6 @@
outbound
-
-
- Taxes
- 0
-
-
Followup Trust Property
diff --git a/addons/account/data/template/account.account-generic_coa.csv b/addons/account/data/template/account.account-generic_coa.csv
new file mode 100644
index 00000000000..652f679da90
--- /dev/null
+++ b/addons/account/data/template/account.account-generic_coa.csv
@@ -0,0 +1,37 @@
+"id","name","code","account_type","tag_ids","reconcile"
+"current_assets","Current Assets","1010","asset_current","","False"
+"stock_valuation","Stock Valuation","1101","asset_current","","False"
+"stock_in","Stock Interim (Received)","1102","asset_current","","True"
+"stock_out","Stock Interim (Delivered)","1103","asset_current","","True"
+"receivable","Account Receivable","1210","asset_receivable","","True"
+"to_receive_rec","Products to receive","1211","asset_current","","True"
+"tax_paid","Tax Paid","1310","asset_current","","False"
+"tax_receivable","Tax Receivable","1320","asset_current","","False"
+"prepayments","Prepayments","1410","asset_prepayments","","False"
+"fixed_assets","Fixed Asset","1510","asset_fixed","","False"
+"non_current_assets","Non-current assets","1910","asset_non_current","","False"
+"current_liabilities","Current Liabilities","2010","liability_current","","False"
+"payable","Account Payable","2110","liability_payable","","True"
+"to_receive_pay","Bills to receive","2111","liability_current","","True"
+"tax_received","Tax Received","2510","liability_current","","False"
+"tax_payable","Tax Payable","2520","liability_current","","False"
+"non_current_liabilities","Non-current Liabilities","2910","liability_non_current","","False"
+"capital","Capital","3010","equity","","False"
+"dividends","Dividends","3020","equity","","False"
+"income","Product Sales","4000","income","account.account_tag_operating","False"
+"income_currency_exchange","Foreign Exchange Gain","4410","income","account.account_tag_financing","False"
+"cash_diff_income","Cash Difference Gain","4420","income","account.account_tag_investing","False"
+"cash_discount_loss","Cash Discount Loss","4430","expense","","False"
+"other_income","Other Income","4500","income_other","","False"
+"cost_of_goods_sold","Cost of Goods Sold","5000","expense_direct_cost","account.account_tag_operating","False"
+"expense","Expenses","6000","expense","account.account_tag_operating","False"
+"expense_invest","Purchase of Equipments","6110","expense","account.account_tag_investing","False"
+"expense_rent","Rent","6120","expense","account.account_tag_investing","False"
+"expense_finance","Bank Fees","6200","expense","account.account_tag_financing","False"
+"expense_salary","Salary Expenses","6300","expense","account.account_tag_operating","False"
+"expense_currency_exchange","Foreign Exchange Loss","6410","expense","account.account_tag_financing","False"
+"cash_diff_expense","Cash Difference Loss","6420","expense","account.account_tag_investing","False"
+"cash_discount_gain","Cash Discount Gain","6430","income","","False"
+"expense_rd","RD Expenses","9610","expense","account.account_tag_investing","False"
+"expense_sales","Sales Expenses","9620","expense","account.account_tag_investing","False"
+"pos_receivable","Account Receivable (PoS)","1013","asset_receivable","","True"
diff --git a/addons/account/data/template/account.tax-generic_coa.csv b/addons/account/data/template/account.tax-generic_coa.csv
new file mode 100644
index 00000000000..8b785f4e0e1
--- /dev/null
+++ b/addons/account/data/template/account.tax-generic_coa.csv
@@ -0,0 +1,9 @@
+"id","name","amount","type_tax_use","tax_group_id","repartition_line_ids/document_type","repartition_line_ids/factor_percent","repartition_line_ids/repartition_type","repartition_line_ids/account_id"
+"sale_tax_template","Tax 15%","15","sale","tax_group_15","invoice","100","base",""
+"","","","","","invoice","100","tax","tax_received"
+"","","","","","refund","100","base",""
+"","","","","","refund","100","tax","tax_received"
+"purchase_tax_template","Purchase Tax 15%","15","purchase","tax_group_15","invoice","100","base",""
+"","","","","","invoice","100","tax","tax_received"
+"","","","","","refund","100","base",""
+"","","","","","refund","100","tax","tax_received"
diff --git a/addons/account/data/template/account.tax.group-generic_coa.csv b/addons/account/data/template/account.tax.group-generic_coa.csv
new file mode 100644
index 00000000000..e1b4be05d9b
--- /dev/null
+++ b/addons/account/data/template/account.tax.group-generic_coa.csv
@@ -0,0 +1,2 @@
+id,name,country_id,tax_payable_account_id,tax_receivable_account_id
+tax_group_15,Tax 15%,base.us,tax_payable,tax_receivable
diff --git a/addons/account/demo/account_demo.py b/addons/account/demo/account_demo.py
index 2c6cc11e2f7..c2d9c51cd9f 100644
--- a/addons/account/demo/account_demo.py
+++ b/addons/account/demo/account_demo.py
@@ -6,187 +6,208 @@ from dateutil.relativedelta import relativedelta
from odoo import api, fields, models, Command
from odoo.tools.misc import file_open, formatLang
+from odoo.exceptions import UserError, ValidationError
_logger = logging.getLogger(__name__)
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = "account.chart.template"
@api.model
- def _get_demo_data(self):
+ def _get_demo_data(self, company=False):
"""Generate the demo data related to accounting."""
# This is a generator because data created here might be referenced by xml_id to data
# created later but defined in this same function.
- yield self._get_demo_data_move()
- yield self._get_demo_data_statement()
- yield self._get_demo_data_transactions()
- yield self._get_demo_data_reconcile_model()
- yield self._get_demo_data_attachment()
- yield self._get_demo_data_mail_message()
- yield self._get_demo_data_mail_activity()
+ return {
+ 'account.move': self._get_demo_data_move(company),
+ 'account.bank.statement': self._get_demo_data_statement(company),
+ 'account.bank.statement.line': self._get_demo_data_transactions(company),
+ 'account.reconcile.model': self._get_demo_data_reconcile_model(company),
+ 'ir.attachment': self._get_demo_data_attachment(company),
+ 'mail.message': self._get_demo_data_mail_message(company),
+ 'mail.activity': self._get_demo_data_mail_activity(company),
+ }
+
+ def _post_load_demo_data(self, company=False):
+ invoices = (
+ self.ref('demo_invoice_1')
+ + self.ref('demo_invoice_2')
+ + self.ref('demo_invoice_3')
+ + self.ref('demo_invoice_followup')
+ + self.ref('demo_invoice_5')
+ + self.ref('demo_invoice_equipment_purchase')
+ ).with_context(check_move_validity=False)
+
+ # the invoice_extract acts like a placeholder for the OCR to be ran and doesn't contain
+ # any lines yet
+ for move in invoices:
+ try:
+ move.action_post()
+ except (UserError, ValidationError):
+ _logger.exception('Error while posting demo data')
@api.model
- def _get_demo_data_move(self):
- cid = self.env.company.id
- ref = self.env.ref
+ def _get_demo_data_move(self, company=False):
fifteen_months_ago = fields.Date.today() + relativedelta(months=-15)
- return ('account.move', {
- f'{cid}_demo_invoice_1': {
+ return {
+ 'demo_invoice_1': {
'move_type': 'out_invoice',
- 'partner_id': ref('base.res_partner_12').id,
- 'invoice_user_id': ref('base.user_demo').id,
- 'invoice_payment_term_id': ref('account.account_payment_term_end_following_month').id,
+ 'partner_id': 'base.res_partner_12',
+ 'invoice_user_id': 'base.user_demo',
+ 'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m-01'),
'invoice_line_ids': [
- Command.create({'product_id': ref('product.consu_delivery_02').id, 'quantity': 5}),
- Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 5}),
+ Command.create({'product_id': 'product.consu_delivery_02', 'quantity': 5}),
+ Command.create({'product_id': 'product.consu_delivery_03', 'quantity': 5}),
],
},
- f'{cid}_demo_invoice_2': {
+ 'demo_invoice_2': {
'move_type': 'out_invoice',
- 'partner_id': ref('base.res_partner_2').id,
+ 'partner_id': 'base.res_partner_2',
'invoice_user_id': False,
'invoice_date': time.strftime('%Y-%m-08'),
'invoice_line_ids': [
- Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 5}),
- Command.create({'product_id': ref('product.consu_delivery_01').id, 'quantity': 20}),
+ Command.create({'product_id': 'product.consu_delivery_03', 'quantity': 5}),
+ Command.create({'product_id': 'product.consu_delivery_01', 'quantity': 20}),
],
},
- f'{cid}_demo_invoice_3': {
+ 'demo_invoice_3': {
'move_type': 'out_invoice',
- 'partner_id': ref('base.res_partner_2').id,
+ 'partner_id': 'base.res_partner_2',
'invoice_user_id': False,
'invoice_date': time.strftime('%Y-%m-08'),
'invoice_line_ids': [
- Command.create({'product_id': ref('product.consu_delivery_01').id, 'quantity': 5}),
- Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 5}),
+ Command.create({'product_id': 'product.consu_delivery_01', 'quantity': 5}),
+ Command.create({'product_id': 'product.consu_delivery_03', 'quantity': 5}),
],
},
- f'{cid}_demo_invoice_followup': {
+ 'demo_invoice_followup': {
'move_type': 'out_invoice',
- 'partner_id': ref('base.res_partner_2').id,
- 'invoice_user_id': ref('base.user_demo').id,
- 'invoice_payment_term_id': ref('account.account_payment_term_immediate').id,
+ 'partner_id': 'base.res_partner_2',
+ 'invoice_user_id': 'base.user_demo',
+ 'invoice_payment_term_id': 'account.account_payment_term_immediate',
'invoice_date': (fields.Date.today() + timedelta(days=-15)).strftime('%Y-%m-%d'),
'invoice_line_ids': [
- Command.create({'product_id': ref('product.consu_delivery_02').id, 'quantity': 5}),
- Command.create({'product_id': ref('product.consu_delivery_03').id, 'quantity': 5}),
+ Command.create({'product_id': 'product.consu_delivery_02', 'quantity': 5}),
+ Command.create({'product_id': 'product.consu_delivery_03', 'quantity': 5}),
],
},
- f'{cid}_demo_invoice_5': {
+ 'demo_invoice_5': {
'move_type': 'in_invoice',
- 'partner_id': ref('base.res_partner_12').id,
- 'invoice_user_id': ref('base.user_demo').id,
- 'invoice_payment_term_id': ref('account.account_payment_term_end_following_month').id,
+ 'partner_id': 'base.res_partner_12',
+ 'invoice_user_id': 'base.user_demo',
+ 'invoice_payment_term_id': 'account.account_payment_term_end_following_month',
'invoice_date': time.strftime('%Y-%m-01'),
'invoice_line_ids': [
- Command.create({'product_id': ref('product.product_delivery_01').id, 'price_unit': 10.0, 'quantity': 1}),
- Command.create({'product_id': ref('product.product_order_01').id, 'price_unit': 4.0, 'quantity': 5}),
+ Command.create({'product_id': 'product.product_delivery_01', 'price_unit': 10.0, 'quantity': 1}),
+ Command.create({'product_id': 'product.product_order_01', 'price_unit': 4.0, 'quantity': 5}),
],
},
- f'{cid}_demo_invoice_extract': {
+ 'demo_invoice_extract': {
'move_type': 'in_invoice',
- 'invoice_user_id': ref('base.user_demo').id,
+ 'invoice_user_id': 'base.user_demo',
},
- f'{cid}_demo_invoice_equipment_purchase': {
+ 'demo_invoice_equipment_purchase': {
'move_type': 'in_invoice',
'ref': f'INV/{fifteen_months_ago.year}/0057',
- 'partner_id': ref('base.res_partner_12').id,
+ 'partner_id': 'base.res_partner_12',
'invoice_user_id': False,
'invoice_date': fifteen_months_ago.strftime("%Y-%m-17"),
'invoice_line_ids': [
Command.create({'name': 'Redeem Reference Number: PO02529', 'quantity': 1, 'price_unit': 541.10}),
],
},
- })
+ }
@api.model
- def _get_demo_data_statement(self):
- cid = self.env.company.id
- ref = self.env.ref
+ def _get_demo_data_statement(self, company=False):
+ cid = company.id or self.env.company.id
bnk_journal = self.env['account.journal'].search(
domain=[('type', '=', 'bank'), ('company_id', '=', cid)],
limit=1,
)
- return ('account.bank.statement', {
- f'{cid}_demo_bank_statement_0': {
- 'name': f'{bnk_journal.name} - {time.strftime("%Y")}-01-01/1',
- 'balance_end_real': 6378.0,
- 'balance_start': 0.0,
+ return {
+ 'demo_bank_statement_1': {
+ 'journal_id': self.env['account.journal'].search([
+ ('type', '=', 'bank'),
+ ('company_id', '=', cid),
+ ], limit=1).id,
+ 'date': time.strftime('%Y')+'-01-01',
+ 'balance_end_real': 9944.87,
+ 'balance_start': 5103.0,
'line_ids': [
Command.create({
'journal_id': bnk_journal.id,
'payment_ref': 'Initial balance',
'amount': 5103.0,
'date': time.strftime('%Y-01-01'),
+ 'partner_id': 'base.res_partner_12',
}),
Command.create({
'journal_id': bnk_journal.id,
'payment_ref': time.strftime('INV/%Y/00002 and INV/%Y/00003'),
'amount': 1275.0,
'date': time.strftime('%Y-01-01'),
- 'partner_id': ref('base.res_partner_12').id
+ 'partner_id': 'base.res_partner_12',
}),
]
},
- })
+ }
@api.model
- def _get_demo_data_transactions(self):
- cid = self.env.company.id
- ref = self.env.ref
+ def _get_demo_data_transactions(self, company=False):
+ cid = company.id or self.env.company.id
bnk_journal = self.env['account.journal'].search(
domain=[('type', '=', 'bank'), ('company_id', '=', cid)],
limit=1,
)
- return ('account.bank.statement.line', {
- f'{cid}_demo_bank_statement_line_0': {
+ return {
+ 'demo_bank_statement_line_0': {
'journal_id': bnk_journal.id,
'payment_ref': 'Bank Fees',
'amount': -32.58,
'date': time.strftime('%Y-01-01'),
},
- f'{cid}_demo_bank_statement_line_1': {
+ 'demo_bank_statement_line_1': {
'journal_id': bnk_journal.id,
'payment_ref': 'Prepayment',
'amount': 650,
'date': time.strftime('%Y-01-01'),
- 'partner_id': ref('base.res_partner_12').id
+ 'partner_id': 'base.res_partner_12',
},
- f'{cid}_demo_bank_statement_line_2': {
+ 'demo_bank_statement_line_2': {
'journal_id': bnk_journal.id,
'payment_ref': time.strftime(f'First {formatLang(self.env, 2000, currency_obj=self.env.company.currency_id)} of invoice %Y/00001'),
'amount': 2000,
'date': time.strftime('%Y-01-01'),
- 'partner_id': ref('base.res_partner_12').id
+ 'partner_id': 'base.res_partner_12',
},
- f'{cid}_demo_bank_statement_line_3': {
+ 'demo_bank_statement_line_3': {
'journal_id': bnk_journal.id,
'payment_ref': 'Last Year Interests',
'amount': 102.78,
'date': time.strftime('%Y-01-01'),
},
- f'{cid}_demo_bank_statement_line_4': {
+ 'demo_bank_statement_line_4': {
'journal_id': bnk_journal.id,
'payment_ref': time.strftime('INV/%Y/00002'),
'amount': 750,
'date': time.strftime('%Y-01-01'),
- 'partner_id': ref('base.res_partner_2').id
+ 'partner_id': 'base.res_partner_2',
},
- f'{cid}_demo_bank_statement_line_5': {
+ 'demo_bank_statement_line_5': {
'journal_id': bnk_journal.id,
'payment_ref': f'R:9772938 10/07 AX 9415116318 T:5 BRT: {formatLang(self.env, 100.0, digits=2)} C/ croip',
'amount': 96.67,
'date': time.strftime('%Y-01-01'),
},
- })
+ }
@api.model
- def _get_demo_data_reconcile_model(self):
- cid = self.env.company.id
- return ('account.reconcile.model', {
- f'{cid}_reconcile_from_label': {
+ def _get_demo_data_reconcile_model(self, company=False):
+ return {
+ 'reconcile_from_label': {
'name': 'Line with Bank Fees',
'rule_type': 'writeoff_suggestion',
'match_label': 'contains',
@@ -214,113 +235,95 @@ class AccountChartTemplate(models.Model):
}),
]
},
- })
+ }
@api.model
- def _get_demo_data_attachment(self):
- cid = self.env.company.id
- ref = self.env.ref
- return ('ir.attachment', {
- f'{cid}_ir_attachment_in_invoice_1': {
+ def _get_demo_data_attachment(self, company=False):
+ return {
+ 'ir_attachment_in_invoice_1': {
'type': 'binary',
'name': 'in_invoice_yourcompany_demo.pdf',
'res_model': 'account.move',
- 'res_id': ref(f'account.{cid}_demo_invoice_extract').id,
+ 'res_id': 'demo_invoice_extract',
'raw': file_open(
'account/static/demo/in_invoice_yourcompany_demo_1.pdf', 'rb'
).read()
},
- f'{cid}_ir_attachment_in_invoice_2': {
+ 'ir_attachment_in_invoice_2': {
'type': 'binary',
'name': 'in_invoice_yourcompany_demo.pdf',
'res_model': 'account.move',
- 'res_id': ref(f'account.{cid}_demo_invoice_equipment_purchase').id,
+ 'res_id': 'demo_invoice_equipment_purchase',
'raw': file_open(
'account/static/demo/in_invoice_yourcompany_demo_2.pdf', 'rb'
).read()
},
- })
+ }
@api.model
- def _get_demo_data_mail_message(self):
- cid = self.env.company.id
- ref = self.env.ref
- return ('mail.message', {
- f'{cid}_mail_message_in_invoice_1': {
+ def _get_demo_data_mail_message(self, company=False):
+ return {
+ 'mail_message_in_invoice_1': {
'model': 'account.move',
- 'res_id': ref(f'account.{cid}_demo_invoice_extract').id,
+ 'res_id': 'demo_invoice_extract',
'body': 'Vendor Bill attachment',
'message_type': 'comment',
- 'author_id': ref('base.partner_demo').id,
+ 'author_id': 'base.partner_demo',
'attachment_ids': [Command.set([
- ref(f'account.{cid}_ir_attachment_in_invoice_1').id
+ 'ir_attachment_in_invoice_1',
])]
},
- f'{cid}_mail_message_in_invoice_2': {
+ 'mail_message_in_invoice_2': {
'model': 'account.move',
- 'res_id': ref(f'account.{cid}_demo_invoice_equipment_purchase').id,
+ 'res_id': 'demo_invoice_equipment_purchase',
'body': 'Vendor Bill attachment',
'message_type': 'comment',
- 'author_id': ref('base.partner_demo').id,
+ 'author_id': 'base.partner_demo',
'attachment_ids': [Command.set([
- ref(f'account.{cid}_ir_attachment_in_invoice_2').id
+ 'ir_attachment_in_invoice_2',
])]
},
- })
+ }
@api.model
- def _get_demo_data_mail_activity(self):
- cid = self.env.company.id
- ref = self.env.ref
- return ('mail.activity', {
- f'{cid}_invoice_activity_1': {
- 'res_id': ref(f'account.{cid}_demo_invoice_3').id,
- 'res_model_id': ref('account.model_account_move').id,
- 'activity_type_id': ref('mail.mail_activity_data_todo').id,
+ def _get_demo_data_mail_activity(self, company=False):
+ return {
+ 'invoice_activity_1': {
+ 'res_id': 'demo_invoice_3',
+ 'res_model_id': 'account.model_account_move',
+ 'activity_type_id': 'mail.mail_activity_data_todo',
'date_deadline': (fields.Datetime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M'),
'summary': 'Follow-up on payment',
- 'create_uid': ref('base.user_admin').id,
- 'user_id': ref('base.user_admin').id,
+ 'create_uid': 'base.user_admin',
+ 'user_id': 'base.user_admin',
},
- f'{cid}_invoice_activity_2': {
- 'res_id': ref(f'account.{cid}_demo_invoice_2').id,
- 'res_model_id': ref('account.model_account_move').id,
- 'activity_type_id': ref('mail.mail_activity_data_call').id,
+ 'invoice_activity_2': {
+ 'res_id': 'demo_invoice_2',
+ 'res_model_id': 'account.model_account_move',
+ 'activity_type_id': 'mail.mail_activity_data_call',
'date_deadline': fields.Datetime.today().strftime('%Y-%m-%d %H:%M'),
- 'create_uid': ref('base.user_admin').id,
- 'user_id': ref('base.user_admin').id,
+ 'create_uid': 'base.user_admin',
+ 'user_id': 'base.user_admin',
},
- f'{cid}_invoice_activity_3': {
- 'res_id': ref(f'account.{cid}_demo_invoice_1').id,
- 'res_model_id': ref('account.model_account_move').id,
- 'activity_type_id': ref('mail.mail_activity_data_todo').id,
+ 'invoice_activity_3': {
+ 'res_id': 'demo_invoice_1',
+ 'res_model_id': 'account.model_account_move',
+ 'activity_type_id': 'mail.mail_activity_data_todo',
'date_deadline': (fields.Datetime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M'),
'summary': 'Include upsell',
- 'create_uid': ref('base.user_admin').id,
- 'user_id': ref('base.user_admin').id,
+ 'create_uid': 'base.user_admin',
+ 'user_id': 'base.user_admin',
},
- f'{cid}_invoice_activity_4': {
- 'res_id': ref(f'account.{cid}_demo_invoice_extract').id,
- 'res_model_id': ref('account.model_account_move').id,
- 'activity_type_id': ref('mail.mail_activity_data_todo').id,
+ 'invoice_activity_4': {
+ 'res_id': 'demo_invoice_extract',
+ 'res_model_id': 'account.model_account_move',
+ 'activity_type_id': 'mail.mail_activity_data_todo',
'date_deadline': (fields.Datetime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M'),
'summary': 'Update address',
- 'create_uid': ref('base.user_admin').id,
- 'user_id': ref('base.user_admin').id,
+ 'create_uid': 'base.user_admin',
+ 'user_id': 'base.user_admin',
},
- })
-
- @api.model
- def _post_create_demo_data(self, created):
- cid = self.env.company.id
- if created._name == 'account.move':
- # the invoice_extract acts like a placeholder for the OCR to be ran and doesn't contain
- # any lines yet
- for move in created - self.env.ref(f'account.{cid}_demo_invoice_extract'):
- try:
- move.action_post()
- except Exception:
- _logger.exception('Error while posting demo data')
+ }
@api.model
def _get_demo_account(self, xml_id, account_type, company):
diff --git a/addons/account/demo/account_demo.xml b/addons/account/demo/account_demo.xml
index 24452bc1483..6883416cacc 100644
--- a/addons/account/demo/account_demo.xml
+++ b/addons/account/demo/account_demo.xml
@@ -2,8 +2,13 @@
-
+
+
+ generic_coa
+
+
+
Demo Capital Account
diff --git a/addons/account/models/__init__.py b/addons/account/models/__init__.py
index 7138d530511..80c0ce03e17 100644
--- a/addons/account/models/__init__.py
+++ b/addons/account/models/__init__.py
@@ -32,5 +32,7 @@ from . import account_incoterms
from . import digest
from . import res_users
from . import ir_actions_report
+from . import ir_module
from . import res_currency
from . import account_report
+from . import template_generic_coa
diff --git a/addons/account/models/account_account.py b/addons/account/models/account_account.py
index 23c066b3703..1112db1bf15 100644
--- a/addons/account/models/account_account.py
+++ b/addons/account/models/account_account.py
@@ -34,7 +34,7 @@ class AccountAccount(models.Model):
account_unaffected_earnings = self.browse(res['ids'])
raise ValidationError(_('You cannot have more than one account with "Current Year Earnings" as type. (accounts: %s)', [a.code for a in account_unaffected_earnings]))
- name = fields.Char(string="Account Name", required=True, index='trigram', tracking=True)
+ name = fields.Char(string="Account Name", required=True, index='trigram', tracking=True, translate=True)
currency_id = fields.Many2one('res.currency', string='Account Currency', tracking=True,
help="Forces all journal items in this account to have a specific currency (i.e. bank journals). If no currency is set, entries can use any currency.")
code = fields.Char(size=64, required=True, tracking=True)
@@ -68,8 +68,8 @@ class AccountAccount(models.Model):
)
include_initial_balance = fields.Boolean(string="Bring Accounts Balance Forward",
help="Used in reports to know if we should consider journal items from the beginning of time instead of from the fiscal year only. Account types that should be reset to zero at each new fiscal year (like expenses, revenue..) should not have this option set.",
- compute="_compute_include_initial_balance",
- store=True)
+ compute="_compute_include_initial_balance", store=True, precompute=True,
+ )
internal_group = fields.Selection(
selection=[
('equity', 'Equity'),
@@ -79,12 +79,13 @@ class AccountAccount(models.Model):
('expense', 'Expense'),
('off_balance', 'Off Balance'),
],
- string="Internal Group", readonly=True, compute="_compute_internal_group", store=True
+ string="Internal Group",
+ compute="_compute_internal_group", store=True, precompute=True,
)
#has_unreconciled_entries = fields.Boolean(compute='_compute_has_unreconciled_entries',
# help="The account has at least one unreconciled debit and credit since last time the invoices & payments matching was performed.")
reconcile = fields.Boolean(string='Allow Reconciliation', tracking=True,
- compute='_compute_reconcile', store=True, readonly=False,
+ compute='_compute_reconcile', store=True, readonly=False, precompute=True,
help="Check this box if this account allows invoices & payments matching of journal items.")
tax_ids = fields.Many2many('account.tax', 'account_account_tax_default_rel',
'account_id', 'tax_id', string='Default Taxes',
@@ -96,7 +97,7 @@ class AccountAccount(models.Model):
tag_ids = fields.Many2many('account.account.tag', 'account_account_account_tag', string='Tags', help="Optional tags you may want to assign for custom reporting")
group_id = fields.Many2one('account.group', compute='_compute_account_group', store=True, readonly=True,
help="Account prefixes can determine account groups.")
- root_id = fields.Many2one('account.root', compute='_compute_account_root', store=True)
+ root_id = fields.Many2one('account.root', compute='_compute_account_root', store=True, precompute=True)
allowed_journal_ids = fields.Many2many('account.journal', string="Allowed Journals", help="Define in which journals this account can be used. If empty, can be used in all journals.")
opening_debit = fields.Monetary(string="Opening Debit", compute='_compute_opening_debit_credit', inverse='_set_opening_debit')
opening_credit = fields.Monetary(string="Opening Credit", compute='_compute_opening_debit_credit', inverse='_set_opening_credit')
@@ -253,7 +254,6 @@ class AccountAccount(models.Model):
if not accounts:
return
- self.flush_recordset(['reconcile'])
self.env['account.journal'].flush_model(['company_id', 'default_account_id'])
self.env['res.company'].flush_model(['account_journal_payment_credit_account_id', 'account_journal_payment_debit_account_id'])
self.env['account.payment.method.line'].flush_model(['journal_id', 'payment_account_id'])
@@ -342,9 +342,11 @@ class AccountAccount(models.Model):
record.used = record.id in ids
@api.model
- def _search_new_account_code(self, company, digits, prefix):
+ def _search_new_account_code(self, company, digits, prefix, cache=None):
for num in range(1, 10000):
new_code = str(prefix.ljust(digits - 1, '0')) + str(num)
+ if new_code in (cache or []):
+ continue
rec = self.search([('code', '=', new_code), ('company_id', '=', company.id)], limit=1)
if not rec:
return new_code
@@ -615,6 +617,15 @@ class AccountAccount(models.Model):
default['name'] = self.name
return super(AccountAccount, self).copy(default)
+ def copy_translations(self, new, excluded=()):
+ super().copy_translations(new, excluded=tuple(excluded)+('name',))
+ if new.name == _('%s (copy)', self.name):
+ name_field = self._fields['name']
+ self.env.cache.update_raw(new, name_field, [{
+ lang: _('%s (copy)', tr)
+ for lang, tr in name_field._get_stored_translations(self).items()
+ }], dirty=True)
+
@api.model
def load(self, fields, data):
""" Overridden for better performances when importing a list of account
@@ -689,6 +700,17 @@ class AccountAccount(models.Model):
return self.create({'code': code, 'name': name}).name_get()[0]
raise UserError(_("Please create new accounts from the Chart of Accounts menu."))
+ @api.model_create_multi
+ def create(self, vals_list):
+ cache_map = defaultdict(list)
+ for vals in vals_list:
+ if 'prefix' in vals:
+ company = self.env['res.company'].browse(vals.get('company_id')) or self.env.company
+ cache = cache_map[company.id]
+ vals['code'] = self._search_new_account_code(company, vals.pop('code_digits'), vals.pop('prefix'), cache)
+ cache.append(vals['code'])
+ return super().create(vals_list)
+
def write(self, vals):
# Do not allow changing the company_id when account_move_line already exist
if vals.get('company_id', False):
@@ -777,9 +799,9 @@ class AccountGroup(models.Model):
parent_id = fields.Many2one('account.group', index=True, ondelete='cascade', readonly=True)
parent_path = fields.Char(index=True, unaccent=False)
- name = fields.Char(required=True)
- code_prefix_start = fields.Char()
- code_prefix_end = fields.Char()
+ name = fields.Char(required=True, translate=True)
+ code_prefix_start = fields.Char(compute='_compute_code_prefix_start', readonly=False, store=True, precompute=True)
+ code_prefix_end = fields.Char(compute='_compute_code_prefix_end', readonly=False, store=True, precompute=True)
company_id = fields.Many2one('res.company', required=True, readonly=True, default=lambda self: self.env.company)
_sql_constraints = [
@@ -790,15 +812,17 @@ class AccountGroup(models.Model):
),
]
- @api.onchange('code_prefix_start')
- def _onchange_code_prefix_start(self):
- if not self.code_prefix_end or self.code_prefix_end < self.code_prefix_start:
- self.code_prefix_end = self.code_prefix_start
+ @api.depends('code_prefix_start')
+ def _compute_code_prefix_end(self):
+ for group in self:
+ if not group.code_prefix_end or group.code_prefix_end < group.code_prefix_start:
+ group.code_prefix_end = group.code_prefix_start
- @api.onchange('code_prefix_end')
- def _onchange_code_prefix_end(self):
- if not self.code_prefix_start or self.code_prefix_start > self.code_prefix_end:
- self.code_prefix_start = self.code_prefix_end
+ @api.depends('code_prefix_end')
+ def _compute_code_prefix_start(self):
+ for group in self:
+ if not group.code_prefix_start or group.code_prefix_start > group.code_prefix_end:
+ group.code_prefix_start = group.code_prefix_end
def name_get(self):
result = []
@@ -841,18 +865,22 @@ class AccountGroup(models.Model):
if res:
raise ValidationError(_('Account Groups with the same granularity can\'t overlap'))
+ def _sanitize_vals(self, vals):
+ if vals.get('code_prefix_start') and 'code_prefix_end' in vals and not vals['code_prefix_end']:
+ del vals['code_prefix_end']
+ if vals.get('code_prefix_end') and 'code_prefix_start' in vals and not vals['code_prefix_start']:
+ del vals['code_prefix_start']
+ return vals
+
@api.model_create_multi
def create(self, vals_list):
- for vals in vals_list:
- if 'code_prefix_start' in vals and not vals.get('code_prefix_end'):
- vals['code_prefix_end'] = vals['code_prefix_start']
- res_ids = super(AccountGroup, self).create(vals_list)
+ res_ids = super(AccountGroup, self).create([self._sanitize_vals(vals) for vals in vals_list])
res_ids._adapt_accounts_for_account_groups()
res_ids._adapt_parent_account_group()
return res_ids
def write(self, vals):
- res = super(AccountGroup, self).write(vals)
+ res = super(AccountGroup, self).write(self._sanitize_vals(vals))
if 'code_prefix_start' in vals or 'code_prefix_end' in vals:
self._adapt_accounts_for_account_groups()
self._adapt_parent_account_group()
@@ -874,12 +902,14 @@ class AccountGroup(models.Model):
The most specific is the one with the longest prefixes and with the starting
prefix being smaller than the account code and the ending prefix being greater.
"""
+ if self.env.context.get('delay_account_group_sync'):
+ return
company_ids = account_ids.company_id.ids if account_ids else self.company_id.ids
account_ids = account_ids.ids if account_ids else []
- if not company_ids and not account_ids:
+ if not company_ids and account_ids is None:
return
self.flush_model()
- self.env['account.account'].flush_model()
+ self.env['account.account'].flush_model(['code'])
account_where_clause = ''
where_params = [tuple(company_ids)]
@@ -887,25 +917,25 @@ class AccountGroup(models.Model):
account_where_clause = 'AND account.id IN %s'
where_params.append(tuple(account_ids))
- self._cr.execute(f'''
- WITH candidates_account_groups AS (
- SELECT
- account.id AS account_id,
- ARRAY_AGG(agroup.id ORDER BY char_length(agroup.code_prefix_start) DESC, agroup.id) AS group_ids
- FROM account_account account
- LEFT JOIN account_group agroup
- ON agroup.code_prefix_start <= LEFT(account.code, char_length(agroup.code_prefix_start))
+ self._cr.execute(f"""
+ WITH relation AS (
+ SELECT DISTINCT ON (account.id)
+ account.id AS account_id,
+ agroup.id AS group_id
+ FROM account_account account
+ LEFT JOIN account_group agroup
+ ON agroup.code_prefix_start <= LEFT(account.code, char_length(agroup.code_prefix_start))
AND agroup.code_prefix_end >= LEFT(account.code, char_length(agroup.code_prefix_end))
AND agroup.company_id = account.company_id
- WHERE account.company_id IN %s {account_where_clause}
- GROUP BY account.id
+ WHERE account.company_id IN %s {account_where_clause}
+ ORDER BY account.id, char_length(agroup.code_prefix_start) DESC, agroup.id
)
UPDATE account_account
- SET group_id = rel.group_ids[1]
- FROM candidates_account_groups rel
- WHERE account_account.id = rel.account_id
- ''', where_params)
- self.env['account.account'].invalidate_model(['group_id'])
+ SET group_id = rel.group_id
+ FROM relation rel
+ WHERE account_account.id = rel.account_id
+ """, where_params)
+ self.env['account.account'].invalidate_model(['group_id'], flush=False)
def _adapt_parent_account_group(self):
"""Ensure consistency of the hierarchy of account groups.
@@ -914,13 +944,16 @@ class AccountGroup(models.Model):
The most specific is the one with the longest prefixes and with the starting
prefix being smaller than the child prefixes and the ending prefix being greater.
"""
+ if self.env.context.get('delay_account_group_sync'):
+ return
if not self:
return
self.flush_model()
query = """
WITH relation AS (
- SELECT DISTINCT FIRST_VALUE(parent.id) OVER (PARTITION BY child.id ORDER BY child.id, char_length(parent.code_prefix_start) DESC) AS parent_id,
- child.id AS child_id
+ SELECT DISTINCT ON (child.id)
+ child.id AS child_id,
+ parent.id AS parent_id
FROM account_group parent
JOIN account_group child
ON char_length(parent.code_prefix_start) < char_length(child.code_prefix_start)
@@ -929,6 +962,7 @@ class AccountGroup(models.Model):
AND parent.id != child.id
AND parent.company_id = child.company_id
WHERE child.company_id IN %(company_ids)s
+ ORDER BY child.id, char_length(parent.code_prefix_start) DESC
)
UPDATE account_group child
SET parent_id = relation.parent_id
diff --git a/addons/account/models/account_account_tag.py b/addons/account/models/account_account_tag.py
index 040d67fddbc..5b55efb4bb2 100644
--- a/addons/account/models/account_account_tag.py
+++ b/addons/account/models/account_account_tag.py
@@ -8,7 +8,7 @@ class AccountAccountTag(models.Model):
_name = 'account.account.tag'
_description = 'Account Tag'
- name = fields.Char('Tag Name', required=True)
+ name = fields.Char('Tag Name', required=True, translate=True)
applicability = fields.Selection([('accounts', 'Accounts'), ('taxes', 'Taxes'), ('products', 'Products')], required=True, default='accounts')
color = fields.Integer('Color Index')
active = fields.Boolean(default=True, help="Set active to false to hide the Account Tag without removing it.")
diff --git a/addons/account/models/account_journal.py b/addons/account/models/account_journal.py
index 0edd079131e..c29df656285 100644
--- a/addons/account/models/account_journal.py
+++ b/addons/account/models/account_journal.py
@@ -4,6 +4,7 @@ from odoo.osv import expression
from odoo.exceptions import UserError, ValidationError
from odoo.addons.base.models.res_bank import sanitize_account_number
from odoo.tools import remove_accents
+from collections import defaultdict
import logging
import re
@@ -62,8 +63,15 @@ class AccountJournal(models.Model):
return model
return 'odoo'
- name = fields.Char(string='Journal Name', required=True)
- code = fields.Char(string='Short Code', size=5, required=True, help="Shorter name used for display. The journal entries of this journal will also be named using this prefix by default.")
+ name = fields.Char(string='Journal Name', required=True, translate=True)
+ code = fields.Char(
+ string='Short Code',
+ size=5,
+ compute='_compute_code', readonly=False, store=True,
+ required=True, precompute=True,
+ help="Shorter name used for display. "
+ "The journal entries of this journal will also be named using this prefix by default."
+ )
active = fields.Boolean(default=True, help="Set active to false to hide the Journal without removing it.")
type = fields.Selection([
('sale', 'Sales'),
@@ -203,6 +211,18 @@ class AccountJournal(models.Model):
('code_company_uniq', 'unique (company_id, code)', 'Journal codes must be unique per company.'),
]
+ @api.depends('type', 'company_id')
+ def _compute_code(self):
+ cache = defaultdict(list)
+ for record in self:
+ if not record.code and record.type in ('bank', 'cash'):
+ record.code = self.get_next_bank_cash_default_code(
+ record.type,
+ record.company_id,
+ cache.get(record.company_id)
+ )
+ cache[record.company_id].append(record.code)
+
@api.depends('outbound_payment_method_line_ids', 'inbound_payment_method_line_ids')
def _compute_available_payment_method_ids(self):
"""
@@ -572,13 +592,16 @@ class AccountJournal(models.Model):
return result
@api.model
- def get_next_bank_cash_default_code(self, journal_type, company):
+ def get_next_bank_cash_default_code(self, journal_type, company, cache=None):
journal_code_base = (journal_type == 'cash' and 'CSH' or 'BNK')
- journals = self.env['account.journal'].search([('code', 'like', journal_code_base + '%'), ('company_id', '=', company.id)])
+ existing_codes = set(self.env['account.journal'].search([
+ ('code', 'like', journal_code_base + '%'),
+ ('company_id', '=', company.id),
+ ]).mapped('code') + (cache or []))
for num in range(1, 100):
# journal_code has a maximal size of 5, hence we can enforce the boundary num < 100
journal_code = journal_code_base + str(num)
- if journal_code not in journals.mapped('code'):
+ if journal_code not in existing_codes:
return journal_code
@api.model
@@ -607,7 +630,7 @@ class AccountJournal(models.Model):
company = self.env['res.company'].browse(vals['company_id']) if vals.get('company_id') else self.env.company
vals['company_id'] = company.id
- # Don't get the digits on 'chart_template_id' since the chart template could be a custom one.
+ # Don't get the digits on 'chart_template' since the chart template could be a custom one.
random_account = self.env['account.account'].search([('company_id', '=', company.id)], limit=1)
digits = len(random_account.code) if random_account else 6
@@ -624,12 +647,6 @@ class AccountJournal(models.Model):
# === Fill missing name ===
vals['name'] = vals.get('name') or vals.get('bank_acc_number')
- # === Fill missing code ===
- if 'code' not in vals:
- vals['code'] = self.get_next_bank_cash_default_code(journal_type, company)
- if not vals['code']:
- raise UserError(_("Cannot generate an unused journal code. Please fill the 'Shortcode' field."))
-
# === Fill missing accounts ===
if not has_liquidity_accounts:
default_account_code = self.env['account.account']._search_new_account_code(company, digits, liquidity_account_prefix)
diff --git a/addons/account/models/account_report.py b/addons/account/models/account_report.py
index c5f37b6a298..9562fcb0651 100644
--- a/addons/account/models/account_report.py
+++ b/addons/account/models/account_report.py
@@ -31,7 +31,7 @@ class AccountReport(models.Model):
column_ids = fields.One2many(string="Columns", comodel_name='account.report.column', inverse_name='report_id')
root_report_id = fields.Many2one(string="Root Report", comodel_name='account.report', help="The report this report is a variant of.")
variant_report_ids = fields.One2many(string="Variants", comodel_name='account.report', inverse_name='root_report_id')
- chart_template_id = fields.Many2one(string="Chart of Accounts", comodel_name='account.chart.template')
+ chart_template = fields.Selection(string="Chart of Accounts", selection=lambda self: self.env['account.chart.template']._select_chart_template())
country_id = fields.Many2one(string="Country", comodel_name='res.country')
only_tax_exigible = fields.Boolean(
string="Only Tax Exigible Lines",
diff --git a/addons/account/models/account_tax.py b/addons/account/models/account_tax.py
index f098c514740..736e78114eb 100644
--- a/addons/account/models/account_tax.py
+++ b/addons/account/models/account_tax.py
@@ -25,22 +25,28 @@ class AccountTaxGroup(models.Model):
name = fields.Char(required=True, translate=True)
sequence = fields.Integer(default=10)
- property_tax_payable_account_id = fields.Many2one(
+ company_id = fields.Many2one('res.company', required=True, default=lambda self: self.env.company)
+ tax_payable_account_id = fields.Many2one(
comodel_name='account.account',
- company_dependent=True,
+ check_company=True,
string='Tax Payable Account',
help="Tax current account used as a counterpart to the Tax Closing Entry when in favor of the authorities.")
- property_tax_receivable_account_id = fields.Many2one(
+ tax_receivable_account_id = fields.Many2one(
comodel_name='account.account',
- company_dependent=True,
+ check_company=True,
string='Tax Receivable Account',
help="Tax current account used as a counterpart to the Tax Closing Entry when in favor of the company.")
- property_advance_tax_payment_account_id = fields.Many2one(
+ advance_tax_payment_account_id = fields.Many2one(
comodel_name='account.account',
- company_dependent=True,
+ check_company=True,
string='Tax Advance Account',
help="Downpayments posted on this account will be considered by the Tax Closing Entry.")
- country_id = fields.Many2one(string="Country", comodel_name='res.country', help="The country for which this tax group is applicable.")
+ country_id = fields.Many2one(
+ string="Country",
+ comodel_name='res.country',
+ compute='_compute_country_id', store=True, readonly=False, precompute=True,
+ help="The country for which this tax group is applicable.",
+ )
country_code = fields.Char(related="country_id.code")
preceding_subtotal = fields.Char(
string="Preceding Subtotal",
@@ -48,6 +54,11 @@ class AccountTaxGroup(models.Model):
"If not set, the tax group will be displayed after the 'Untaxed amount' subtotal.",
)
+ @api.depends('company_id.account_fiscal_country_id')
+ def _compute_country_id(self):
+ for group in self:
+ group.country_id = group.company_id.account_fiscal_country_id or group.company_id.country_id
+
@api.model
def _check_misconfigured_tax_groups(self, company, countries):
""" Searches the tax groups used on the taxes from company in countries that don't have
@@ -56,21 +67,12 @@ class AccountTaxGroup(models.Model):
:return: A boolean telling whether or not there are misconfigured groups for any
of these countries, in this company
"""
-
- # This cannot be refactored to check for misconfigured groups instead
- # because of an ORM limitation with search on property fields:
- # searching on property = False also returns the properties using the default value,
- # even if it's non-empty.
- # (introduced here https://github.com/odoo/odoo/pull/6044)
- all_configured_groups_ids = self.with_company(company)._search([
- ('property_tax_payable_account_id', '!=', False),
- ('property_tax_receivable_account_id', '!=', False),
- ])
-
return bool(self.env['account.tax'].search([
('company_id', '=', company.id),
- ('tax_group_id', 'not in', all_configured_groups_ids),
('country_id', 'in', countries.ids),
+ '|',
+ ('tax_group_id.tax_payable_account_id', '=', False),
+ ('tax_group_id.tax_receivable_account_id', '=', False),
], limit=1))
@@ -81,11 +83,7 @@ class AccountTax(models.Model):
_check_company_auto = True
_rec_names_search = ['name', 'description']
- @api.model
- def _default_tax_group(self):
- return self.env.ref('account.tax_group_taxes')
-
- name = fields.Char(string='Tax Name', required=True)
+ name = fields.Char(string='Tax Name', required=True, translate=True)
name_searchable = fields.Char(store=False, search='_search_name',
help="This dummy field lets us use another search method on the field 'name'."
"This allows more freedom on how to search the 'name' compared to 'filter_domain'."
@@ -124,8 +122,12 @@ class AccountTax(models.Model):
default=True,
help="If set, taxes with a lower sequence might affect this one, provided they try to do it.")
analytic = fields.Boolean(string="Include in Analytic Cost", help="If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)")
- tax_group_id = fields.Many2one('account.tax.group', string="Tax Group", default=_default_tax_group, required=True,
- domain="[('country_id', 'in', (country_id, False))]")
+ tax_group_id = fields.Many2one(
+ comodel_name='account.tax.group',
+ string="Tax Group",
+ compute='_compute_tax_group_id', readonly=False, store=True,
+ required=True, precompute=True,
+ domain="[('country_id', 'in', (country_id, False))]")
# Technical field to make the 'tax_exigibility' field invisible if the same named field is set to false in 'res.company' model
hide_tax_exigibility = fields.Boolean(string='Hide Use Cash Basis Option', related='company_id.tax_exigibility', readonly=True)
tax_exigibility = fields.Selection(
@@ -160,7 +162,13 @@ class AccountTax(models.Model):
copy=True,
help="Distribution when the tax is used on a refund",
)
- country_id = fields.Many2one(string="Country", comodel_name='res.country', required=True, help="The country for which this tax is applicable.")
+ country_id = fields.Many2one(
+ string="Country",
+ comodel_name='res.country',
+ compute='_compute_country_id', readonly=False, store=True,
+ required=True, precompute=True,
+ help="The country for which this tax is applicable.",
+ )
country_code = fields.Char(related='country_id.code', readonly=True)
_sql_constraints = [
@@ -173,16 +181,36 @@ class AccountTax(models.Model):
if record.tax_group_id.country_id and record.tax_group_id.country_id != record.country_id:
raise ValidationError(_("The tax group must have the same country_id as the tax using it."))
+ @api.depends('company_id.account_fiscal_country_id')
+ def _compute_country_id(self):
+ for tax in self:
+ tax.country_id = tax.company_id.account_fiscal_country_id or tax.company_id.country_id or tax.country_id
+
+ @api.depends('company_id', 'country_id')
+ def _compute_tax_group_id(self):
+ by_country_company = defaultdict(self.browse)
+ for tax in self:
+ if (
+ not tax.tax_group_id
+ or tax.tax_group_id.country_id != tax.country_id
+ or tax.tax_group_id.company_id != tax.company_id
+ ):
+ by_country_company[(tax.country_id, tax.company_id)] += tax
+ for (country, company), taxes in by_country_company.items():
+ taxes.tax_group_id = self.env['account.tax.group'].search([
+ ('company_id', '=', company.id),
+ ('country_id', '=', country.id),
+ ], limit=1) or self.env['account.tax.group'].search([
+ ('company_id', '=', company.id),
+ ('country_id', '=', False),
+ ], limit=1)
+
@api.model
def default_get(self, fields_list):
# company_id is added so that we are sure to fetch a default value from it to use in repartition lines, below
rslt = super(AccountTax, self).default_get(fields_list + ['company_id'])
company_id = rslt.get('company_id')
- company = self.env['res.company'].browse(company_id)
-
- if 'country_id' in fields_list:
- rslt['country_id'] = company.account_fiscal_country_id.id
repartition = rslt.setdefault('repartition_line_ids', [])
if 'repartition_line_ids' in fields_list and not repartition:
@@ -228,8 +256,8 @@ class AccountTax(models.Model):
@api.constrains('invoice_repartition_line_ids', 'refund_repartition_line_ids')
def _validate_repartition_lines(self):
for record in self:
- invoice_repartition_line_ids = record.invoice_repartition_line_ids.sorted()
- refund_repartition_line_ids = record.refund_repartition_line_ids.sorted()
+ invoice_repartition_line_ids = record.invoice_repartition_line_ids.sorted(lambda l: (l.sequence, l.id))
+ refund_repartition_line_ids = record.refund_repartition_line_ids.sorted(lambda l: (l.sequence, l.id))
record._check_repartition_lines(invoice_repartition_line_ids)
record._check_repartition_lines(refund_repartition_line_ids)
@@ -282,19 +310,28 @@ class AccountTax(models.Model):
if self._cr.fetchone():
raise UserError(_("You can't change the company of your tax since there are some journal items linked to it."))
+ def _sanitize_vals(self, vals):
+ """Normalize the create/write values."""
+ sanitized = vals.copy()
+ # Allow to provide invoice_repartition_line_ids and refund_repartition_line_ids by dispatching them
+ # correctly in the repartition_line_ids
+ for doc_type in ('invoice', 'refund'):
+ fname = f"{doc_type}_repartition_line_ids"
+ if fname in sanitized:
+ repartition = sanitized.setdefault('repartition_line_ids', [])
+ repartition.extend([
+ (command, id, {'document_type': doc_type, **v}) if command in (Command.CREATE, Command.UPDATE)
+ else (command, id, v)
+ for command, id, v in sanitized.pop(fname)
+ ])
+ return sanitized
+
@api.model_create_multi
def create(self, vals_list):
- for vals in vals_list:
- for doc_type in ('invoice', 'refund'):
- fname = f"{doc_type}_repartition_line_ids"
- if fname in vals:
- repartition = vals.setdefault('repartition_line_ids', [])
- repartition.extend([
- (command, id, {'document_type': doc_type, **v})
- for command, id, v in vals.pop(fname)
- ])
- return super().create(vals_list)
+ return super().create([self._sanitize_vals(vals) for vals in vals_list])
+ def write(self, vals):
+ return super().write(self._sanitize_vals(vals))
@api.returns('self', lambda value: value.id)
def copy(self, default=None):
diff --git a/addons/account/models/chart_template.py b/addons/account/models/chart_template.py
index 2e08bdba387..79e478bfe06 100644
--- a/addons/account/models/chart_template.py
+++ b/addons/account/models/chart_template.py
@@ -1,30 +1,35 @@
# -*- coding: utf-8 -*-
-from odoo.exceptions import AccessError
-from odoo import api, fields, models, Command, _, osv
-from odoo import SUPERUSER_ID
-from odoo.exceptions import UserError, ValidationError
-from odoo.http import request
-from odoo.addons.account.models.account_tax import TYPE_TAX_USE
-from odoo.addons.account.models.account_account import ACCOUNT_CODE_REGEX
-from odoo.tools import html_escape
-
+import ast
+from collections import defaultdict
+import csv
+from functools import wraps
+from inspect import getmembers
import logging
import re
+from psycopg2.extras import Json
+
+from odoo import Command, _, models, api
+from odoo.addons.base.models.ir_model import MODULE_UNINSTALL_FLAG
+from odoo.addons.account import SYSCOHADA_LIST
+from odoo.exceptions import AccessError
+from odoo.tools import file_open
+
_logger = logging.getLogger(__name__)
-def migrate_set_tags_and_taxes_updatable(cr, registry, module):
- ''' This is a utility function used to manually set the flag noupdate to False on tags and account tax templates on localization modules
- that need migration (for example in case of VAT report improvements)
- '''
- env = api.Environment(cr, SUPERUSER_ID, {})
- xml_record_ids = env['ir.model.data'].search([
- ('model', 'in', ['account.tax.template', 'account.account.tag']),
- ('module', 'like', module)
- ]).ids
- if xml_record_ids:
- cr.execute("update ir_model_data set noupdate = 'f' where id in %s", (tuple(xml_record_ids),))
+TEMPLATE_MODELS = (
+ 'account.group',
+ 'account.account',
+ 'account.tax.group',
+ 'account.tax',
+ 'account.journal',
+ 'account.reconcile.model',
+ 'account.fiscal.position',
+)
+
+TAX_TAG_DELIMITER = '||'
+
def preserve_existing_tags_on_taxes(env, module):
''' This is a utility function used to preserve existing previous tags during upgrade of the module.'''
@@ -32,966 +37,652 @@ def preserve_existing_tags_on_taxes(env, module):
if xml_records:
env.cr.execute("update ir_model_data set noupdate = 't' where id in %s", [tuple(xml_records.ids)])
-def update_taxes_from_templates(cr, chart_template_xmlid):
- def _create_tax_from_template(company, template, old_tax=None):
- """
- Create a new tax from template with template xmlid, if there was already an old tax with that xmlid we
- remove the xmlid from it but don't modify anything else.
- """
- def _remove_xml_id(xml_id):
- module, name = xml_id.split(".", 1)
- env['ir.model.data'].search([('module', '=', module), ('name', '=', name)]).unlink()
- def _avoid_name_conflict():
- conflict_tax = env['account.tax'].search([('name', '=', template.name), ('company_id', '=', company.id),
- ('type_tax_use', '=', template.type_tax_use), ('tax_scope', '=', template.tax_scope)])
- if conflict_tax:
- conflict_tax.name = "[old] " + conflict_tax.name
-
- template_vals = template._get_tax_vals_complete(company)
- chart_template = env["account.chart.template"].with_context(default_company_id=company.id)
- if old_tax:
- xml_id = old_tax.get_external_id().get(old_tax.id)
- if xml_id:
- _remove_xml_id(xml_id)
- _avoid_name_conflict()
- chart_template.create_record_with_xmlid(company, template, "account.tax", template_vals)
-
- def _update_tax_from_template(template, tax):
- # -> update the tax : we only updates tax tags
- tax_rep_lines = tax.invoice_repartition_line_ids + tax.refund_repartition_line_ids
- template_rep_lines = template.invoice_repartition_line_ids + template.refund_repartition_line_ids
- for tax_line, template_line in zip(tax_rep_lines, template_rep_lines):
- tags_to_add = template_line._get_tags_to_add()
- tags_to_unlink = tax_line.tag_ids
- if tags_to_add != tags_to_unlink:
- tax_line.write({"tag_ids": [(6, 0, tags_to_add.ids)]})
- _cleanup_tags(tags_to_unlink)
-
- def _get_template_to_real_xmlid_mapping(company, model):
- """
- This function uses ir_model_data to return a mapping between the templates and the data, using their xmlid
- :returns: {
- account.tax.template.id: account.tax.id
- }
- """
- env['ir.model.data'].flush_model()
- env.cr.execute(
- """
- SELECT template.res_id AS template_res_id,
- data.res_id AS data_res_id
- FROM ir_model_data data
- JOIN ir_model_data template
- ON template.name = substr(data.name, strpos(data.name, '_') + 1)
- WHERE data.model = %s
- AND data.name LIKE %s
- -- tax.name is of the form: {company_id}_{account.tax.template.name}
- """,
- [model, r"%s\_%%" % company.id],
- )
- tuples = env.cr.fetchall()
- return dict(tuples)
-
- def _is_tax_and_template_same(template, tax):
- """
- This function compares account.tax and account.tax.template repartition lines.
- A tax is considered the same as the template if they have the same:
- - amount_type
- - amount
- - repartition lines percentages in the same order
- """
- tax_rep_lines = tax.invoice_repartition_line_ids + tax.refund_repartition_line_ids
- template_rep_lines = template.invoice_repartition_line_ids + template.refund_repartition_line_ids
- return (
- tax.amount_type == template.amount_type
- and tax.amount == template.amount
- and len(tax_rep_lines) == len(template_rep_lines)
- and all(
- rep_line_tax.factor_percent == rep_line_template.factor_percent
- for rep_line_tax, rep_line_template in zip(tax_rep_lines, template_rep_lines)
- )
- )
-
- def _cleanup_tags(tags):
- """
- Checks if the tags are still used in taxes or move lines. If not we delete it.
- """
- for tag in tags:
- tax_using_tag = env['account.tax.repartition.line'].sudo().search([('tag_ids', 'in', tag.id)], limit=1)
- aml_using_tag = env['account.move.line'].sudo().search([('tax_tag_ids', 'in', tag.id)], limit=1)
- report_expr_using_tag = tag._get_related_tax_report_expressions()
- if not (aml_using_tag or tax_using_tag or report_expr_using_tag):
- tag.unlink()
-
- def _update_fiscal_positions_from_templates(company, chart_template_id, new_taxes_template):
- chart_template = env["account.chart.template"].browse(chart_template_id)
- positions = env['account.fiscal.position.template'].search([('chart_template_id', '=', chart_template_id)])
- tax_template_ref = _get_template_to_real_xmlid_mapping(company, 'account.tax')
- fp_template_ref = _get_template_to_real_xmlid_mapping(company, 'account.fiscal.position')
-
- tax_template_vals = []
- for position_template in positions:
- fp = env["account.fiscal.position"].browse(fp_template_ref.get(position_template.id))
- if not fp:
- continue
- for position_tax in position_template.tax_ids:
- if position_tax.tax_src_id in new_taxes_template or position_tax.tax_dest_id in new_taxes_template:
- tax_template_vals.append((position_tax, {
- 'tax_src_id': tax_template_ref[position_tax.tax_src_id.id],
- 'tax_dest_id': position_tax.tax_dest_id and tax_template_ref[position_tax.tax_dest_id.id] or False,
- 'position_id': fp.id,
- }))
- chart_template._create_records_with_xmlid('account.fiscal.position.tax', tax_template_vals, company)
-
- def _notify_accountant_managers(taxes_to_check):
- accountant_manager_group = env.ref("account.group_account_manager")
- partner_managers_ids = accountant_manager_group.users.mapped('partner_id')
- odoobot = env.ref('base.partner_root')
- message_body = _(
- "Please check these taxes. They might be outdated. We did not update them. "
- "Indeed, they do not exactly match the taxes of the original version of the localization module.
"
- "You might want to archive or adapt them.
"
- )
- for account_tax in taxes_to_check:
- message_body += f"- {html_escape(account_tax.name)}
"
- message_body += "
"
- env['mail.thread'].message_notify(
- subject=_('Your taxes have been updated !'),
- author_id=odoobot.id,
- body=message_body,
- partner_ids=[partner.id for partner in partner_managers_ids],
- )
-
- env = api.Environment(cr, SUPERUSER_ID, {})
- chart_template_id = env.ref(chart_template_xmlid).id
- companies = env['res.company'].search([('chart_template_id', 'child_of', chart_template_id)])
- outdated_taxes = []
- new_taxes_template = []
- for company in companies:
- template_to_tax = _get_template_to_real_xmlid_mapping(company, 'account.tax')
- templates = env['account.tax.template'].with_context(active_test=False).search([("chart_template_id", "=", chart_template_id)])
- for template in templates:
- tax = env["account.tax"].browse(template_to_tax.get(template.id))
- if not tax or not _is_tax_and_template_same(template, tax):
- _create_tax_from_template(company, template, old_tax=tax)
- if tax:
- outdated_taxes.append(tax)
- else:
- new_taxes_template.append(template)
- else:
- _update_tax_from_template(template, tax)
- _update_fiscal_positions_from_templates(company, chart_template_id, new_taxes_template)
- if outdated_taxes:
- _notify_accountant_managers(outdated_taxes)
-
-# ---------------------------------------------------------------
-# Account Templates: Account, Tax, Tax Code and chart. + Wizard
-# ---------------------------------------------------------------
+def template(template=None, model='template_data'):
+ def decorator(func):
+ @wraps(func)
+ def wrapper(*args, **kwargs):
+ if template is not None:
+ # remove the template code argument as we already know it from the decorator
+ args, kwargs = args[:1], {}
+ return func(*args, **kwargs)
+ return api.attrsetter('_l10n_template', (template, model))(wrapper)
+ return decorator
-class AccountGroupTemplate(models.Model):
- _name = "account.group.template"
- _description = 'Template for Account Groups'
- _order = 'code_prefix_start'
-
- parent_id = fields.Many2one('account.group.template', ondelete='cascade')
- name = fields.Char(required=True)
- code_prefix_start = fields.Char()
- code_prefix_end = fields.Char()
- chart_template_id = fields.Many2one('account.chart.template', string='Chart Template', required=True)
-
-
-class AccountAccountTemplate(models.Model):
- _name = "account.account.template"
- _inherit = ['mail.thread']
- _description = 'Templates for Accounts'
- _order = "code"
-
- name = fields.Char(required=True)
- currency_id = fields.Many2one('res.currency', string='Account Currency', help="Forces all moves for this account to have this secondary currency.")
- code = fields.Char(size=64, required=True)
- account_type = fields.Selection(
- selection=[
- ("asset_receivable", "Receivable"),
- ("asset_cash", "Bank and Cash"),
- ("asset_current", "Current Assets"),
- ("asset_non_current", "Non-current Assets"),
- ("asset_prepayments", "Prepayments"),
- ("asset_fixed", "Fixed Assets"),
- ("liability_payable", "Payable"),
- ("liability_credit_card", "Credit Card"),
- ("liability_current", "Current Liabilities"),
- ("liability_non_current", "Non-current Liabilities"),
- ("equity", "Equity"),
- ("equity_unaffected", "Current Year Earnings"),
- ("income", "Income"),
- ("income_other", "Other Income"),
- ("expense", "Expenses"),
- ("expense_depreciation", "Depreciation"),
- ("expense_direct_cost", "Cost of Revenue"),
- ("off_balance", "Off-Balance Sheet"),
- ],
- string="Type",
- help="These types are defined according to your country. The type contains more information "\
- "about the account and its specificities."
- )
- reconcile = fields.Boolean(string='Allow Invoices & payments Matching', default=False,
- help="Check this option if you want the user to reconcile entries in this account.")
- note = fields.Text()
- tax_ids = fields.Many2many('account.tax.template', 'account_account_template_tax_rel', 'account_id', 'tax_id', string='Default Taxes')
- nocreate = fields.Boolean(string='Optional Create', default=False,
- help="If checked, the new chart of accounts will not contain this by default.")
- chart_template_id = fields.Many2one('account.chart.template', string='Chart Template',
- help="This optional field allow you to link an account template to a specific chart template that may differ from the one its root parent belongs to. This allow you "
- "to define chart templates that extend another and complete it with few new accounts (You don't need to define the whole structure that is common to both several times).")
- tag_ids = fields.Many2many('account.account.tag', 'account_account_template_account_tag', string='Account tag', help="Optional tags you may want to assign for custom reporting")
-
- @api.depends('name', 'code')
- def name_get(self):
- res = []
- for record in self:
- name = record.name
- if record.code:
- name = record.code + ' ' + name
- res.append((record.id, name))
- return res
-
- @api.constrains('code')
- def _check_account_code(self):
- for account in self:
- if not re.match(ACCOUNT_CODE_REGEX, account.code):
- raise ValidationError(_(
- "The account code can only contain alphanumeric characters and dots."
- ))
-
-
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_name = "account.chart.template"
_description = "Account Chart Template"
- name = fields.Char(required=True)
- parent_id = fields.Many2one('account.chart.template', string='Parent Chart Template')
- code_digits = fields.Integer(string='# of Digits', required=True, default=6, help="No. of Digits to use for account code")
- visible = fields.Boolean(string='Can be Visible?', default=True,
- help="Set this to False if you don't want this template to be used actively in the wizard that generate Chart of Accounts from "
- "templates, this is useful when you want to generate accounts of this template only when loading its child template.")
- currency_id = fields.Many2one('res.currency', string='Currency', required=True)
- use_anglo_saxon = fields.Boolean(string="Use Anglo-Saxon accounting", default=False)
- use_storno_accounting = fields.Boolean(string="Use Storno accounting", default=False)
- account_ids = fields.One2many('account.account.template', 'chart_template_id', string='Associated Account Templates')
- tax_template_ids = fields.One2many('account.tax.template', 'chart_template_id', string='Tax Template List',
- help='List of all the taxes that have to be installed by the wizard')
- bank_account_code_prefix = fields.Char(string='Prefix of the bank accounts', required=True)
- cash_account_code_prefix = fields.Char(string='Prefix of the main cash accounts', required=True)
- transfer_account_code_prefix = fields.Char(string='Prefix of the main transfer accounts', required=True)
- income_currency_exchange_account_id = fields.Many2one('account.account.template',
- string="Gain Exchange Rate Account", domain=[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'asset_cash', 'liability_credit_card')), ('deprecated', '=', False)])
- expense_currency_exchange_account_id = fields.Many2one('account.account.template',
- string="Loss Exchange Rate Account", domain=[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'asset_cash', 'liability_credit_card')), ('deprecated', '=', False)])
- country_id = fields.Many2one(string="Country", comodel_name='res.country', help="The country this chart of accounts belongs to. None if it's generic.")
+ @property
+ def _template_register(self):
+ def is_template(func):
+ return callable(func) and hasattr(func, '_l10n_template')
+ template_register = defaultdict(lambda: defaultdict(list))
+ cls = type(self)
+ for _attr, func in getmembers(cls, is_template):
+ template, model = func._l10n_template
+ template_register[template][model].append(func)
+ cls._template_register = template_register
+ return template_register
- account_journal_suspense_account_id = fields.Many2one('account.account.template', string='Journal Suspense Account')
- account_journal_payment_debit_account_id = fields.Many2one('account.account.template', string='Journal Outstanding Receipts Account')
- account_journal_payment_credit_account_id = fields.Many2one('account.account.template', string='Journal Outstanding Payments Account')
+ def _setup_complete(self):
+ super()._setup_complete()
+ type(self)._template_register = AccountChartTemplate._template_register
- default_cash_difference_income_account_id = fields.Many2one('account.account.template', string="Cash Difference Income Account")
- default_cash_difference_expense_account_id = fields.Many2one('account.account.template', string="Cash Difference Expense Account")
- default_pos_receivable_account_id = fields.Many2one('account.account.template', string="PoS receivable account")
- account_journal_early_pay_discount_loss_account_id = fields.Many2one(comodel_name='account.account.template', string='Cash Discount Write-Off Loss Account', )
- account_journal_early_pay_discount_gain_account_id = fields.Many2one(comodel_name='account.account.template', string='Cash Discount Write-Off Gain Account', )
+ # --------------------------------------------------------------------------------
+ # Template selection
+ # --------------------------------------------------------------------------------
- property_account_receivable_id = fields.Many2one('account.account.template', string='Receivable Account')
- property_account_payable_id = fields.Many2one('account.account.template', string='Payable Account')
- property_account_expense_categ_id = fields.Many2one('account.account.template', string='Category of Expense Account')
- property_account_income_categ_id = fields.Many2one('account.account.template', string='Category of Income Account')
- property_account_expense_id = fields.Many2one('account.account.template', string='Expense Account on Product Template')
- property_account_income_id = fields.Many2one('account.account.template', string='Income Account on Product Template')
- property_stock_account_input_categ_id = fields.Many2one('account.account.template', string="Input Account for Stock Valuation")
- property_stock_account_output_categ_id = fields.Many2one('account.account.template', string="Output Account for Stock Valuation")
- property_stock_valuation_account_id = fields.Many2one('account.account.template', string="Account Template for Stock Valuation")
- property_tax_payable_account_id = fields.Many2one('account.account.template', string="Tax current account (payable)")
- property_tax_receivable_account_id = fields.Many2one('account.account.template', string="Tax current account (receivable)")
- property_advance_tax_payment_account_id = fields.Many2one('account.account.template', string="Advance tax payment account")
- property_cash_basis_base_account_id = fields.Many2one(
- comodel_name='account.account.template',
- domain=[('deprecated', '=', False)],
- string="Base Tax Received Account",
- help="Account that will be set on lines created in cash basis journal entry and used to keep track of the "
- "tax base amount.")
+ def _get_chart_template_mapping(self, get_all=False):
+ """Get basic information about available CoA and their modules.
- @api.model
- def _prepare_transfer_account_template(self, prefix=None):
- ''' Prepare values to create the transfer account that is an intermediary account used when moving money
- from a liquidity account to another.
-
- :return: A dictionary of values to create a new account.account.
- '''
- digits = self.code_digits
- prefix = prefix or self.transfer_account_code_prefix or ''
- # Flatten the hierarchy of chart templates.
- chart_template = self
- chart_templates = self
- while chart_template.parent_id:
- chart_templates += chart_template.parent_id
- chart_template = chart_template.parent_id
- new_code = ''
- for num in range(1, 100):
- new_code = str(prefix.ljust(digits - 1, '0')) + str(num)
- rec = self.env['account.account.template'].search(
- [('code', '=', new_code), ('chart_template_id', 'in', chart_templates.ids)], limit=1)
- if not rec:
- break
+ :return: a mapping between the template code and a dictionnary constaining the
+ name, country id, country name, module dependencies and parent template
+ :rtype: dict[str, dict]
+ """
+ field = self.env['ir.module.module']._fields['account_templates']
+ if self.env.cache.contains_field(field):
+ modules = self.env.cache.get_records(self.env['ir.module.module'], field)
else:
- raise UserError(_('Cannot generate an unused account code.'))
-
+ modules = self.env['ir.module.module'].search([])
return {
- 'name': _('Liquidity Transfer'),
- 'code': new_code,
- 'account_type': 'asset_current',
- 'reconcile': True,
- 'chart_template_id': self.id,
+ name: template
+ for mapping in modules.mapped('account_templates')
+ for name, template in mapping.items()
+ if get_all or template['visible']
}
- @api.model
- def _create_liquidity_journal_suspense_account(self, company, code_digits):
- return self.env['account.account'].create({
- 'name': _("Bank Suspense Account"),
- 'code': self.env['account.account']._search_new_account_code(company, code_digits, company.bank_account_code_prefix or ''),
- 'account_type': 'asset_current',
- 'company_id': company.id,
- })
+ def _select_chart_template(self, country=None):
+ """Get the available templates in a format suited for Selection fields."""
+ country = country if country is not None else self.env.company.country_id
+ chart_template_mapping = self._get_chart_template_mapping()
+ return [
+ (template_code, template['name'])
+ for template_code, template in sorted(chart_template_mapping.items(), key=(lambda t: (
+ t[1]['name'] != 'generic_coa' if not country
+ else t[1]['name'] != 'syscohada' if country.code in SYSCOHADA_LIST
+ else t[1]['country_id'] != country.id
+ )))
+ ]
- @api.model
- def _create_cash_discount_loss_account(self, company, code_digits):
- return self.env['account.account'].create({
- 'name': _("Cash Discount Loss"),
- 'code': 999998,
- 'account_type': 'expense',
- 'company_id': company.id,
- })
+ def _guess_chart_template(self, country):
+ """Guess the most appropriate template based on the country."""
+ return self._select_chart_template(country)[0][0]
- @api.model
- def _create_cash_discount_gain_account(self, company, code_digits):
- return self.env['account.account'].create({
- 'name': _("Cash Discount Gain"),
- 'code': 999997,
- 'account_type': 'income_other',
- 'company_id': company.id,
- })
+ # --------------------------------------------------------------------------------
+ # Loading
+ # --------------------------------------------------------------------------------
- def try_loading(self, company=False, install_demo=True):
- """ Installs this chart of accounts for the current company if not chart
- of accounts had been created for it yet.
+ def try_loading(self, template_code, company, install_demo=True):
+ """Check if the chart template can be loaded then proceeds installing it.
- :param company (Model): the company we try to load the chart template on.
+ :param template_code: code of the chart template to be loaded.
+ :type template_code: str
+ :param company: the company we try to load the chart template on.
If not provided, it is retrieved from the context.
- :param install_demo (bool): whether or not we should load demo data right after loading the
+ :type company: int, Model
+ :param install_demo: whether or not we should load demo data right after loading the
+ chart template.
+ :type install_demo: bool
+ """
+ if not company:
+ company = self.env.company
+ if isinstance(company, int):
+ company = self.env['res.company'].browse([company])
+
+ template_code = template_code or company and self._guess_chart_template(company.country_id)
+
+ return self._load(template_code, company, install_demo)
+
+ def _load(self, template_code, company, install_demo):
+ """Install this chart of accounts for the current company.
+
+ :param template_code: code of the chart template to be loaded.
+ :param company: the company we try to load the chart template on.
+ If not provided, it is retrieved from the context.
+ :param install_demo: whether or not we should load demo data right after loading the
chart template.
"""
- # do not use `request.env` here, it can cause deadlocks
- if not company:
- if request and hasattr(request, 'allowed_company_ids'):
- company = self.env['res.company'].browse(request.allowed_company_ids[0])
- else:
- company = self.env.company
- # If we don't have any chart of account on this company, install this chart of account
- if not company.chart_template_id and not self.existing_accounting(company):
- for template in self:
- template.with_context(default_company_id=company.id)._load(company)
- # Install the demo data when the first localization is instanciated on the company
- if install_demo and self.env.ref('base.module_account').demo:
- self.with_context(
- default_company_id=company.id,
- allowed_company_ids=[company.id],
- )._create_demo_data()
+ # Ensure that the context is the correct one, even if not called by try_loading
+ if not self.env.is_system():
+ raise AccessError(_("Only administrators can install chart templates"))
- def _create_demo_data(self):
- try:
- with self.env.cr.savepoint():
- demo_data = self._get_demo_data()
- for model, data in demo_data:
- created = self.env[model]._load_records([{
- 'xml_id': "account.%s" % xml_id if '.' not in xml_id else xml_id,
- 'values': record,
- 'noupdate': True,
- } for xml_id, record in data.items()])
- self._post_create_demo_data(created)
- except Exception:
- # Do not rollback installation of CoA if demo data failed
- _logger.exception('Error while loading accounting demo data')
+ module_name = self._get_chart_template_mapping()[template_code].get('module')
+ module = self.env['ir.module.module'].search([('name', '=', module_name), ('state', '=', 'uninstalled')])
+ if module:
+ module.button_immediate_install()
+ self.env.reset() # clear the envs with an old registry
+ self = self.env()['account.chart.template'] # create a new env with the new registry
- def _load(self, company):
- """ Installs this chart of accounts on the current company, replacing
- the existing one if it had already one defined. If some accounting entries
- had already been made, this function fails instead, triggering a UserError.
+ self = self.with_context(
+ default_company_id=company.id,
+ allowed_company_ids=[company.id],
+ tracking_disable=True,
+ delay_account_group_sync=True,
+ )
+ company = company.with_env(self.env)
- Also, note that this function can only be run by someone with administration
- rights.
+ reload_template = template_code == company.chart_template
+ company.chart_template = template_code
+
+ if not reload_template:
+ for model in ('account.move',) + TEMPLATE_MODELS[::-1]:
+ self.env[model].search([('company_id', '=', company.id)]).with_context({MODULE_UNINSTALL_FLAG: True}).unlink()
+
+ data = self._get_chart_template_data(template_code)
+ template_data = data.pop('template_data')
+
+ if reload_template:
+ self._pre_reload_data(company, template_data, data)
+ install_demo = False
+ data = self._pre_load_data(template_code, company, template_data, data)
+ self._load_data(data)
+ self._post_load_data(template_code, company, template_data)
+
+ # Manual sync because disable above (delay_account_group_sync)
+ AccountGroup = self.env['account.group'].with_context(delay_account_group_sync=False)
+ AccountGroup._adapt_accounts_for_account_groups(self.env['account.account'].search([]))
+ AccountGroup.search([])._adapt_parent_account_group()
+
+ # Install the demo data when the first localization is instanciated on the company
+ if install_demo and self.ref('base.module_account').demo and not reload_template:
+ try:
+ with self.env.cr.savepoint():
+ self._load_data(self._get_demo_data(company))
+ self._post_load_demo_data(company)
+ except Exception:
+ # Do not rollback installation of CoA if demo data failed
+ _logger.exception('Error while loading accounting demo data')
+
+ def _pre_reload_data(self, company, template_data, data):
+ """Pre-process the data in case of reloading the chart of accounts.
+
+ When we reload the chart of accounts, we only want to update fields that are main
+ configuration, like:
+ - tax tags
+ - fiscal position mappings linked to new records
"""
- self.ensure_one()
- # do not use `request.env` here, it can cause deadlocks
- # Ensure everything is translated to the company's language, not the user's one.
- self = self.with_context(lang=company.partner_id.lang).with_company(company)
- if not self.env.is_admin():
- raise AccessError(_("Only administrators can load a chart of accounts"))
+ for prop in list(template_data):
+ if prop.startswith('property_'):
+ template_data.pop(prop)
+ data.pop('account.reconcile.model', None)
- existing_accounts = self.env['account.account'].search([('company_id', '=', company.id)])
- if existing_accounts:
- # we tolerate switching from accounting package (localization module) as long as there isn't yet any accounting
- # entries created for the company.
- if self.existing_accounting(company):
- raise UserError(_('Could not install new chart of account as there are already accounting entries existing.'))
+ for xmlid, journal_data in list(data.get('account.journal', {}).items()):
+ if self.ref(xmlid, raise_if_not_found=False):
+ del data['account.journal'][xmlid]
+ elif 'code' in journal_data:
+ journal = self.env['account.journal'].search([
+ ('code', '=', journal_data['code']),
+ ('company_id', '=', company.id),
+ ])
+ if journal:
+ del data['account.journal'][xmlid]
+ self.env['ir.model.data']._update_xmlids([{
+ 'xml_id': f"account.{company.id}_{xmlid}",
+ 'record': journal,
+ 'noupdate': True,
+ }])
- # delete accounting properties
- prop_values = ['account.account,%s' % (account_id,) for account_id in existing_accounts.ids]
- existing_journals = self.env['account.journal'].search([('company_id', '=', company.id)])
- if existing_journals:
- prop_values.extend(['account.journal,%s' % (journal_id,) for journal_id in existing_journals.ids])
- self.env['ir.property'].sudo().search(
- [('value_reference', 'in', prop_values)]
- ).unlink()
+ current_taxes = self.env['account.tax'].search([('company_id', '=', company.id)])
+ unique_tax_name_key = lambda t: (t.name, t.type_tax_use, t.tax_scope, t.company_id)
+ unique_tax_name_keys = set(current_taxes.mapped(unique_tax_name_key))
+ xmlid2tax = {
+ xml_id.split('.')[1].split('_', maxsplit=1)[1]: self.env['account.tax'].browse(record)
+ for record, xml_id in current_taxes.get_external_id().items()
+ }
+ def tax_template_changed(tax, template):
+ return (
+ tax.amount_type != template.get('amount_type', 'percent')
+ or tax.amount != template.get('amount', 0)
+ )
- # delete account, journal, tax, fiscal position and reconciliation model
- models_to_delete = ['account.reconcile.model', 'account.fiscal.position', 'account.move.line', 'account.move', 'account.journal', 'account.tax', 'account.group']
- for model in models_to_delete:
- res = self.env[model].sudo().search([('company_id', '=', company.id)])
- if len(res):
- res.with_context(force_delete=True).unlink()
- existing_accounts.unlink()
+ obsolete_xmlid = set()
+ for model_name, records in data.items():
+ _fields = self.env[model_name]._fields
+ for xmlid, values in records.items():
+ x2manyfields = [
+ fname
+ for fname in values
+ if fname in _fields
+ and _fields[fname].type in ('one2many', 'many2many')
+ and isinstance(values[fname], (list, tuple))
+ ]
+ if x2manyfields:
+ rec = self.ref(xmlid, raise_if_not_found=False)
+ if rec:
+ for fname in x2manyfields:
+ for i, (line, vals) in enumerate(zip(rec[fname], values[fname])):
+ values[fname][i] = Command.update(line.id, vals[2])
- company.write({'currency_id': self.currency_id.id,
- 'anglo_saxon_accounting': self.use_anglo_saxon,
- 'account_storno': self.use_storno_accounting,
- 'bank_account_code_prefix': self.bank_account_code_prefix,
- 'cash_account_code_prefix': self.cash_account_code_prefix,
- 'transfer_account_code_prefix': self.transfer_account_code_prefix,
- 'chart_template_id': self.id
- })
+ if model_name == 'account.fiscal.position':
+ # Only add tax mappings containing new taxes
+ values['tax_ids'] = [
+ (command, id, vals)
+ for command, id, vals in values.get('tax_ids', [])
+ if (
+ command not in (Command.UPDATE, Command.CREATE)
+ or not self.ref(vals['tax_src_id'], raise_if_not_found=False)
+ or not self.ref(vals['tax_dest_id'], raise_if_not_found=False)
+ )
+ ]
+ elif model_name == 'account.tax':
+ # Only update the tags of existing taxes
+ if xmlid not in xmlid2tax or tax_template_changed(xmlid2tax[xmlid], values):
+ if xmlid in xmlid2tax:
+ obsolete_xmlid.add(xmlid)
+ oldtax = xmlid2tax[xmlid]
+ if unique_tax_name_key(oldtax) in unique_tax_name_keys:
+ oldtax.name = f"[old] {oldtax.name}"
+ else:
+ repartition_lines = values.get('repartition_line_ids')
+ values.clear()
+ if repartition_lines:
+ values['repartition_line_ids'] = repartition_lines
+ for _c, _id, repartition_line in values.get('repartition_line_ids', []):
+ tags = repartition_line.get('tag_ids')
+ repartition_line.clear()
+ if tags:
+ repartition_line['tag_ids'] = tags
- #set the coa currency to active
- self.currency_id.write({'active': True})
+ if obsolete_xmlid:
+ self.env['ir.model.data'].search([
+ ('name', 'in', [f"{company.id}_{xmlid}" for xmlid in obsolete_xmlid]),
+ ('module', '=', 'account'),
+ ]).unlink()
- # When we install the CoA of first company, set the currency to price types and pricelists
- if company.id == 1:
- for reference in ['product.list_price', 'product.standard_price']:
- try:
- tmp2 = self.env.ref(reference).write({'currency_id': self.currency_id.id})
- except ValueError:
- pass
+ def _pre_load_data(self, template_code, company, template_data, data):
+ """Pre-process the data and preload some values.
- # Set the fiscal country before generating taxes in case the company does not have a country_id set yet
- if self.country_id:
- # If this CoA is made for only one country, set it as the fiscal country of the company.
- company.account_fiscal_country_id = self.country_id
- elif not company.account_fiscal_country_id:
- company.account_fiscal_country_id = self.env.ref('base.us')
+ Some of the data needs special pre_process before being fed to the database.
+ e.g. the account codes' width must be standardized to the code_digits applied.
+ The fiscal country code must be put in place before taxes are generated.
+ """
+ if 'account_fiscal_country_id' in data['res.company'][company.id]:
+ fiscal_country = self.ref(data['res.company'][company.id]['account_fiscal_country_id'])
+ else:
+ fiscal_country = company.account_fiscal_country_id
- # Install all the templates objects and generate the real objects
- acc_template_ref, taxes_ref = self._install_template(company, code_digits=self.code_digits)
+ # Apply template data to the company
+ filter_properties = lambda key: (
+ (not key.startswith("property_") or key.startswith("property_stock_") or key == "additional_properties")
+ and key != 'name'
+ and key in company._fields
+ )
- # Set default cash discount write-off accounts
- if not company.account_journal_early_pay_discount_loss_account_id:
- company.account_journal_early_pay_discount_loss_account_id = self._create_cash_discount_loss_account(
- company, self.code_digits)
- if not company.account_journal_early_pay_discount_gain_account_id:
- company.account_journal_early_pay_discount_gain_account_id = self._create_cash_discount_gain_account(
- company, self.code_digits)
+ # Set the currency to the fiscal country's currency
+ vals = {key: val for key, val in template_data.items() if filter_properties(key)}
+ vals['currency_id'] = fiscal_country.currency_id.id
+ if not company.country_id:
+ vals['country_id'] = fiscal_country.id
- # Set default cash difference account on company
- if not company.account_journal_suspense_account_id:
- company.account_journal_suspense_account_id = self._create_liquidity_journal_suspense_account(company, self.code_digits)
+ # This write method is important because it's overridden and has additional triggers
+ # e.g it activates the currency
+ company.write(vals)
- if not company.account_journal_payment_debit_account_id:
- company.account_journal_payment_debit_account_id = self.env['account.account'].create({
- 'name': _("Outstanding Receipts"),
- 'code': self.env['account.account']._search_new_account_code(company, self.code_digits, company.bank_account_code_prefix or ''),
- 'reconcile': True,
- 'account_type': 'asset_current',
- 'company_id': company.id,
- })
+ # Normalize the code_digits of the accounts
+ code_digits = int(template_data.get('code_digits', 6))
+ for key, account_data in data.get('account.account', {}).items():
+ data['account.account'][key]['code'] = f'{account_data["code"]:<0{code_digits}}'
- if not company.account_journal_payment_credit_account_id:
- company.account_journal_payment_credit_account_id = self.env['account.account'].create({
- 'name': _("Outstanding Payments"),
- 'code': self.env['account.account']._search_new_account_code(company, self.code_digits, company.bank_account_code_prefix or ''),
- 'reconcile': True,
- 'account_type': 'asset_current',
- 'company_id': company.id,
- })
+ for model in ('account.fiscal.position', 'account.reconcile.model'):
+ if model in data:
+ data[model] = data.pop(model)
- if not company.default_cash_difference_expense_account_id:
- company.default_cash_difference_expense_account_id = self.env['account.account'].create({
- 'name': _('Cash Difference Loss'),
- 'code': self.env['account.account']._search_new_account_code(company, self.code_digits, '999'),
- 'account_type': 'expense',
- 'tag_ids': [(6, 0, self.env.ref('account.account_tag_investing').ids)],
- 'company_id': company.id,
- })
+ return data
- if not company.default_cash_difference_income_account_id:
- company.default_cash_difference_income_account_id = self.env['account.account'].create({
- 'name': _('Cash Difference Gain'),
- 'code': self.env['account.account']._search_new_account_code(company, self.code_digits, '999'),
- 'account_type': 'income',
- 'tag_ids': [(6, 0, self.env.ref('account.account_tag_investing').ids)],
- 'company_id': company.id,
- })
+ def _load_data(self, data):
+ """Load all the data linked to the template into the database.
- # Set the transfer account on the company
- company.transfer_account_id = self.env['account.account'].search([
- ('code', '=like', self.transfer_account_code_prefix + '%'), ('company_id', '=', company.id)], limit=1)
+ The data can contain translation values (i.e. `name@fr_FR` to translate the name in French)
+ An xml_id tht doesn't contain a `.` will be treated as being linked to `account` and prefixed
+ with the company's id (i.e. `cash` is interpreted as `account.1_cash` if the company's id is 1)
- # Create Bank journals
- self._create_bank_journals(company, acc_template_ref)
+ :param data: Basically all the final data of records to create/update for the chart
+ of accounts. It is a mapping {model: {xml_id: values}}.
+ :type data: dict[str, dict[(str, int), dict]]
+ """
+ def deref(values, model):
+ """Replace xml_id references by database ids.
- # Create the current year earning account if it wasn't present in the CoA
+ This allows to define all the data before the records even exist in the database.
+ """
+ fields = ((model._fields[k], k, v) for k, v in values.items() if k in model._fields)
+ for field, fname, value in fields:
+ if not value:
+ values[fname] = False
+ elif isinstance(value, str) and (
+ field.type == 'many2one'
+ or (field.type in ('integer', 'many2one_reference') and not value.isdigit())
+ ):
+ values[fname] = self.ref(value).id if value not in ('', 'False', 'None') else False
+ elif field.type in ('one2many', 'many2many') and isinstance(value[0], (list, tuple)):
+ for i, (command, _id, *last_part) in enumerate(value):
+ if last_part:
+ last_part = last_part[0]
+ # (0, 0, {'test': 'account.ref_name'}) -> Command.Create({'test': 13})
+ if command in (Command.CREATE, Command.UPDATE):
+ deref(last_part, self.env[field.comodel_name])
+ # (6, 0, ['account.ref_name']) -> Command.Set([13])
+ elif command == Command.SET:
+ for subvalue_idx, subvalue in enumerate(last_part):
+ if isinstance(subvalue, str):
+ last_part[subvalue_idx] = self.ref(subvalue).id
+ elif command == Command.LINK and isinstance(_id, str):
+ value[i] = Command.link(self.ref(_id).id)
+ elif field.type in ('one2many', 'many2many') and isinstance(value, str):
+ values[fname] = [Command.set([
+ self.ref(v).id
+ for v in value.split(',')
+ if v
+ ])]
+ return values
+
+ def defer(all_data):
+ """Defer writing some relations if the related records don't exist yet."""
+ created_models = set()
+ while all_data:
+ (model, data), *all_data = all_data
+ to_delay = defaultdict(dict)
+ for xml_id, vals in data.items():
+ to_be_removed = []
+ for field_name in vals:
+ field = self.env[model]._fields.get(field_name, None)
+ if (field and
+ field.relational and
+ field.comodel_name not in created_models and
+ (field.comodel_name in dict(all_data) or field.comodel_name == model)
+ ):
+ to_be_removed.append(field_name)
+ to_delay[xml_id][field_name] = vals.get(field_name)
+ for field_name in to_be_removed:
+ del vals[field_name]
+ if any(to_delay.values()):
+ all_data.append((model, to_delay))
+ yield model, data
+ created_models.add(model)
+
+ created_vals = {}
+ for model, data in defer(list(data.items())):
+ translate_vals = []
+ create_vals = []
+
+ for xml_id, record in data.items():
+ # Extract the translations from the values
+ if any('@' in key for key in record):
+ translate_vals.append({
+ translate.split('@')[1]: value
+ for translate, value in record.items()
+ if '@' in translate and value
+ })
+ translate_vals[-1]['en_US'] = record['name']
+ else:
+ translate_vals.append(None)
+ for key in list(record):
+ if '@' in key:
+ del record[key]
+
+ # Manage ids given as database id or xml_id
+ if isinstance(xml_id, int):
+ record['id'] = xml_id
+ xml_id = False
+ else:
+ xml_id = f"{('account.' + str(self.env.company.id) + '_') if '.' not in xml_id else ''}{xml_id}"
+
+ create_vals.append({
+ 'xml_id': xml_id,
+ 'values': deref(record, self.env[model]),
+ 'noupdate': True,
+ })
+ created_vals[model] = created = self.env[model]._load_records(create_vals)
+
+ # Update the translations in batch for all languages
+ translate_vals = [(r.id, Json(t)) for t, r in zip(translate_vals, created) if t]
+ if translate_vals:
+ self.env.cr.execute(f"""
+ UPDATE "{self.env[model]._table}" AS m
+ SET "name" = t.value
+ FROM (
+ VALUES {', '.join(['(%s, %s::jsonb)'] * (len(translate_vals)))}
+ ) AS t(id, value)
+ WHERE m.id = t.id
+ """, [v for vals in translate_vals for v in vals])
+ return created_vals
+
+ def _post_load_data(self, template_code, company, template_data):
+ company = (company or self.env.company)
+ additional_properties = template_data.pop('additional_properties', {})
+
+ self._setup_utility_bank_accounts(template_code, company, template_data)
+
+ # Unaffected earnings account on the company (if not present yet)
company.get_unaffected_earnings_account()
- # set the default taxes on the company
- company.account_sale_tax_id = self.env['account.tax'].search([('type_tax_use', 'in', ('sale', 'all')), ('company_id', '=', company.id)], limit=1).id
- company.account_purchase_tax_id = self.env['account.tax'].search([('type_tax_use', 'in', ('purchase', 'all')), ('company_id', '=', company.id)], limit=1).id
+ # Set newly created Cash difference and Suspense accounts to the Cash and Bank journals
+ for journal in [self.ref(kind, raise_if_not_found=False) for kind in ('bank', 'cash')]:
+ if journal:
+ journal.suspense_account_id = journal.suspense_account_id or company.account_journal_suspense_account_id
+ journal.profit_account_id = journal.profit_account_id or company.default_cash_difference_income_account_id
+ journal.loss_account_id = journal.loss_account_id or company.default_cash_difference_expense_account_id
- return {}
+ # Set newly created journals as defaults for the company
+ if not company.tax_cash_basis_journal_id:
+ company.tax_cash_basis_journal_id = self.ref('caba')
+ if not company.currency_exchange_journal_id:
+ company.currency_exchange_journal_id = self.ref('exch')
- @api.model
- def existing_accounting(self, company_id):
- """ Returns True iff some accounting entries have already been made for
- the provided company (meaning hence that its chart of accounts cannot
- be changed anymore).
+ # Setup default Income/Expense Accounts on Sale/Purchase journals
+ sale_journal = self.ref("sale", raise_if_not_found=False)
+ if sale_journal and template_data.get('property_account_income_categ_id'):
+ sale_journal.default_account_id = self.ref(template_data.get('property_account_income_categ_id'))
+ purchase_journal = self.ref("purchase", raise_if_not_found=False)
+ if purchase_journal and template_data.get('property_account_expense_categ_id'):
+ purchase_journal.default_account_id = self.ref(template_data.get('property_account_expense_categ_id'))
+
+ # Set default Purchase and Sale taxes on the company
+ if not company.account_sale_tax_id:
+ company.account_sale_tax_id = self.env['account.tax'].search([
+ ('type_tax_use', 'in', ('sale', 'all')), ('company_id', '=', company.id)], limit=1).id
+ if not company.account_purchase_tax_id:
+ company.account_purchase_tax_id = self.env['account.tax'].search([
+ ('type_tax_use', 'in', ('purchase', 'all')), ('company_id', '=', company.id)], limit=1).id
+ # Display caba fields if there are caba taxes
+ if self.env['account.tax'].search([('tax_exigibility', '=', 'on_payment')]):
+ company.tax_exigibility = True
+
+ for field, model in {
+ **additional_properties,
+ 'property_account_receivable_id': 'res.partner',
+ 'property_account_payable_id': 'res.partner',
+ 'property_account_expense_categ_id': 'product.category',
+ 'property_account_income_categ_id': 'product.category',
+ 'property_account_expense_id': 'product.template',
+ 'property_account_income_id': 'product.template',
+ 'property_stock_journal': 'product.category',
+ 'property_stock_account_input_categ_id': 'product.category',
+ 'property_stock_account_output_categ_id': 'product.category',
+ 'property_stock_valuation_account_id': 'product.category',
+ }.items():
+ value = template_data.get(field)
+ if value and field in self.env[model]._fields:
+ self.env['ir.property']._set_default(field, model, self.ref(value).id, company=company)
+
+ def _get_chart_template_data(self, template_code):
+ template_data = defaultdict(lambda: defaultdict(dict))
+ template_data['res.company']
+ for code in [None] + self._get_parent_template(template_code):
+ for model, funcs in sorted(
+ self._template_register[code].items(),
+ key=lambda i: TEMPLATE_MODELS.index(i[0]) if i[0] in TEMPLATE_MODELS else 1000
+ ):
+ for func in funcs:
+ data = func(self, template_code)
+ if data is not None:
+ if model == 'template_data':
+ template_data[model].update(data)
+ else:
+ for xmlid, record in data.items():
+ template_data[model][xmlid].update(record)
+ return template_data
+
+ def _setup_utility_bank_accounts(self, template_code, company, template_data):
+ """Define basic bank accounts for the company.
+
+ - Suspense Account
+ - Outstanding Receipts/Payments Accounts
+ - Cash Difference Gain/Loss Accounts
+ - Liquidity Transfer Account
"""
- model_to_check = ['account.payment', 'account.bank.statement.line']
- for model in model_to_check:
- if self.env[model].sudo().search([('company_id', '=', company_id.id)], order="id DESC", limit=1):
- return True
- if self.env['account.move'].sudo().search([('company_id', '=', company_id.id), ('state', '!=', 'draft')], order="id DESC", limit=1):
- return True
- return False
-
- def _get_chart_parent_ids(self):
- """ Returns the IDs of all ancestor charts, including the chart itself.
- (inverse of child_of operator)
-
- :return: the IDS of all ancestor charts, including the chart itself.
- """
- chart_template = self
- result = [chart_template.id]
- while chart_template.parent_id:
- chart_template = chart_template.parent_id
- result.append(chart_template.id)
- return result
-
- def _create_bank_journals(self, company, acc_template_ref):
- '''
- This function creates bank journals and their account for each line
- data returned by the function _get_default_bank_journals_data.
-
- :param company: the company for which the wizard is running.
- :param acc_template_ref: the dictionary containing the mapping between the ids of account templates and the ids
- of the accounts that have been generated from them.
- '''
- self.ensure_one()
- bank_journals = self.env['account.journal']
- # Create the journals that will trigger the account.account creation
- for acc in self._get_default_bank_journals_data():
- bank_journals += self.env['account.journal'].create({
- 'name': acc['acc_name'],
- 'type': acc['account_type'],
- 'company_id': company.id,
- 'currency_id': acc.get('currency_id', self.env['res.currency']).id,
- 'sequence': 10,
- })
-
- return bank_journals
-
- @api.model
- def _get_default_bank_journals_data(self):
- """ Returns the data needed to create the default bank journals when
- installing this chart of accounts, in the form of a list of dictionaries.
- The allowed keys in these dictionaries are:
- - acc_name: string (mandatory)
- - account_type: 'cash' or 'bank' (mandatory)
- - currency_id (optional, only to be specified if != company.currency_id)
- """
- return [{'acc_name': _('Cash'), 'account_type': 'cash'}, {'acc_name': _('Bank'), 'account_type': 'bank'}]
-
- @api.model
- def generate_journals(self, acc_template_ref, company, journals_dict=None):
- """
- This method is used for creating journals.
-
- :param acc_template_ref: Account templates reference.
- :param company_id: company to generate journals for.
- :returns: True
- """
- JournalObj = self.env['account.journal']
- for vals_journal in self._prepare_all_journals(acc_template_ref, company, journals_dict=journals_dict):
- journal = JournalObj.create(vals_journal)
- if vals_journal['type'] == 'general' and vals_journal['code'] == _('EXCH'):
- company.write({'currency_exchange_journal_id': journal.id})
- if vals_journal['type'] == 'general' and vals_journal['code'] == _('CABA'):
- company.write({'tax_cash_basis_journal_id': journal.id})
- return True
-
- def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
- def _get_default_account(journal_vals, type='debit'):
- # Get the default accounts
- default_account = False
- if journal['type'] == 'sale':
- default_account = acc_template_ref.get(self.property_account_income_categ_id).id
- elif journal['type'] == 'purchase':
- default_account = acc_template_ref.get(self.property_account_expense_categ_id).id
-
- return default_account
-
- journals = [{'name': _('Customer Invoices'), 'type': 'sale', 'code': _('INV'), 'favorite': True, 'color': 11, 'sequence': 5},
- {'name': _('Vendor Bills'), 'type': 'purchase', 'code': _('BILL'), 'favorite': True, 'color': 11, 'sequence': 6},
- {'name': _('Miscellaneous Operations'), 'type': 'general', 'code': _('MISC'), 'favorite': True, 'sequence': 7},
- {'name': _('Exchange Difference'), 'type': 'general', 'code': _('EXCH'), 'favorite': False, 'sequence': 9},
- {'name': _('Cash Basis Taxes'), 'type': 'general', 'code': _('CABA'), 'favorite': False, 'sequence': 10}]
- if journals_dict != None:
- journals.extend(journals_dict)
-
- self.ensure_one()
- journal_data = []
- for journal in journals:
- vals = {
- 'type': journal['type'],
- 'name': journal['name'],
- 'code': journal['code'],
- 'company_id': company.id,
- 'default_account_id': _get_default_account(journal),
- 'show_on_dashboard': journal['favorite'],
- 'color': journal.get('color', False),
- 'sequence': journal['sequence']
- }
- journal_data.append(vals)
- return journal_data
-
- def generate_properties(self, acc_template_ref, company):
- """
- This method used for creating properties.
-
- :param acc_template_ref: Mapping between ids of account templates and real accounts created from them
- :param company_id: company to generate properties for.
- :returns: True
- """
- self.ensure_one()
- PropertyObj = self.env['ir.property']
- todo_list = [
- ('property_account_receivable_id', 'res.partner'),
- ('property_account_payable_id', 'res.partner'),
- ('property_account_expense_categ_id', 'product.category'),
- ('property_account_income_categ_id', 'product.category'),
- ('property_account_expense_id', 'product.template'),
- ('property_account_income_id', 'product.template'),
- ('property_tax_payable_account_id', 'account.tax.group'),
- ('property_tax_receivable_account_id', 'account.tax.group'),
- ('property_advance_tax_payment_account_id', 'account.tax.group'),
- ]
- for field, model in todo_list:
- account = self[field]
- value = acc_template_ref[account].id if account else False
- if value:
- PropertyObj._set_default(field, model, value, company=company)
-
- stock_properties = [
- 'property_stock_account_input_categ_id',
- 'property_stock_account_output_categ_id',
- 'property_stock_valuation_account_id',
- ]
- for stock_property in stock_properties:
- account = getattr(self, stock_property)
- value = account and acc_template_ref[account].id or False
- if value:
- company.write({stock_property: value})
- return True
-
- def _install_template(self, company, code_digits=None, obj_wizard=None, acc_ref=None, taxes_ref=None):
- """ Recursively load the template objects and create the real objects from them.
-
- :param company: company the wizard is running for
- :param code_digits: 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 acc_ref: Mapping between ids of account templates and real accounts created from them
- :param taxes_ref: Mapping between ids of tax templates and real taxes created from them
- :returns: 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,
- * a similar dictionary for mapping the tax templates and taxes, as second item,
- :rtype: tuple(dict, dict, dict)
- """
- self.ensure_one()
- if acc_ref is None:
- acc_ref = {}
- if taxes_ref is None:
- taxes_ref = {}
- if self.parent_id:
- tmp1, tmp2 = self.parent_id._install_template(company, code_digits=code_digits, acc_ref=acc_ref, taxes_ref=taxes_ref)
- acc_ref.update(tmp1)
- taxes_ref.update(tmp2)
- # Ensure, even if individually, that everything is translated according to the company's language.
- tmp1, tmp2 = self.with_context(lang=company.partner_id.lang)._load_template(company, code_digits=code_digits, account_ref=acc_ref, taxes_ref=taxes_ref)
- acc_ref.update(tmp1)
- taxes_ref.update(tmp2)
- return acc_ref, taxes_ref
-
- def _load_template(self, company, code_digits=None, account_ref=None, taxes_ref=None):
- """ Generate all the objects from the templates
-
- :param company: company the wizard is running for
- :param code_digits: number of digits the accounts code should have in the COA
- :param acc_ref: Mapping between ids of account templates and real accounts created from them
- :param taxes_ref: Mapping between ids of tax templates and real taxes created from them
- :returns: 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,
- * a similar dictionary for mapping the tax templates and taxes, as second item,
- :rtype: tuple(dict, dict, dict)
- """
- self.ensure_one()
- if account_ref is None:
- account_ref = {}
- if taxes_ref is None:
- taxes_ref = {}
- if not code_digits:
- code_digits = self.code_digits
- AccountTaxObj = self.env['account.tax']
-
- # Generate taxes from templates.
- generated_tax_res = self.with_context(active_test=False).tax_template_ids._generate_tax(company)
- taxes_ref.update(generated_tax_res['tax_template_to_tax'])
-
- # Generating Accounts from templates.
- account_template_ref = self.generate_account(taxes_ref, account_ref, code_digits, company)
- account_ref.update(account_template_ref)
-
- # Generate account groups, from template
- self.generate_account_groups(company)
-
- # writing account values after creation of accounts
- for tax, value in generated_tax_res['account_dict']['account.tax'].items():
- if value['cash_basis_transition_account_id']:
- tax.cash_basis_transition_account_id = account_ref.get(value['cash_basis_transition_account_id'])
-
- for repartition_line, value in generated_tax_res['account_dict']['account.tax.repartition.line'].items():
- if value['account_id']:
- repartition_line.account_id = account_ref.get(value['account_id'])
-
- # Set the company accounts
- self._load_company_accounts(account_ref, company)
-
- # Create Journals - Only done for root chart template
- if not self.parent_id:
- self.generate_journals(account_ref, company)
-
- # generate properties function
- self.generate_properties(account_ref, company)
-
- # Generate Fiscal Position , Fiscal Position Accounts and Fiscal Position Taxes from templates
- self.generate_fiscal_position(taxes_ref, account_ref, company)
-
- # Generate account operation template templates
- self.generate_account_reconcile_model(taxes_ref, account_ref, company)
-
- return account_ref, taxes_ref
-
- def _load_company_accounts(self, account_ref, company):
- # Set the default accounts on the company
- accounts = {
- 'default_cash_difference_income_account_id': self.default_cash_difference_income_account_id,
- 'default_cash_difference_expense_account_id': self.default_cash_difference_expense_account_id,
- 'account_journal_early_pay_discount_loss_account_id': self.account_journal_early_pay_discount_loss_account_id,
- 'account_journal_early_pay_discount_gain_account_id': self.account_journal_early_pay_discount_gain_account_id,
- 'account_journal_suspense_account_id': self.account_journal_suspense_account_id,
- 'account_journal_payment_debit_account_id': self.account_journal_payment_debit_account_id,
- 'account_journal_payment_credit_account_id': self.account_journal_payment_credit_account_id,
- 'account_cash_basis_base_account_id': self.property_cash_basis_base_account_id,
- 'account_default_pos_receivable_account_id': self.default_pos_receivable_account_id,
- 'income_currency_exchange_account_id': self.income_currency_exchange_account_id,
- 'expense_currency_exchange_account_id': self.expense_currency_exchange_account_id,
+ # Create utility bank_accounts
+ bank_prefix = company.bank_account_code_prefix
+ code_digits = int(template_data.get('code_digits', 6))
+ accounts_data = {
+ 'account_journal_suspense_account_id': {
+ 'name': _("Bank Suspense Account"),
+ 'prefix': bank_prefix,
+ 'code_digits': code_digits,
+ 'account_type': 'asset_current',
+ },
+ 'account_journal_payment_debit_account_id': {
+ 'name': _("Outstanding Receipts"),
+ 'prefix': bank_prefix,
+ 'code_digits': code_digits,
+ 'account_type': 'asset_current',
+ 'reconcile': True,
+ },
+ 'account_journal_payment_credit_account_id': {
+ 'name': _("Outstanding Payments"),
+ 'prefix': bank_prefix,
+ 'code_digits': code_digits,
+ 'account_type': 'asset_current',
+ 'reconcile': True,
+ },
+ 'account_journal_early_pay_discount_loss_account_id': {
+ 'name': _("Cash Discount Loss"),
+ 'code': '999998',
+ 'account_type': 'expense',
+ },
+ 'account_journal_early_pay_discount_gain_account_id': {
+ 'name': _("Cash Discount Gain"),
+ 'code': '999997',
+ 'account_type': 'income_other',
+ },
+ 'default_cash_difference_income_account_id': {
+ 'name': _("Cash Difference Gain"),
+ 'prefix': '999',
+ 'code_digits': code_digits,
+ 'account_type': 'expense',
+ 'tag_ids': [(6, 0, self.ref('account.account_tag_investing').ids)],
+ },
+ 'default_cash_difference_expense_account_id': {
+ 'name': _("Cash Difference Loss"),
+ 'prefix': '999',
+ 'code_digits': code_digits,
+ 'account_type': 'expense',
+ 'tag_ids': [(6, 0, self.ref('account.account_tag_investing').ids)],
+ },
+ 'transfer_account_id': {
+ 'name': _("Liquidity Transfer"),
+ 'prefix': company.transfer_account_code_prefix,
+ 'code_digits': code_digits,
+ 'account_type': 'asset_current',
+ 'reconcile': True,
+ },
}
- values = {}
+ for fname in list(accounts_data):
+ if company[fname]:
+ del accounts_data[fname]
- # The loop is to avoid writing when we have no values, thus avoiding erasing the account from the parent
- for key, account in accounts.items():
- if account_ref.get(account):
- values[key] = account_ref.get(account)
+ accounts = self.env['account.account'].create(accounts_data.values())
+ for company_attr_name, account in zip(accounts_data.keys(), accounts):
+ company[company_attr_name] = account
- company.write(values)
+ # --------------------------------------------------------------------------------
+ # Root template functions
+ # --------------------------------------------------------------------------------
- def create_record_with_xmlid(self, company, template, model, vals):
- return self._create_records_with_xmlid(model, [(template, vals)], company).id
+ @template(model='account.account')
+ def _get_account_account(self, template_code):
+ return self._parse_csv(template_code, 'account.account')
- def _create_records_with_xmlid(self, model, template_vals, company):
- """ Create records for the given model name with the given vals, and
- create xml ids based on each record's template and company id.
- """
- if not template_vals:
- return self.env[model]
- template_model = template_vals[0][0]
- template_ids = [template.id for template, vals in template_vals]
- template_xmlids = template_model.browse(template_ids).get_external_id()
- data_list = []
- for template, vals in template_vals:
- module, name = template_xmlids[template.id].split('.', 1)
- xml_id = "%s.%s_%s" % (module, company.id, name)
- data_list.append(dict(xml_id=xml_id, values=vals, noupdate=True))
- return self.env[model]._load_records(data_list)
+ @template(model='account.group')
+ def _get_account_group(self, template_code):
+ return self._parse_csv(template_code, 'account.group')
- @api.model
- def _load_records(self, data_list, update=False):
- # When creating a chart template create, for the liquidity transfer account
- # - an account.account.template: this allow to define account.reconcile.model.template objects refering that liquidity transfer
- # account although it's not existing in any xml file
- # - an entry in ir_model_data: this allow to still use the method create_record_with_xmlid() and don't make any difference between
- # regular accounts created and that liquidity transfer account
- records = super(AccountChartTemplate, self)._load_records(data_list, update)
- account_data_list = []
- for data, record in zip(data_list, records):
- # Create the transfer account only for leaf chart template in the hierarchy.
- if record.parent_id:
- continue
- if data.get('xml_id'):
- account_xml_id = data['xml_id'] + '_liquidity_transfer'
- if not self.env.ref(account_xml_id, raise_if_not_found=False):
- account_vals = record._prepare_transfer_account_template()
- account_data_list.append(dict(
- xml_id=account_xml_id,
- values=account_vals,
- noupdate=data.get('noupdate'),
- ))
- self.env['account.account.template']._load_records(account_data_list, update)
- return records
+ @template(model='account.tax.group')
+ def _get_account_tax_group(self, template_code):
+ return self._parse_csv(template_code, 'account.tax.group')
- def _get_account_vals(self, company, account_template, code_acc, tax_template_ref):
- """ This method generates a dictionary of all the values for the account that will be created.
- """
- self.ensure_one()
- tax_ids = []
- for tax in account_template.tax_ids:
- tax_ids.append(tax_template_ref[tax].id)
- val = {
- 'name': account_template.name,
- 'currency_id': account_template.currency_id and account_template.currency_id.id or False,
- 'code': code_acc,
- 'account_type': account_template.account_type or False,
- 'reconcile': account_template.reconcile,
- 'note': account_template.note,
- 'tax_ids': [(6, 0, tax_ids)],
- 'company_id': company.id,
- 'tag_ids': [(6, 0, [t.id for t in account_template.tag_ids])],
- }
- return val
+ @template(model='account.tax')
+ def _get_account_tax(self, template_code):
+ tax_data = self._parse_csv(template_code, 'account.tax')
+ self._deref_account_tags(template_code, tax_data)
+ return tax_data
- def generate_account(self, tax_template_ref, acc_template_ref, code_digits, company):
- """ This method generates accounts from account templates.
+ @template(model='account.fiscal.position')
+ def _get_account_fiscal_position(self, template_code):
+ return self._parse_csv(template_code, 'account.fiscal.position')
- :param tax_template_ref: Taxes templates reference for write taxes_id in account_account.
- :param acc_template_ref: dictionary containing the mapping between the account templates and generated accounts (will be populated)
- :param code_digits: number of digits to use for account code.
- :param company_id: company to generate accounts for.
- :returns: return acc_template_ref for reference purpose.
- :rtype: dict
- """
- self.ensure_one()
- account_tmpl_obj = self.env['account.account.template']
- acc_template = account_tmpl_obj.search([('nocreate', '!=', True), ('chart_template_id', '=', self.id)], order='id')
- template_vals = []
- for account_template in acc_template:
- code_main = account_template.code and len(account_template.code) or 0
- code_acc = account_template.code or ''
- if code_main > 0 and code_main <= code_digits:
- code_acc = str(code_acc) + (str('0'*(code_digits-code_main)))
- vals = self._get_account_vals(company, account_template, code_acc, tax_template_ref)
- template_vals.append((account_template, vals))
- accounts = self._create_records_with_xmlid('account.account', template_vals, company)
- for template, account in zip(acc_template, accounts):
- acc_template_ref[template] = account
- return acc_template_ref
-
- def generate_account_groups(self, company):
- """ This method generates account groups from account groups templates.
- :param company: company to generate the account groups for
- """
- self.ensure_one()
- group_templates = self.env['account.group.template'].search([('chart_template_id', '=', self.id)])
- template_vals = []
- for group_template in group_templates:
- vals = {
- 'name': group_template.name,
- 'code_prefix_start': group_template.code_prefix_start,
- 'code_prefix_end': group_template.code_prefix_end,
- 'company_id': company.id,
- }
- template_vals.append((group_template, vals))
- groups = self._create_records_with_xmlid('account.group', template_vals, company)
-
- def _prepare_reconcile_model_vals(self, company, account_reconcile_model, acc_template_ref, tax_template_ref):
- """ This method generates a dictionary of all the values for the account.reconcile.model that will be created.
- """
- self.ensure_one()
- account_reconcile_model_lines = self.env['account.reconcile.model.line.template'].search([
- ('model_id', '=', account_reconcile_model.id)
- ])
+ @template(model='account.journal')
+ def _get_account_journal(self, template_code):
return {
- 'name': account_reconcile_model.name,
- 'sequence': account_reconcile_model.sequence,
- 'company_id': company.id,
- 'rule_type': account_reconcile_model.rule_type,
- 'auto_reconcile': account_reconcile_model.auto_reconcile,
- 'to_check': account_reconcile_model.to_check,
- 'match_journal_ids': [(6, None, account_reconcile_model.match_journal_ids.ids)],
- 'match_nature': account_reconcile_model.match_nature,
- 'match_amount': account_reconcile_model.match_amount,
- 'match_amount_min': account_reconcile_model.match_amount_min,
- 'match_amount_max': account_reconcile_model.match_amount_max,
- 'match_label': account_reconcile_model.match_label,
- 'match_label_param': account_reconcile_model.match_label_param,
- 'match_note': account_reconcile_model.match_note,
- 'match_note_param': account_reconcile_model.match_note_param,
- 'match_transaction_type': account_reconcile_model.match_transaction_type,
- 'match_transaction_type_param': account_reconcile_model.match_transaction_type_param,
- 'match_same_currency': account_reconcile_model.match_same_currency,
- 'allow_payment_tolerance': account_reconcile_model.allow_payment_tolerance,
- 'payment_tolerance_type': account_reconcile_model.payment_tolerance_type,
- 'payment_tolerance_param': account_reconcile_model.payment_tolerance_param,
- 'match_partner': account_reconcile_model.match_partner,
- 'match_partner_ids': [(6, None, account_reconcile_model.match_partner_ids.ids)],
- 'match_partner_category_ids': [(6, None, account_reconcile_model.match_partner_category_ids.ids)],
- 'line_ids': [(0, 0, {
- 'account_id': acc_template_ref[line.account_id].id,
- 'label': line.label,
- 'amount_type': line.amount_type,
- 'force_tax_included': line.force_tax_included,
- 'amount_string': line.amount_string,
- 'tax_ids': [[4, tax_template_ref[tax].id, 0] for tax in line.tax_ids],
- }) for line in account_reconcile_model_lines],
+ "sale": {
+ 'name': _('Customer Invoices'),
+ 'type': 'sale',
+ 'code': _('INV'),
+ 'show_on_dashboard': True,
+ 'color': 11,
+ 'sequence': 5,
+ },
+ "purchase": {
+ 'name': _('Vendor Bills'),
+ 'type': 'purchase',
+ 'code': _('BILL'),
+ 'show_on_dashboard': True,
+ 'color': 11,
+ 'sequence': 6,
+ },
+ "general": {
+ 'name': _('Miscellaneous Operations'),
+ 'type': 'general',
+ 'code': _('MISC'),
+ 'show_on_dashboard': True,
+ 'sequence': 7,
+ },
+ "exch": {
+ 'name': _('Exchange Difference'),
+ 'type': 'general',
+ 'code': _('EXCH'),
+ 'show_on_dashboard': False,
+ 'sequence': 9,
+ },
+ "caba": {
+ 'name': _('Cash Basis Taxes'),
+ 'type': 'general',
+ 'code': _('CABA'),
+ 'show_on_dashboard': False,
+ 'sequence': 10,
+ },
+ "bank": {
+ 'name': _('Bank'),
+ 'type': 'bank',
+ 'show_on_dashboard': True,
+ },
+ "cash": {
+ 'name': _('Cash'),
+ 'type': 'cash',
+ 'show_on_dashboard': True,
+ },
}
- def generate_account_reconcile_model(self, tax_template_ref, acc_template_ref, company):
- """ This method creates account reconcile models
-
- :param tax_template_ref: Taxes templates reference for write taxes_id in account_account.
- :param acc_template_ref: dictionary with the mapping between the account templates and the real accounts.
- :param company_id: company to create models for
- :returns: return new_account_reconcile_model for reference purpose.
- :rtype: dict
- """
- self.ensure_one()
- account_reconcile_models = self.env['account.reconcile.model.template'].search([
- ('chart_template_id', '=', self.id)
- ])
- for account_reconcile_model in account_reconcile_models:
- vals = self._prepare_reconcile_model_vals(company, account_reconcile_model, acc_template_ref, tax_template_ref)
- self.create_record_with_xmlid(company, account_reconcile_model, 'account.reconcile.model', vals)
-
- # Create default rules for the reconciliation widget matching invoices automatically.
- if not self.parent_id:
- self.env['account.reconcile.model'].sudo().create({
+ @template(model='account.reconcile.model')
+ def _get_account_reconcile_model(self, template_code):
+ return {
+ "reconcile_perfect_match": {
"name": _('Invoices/Bills Perfect Match'),
- "sequence": '1',
+ "sequence": 1,
"rule_type": 'invoice_matching',
"auto_reconcile": True,
"match_nature": 'both',
@@ -1000,661 +691,88 @@ class AccountChartTemplate(models.Model):
"payment_tolerance_type": 'percentage',
"payment_tolerance_param": 0,
"match_partner": True,
- "company_id": company.id,
- })
-
- self.env['account.reconcile.model'].sudo().create({
+ },
+ "reconcile_partial_underpaid": {
"name": _('Invoices/Bills Partial Match if Underpaid'),
- "sequence": '2',
+ "sequence": 2,
"rule_type": 'invoice_matching',
"auto_reconcile": False,
"match_nature": 'both',
"match_same_currency": True,
"allow_payment_tolerance": False,
"match_partner": True,
- "company_id": company.id,
- })
-
- return True
-
- def _get_fp_vals(self, company, position):
- return {
- 'company_id': company.id,
- 'sequence': position.sequence,
- 'name': position.name,
- 'note': position.note,
- 'auto_apply': position.auto_apply,
- 'vat_required': position.vat_required,
- 'country_id': position.country_id.id,
- 'country_group_id': position.country_group_id.id,
- 'state_ids': position.state_ids and [(6,0, position.state_ids.ids)] or [],
- 'zip_from': position.zip_from,
- 'zip_to': position.zip_to,
- }
-
- def generate_fiscal_position(self, tax_template_ref, acc_template_ref, company):
- """ This method generates Fiscal Position, Fiscal Position Accounts
- and Fiscal Position Taxes from templates.
-
- :param taxes_ids: Taxes templates reference for generating account.fiscal.position.tax.
- :param acc_template_ref: Account templates reference for generating account.fiscal.position.account.
- :param company_id: the company to generate fiscal position data for
- :returns: True
- """
- self.ensure_one()
- positions = self.env['account.fiscal.position.template'].search([('chart_template_id', '=', self.id)])
-
- # first create fiscal positions in batch
- template_vals = []
- for position in positions:
- fp_vals = self._get_fp_vals(company, position)
- template_vals.append((position, fp_vals))
- fps = self._create_records_with_xmlid('account.fiscal.position', template_vals, company)
-
- # then create fiscal position taxes and accounts
- tax_template_vals = []
- account_template_vals = []
- for position, fp in zip(positions, fps):
- for tax in position.tax_ids:
- tax_template_vals.append((tax, {
- 'tax_src_id': tax_template_ref[tax.tax_src_id].id,
- 'tax_dest_id': tax.tax_dest_id and tax_template_ref[tax.tax_dest_id].id or False,
- 'position_id': fp.id,
- }))
- for acc in position.account_ids:
- account_template_vals.append((acc, {
- 'account_src_id': acc_template_ref[acc.account_src_id].id,
- 'account_dest_id': acc_template_ref[acc.account_dest_id].id,
- 'position_id': fp.id,
- }))
- self._create_records_with_xmlid('account.fiscal.position.tax', tax_template_vals, company)
- self._create_records_with_xmlid('account.fiscal.position.account', account_template_vals, company)
-
- return True
-
-
-class AccountTaxTemplate(models.Model):
- _name = 'account.tax.template'
- _description = 'Templates for Taxes'
- _order = 'id'
-
- chart_template_id = fields.Many2one('account.chart.template', string='Chart Template', required=True)
-
- name = fields.Char(string='Tax Name', required=True)
- type_tax_use = fields.Selection(TYPE_TAX_USE, string='Tax Type', required=True, default="sale",
- help="Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group.")
- tax_scope = fields.Selection([('service', 'Service'), ('consu', 'Consumable')], help="Restrict the use of taxes to a type of product.")
- amount_type = fields.Selection(default='percent', string="Tax Computation", required=True,
- selection=[('group', 'Group of Taxes'), ('fixed', 'Fixed'), ('percent', 'Percentage of Price'), ('division', 'Percentage of Price Tax Included')])
- active = fields.Boolean(default=True, help="Set active to false to hide the tax without removing it.")
- children_tax_ids = fields.Many2many('account.tax.template', 'account_tax_template_filiation_rel', 'parent_tax', 'child_tax', string='Children Taxes')
- sequence = fields.Integer(required=True, default=1,
- help="The sequence field is used to define order in which the tax lines are applied.")
- amount = fields.Float(required=True, digits=(16, 4), default=0)
- description = fields.Char(string='Display on Invoices')
- price_include = fields.Boolean(string='Included in Price', default=False,
- help="Check this if the price you use on the product and invoices includes this tax.")
- include_base_amount = fields.Boolean(string='Affect Subsequent Taxes', default=False,
- help="If set, taxes with a higher sequence than this one will be affected by it, provided they accept it.")
- is_base_affected = fields.Boolean(
- string="Base Affected by Previous Taxes",
- default=True,
- help="If set, taxes with a lower sequence might affect this one, provided they try to do it.")
- analytic = fields.Boolean(string="Analytic Cost", help="If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)")
- invoice_repartition_line_ids = fields.One2many(string="Repartition for Invoices", comodel_name="account.tax.repartition.line.template", inverse_name="invoice_tax_id", copy=True, help="Repartition when the tax is used on an invoice")
- refund_repartition_line_ids = fields.One2many(string="Repartition for Refund Invoices", comodel_name="account.tax.repartition.line.template", inverse_name="refund_tax_id", copy=True, help="Repartition when the tax is used on a refund")
- tax_group_id = fields.Many2one('account.tax.group', string="Tax Group")
- tax_exigibility = fields.Selection(
- [('on_invoice', 'Based on Invoice'),
- ('on_payment', 'Based on Payment'),
- ], string='Tax Due', default='on_invoice',
- help="Based on Invoice: the tax is due as soon as the invoice is validated.\n"
- "Based on Payment: the tax is due as soon as the payment of the invoice is received.")
- cash_basis_transition_account_id = fields.Many2one(
- comodel_name='account.account.template',
- string="Cash Basis Transition Account",
- domain=[('deprecated', '=', False)],
- help="Account used to transition the tax amount for cash basis taxes. It will contain the tax amount as long as the original invoice has not been reconciled ; at reconciliation, this amount cancelled on this account and put on the regular tax account.")
-
- _sql_constraints = [
- ('name_company_uniq', 'unique(name, type_tax_use, tax_scope, chart_template_id)', 'Tax names must be unique !'),
- ]
-
- @api.depends('name', 'description')
- def name_get(self):
- res = []
- for record in self:
- name = record.description and record.description or record.name
- res.append((record.id, name))
- return res
-
- @api.model
- def _try_instantiating_foreign_taxes(self, country, company):
- """ This function is called in multivat setup, when a company needs to submit a
- tax report in a foreign country.
-
- It searches for tax templates in the provided countries and instantiates the
- ones it find in the provided company.
-
- Tax accounts are not kept from the templates (this wouldn't make sense,
- as they don't belong to the same CoA as the one installed on the company).
- Instead, we search existing tax accounts for approximately equivalent accounts
- and use their prefix to create new accounts. Doing this gives a roughly correct suggestion
- that then needs to be reviewed by the user to ensure its consistency.
- It is intended as a shortcut to avoid hours of encoding, not as an out-of-the-box, always
- correct solution.
- """
- def create_foreign_tax_account(existing_account, additional_label):
- new_code = self.env['account.account']._search_new_account_code(existing_account.company_id, len(existing_account.code), existing_account.code[:-2])
- return self.env['account.account'].create({
- 'name': f"{existing_account.name} - {additional_label}",
- 'code': new_code,
- 'account_type': existing_account.account_type,
- 'company_id': existing_account.company_id.id,
- })
-
- def get_existing_tax_account(foreign_tax_rep_line, force_tax=None):
- company = foreign_tax_rep_line.company_id
- sign_comparator = '<' if foreign_tax_rep_line.factor_percent < 0 else '>'
-
- search_domain = [
- ('account_id', '!=', False),
- ('factor_percent', sign_comparator, 0),
- ('company_id', '=', company.id),
- '|',
- '&', ('invoice_tax_id.type_tax_use', '=', tax_rep_line.invoice_tax_id.type_tax_use),
- ('invoice_tax_id.country_id', '=', company.account_fiscal_country_id.id),
- '&', ('refund_tax_id.type_tax_use', '=', tax_rep_line.refund_tax_id.type_tax_use),
- ('refund_tax_id.country_id', '=', company.account_fiscal_country_id.id),
- ]
-
- if force_tax:
- search_domain += [
- '|', ('invoice_tax_id', 'in', force_tax.ids),
- ('refund_tax_id', 'in', force_tax.ids),
- ]
-
- return self.env['account.tax.repartition.line'].search(search_domain, limit=1).account_id
-
-
- taxes_in_country = self.env['account.tax'].search([
- ('country_id', '=', country.id),
- ('company_id', '=', company.id)
- ])
-
- if taxes_in_country:
- return
-
- templates_to_instantiate = self.env['account.tax.template'].with_context(active_test=False).search([('chart_template_id.country_id', '=', country.id)])
- default_company_taxes = company.account_sale_tax_id + company.account_purchase_tax_id
- rep_lines_accounts = templates_to_instantiate._generate_tax(company)['account_dict']
-
- new_accounts_map = {}
-
- # Handle tax repartition line accounts
- tax_rep_lines_accounts_dict = rep_lines_accounts['account.tax.repartition.line']
- for tax_rep_line, account_dict in tax_rep_lines_accounts_dict.items():
- account_template = account_dict['account_id']
- rep_account = new_accounts_map.get(account_template)
-
- if not rep_account:
-
- existing_account = get_existing_tax_account(tax_rep_line, force_tax=default_company_taxes)
-
- if not existing_account:
- # If the default taxes were not enough to provide the account
- # we need, search on all other taxes.
- existing_account = get_existing_tax_account(tax_rep_line)
-
- if existing_account:
- rep_account = create_foreign_tax_account(existing_account, _("Foreign tax account (%s)", country.code))
- new_accounts_map[account_template] = rep_account
-
- tax_rep_line.account_id = rep_account
-
- # Handle cash basis taxes transtion account
- caba_transition_dict = rep_lines_accounts['account.tax']
- for tax, account_dict in caba_transition_dict.items():
- transition_account_template = account_dict['cash_basis_transition_account_id']
-
- if transition_account_template:
- transition_account = new_accounts_map.get(transition_account_template)
-
- if not transition_account:
- rep_lines = tax.invoice_repartition_line_ids + tax.refund_repartition_line_ids
- tax_accounts = rep_lines.account_id
-
- if tax_accounts:
- transition_account = create_foreign_tax_account(tax_accounts[0], _("Cash basis transition account"))
-
- tax.cash_basis_transition_account_id = transition_account
-
- # Setup tax closing accounts on foreign tax groups ; we don't want to use the domestic accounts
- groups = self.env['account.tax.group'].search([('country_id', '=', country.id)])
- group_property_fields = [
- 'property_tax_payable_account_id',
- 'property_tax_receivable_account_id',
- 'property_advance_tax_payment_account_id'
- ]
-
- property_company = self.env['ir.property'].with_company(company)
- groups_company = groups.with_company(company)
- for property_field in group_property_fields:
- default_acc = property_company._get(property_field, 'account.tax.group')
- if default_acc:
- groups_company.write({
- property_field: create_foreign_tax_account(default_acc, _("Foreign account (%s)", country.code))
- })
-
- def _get_tax_vals(self, company, tax_template_to_tax):
- """ This method generates a dictionary of all the values for the tax that will be created.
- """
- # Compute children tax ids
- children_ids = []
- for child_tax in self.children_tax_ids:
- if tax_template_to_tax.get(child_tax):
- children_ids.append(tax_template_to_tax[child_tax].id)
- self.ensure_one()
- val = {
- 'name': self.name,
- 'type_tax_use': self.type_tax_use,
- 'tax_scope': self.tax_scope,
- 'amount_type': self.amount_type,
- 'active': self.active,
- 'company_id': company.id,
- 'sequence': self.sequence,
- 'amount': self.amount,
- 'description': self.description,
- 'price_include': self.price_include,
- 'include_base_amount': self.include_base_amount,
- 'is_base_affected': self.is_base_affected,
- 'analytic': self.analytic,
- 'children_tax_ids': [(6, 0, children_ids)],
- 'tax_exigibility': self.tax_exigibility,
- }
-
- # We add repartition lines if there are some, so that if there are none,
- # default_get is called and creates the default ones properly.
- if self.invoice_repartition_line_ids:
- val['invoice_repartition_line_ids'] = self.invoice_repartition_line_ids.get_repartition_line_create_vals(company)
- if self.refund_repartition_line_ids:
- val['refund_repartition_line_ids'] = self.refund_repartition_line_ids.get_repartition_line_create_vals(company)
-
- if self.tax_group_id:
- val['tax_group_id'] = self.tax_group_id.id
- return val
-
- def _get_tax_vals_complete(self, company):
- """
- Returns a dict of values to be used to create the tax corresponding to the template, assuming the
- account.account objects were already created.
- It differs from function _get_tax_vals because here, we replace the references to account.template by their
- corresponding account.account ids ('cash_basis_transition_account_id' and 'account_id' in the invoice and
- refund repartition lines)
- (Used by upgrade/migrations/util/accounting)
- """
- vals = self._get_tax_vals(company, {})
- vals.pop("children_tax_ids", None)
-
- if self.cash_basis_transition_account_id.code:
- cash_basis_account_id = self.env['account.account'].search([
- ('code', '=like', self.cash_basis_transition_account_id.code + '%'),
- ('company_id', '=', company.id)
- ], limit=1)
- if cash_basis_account_id:
- vals.update({"cash_basis_transition_account_id": cash_basis_account_id.id})
-
- vals.update({
- "invoice_repartition_line_ids": self.invoice_repartition_line_ids._get_repartition_line_create_vals_complete(company),
- "refund_repartition_line_ids": self.refund_repartition_line_ids._get_repartition_line_create_vals_complete(company),
- })
- return vals
-
- def _generate_tax(self, company):
- """ This method generate taxes from templates.
-
- :param company: the company for which the taxes should be created from templates in self
- :returns: {
- 'tax_template_to_tax': mapping between tax template and the newly generated taxes corresponding,
- 'account_dict': dictionary containing a to-do list with all the accounts to assign on new taxes
}
- """
- # default_company_id is needed in context to allow creation of default
- # repartition lines on taxes
- ChartTemplate = self.env['account.chart.template'].with_context(default_company_id=company.id)
- todo_dict = {'account.tax': {}, 'account.tax.repartition.line': {}}
- tax_template_to_tax = {}
-
- templates_todo = list(self)
- while templates_todo:
- templates = templates_todo
- templates_todo = []
-
- # create taxes in batch
- tax_template_vals = []
- for template in templates:
- if all(child in tax_template_to_tax for child in template.children_tax_ids):
- vals = template._get_tax_vals(company, tax_template_to_tax)
-
- if self.chart_template_id.country_id:
- vals['country_id'] = self.chart_template_id.country_id.id
- elif company.account_fiscal_country_id:
- vals['country_id'] = company.account_fiscal_country_id.id
- else:
- # Will happen for generic CoAs such as syscohada (they are available for multiple countries, and don't have any country_id)
- raise UserError(_("Please first define a fiscal country for company %s.", company.name))
-
- tax_template_vals.append((template, vals))
- else:
- # defer the creation of this tax to the next batch
- templates_todo.append(template)
- taxes = ChartTemplate._create_records_with_xmlid('account.tax', tax_template_vals, company)
-
- # fill in tax_template_to_tax and todo_dict
- for tax, (template, vals) in zip(taxes, tax_template_vals):
- tax_template_to_tax[template] = tax
- # Since the accounts have not been created yet, we have to wait before filling these fields
- todo_dict['account.tax'][tax] = {
- 'cash_basis_transition_account_id': template.cash_basis_transition_account_id,
- }
-
- # We also have to delay the assignation of accounts to repartition lines
- # The below code assigns the account_id to the repartition lines according
- # to the corresponding repartition line in the template, based on the order.
- # As we just created the repartition lines, tax.invoice_repartition_line_ids is not well sorted.
- # But we can force the sort by calling sort()
- all_tax_rep_lines = tax.invoice_repartition_line_ids.sorted() + tax.refund_repartition_line_ids.sorted()
- all_template_rep_lines = template.invoice_repartition_line_ids + template.refund_repartition_line_ids
- for i in range(0, len(all_template_rep_lines)):
- # We assume template and tax repartition lines are in the same order
- template_account = all_template_rep_lines[i].account_id
- if template_account:
- todo_dict['account.tax.repartition.line'][all_tax_rep_lines[i]] = {
- 'account_id': template_account,
- }
-
- if any(template.tax_exigibility == 'on_payment' for template in self):
- # When a CoA is being installed automatically and if it is creating account tax(es) whose field `Use Cash Basis`(tax_exigibility) is set to True by default
- # (example of such CoA's are l10n_fr and l10n_mx) then in the `Accounting Settings` the option `Cash Basis` should be checked by default.
- company.tax_exigibility = True
-
- return {
- 'tax_template_to_tax': tax_template_to_tax,
- 'account_dict': todo_dict
}
-# Tax Repartition Line Template
+ # --------------------------------------------------------------------------------
+ # Tooling
+ # --------------------------------------------------------------------------------
+ def ref(self, xmlid, raise_if_not_found=True):
+ return self.env.ref(f"account.{self.env.company.id}_{xmlid}" if xmlid and '.' not in xmlid else xmlid, raise_if_not_found)
-class AccountTaxRepartitionLineTemplate(models.Model):
- _name = "account.tax.repartition.line.template"
- _description = "Tax Repartition Line Template"
+ def _get_parent_template(self, code):
+ parents = []
+ template_mapping = self._get_chart_template_mapping(get_all=True)
+ while template_mapping.get(code):
+ parents.append(code)
+ code = template_mapping.get(code).get('parent')
+ return parents
- factor_percent = fields.Float(
- string="%",
- required=True,
- default=100,
- help="Factor to apply on the account move lines generated from this distribution line, in percents",
- )
- repartition_type = fields.Selection(string="Based On", selection=[('base', 'Base'), ('tax', 'of tax')], required=True, default='tax', help="Base on which the factor will be applied.")
- account_id = fields.Many2one(string="Account", comodel_name='account.account.template', help="Account on which to post the tax amount")
- invoice_tax_id = fields.Many2one(comodel_name='account.tax.template', help="The tax set to apply this distribution on invoices. Mutually exclusive with refund_tax_id")
- refund_tax_id = fields.Many2one(comodel_name='account.tax.template', help="The tax set to apply this distribution on refund invoices. Mutually exclusive with invoice_tax_id")
- tag_ids = fields.Many2many(string="Financial Tags", relation='account_tax_repartition_financial_tags', comodel_name='account.account.tag', copy=True, help="Additional tags that will be assigned by this repartition line for use in domains")
- use_in_tax_closing = fields.Boolean(string="Tax Closing Entry")
+ def _get_tag_mapper(self, template_code):
+ tags = {x.name: x.id for x in self.env['account.account.tag'].search([
+ ('applicability', '=', 'taxes'),
+ ('country_id', '=', self._get_chart_template_mapping()[template_code]['country_id']),
+ ])}
+ return lambda *args: [tags[re.sub(r'\s+', ' ', x.strip())] for x in args]
+ def _deref_account_tags(self, template_code, tax_data):
+ mapper = self._get_tag_mapper(template_code)
+ for tax in tax_data.values():
+ for fname in ('invoice_repartition_line_ids', 'refund_repartition_line_ids', 'repartition_line_ids'):
+ if tax.get(fname):
+ for _command, _id, repartition in tax[fname]:
+ tags = repartition.get('tag_ids')
+ if isinstance(tags, str) and not re.match(r"^(\w+\.\w+,)*\w+\.\w+$", tags):
+ repartition['tag_ids'] = [Command.set(mapper(*tags.split(TAX_TAG_DELIMITER)))]
- # These last two fields are helpers used to ease the declaration of account.account.tag objects in XML.
- # They are directly linked to account.tax.report.expression objects, which create corresponding + and - tags
- # at creation. This way, we avoid declaring + and - separately every time.
- plus_report_expression_ids = fields.Many2many(string="Plus Tax Report Expressions", relation='account_tax_rep_template_plus', comodel_name='account.report.expression', copy=True, help="Tax report expressions whose '+' tag will be assigned to move lines by this repartition line")
- minus_report_expression_ids = fields.Many2many(string="Minus Report Expressions", relation='account_tax_rep_template_minus', comodel_name='account.report.expression', copy=True, help="Tax report expressions whose '-' tag will be assigned to move lines by this repartition line")
+ def _parse_csv(self, template_code, model, module=None):
+ Model = self.env[model]
+ model_fields = Model._fields
- @api.model_create_multi
- def create(self, vals_list):
- for vals in vals_list:
- if vals.get('use_in_tax_closing') is None:
- vals['use_in_tax_closing'] = False
- if vals.get('account_id'):
- account_type = self.env['account.account.template'].browse(vals.get('account_id')).account_type
- if account_type:
- vals['use_in_tax_closing'] = not (account_type.startswith('income') or account_type.startswith('expense'))
+ if module is None:
+ module = self._get_chart_template_mapping().get(template_code)['module']
+ assert re.fullmatch(r"[a-z0-9_]+", module)
- return super().create(vals_list)
-
- @api.constrains('invoice_tax_id', 'refund_tax_id')
- def validate_tax_template_link(self):
- for record in self:
- if record.invoice_tax_id and record.refund_tax_id:
- raise ValidationError(_("Tax distribution line templates should apply to either invoices or refunds, not both at the same time. invoice_tax_id and refund_tax_id should not be set together."))
-
- @api.constrains('plus_report_expression_ids', 'minus_report_expression_ids')
- def _validate_report_expressions(self):
- for record in self:
- all_engines = set((record.plus_report_expression_ids + record.minus_report_expression_ids).mapped('engine'))
- if all_engines and all_engines != {'tax_tags'}:
- raise ValidationError(_("Only 'tax_tags' expressions can be linked to a tax repartition line template."))
-
- def get_repartition_line_create_vals(self, company):
- rslt = [Command.clear()]
- for record in self:
- rslt.append(Command.create({
- 'factor_percent': record.factor_percent,
- 'repartition_type': record.repartition_type,
- 'tag_ids': [Command.set(record._get_tags_to_add().ids)],
- 'company_id': company.id,
- 'use_in_tax_closing': record.use_in_tax_closing
- }))
- return rslt
-
- def _get_repartition_line_create_vals_complete(self, company):
- """
- This function returns a list of values to create the repartition lines of a tax based on
- one or several account.tax.repartition.line.template. It mimicks the function get_repartition_line_create_vals
- but adds the missing field account_id (account.account)
-
- Returns a list of (0,0, x) ORM commands to create the repartition lines starting with a (5,0,0)
- command to clear the repartition.
- """
- rslt = self.get_repartition_line_create_vals(company)
- for idx, template_line in zip(range(1, len(rslt)), self): # ignore first ORM command ( (5, 0, 0) )
- account_id = False
- if template_line.account_id:
- # take the first account.account which code begins with the correct code
- account_id = self.env['account.account'].search([
- ('code', '=like', template_line.account_id.code + '%'),
- ('company_id', '=', company.id)
- ], limit=1).id
- if not account_id:
- _logger.warning("The account with code '%s' was not found but is supposed to be linked to a tax",
- template_line.account_id.code)
- rslt[idx][2].update({
- "account_id": account_id,
- })
- return rslt
-
- def _get_tags_to_add(self):
- self.ensure_one()
- tags_to_add = self.tag_ids
-
- domains = []
- for sign, report_expressions in (('+', self.plus_report_expression_ids), ('-', self.minus_report_expression_ids)):
- for report_expression in report_expressions:
- country = report_expression.report_line_id.report_id.country_id
- domains.append(self.env['account.account.tag']._get_tax_tags_domain(report_expression.formula, country.id, sign=sign))
-
- if domains:
- tags_to_add |= self.env['account.account.tag'].with_context(active_test=False).search(osv.expression.OR(domains))
-
- return tags_to_add
-
-class AccountFiscalPositionTemplate(models.Model):
- _name = 'account.fiscal.position.template'
- _description = 'Template for Fiscal Position'
-
- sequence = fields.Integer()
- name = fields.Char(string='Fiscal Position Template', required=True)
- chart_template_id = fields.Many2one('account.chart.template', string='Chart Template', required=True)
- account_ids = fields.One2many('account.fiscal.position.account.template', 'position_id', string='Account Mapping')
- tax_ids = fields.One2many('account.fiscal.position.tax.template', 'position_id', string='Tax Mapping')
- note = fields.Text(string='Notes')
- auto_apply = fields.Boolean(string='Detect Automatically', help="Apply tax & account mappings on invoices automatically if the matching criterias (VAT/Country) are met.")
- vat_required = fields.Boolean(string='VAT required', help="Apply only if partner has a VAT number.")
- country_id = fields.Many2one('res.country', string='Country',
- help="Apply only if delivery country matches.")
- country_group_id = fields.Many2one('res.country.group', string='Country Group',
- help="Apply only if delivery country matches the group.")
- state_ids = fields.Many2many('res.country.state', string='Federal States')
- zip_from = fields.Char(string='Zip Range From')
- zip_to = fields.Char(string='Zip Range To')
-
-
-class AccountFiscalPositionTaxTemplate(models.Model):
- _name = 'account.fiscal.position.tax.template'
- _description = 'Tax Mapping Template of Fiscal Position'
- _rec_name = 'position_id'
-
- position_id = fields.Many2one('account.fiscal.position.template', string='Fiscal Position', required=True, ondelete='cascade')
- tax_src_id = fields.Many2one('account.tax.template', string='Tax Source', required=True)
- tax_dest_id = fields.Many2one('account.tax.template', string='Replacement Tax')
-
-
-class AccountFiscalPositionAccountTemplate(models.Model):
- _name = 'account.fiscal.position.account.template'
- _description = 'Accounts Mapping Template of Fiscal Position'
- _rec_name = 'position_id'
-
- position_id = fields.Many2one('account.fiscal.position.template', string='Fiscal Mapping', required=True, ondelete='cascade')
- account_src_id = fields.Many2one('account.account.template', string='Account Source', required=True)
- account_dest_id = fields.Many2one('account.account.template', string='Account Destination', required=True)
-
-
-class AccountReconcileModelTemplate(models.Model):
- _name = "account.reconcile.model.template"
- _description = 'Reconcile Model Template'
-
- # Base fields.
- chart_template_id = fields.Many2one('account.chart.template', string='Chart Template', required=True)
- name = fields.Char(string='Button Label', required=True)
- sequence = fields.Integer(required=True, default=10)
-
- rule_type = fields.Selection(selection=[
- ('writeoff_button', 'Button to generate counterpart entry'),
- ('writeoff_suggestion', 'Rule to suggest counterpart entry'),
- ('invoice_matching', 'Rule to match invoices/bills'),
- ], string='Type', default='writeoff_button', required=True)
- auto_reconcile = fields.Boolean(string='Auto-validate',
- help='Validate the statement line automatically (reconciliation based on your rule).')
- to_check = fields.Boolean(string='To Check', default=False, help='This matching rule is used when the user is not certain of all the information of the counterpart.')
- matching_order = fields.Selection(
- selection=[
- ('old_first', 'Oldest first'),
- ('new_first', 'Newest first'),
- ]
- )
-
- # ===== Conditions =====
- match_text_location_label = fields.Boolean(
- default=True,
- help="Search in the Statement's Label to find the Invoice/Payment's reference",
- )
- match_text_location_note = fields.Boolean(
- default=False,
- help="Search in the Statement's Note to find the Invoice/Payment's reference",
- )
- match_text_location_reference = fields.Boolean(
- default=False,
- help="Search in the Statement's Reference to find the Invoice/Payment's reference",
- )
- match_journal_ids = fields.Many2many('account.journal', string='Journals Availability',
- domain="[('type', 'in', ('bank', 'cash'))]",
- help='The reconciliation model will only be available from the selected journals.')
- match_nature = fields.Selection(selection=[
- ('amount_received', 'Amount Received'),
- ('amount_paid', 'Amount Paid'),
- ('both', 'Amount Paid/Received')
- ], string='Amount Type', required=True, default='both',
- help='''The reconciliation model will only be applied to the selected transaction type:
- * Amount Received: Only applied when receiving an amount.
- * Amount Paid: Only applied when paying an amount.
- * Amount Paid/Received: Applied in both cases.''')
- match_amount = fields.Selection(selection=[
- ('lower', 'Is Lower Than'),
- ('greater', 'Is Greater Than'),
- ('between', 'Is Between'),
- ], string='Amount Condition',
- help='The reconciliation model will only be applied when the amount being lower than, greater than or between specified amount(s).')
- match_amount_min = fields.Float(string='Amount Min Parameter')
- match_amount_max = fields.Float(string='Amount Max Parameter')
- match_label = fields.Selection(selection=[
- ('contains', 'Contains'),
- ('not_contains', 'Not Contains'),
- ('match_regex', 'Match Regex'),
- ], string='Label', help='''The reconciliation model will only be applied when the label:
- * Contains: The proposition label must contains this string (case insensitive).
- * Not Contains: Negation of "Contains".
- * Match Regex: Define your own regular expression.''')
- match_label_param = fields.Char(string='Label Parameter')
- match_note = fields.Selection(selection=[
- ('contains', 'Contains'),
- ('not_contains', 'Not Contains'),
- ('match_regex', 'Match Regex'),
- ], string='Note', help='''The reconciliation model will only be applied when the note:
- * Contains: The proposition note must contains this string (case insensitive).
- * Not Contains: Negation of "Contains".
- * Match Regex: Define your own regular expression.''')
- match_note_param = fields.Char(string='Note Parameter')
- match_transaction_type = fields.Selection(selection=[
- ('contains', 'Contains'),
- ('not_contains', 'Not Contains'),
- ('match_regex', 'Match Regex'),
- ], string='Transaction Type', help='''The reconciliation model will only be applied when the transaction type:
- * Contains: The proposition transaction type must contains this string (case insensitive).
- * Not Contains: Negation of "Contains".
- * Match Regex: Define your own regular expression.''')
- match_transaction_type_param = fields.Char(string='Transaction Type Parameter')
- match_same_currency = fields.Boolean(string='Same Currency', default=True,
- help='Restrict to propositions having the same currency as the statement line.')
- allow_payment_tolerance = fields.Boolean(
- string="Allow Payment Gap",
- default=True,
- help="Difference accepted in case of underpayment.",
- )
- payment_tolerance_param = fields.Float(
- string="Gap",
- default=0.0,
- help="The sum of total residual amount propositions matches the statement line amount under this amount/percentage.",
- )
- payment_tolerance_type = fields.Selection(
- selection=[('percentage', "in percentage"), ('fixed_amount', "in amount")],
- required=True,
- default='percentage',
- help="The sum of total residual amount propositions and the statement line amount allowed gap type.",
- )
- match_partner = fields.Boolean(string='Partner Is Set',
- help='The reconciliation model will only be applied when a customer/vendor is set.')
- match_partner_ids = fields.Many2many('res.partner', string='Restrict Partners to',
- help='The reconciliation model will only be applied to the selected customers/vendors.')
- match_partner_category_ids = fields.Many2many('res.partner.category', string='Restrict Partner Categories to',
- help='The reconciliation model will only be applied to the selected customer/vendor categories.')
-
- line_ids = fields.One2many('account.reconcile.model.line.template', 'model_id')
- decimal_separator = fields.Char(help="Every character that is nor a digit nor this separator will be removed from the matching string")
-
-
-class AccountReconcileModelLineTemplate(models.Model):
- _name = "account.reconcile.model.line.template"
- _description = 'Reconcile Model Line Template'
-
- model_id = fields.Many2one('account.reconcile.model.template')
- sequence = fields.Integer(required=True, default=10)
- account_id = fields.Many2one('account.account.template', string='Account', ondelete='cascade', domain=[('deprecated', '=', False)])
- label = fields.Char(string='Journal Item Label')
- amount_type = fields.Selection([
- ('fixed', 'Fixed'),
- ('percentage', 'Percentage of balance'),
- ('regex', 'From label'),
- ], required=True, default='percentage')
- amount_string = fields.Char(string="Amount")
- force_tax_included = fields.Boolean(string='Tax Included in Price', help='Force the tax to be managed as a price included tax.')
- tax_ids = fields.Many2many('account.tax.template', string='Taxes', ondelete='restrict')
+ res = {}
+ for template in self._get_parent_template(template_code)[::-1] or ['']:
+ try:
+ with file_open(f"{module}/data/template/{model}{f'-{template}' if template else ''}.csv", 'r') as csv_file:
+ for row in csv.DictReader(csv_file):
+ if row['id']:
+ last_id = row['id']
+ res[row['id']] = {
+ key.split('/')[0]: (
+ value if '@' in key
+ else [] if '/' in key
+ else (value and ast.literal_eval(value) or False) if model_fields[key].type in ('boolean', 'int', 'float')
+ else value
+ )
+ for key, value in row.items()
+ if key != 'id' and value != ""
+ }
+ create_added = set()
+ for key, value in row.items():
+ if '/' in key and value:
+ sub = [Command.create(res[last_id])]
+ path = key.split('/')
+ for p in path[:-1]:
+ if p not in create_added:
+ create_added.add(p)
+ sub[-1][2].setdefault(p, [])
+ sub[-1][2][p].append(Command.create({}))
+ sub = sub[-1][2][p]
+ sub[-1][2][path[-1]] = value
+ except FileNotFoundError:
+ _logger.debug("No file %s found for template '%s'", model, module)
+ return res
diff --git a/addons/account/models/company.py b/addons/account/models/company.py
index edef7a5d114..021657911cd 100644
--- a/addons/account/models/company.py
+++ b/addons/account/models/company.py
@@ -57,7 +57,7 @@ class ResCompany(models.Model):
transfer_account_id = fields.Many2one('account.account',
domain="[('reconcile', '=', True), ('account_type', '=', 'asset_current'), ('deprecated', '=', False)]", string="Inter-Banks Transfer Account", help="Intermediary account used when moving money from a liqity account to another")
expects_chart_of_accounts = fields.Boolean(string='Expects a Chart of Accounts', default=True)
- chart_template_id = fields.Many2one('account.chart.template', help='The chart template for the company (if any)')
+ chart_template = fields.Selection(selection='_chart_template_selection')
bank_account_code_prefix = fields.Char(string='Prefix of the bank accounts')
cash_account_code_prefix = fields.Char(string='Prefix of the cash accounts')
default_cash_difference_income_account_id = fields.Many2one('account.account', string="Cash Difference Income Account")
@@ -91,9 +91,6 @@ class ResCompany(models.Model):
domain="[('deprecated', '=', False), ('company_id', '=', id), \
('account_type', '=', 'expense')]")
anglo_saxon_accounting = fields.Boolean(string="Use anglo-saxon accounting")
- property_stock_account_input_categ_id = fields.Many2one('account.account', string="Input Account for Stock Valuation")
- property_stock_account_output_categ_id = fields.Many2one('account.account', string="Output Account for Stock Valuation")
- property_stock_valuation_account_id = fields.Many2one('account.account', string="Account Template for Stock Valuation")
bank_journal_ids = fields.One2many('account.journal', 'company_id', domain=[('type', '=', 'bank')], string='Bank Journals')
incoterm_id = fields.Many2one('account.incoterms', string='Default incoterm',
help='International Commercial Terms are a series of predefined commercial terms used in international transactions.')
@@ -274,11 +271,15 @@ class ResCompany(models.Model):
return new_prefix + current_code.replace(old_prefix, '', 1).lstrip('0').rjust(digits-len(new_prefix), '0')
def reflect_code_prefix_change(self, old_code, new_code):
- accounts = self.env['account.account'].search([('code', 'like', old_code), ('account_type', 'in', ('asset_cash', 'liability_credit_card')),
- ('company_id', '=', self.id)], order='code asc')
+ if not old_code:
+ return
+ accounts = self.env['account.account'].search([
+ ('code', '=like', old_code + '%'),
+ ('account_type', 'in', ('asset_cash', 'liability_credit_card')),
+ ('company_id', '=', self.id)
+ ], order='code asc')
for account in accounts:
- if account.code.startswith(old_code):
- account.write({'code': self.get_new_account_code(account.code, old_code, new_code)})
+ account.write({'code': self.get_new_account_code(account.code, old_code, new_code)})
def _get_fiscalyear_lock_statement_lines_redirect_action(self, unreconciled_statement_lines):
""" Get the action redirecting to the statement lines that are not already reconciled when setting a fiscal
@@ -581,6 +582,14 @@ class ResCompany(models.Model):
raise RedirectWarning(msg, action.id, _("Go to the configuration panel"))
return account
+ def _existing_accounting(self) -> bool:
+ """Return True iff some accounting entries have already been made for the current company."""
+ self.ensure_one()
+ return bool(self.env['account.move.line'].search([('company_id', '=', self.id)], order="id", limit=1))
+
+ def _chart_template_selection(self):
+ return self.env['account.chart.template']._select_chart_template(self.country_id)
+
@api.model
def _action_check_hash_integrity(self):
return self.env.ref('account.action_report_account_hash_integrity').report_action(self.id)
diff --git a/addons/account/models/ir_module.py b/addons/account/models/ir_module.py
new file mode 100644
index 00000000000..70e8e6f564a
--- /dev/null
+++ b/addons/account/models/ir_module.py
@@ -0,0 +1,66 @@
+from importlib import import_module
+from inspect import getmembers, ismodule, isclass, isfunction
+
+from odoo import models, fields
+
+
+def get_flag(country_code):
+ # get the sequence of 2 regional indicator emoji forming the flag linked to the country code
+ return "".join(chr(int(f"1f1{ord(c)+165:02x}", base=16)) for c in country_code)
+
+
+def templ(env, code, name=None, country='', **kwargs):
+ country_code = country or code.split('_')[0] if country is not None else None
+ country = country_code and env.ref(f"base.{country_code}", raise_if_not_found=False)
+ country_name = f"{get_flag(country.code)} {country.name}" if country else ''
+ return {
+ 'name': country_name and (f"{country_name} - {name}" if name else country_name) or name,
+ 'country_id': country and country.id,
+ 'country_code': country and country.code,
+ **kwargs,
+ }
+
+template_module = lambda m: ismodule(m) and m.__name__.split('.')[-1].startswith('template_')
+template_class = isclass
+template_function = lambda f: isfunction(f) and hasattr(f, '_l10n_template') and f._l10n_template[1] == 'template_data'
+
+class IrModule(models.Model):
+ _inherit = "ir.module.module"
+
+ account_templates = fields.Binary(compute='_compute_account_templates', exportable=False)
+
+ def _compute_account_templates(self):
+ chart_category = self.env.ref('base.module_category_accounting_localizations_account_charts')
+ ChartTemplate = self.env['account.chart.template']
+ for module in self:
+ templates = {}
+ if module.category_id == chart_category or module.name == 'account':
+ python_module = import_module(f"odoo.addons.{module.name}.models")
+ templates = {
+ fct._l10n_template[0]: {
+ 'name': fct(ChartTemplate).get('name'),
+ 'parent': fct(ChartTemplate).get('parent'),
+ 'country': fct(ChartTemplate).get('country', ''),
+ 'visible': fct(ChartTemplate).get('visible', True),
+ 'module': module.name,
+ }
+ for _name, mdl in getmembers(python_module, template_module)
+ for _name, cls in getmembers(mdl, template_class)
+ for _name, fct in getmembers(cls, template_function)
+ }
+
+ module.account_templates = {
+ code: templ(self.env, code, **vals)
+ for code, vals in templates.items()
+ }
+
+ def write(self, vals):
+ # Instanciate the first template of the module on the current company upon installing the module
+ was_installed = len(self) == 1 and self.state == 'installed'
+ super().write(vals)
+ is_installed = len(self) == 1 and self.state == 'installed'
+ if not was_installed and is_installed and not self.env.company.chart_template and self.account_templates:
+ self.env['account.chart.template'].try_loading(
+ next(iter(self.account_templates)),
+ self.env.company,
+ )
diff --git a/addons/account/models/partner.py b/addons/account/models/partner.py
index 1c5d4b2378f..3042efcce36 100644
--- a/addons/account/models/partner.py
+++ b/addons/account/models/partner.py
@@ -20,7 +20,7 @@ class AccountFiscalPosition(models.Model):
_order = 'sequence'
sequence = fields.Integer()
- name = fields.Char(string='Fiscal Position', required=True)
+ name = fields.Char(string='Fiscal Position', required=True, translate=True)
active = fields.Boolean(default=True,
help="By unchecking the active field, you may hide a fiscal position without deleting it.")
company_id = fields.Many2one(
@@ -64,7 +64,7 @@ class AccountFiscalPosition(models.Model):
if self.env['account.tax'].search([('country_id', '=', record.country_id.id)], limit=1):
record.foreign_vat_header_mode = None
- elif self.env['account.tax.template'].search([('chart_template_id.country_id', '=', record.country_id.id)], limit=1):
+ elif self.env['account.chart.template']._guess_chart_template(record.country_id) != 'generic_coa':
record.foreign_vat_header_mode = 'templates_found'
else:
record.foreign_vat_header_mode = 'no_template'
diff --git a/addons/account/models/res_config_settings.py b/addons/account/models/res_config_settings.py
index c32636fb0bf..bbc58907f7e 100644
--- a/addons/account/models/res_config_settings.py
+++ b/addons/account/models/res_config_settings.py
@@ -31,8 +31,7 @@ class ResConfigSettings(models.TransientModel):
domain="[('deprecated', '=', False), ('company_id', '=', company_id),\
('account_type', '=', 'expense')]")
has_chart_of_accounts = fields.Boolean(compute='_compute_has_chart_of_accounts', string='Company has a chart of accounts')
- chart_template_id = fields.Many2one('account.chart.template', string='Template', default=lambda self: self.env.company.chart_template_id,
- domain="[('visible','=', True)]")
+ chart_template = fields.Selection(selection=lambda self: self.env.company._chart_template_selection(), default=lambda self: self.env.company.chart_template)
sale_tax_id = fields.Many2one('account.tax', string="Default Sale Tax", related='company_id.account_sale_tax_id', readonly=False)
purchase_tax_id = fields.Many2one('account.tax', string="Default Purchase Tax", related='company_id.account_purchase_tax_id', readonly=False)
tax_calculation_rounding_method = fields.Selection(
@@ -184,10 +183,12 @@ class ResConfigSettings(models.TransientModel):
def set_values(self):
super().set_values()
# install a chart of accounts for the given company (if required)
- if self.env.company == self.company_id \
- and self.chart_template_id \
- and self.chart_template_id != self.company_id.chart_template_id:
- self.chart_template_id._load(self.env.company)
+ if self.env.company == self.company_id and self.chart_template \
+ and self.chart_template != self.company_id.chart_template:
+ self.env['account.chart.template'].try_loading(self.chart_template, company=self.company_id)
+
+ def reload_template(self):
+ self.env['account.chart.template'].try_loading(self.company_id.chart_template, company=self.company_id)
@api.depends('company_id')
def _compute_account_default_credit_limit(self):
@@ -205,8 +206,8 @@ class ResConfigSettings(models.TransientModel):
@api.depends('company_id')
def _compute_has_chart_of_accounts(self):
- self.has_chart_of_accounts = bool(self.company_id.chart_template_id)
- self.has_accounting_entries = self.env['account.chart.template'].existing_accounting(self.company_id)
+ self.has_chart_of_accounts = bool(self.company_id.chart_template)
+ self.has_accounting_entries = self.company_id._existing_accounting()
@api.depends('show_line_subtotals_tax_selection')
def _compute_group_show_line_subtotals(self):
diff --git a/addons/account/models/template_generic_coa.py b/addons/account/models/template_generic_coa.py
new file mode 100644
index 00000000000..fbdcecf7f31
--- /dev/null
+++ b/addons/account/models/template_generic_coa.py
@@ -0,0 +1,59 @@
+from odoo import models
+from odoo.addons.account.models.chart_template import template
+
+
+
+class AccountChartTemplate(models.AbstractModel):
+ _inherit = "account.chart.template"
+
+ @template('generic_coa')
+ def _get_generic_coa_template_data(self):
+ """Return the data necessary for the chart template.
+
+ :return: all the values that are not stored but are used to instancieate
+ the chart of accounts. Common keys are:
+ * anglo_saxon_accounting
+ * transfer_account_code_prefix
+ * property_*
+ * code_digits
+ :rtype: dict
+ """
+ return {
+ 'name': "Generic Chart Template",
+ 'country': None,
+ 'anglo_saxon_accounting': True,
+ 'transfer_account_code_prefix': '1017',
+ 'default_pos_receivable_account_id': 'pos_receivable',
+ 'property_account_receivable_id': 'receivable',
+ 'property_account_payable_id': 'payable',
+ 'property_account_expense_id': 'expense',
+ 'property_account_income_id': 'income',
+ 'property_account_expense_categ_id': 'expense',
+ 'property_account_income_categ_id': 'income',
+ 'property_stock_account_input_categ_id': 'stock_in',
+ 'property_stock_account_output_categ_id': 'stock_out',
+ 'property_stock_valuation_account_id': 'stock_valuation',
+ }
+
+ @template('generic_coa', 'res.company')
+ def _get_generic_coa_res_company(self):
+ """Return the data to be written on the company.
+
+ The data is a mapping the XMLID to the create/write values of a record.
+
+ :rtype: dict[(str, int), dict]
+ """
+ return {
+ self.env.company.id: {
+ 'account_fiscal_country_id': 'base.us',
+ 'bank_account_code_prefix': '1014',
+ 'cash_account_code_prefix': '1015',
+ 'account_default_pos_receivable_account_id': 'pos_receivable',
+ 'income_currency_exchange_account_id': 'income_currency_exchange',
+ 'expense_currency_exchange_account_id': 'expense_currency_exchange',
+ 'default_cash_difference_income_account_id': 'cash_diff_income',
+ 'default_cash_difference_expense_account_id': 'cash_diff_expense',
+ 'account_journal_early_pay_discount_loss_account_id': 'cash_discount_loss',
+ 'account_journal_early_pay_discount_gain_account_id': 'cash_discount_gain',
+ }
+ }
diff --git a/addons/account/populate/account_bank_statement.py b/addons/account/populate/account_bank_statement.py
index 4015d86f466..1be81db8c7d 100644
--- a/addons/account/populate/account_bank_statement.py
+++ b/addons/account/populate/account_bank_statement.py
@@ -116,7 +116,7 @@ class AccountBankStatementLine(models.Model):
return currency if currency != (journal.currency_id or journal.company_id.currency_id).id else False
company_ids = self.env['res.company'].search([
- ('chart_template_id', '!=', False),
+ ('chart_template', '!=', False),
('id', 'in', self.env.registry.populated_models['res.company']),
])
diff --git a/addons/account/populate/account_journal.py b/addons/account/populate/account_journal.py
index 642e189069b..8a06f8b7b1c 100644
--- a/addons/account/populate/account_journal.py
+++ b/addons/account/populate/account_journal.py
@@ -21,7 +21,7 @@ class AccountJournal(models.Model):
def _populate_factories(self):
company_ids = self.env['res.company'].search([
- ('chart_template_id', '!=', False),
+ ('chart_template', '!=', False),
('id', 'in', self.env.registry.populated_models['res.company']),
])
return [
diff --git a/addons/account/populate/account_move.py b/addons/account/populate/account_move.py
index de29aa09efe..a7a3c2f6df0 100644
--- a/addons/account/populate/account_move.py
+++ b/addons/account/populate/account_move.py
@@ -202,7 +202,7 @@ class AccountMove(models.Model):
return False
company_ids = self.env['res.company'].search([
- ('chart_template_id', '!=', False),
+ ('chart_template', '!=', False),
('id', 'in', self.env.registry.populated_models['res.company']),
])
currencies = self.env['res.currency'].search([
diff --git a/addons/account/populate/account_payment.py b/addons/account/populate/account_payment.py
index 5d6e827620a..e99d3b5c0f7 100644
--- a/addons/account/populate/account_payment.py
+++ b/addons/account/populate/account_payment.py
@@ -105,7 +105,7 @@ class AccountPayment(models.Model):
return random.choice(search_payment_method_line_ids(values['payment_type'], values['journal_id']))
company_ids = self.env['res.company'].search([
- ('chart_template_id', '!=', False),
+ ('chart_template', '!=', False),
('id', 'in', self.env.registry.populated_models['res.company']),
])
return [
diff --git a/addons/account/populate/account_reconcile_model.py b/addons/account/populate/account_reconcile_model.py
index b931cbeb30b..56ab85af792 100644
--- a/addons/account/populate/account_reconcile_model.py
+++ b/addons/account/populate/account_reconcile_model.py
@@ -26,7 +26,7 @@ class AccountReconcileModel(models.Model):
return 'model_%s' % counter
company_ids = self.env['res.company'].search([
- ('chart_template_id', '!=', False),
+ ('chart_template', '!=', False),
('id', 'in', self.env.registry.populated_models['res.company']),
])
return [
diff --git a/addons/account/populate/res_company.py b/addons/account/populate/res_company.py
index 9bd4e837457..ee791df86b3 100644
--- a/addons/account/populate/res_company.py
+++ b/addons/account/populate/res_company.py
@@ -3,12 +3,9 @@
Only adding specificities of basic accounting applications.
"""
-from odoo import models, _
-from odoo.tools import populate
-from odoo.exceptions import UserError
+from odoo import models
import logging
-from functools import lru_cache
_logger = logging.getLogger(__name__)
@@ -19,22 +16,10 @@ class ResCompany(models.Model):
_inherit = "res.company"
def _populate(self, size):
- @lru_cache()
- def search_coa_ids(currency_id):
- return self.env['account.chart.template'].search([('currency_id', '=', currency_id)])
-
- records = super()._populate(size)
_logger.info('Loading Chart Template')
- default_chart_templates = self.env['account.chart.template'].search([], limit=1)
- if not default_chart_templates:
- # TODO install l10n_generic_coa ?
- raise UserError(_(
- "At least one localization is needed to be installed in order to populate the "
- "database with accounting"
- ))
- random = populate.Random('res.company+chart_template_selector')
+ records = super()._populate(size)
- # Load the a chart of accounts matching the currency of the company for the 3 first created companies
+ # Load the a chart of accounts matching the country_id of the company for the 3 first created companies
# We are loading an existing CoA and not populating it because:
# * it reflects best real use cases.
# * it allows checking reports by localization
@@ -50,6 +35,5 @@ class ResCompany(models.Model):
# Note that we can still populate some new records on top of the CoA if it makes sense,
# like account.journal for instance.
for company in records[:3]:
- chart_templates_cur = search_coa_ids(company.currency_id.id) or default_chart_templates
- random.choice(chart_templates_cur).with_company(company.id).try_loading()
+ self.env['account.chart.template'].try_loading(company=company, template_code=None)
return records
diff --git a/addons/account/security/ir.model.access.csv b/addons/account/security/ir.model.access.csv
index 25ac5427a51..658d31abfdf 100644
--- a/addons/account/security/ir.model.access.csv
+++ b/addons/account/security/ir.model.access.csv
@@ -3,18 +3,6 @@ access_account_cash_rounding_readonly,account.cash.rounding,model_account_cash_r
access_account_cash_rounding_uinvoice,account.cash.rounding,model_account_cash_rounding,account.group_account_invoice,1,1,1,1
access_res_partner_group_account_manager,res_partner group_account_manager,model_res_partner,account.group_account_manager,1,0,0,0
-access_account_chart_template,account.chart.template,model_account_chart_template,account.group_account_manager,1,1,1,1
-access_account_fiscal_position_template,account.fiscal.position.template,model_account_fiscal_position_template,account.group_account_manager,1,1,1,1
-access_account_fiscal_position_tax_template,account.fiscal.position.tax.template,model_account_fiscal_position_tax_template,account.group_account_manager,1,1,1,1
-access_account_fiscal_position_account_template,account.fiscal.position.account.template,model_account_fiscal_position_account_template,account.group_account_manager,1,1,1,1
-access_product_template_account_manager,product.template.account.manager,product.model_product_template,account.group_account_manager,1,1,1,1
-access_account_account_template,account.account.template,model_account_account_template,account.group_account_manager,1,1,1,1
-access_account_tax_template,account.tax.template,model_account_tax_template,account.group_account_manager,1,1,1,1
-access_account_tax_repartition_line_template_manager,account.tax repartition.line.template.manager,model_account_tax_repartition_line_template,account.group_account_manager,1,1,1,1
-access_account_reconcile_model_template,account.reconcile.model.template,model_account_reconcile_model_template,account.group_account_manager,1,1,1,1
-access_account_reconcile_model_line_template,account.reconcile.model.line.template,model_account_reconcile_model_line_template,account.group_account_manager,1,1,1,1
-access_account_group_template,account.group.template,model_account_group_template,account.group_account_manager,1,1,1,1
-
access_res_currency_account_manager,res.currency account manager,base.model_res_currency,group_account_manager,1,1,1,1
access_res_currency_rate_account_manager,res.currency.rate account manager,base.model_res_currency_rate,group_account_manager,1,1,1,1
diff --git a/addons/account/tests/__init__.py b/addons/account/tests/__init__.py
index 52275ddcde2..c5e715d00f8 100644
--- a/addons/account/tests/__init__.py
+++ b/addons/account/tests/__init__.py
@@ -26,7 +26,7 @@ from . import test_sequence_mixin
from . import test_settings
from . import test_tax
from . import test_invoice_taxes
-from . import test_templates_consistency
+from . import test_mail_performance
from . import test_account_all_l10n
from . import test_account_onboarding
from . import test_portal_attachment
diff --git a/addons/account/tests/common.py b/addons/account/tests/common.py
index 5152b33706a..9420a9465d7 100644
--- a/addons/account/tests/common.py
+++ b/addons/account/tests/common.py
@@ -7,6 +7,7 @@ import json
import time
import base64
from lxml import etree
+from unittest import SkipTest
class AccountTestInvoicingCommon(TransactionCase):
@@ -32,13 +33,10 @@ class AccountTestInvoicingCommon(TransactionCase):
assert 'post_install' in cls.test_tags, 'This test requires a CoA to be installed, it should be tagged "post_install"'
if chart_template_ref:
- chart_template = cls.env.ref(chart_template_ref)
- else:
- chart_template = cls.env.ref('l10n_generic_coa.configurable_chart_template', raise_if_not_found=False)
- if not chart_template:
- cls.tearDownClass()
- # skipTest raises exception
- cls.skipTest(cls, "Accounting Tests skipped because the user's company has no chart of accounts.")
+ template_vals = cls.env['account.chart.template']._get_chart_template_mapping()[chart_template_ref]
+ template_module = cls.env.ref(f"base.module_{template_vals['module']}")
+ if template_module.state != 'installed':
+ raise SkipTest(f"Module required for the test is not installed ({template_module.name})")
# Create user.
user = cls.env['res.users'].create({
@@ -58,8 +56,8 @@ class AccountTestInvoicingCommon(TransactionCase):
cls.env = cls.env(user=user)
cls.cr = cls.env.cr
- cls.company_data_2 = cls.setup_company_data('company_2_data', chart_template=chart_template)
- cls.company_data = cls.setup_company_data('company_1_data', chart_template=chart_template)
+ cls.company_data_2 = cls.setup_company_data('company_2_data', chart_template=chart_template_ref)
+ cls.company_data = cls.setup_company_data('company_1_data', chart_template=chart_template_ref)
user.write({
'company_ids': [(6, 0, (cls.company_data['company'] + cls.company_data_2['company']).ids)],
@@ -176,7 +174,6 @@ class AccountTestInvoicingCommon(TransactionCase):
# ==== Payment methods ====
bank_journal = cls.company_data['default_journal_bank']
-
cls.inbound_payment_method_line = bank_journal.inbound_payment_method_line_ids[0]
cls.outbound_payment_method_line = bank_journal.outbound_payment_method_line_ids[0]
@@ -190,26 +187,18 @@ class AccountTestInvoicingCommon(TransactionCase):
:param company_name: The name of the company.
:return: A dictionary will be returned containing all relevant accounting data for testing.
'''
- def search_account(company, chart_template, field_name, domain):
- template_code = chart_template[field_name].code
- domain = [('company_id', '=', company.id)] + domain
- account = None
- if template_code:
- account = cls.env['account.account'].search(domain + [('code', '=like', template_code + '%')], limit=1)
-
- if not account:
- account = cls.env['account.account'].search(domain, limit=1)
- return account
-
- chart_template = chart_template or cls.env.company.chart_template_id
company = cls.env['res.company'].create({
'name': company_name,
**kwargs,
})
cls.env.user.company_ids |= company
- chart_template.try_loading(company=company, install_demo=False)
+ # Install the chart template
+ chart_template = chart_template or cls.env['account.chart.template']._guess_chart_template(company.country_id)
+ cls.env['account.chart.template'].try_loading(chart_template, company=company, install_demo=False)
+ if not company.account_fiscal_country_id:
+ company.account_fiscal_country_id = cls.env.ref('base.us')
# The currency could be different after the installation of the chart template.
if kwargs.get('currency_id'):
@@ -228,9 +217,9 @@ class AccountTestInvoicingCommon(TransactionCase):
('account_type', '=', 'expense'),
('id', '!=', company.account_journal_early_pay_discount_loss_account_id.id)
], limit=1),
- 'default_account_receivable': search_account(company, chart_template, 'property_account_receivable_id', [
- ('account_type', '=', 'asset_receivable')
- ]),
+ 'default_account_receivable': cls.env['ir.property'].with_company(company)._get(
+ 'property_account_receivable_id', 'res.partner'
+ ),
'default_account_payable': cls.env['account.account'].search([
('company_id', '=', company.id),
('account_type', '=', 'liability_payable')
diff --git a/addons/account/tests/test_account_all_l10n.py b/addons/account/tests/test_account_all_l10n.py
index 723b6e1e5ae..3c120701f4a 100644
--- a/addons/account/tests/test_account_all_l10n.py
+++ b/addons/account/tests/test_account_all_l10n.py
@@ -13,7 +13,10 @@ def test_all_l10n(env):
As the module install is not yet fully transactional, the modules will
remain installed after the test.
"""
+ # Ensure the presence of demo data, to see if they can be correctly installed
assert env.ref('base.module_account').demo, "Need the demo to test with data"
+
+ # Install the requiriments
l10n_mods = env['ir.module.module'].search([
('name', 'like', 'l10n%'),
('state', '=', 'uninstalled'),
@@ -22,20 +25,28 @@ def test_all_l10n(env):
env.reset() # clear the set of environments
env = env() # get an environment that refers to the new registry
- coas = env['account.chart.template'].search([
- ('id', 'not in', env['res.company'].search([]).chart_template_id.ids)
+ # Install Charts of Accounts
+ already_loaded_codes = set(env['res.company'].search([]).mapped('chart_template'))
+ not_loaded_codes = [
+ (template_code, template)
+ for template_code, template in env['account.chart.template']._get_chart_template_mapping().items()
+ if template_code not in already_loaded_codes
+ ]
+ companies = env['res.company'].create([
+ {
+ 'name': f'company_coa_{template_code}',
+ 'country_id': template['country_id'],
+ }
+ for template_code, template in not_loaded_codes
])
- for coa in coas:
- cname = 'company_%s' % str(coa.id)
- company = env['res.company'].create({
- 'name': cname,
- 'country_id': coa.country_id.id,
- })
+
+ # Install the CoAs
+ for (template_code, _template), company in zip(not_loaded_codes, companies):
env.user.company_ids += company
env.user.company_id = company
- _logger.info('Testing COA: %s (company: %s)' % (coa.name, cname))
+ _logger.info('Testing COA: %s (company: %s)', template_code, company.name)
try:
with env.cr.savepoint():
- coa.try_loading()
+ env['account.chart.template'].try_loading(template_code, company, install_demo=True)
except Exception:
- _logger.error("Error when creating COA %s", coa.name, exc_info=True)
+ _logger.error("Error when creating COA %s", template_code, exc_info=True)
diff --git a/addons/account/tests/test_account_move_reconcile.py b/addons/account/tests/test_account_move_reconcile.py
index dac49aa86d2..3f05e4e2344 100644
--- a/addons/account/tests/test_account_move_reconcile.py
+++ b/addons/account/tests/test_account_move_reconcile.py
@@ -3915,6 +3915,11 @@ class TestAccountMoveReconcile(AccountTestInvoicingCommon):
'foreign_vat': 'WH1234',
})
+ self.env['account.tax.group'].create({
+ 'name': 'tax_group',
+ 'country_id': test_country.id,
+ })
+
foreign_caba_tax = self.env['account.tax'].create({
'name': 'tax_1',
'amount': 33.3333,
diff --git a/addons/account/tests/test_chart_template.py b/addons/account/tests/test_chart_template.py
index d0d59e62bb8..925a8125f99 100644
--- a/addons/account/tests/test_chart_template.py
+++ b/addons/account/tests/test_chart_template.py
@@ -1,45 +1,97 @@
+from unittest.mock import patch
+
from odoo import Command
-from odoo.addons.account.models.chart_template import update_taxes_from_templates
+from odoo.addons.account.models.chart_template import AccountChartTemplate
from odoo.tests import tagged
from odoo.tests.common import TransactionCase
+def _get_chart_template_mapping(self):
+ return {'test': {
+ 'name': 'test',
+ 'country_id': None,
+ 'country_code': None,
+ 'modules': ['account'],
+ 'parent': None,
+ }}
+
+def test_get_data(self, template_code):
+ return {
+ 'template_data': {
+ 'code_digits': 6,
+ 'currency_id': 'base.EUR',
+ 'property_account_income_categ_id': 'test_account_income_template',
+ 'property_account_expense_categ_id': 'test_account_expense_template',
+ },
+ 'account.tax.group': {
+ 'tax_group_taxes': {
+ 'name': "Taxes",
+ 'sequence': 0,
+ },
+ },
+ 'account.journal': self._get_account_journal(template_code),
+ 'res.company': {
+ self.env.company.id: {
+ 'bank_account_code_prefix': '1000',
+ 'cash_account_code_prefix': '2000',
+ 'transfer_account_code_prefix': '3000',
+ },
+ },
+ 'account.tax': {
+ xmlid: _tax_vals(name, amount)
+ for name, xmlid, amount in [
+ ('Tax 1', 'test_tax_1_template', 15),
+ ('Tax 2', 'test_tax_2_template', 0),
+ ]
+ },
+ 'account.account': {
+ 'test_account_income_template': {
+ 'name': 'property_income_account',
+ 'code': '222221',
+ 'account_type': 'income',
+ },
+ 'test_account_expense_template': {
+ 'name': 'property_expense_account',
+ 'code': '222222',
+ 'account_type': 'expense',
+ },
+ },
+ 'account.fiscal.position': {
+ 'test_fiscal_position_template': {
+ 'name': 'Fiscal Position',
+ 'country_id': 'base.be',
+ 'auto_apply': True,
+ 'tax_ids': [
+ Command.create({
+ 'tax_src_id': 'test_tax_1_template',
+ 'tax_dest_id': 'test_tax_2_template',
+ })
+ ]
+ }
+ },
+ }
+
+def _tax_vals(name, amount):
+ return {
+ 'name': name,
+ 'amount': amount,
+ 'tax_group_id': 'tax_group_taxes',
+ 'invoice_repartition_line_ids': [
+ Command.create({'factor_percent': 100, 'repartition_type': 'base'}),
+ Command.create({'factor_percent': 100, 'repartition_type': 'tax'}),
+ ],
+ 'refund_repartition_line_ids': [
+ Command.create({'factor_percent': 100, 'repartition_type': 'base'}),
+ Command.create({'factor_percent': 100, 'repartition_type': 'tax'}),
+ ],
+ }
@tagged('post_install', '-at_install')
+@patch.object(AccountChartTemplate, '_get_chart_template_mapping', _get_chart_template_mapping)
class TestChartTemplate(TransactionCase):
@classmethod
- def create_tax_template(cls, name, template_name, amount):
- return cls.env['account.tax.template']._load_records([{
- 'xml_id': template_name,
- 'values': {
- 'name': name,
- 'amount': amount,
- 'chart_template_id': cls.chart_template.id,
- 'invoice_repartition_line_ids': [
- Command.create({
- 'factor_percent': 100,
- 'repartition_type': 'base',
- }),
- Command.create({
- 'factor_percent': 100,
- 'repartition_type': 'tax',
- }),
- ],
- 'refund_repartition_line_ids': [
- Command.create({
- 'factor_percent': 100,
- 'repartition_type': 'base',
- }),
- Command.create({
- 'factor_percent': 100,
- 'repartition_type': 'tax',
- }),
- ],
- },
- }])
-
- @classmethod
+ @patch.object(AccountChartTemplate, '_get_chart_template_mapping', _get_chart_template_mapping)
def setUpClass(cls):
"""
Setups a company with a custom chart template, containing a tax and a fiscal position.
@@ -69,104 +121,37 @@ class TestChartTemplate(TransactionCase):
'company_id': cls.company_1.id,
})
- cls.chart_template = cls.env['account.chart.template']._load_records([{
- 'xml_id': 'account.test_chart_template',
- 'values': {
- 'name': 'Test Chart Template',
- 'code_digits': 6,
- 'currency_id': cls.env.ref('base.EUR').id,
- 'bank_account_code_prefix': 1000,
- 'cash_account_code_prefix': 2000,
- 'transfer_account_code_prefix': 3000,
- },
- }])
-
- account_templates = cls.env['account.account.template']._load_records([
- {
- 'xml_id': 'account.test_account_income_template',
- 'values':
- {
- 'name': 'property_income_account',
- 'code': '222221',
- 'account_type': 'income',
- 'chart_template_id': cls.chart_template.id,
- }
- },
- {
- 'xml_id': 'account.test_account_expense_template',
- 'values':
- {
- 'name': 'property_expense_account',
- 'code': '222222',
- 'account_type': 'expense',
- 'chart_template_id': cls.chart_template.id,
- }
- },
- ])
-
- cls.chart_template.property_account_income_categ_id = account_templates[0].id
- cls.chart_template.property_account_expense_categ_id = account_templates[1].id
-
- cls.tax_1_template = cls.create_tax_template('Tax 1', 'account.test_tax_1_template', 15)
- cls.tax_2_template = cls.create_tax_template('Tax 2', 'account.test_tax_2_template', 0)
-
- cls.fiscal_position_template = cls.env['account.fiscal.position.template']._load_records([{
- 'xml_id': 'account.test_fiscal_position_template',
- 'values': {
- 'name': 'Fiscal Position',
- 'chart_template_id': cls.chart_template.id,
- 'country_id': cls.env.ref('base.be').id,
- 'auto_apply': True,
- },
- }])
-
- cls.env['account.fiscal.position.tax.template']._load_records([{
- 'xml_id': 'account.test_fiscal_position_tax_template_1',
- 'values': {
- 'tax_src_id': cls.tax_1_template.id,
- 'tax_dest_id': cls.tax_2_template.id,
- 'position_id': cls.fiscal_position_template.id,
- },
- }])
-
- cls.chart_template.try_loading(company=cls.company_1, install_demo=False)
+ with patch.object(AccountChartTemplate, '_get_chart_template_data', side_effect=test_get_data, autospec=True):
+ cls.env['account.chart.template'].try_loading('test', company=cls.company_1, install_demo=False)
def test_update_taxes_from_templates(self):
"""
Tests that adding a new tax template and a fiscal position tax template with this new tax template
creates this new tax and fiscal position line when updating
"""
- fiscal_position = self.env['account.fiscal.position'].search([])
- tax_3_template = self.create_tax_template('Tax 3', 'account.test_tax_3_template', 16)
- tax_4_template = self.create_tax_template('Tax 4', 'account.test_tax_4_template', 17)
+ def local_get_data(self, template_code):
+ data = test_get_data(self, template_code)
+ data['account.tax'].update({
+ xmlid: _tax_vals(name, amount)
+ for name, xmlid, amount in [
+ ('Tax 3', 'test_tax_3_template', 16),
+ ('Tax 4', 'test_tax_4_template', 17),
+ ]
+ })
+ data['account.fiscal.position']['test_fiscal_position_template']['tax_ids'].extend([
+ Command.create({
+ 'tax_src_id': 'test_tax_3_template',
+ 'tax_dest_id': 'test_tax_1_template',
+ }),
+ Command.create({
+ 'tax_src_id': 'test_tax_2_template',
+ 'tax_dest_id': 'test_tax_4_template',
+ }),
+ ])
+ return data
- self.env['account.fiscal.position.tax.template']._load_records([
- {
- 'xml_id': 'account.test_fiscal_position_new_tax_src_template',
- 'values': {
- 'tax_src_id': tax_3_template.id,
- 'tax_dest_id': self.tax_1_template.id,
- 'position_id': self.fiscal_position_template.id,
- },
- },
- {
- 'xml_id': 'account.test_fiscal_position_new_tax_dest_template',
- 'values': {
- 'tax_src_id': self.tax_2_template.id,
- 'tax_dest_id': tax_4_template.id,
- 'position_id': self.fiscal_position_template.id,
- },
- },
- ])
-
- taxes = self.env['account.tax'].search([('company_id', '=', self.company_1.id)])
-
- # Only the template have been created, so it should not be reflected yet on the company's chart template
- self.assertEqual(len(fiscal_position.tax_ids), 1)
- self.assertEqual(len(taxes), 2)
-
- chart_template_xml_id = self.chart_template.get_external_id()[self.chart_template.id]
- update_taxes_from_templates(self.env.cr, chart_template_xml_id)
+ with patch.object(AccountChartTemplate, '_get_chart_template_data', side_effect=local_get_data, autospec=True):
+ self.env['account.chart.template'].try_loading('test', company=self.company_1, install_demo=False)
taxes = self.env['account.tax'].search([('company_id', '=', self.company_1.id)])
self.assertRecordValues(taxes, [
@@ -176,6 +161,7 @@ class TestChartTemplate(TransactionCase):
{'name': 'Tax 4'},
])
+ fiscal_position = self.env['account.fiscal.position'].search([])
self.assertRecordValues(fiscal_position.tax_ids.tax_src_id, [
{'name': 'Tax 1'},
{'name': 'Tax 3'},
@@ -196,26 +182,30 @@ class TestChartTemplate(TransactionCase):
fiscal_position.tax_ids.unlink()
self.env['account.tax'].search([('company_id', '=', self.company_1.id)]).unlink()
- chart_template_xml_id = self.chart_template.get_external_id()[self.chart_template.id]
- update_taxes_from_templates(self.env.cr, chart_template_xml_id)
+ with patch.object(AccountChartTemplate, '_get_chart_template_data', side_effect=test_get_data, autospec=True):
+ self.env['account.chart.template'].try_loading('test', company=self.company_1, install_demo=False)
# if taxes have been deleted, they will be recreated, and the fiscal position mapping for it too
self.assertEqual(len(self.env['account.tax'].search([('company_id', '=', self.company_1.id)])), 2)
self.assertEqual(len(fiscal_position.tax_ids), 1)
fiscal_position.tax_ids.unlink()
- update_taxes_from_templates(self.env.cr, chart_template_xml_id)
+ with patch.object(AccountChartTemplate, '_get_chart_template_data', side_effect=test_get_data, autospec=True):
+ self.env['account.chart.template'].try_loading('test', company=self.company_1, install_demo=False)
# if only the fiscal position mapping has been removed, it won't be recreated
self.assertEqual(len(fiscal_position.tax_ids), 0)
def test_update_taxes_conflict_name(self):
- chart_template_xml_id = self.chart_template.get_external_id()[self.chart_template.id]
- template_vals = self.tax_1_template._get_tax_vals_complete(self.company_1)
- template_vals['amount'] = 20
- self.chart_template.create_record_with_xmlid(self.company_1, self.tax_1_template, "account.tax", template_vals)
- update_taxes_from_templates(self.env.cr, chart_template_xml_id)
- tax_1_old = self.env['account.tax'].search([('company_id', '=', self.company_1.id), ('name', '=', "[old] " + self.tax_1_template.name)])
- tax_1_new = self.env['account.tax'].search([('company_id', '=', self.company_1.id), ('name', '=', self.tax_1_template.name)])
- self.assertEqual(len(tax_1_old), 1, "Old tax still exists but with a different name.")
+ def local_get_data(self, template_code):
+ data = test_get_data(self, template_code)
+ data['account.tax']['test_tax_1_template']['amount'] = 40
+ return data
+
+ tax_1_existing = self.env['account.tax'].search([('company_id', '=', self.company_1.id), ('name', '=', "Tax 1")])
+ with patch.object(AccountChartTemplate, '_get_chart_template_data', side_effect=local_get_data, autospec=True):
+ self.env['account.chart.template'].try_loading('test', company=self.company_1, install_demo=False)
+ tax_1_old = self.env['account.tax'].search([('company_id', '=', self.company_1.id), ('name', '=', "[old] Tax 1")])
+ tax_1_new = self.env['account.tax'].search([('company_id', '=', self.company_1.id), ('name', '=', "Tax 1")])
+ self.assertEqual(tax_1_old, tax_1_existing, "Old tax still exists but with a different name.")
self.assertEqual(len(tax_1_new), 1, "New tax have been created with the original name.")
diff --git a/addons/l10n_generic_coa/tests/test_mail_performance.py b/addons/account/tests/test_mail_performance.py
similarity index 100%
rename from addons/l10n_generic_coa/tests/test_mail_performance.py
rename to addons/account/tests/test_mail_performance.py
diff --git a/addons/account/tests/test_tax_report.py b/addons/account/tests/test_tax_report.py
index a22ee09b7f7..9584b1ae923 100644
--- a/addons/account/tests/test_tax_report.py
+++ b/addons/account/tests/test_tax_report.py
@@ -186,6 +186,10 @@ class TaxReportTest(AccountTestInvoicingCommon):
tag_name = "55b"
tax_report_line = self._create_basic_tax_report_line(self.tax_report_1, "Line 55 bis", tag_name)
test_tag = tax_report_line.expression_ids._get_matching_tags().filtered(lambda tag: not tag.tax_negate)
+ self.env['account.tax.group'].create({
+ 'name': 'Tax group',
+ 'country_id': self.tax_report_1.country_id.id,
+ })
test_tax = self.env['account.tax'].create({
'name': "Test tax",
'amount_type': 'percent',
diff --git a/addons/account/tests/test_templates_consistency.py b/addons/account/tests/test_templates_consistency.py
deleted file mode 100644
index ecf0b648b72..00000000000
--- a/addons/account/tests/test_templates_consistency.py
+++ /dev/null
@@ -1,87 +0,0 @@
-# -*- coding: utf-8 -*-
-from odoo.tests import tagged
-from odoo.tests.common import TransactionCase
-
-
-@tagged('post_install', '-at_install')
-class AccountingTestTemplConsistency(TransactionCase):
- '''Test the templates consistency between some objects like account.account when account.account.template.
- '''
-
- def get_model_fields(self, model, extra_domain=None):
- # Retrieve fields to compare
- domain = [
- ('model', '=', model),
- ('state', '=', 'base'),
- ('related', '=', False),
- ('compute', '=', False),
- ('store', '=', True),
- ]
- if extra_domain:
- domain += extra_domain
- return self.env['ir.model.fields'].search(domain)
-
- def check_fields_consistency(self, model_from, model_to, exceptions=None):
- '''Check the consistency of fields from one model to another by comparing if all fields
- in the model_from are present in the model_to.
- :param model_from: The model to compare.
- :param model_to: The compared model.
- :param exceptions: Not copied model's fields.
- '''
- extra_domain = [('name', 'not in', exceptions)] if exceptions else []
- from_fields = self.get_model_fields(model_from, extra_domain=extra_domain).filtered_domain([('modules', '=', 'account')])
-
- to_fields_set = set([f.name for f in self.get_model_fields(model_to)])
- for field in from_fields:
- assert field.name in to_fields_set,\
- 'Missing field "%s" from "%s" in model "%s".' % (field.name, model_from, model_to)
-
- def test_account_account_fields(self):
- '''Test fields consistency for ('account.account', 'account.account.template')
- '''
- self.check_fields_consistency(
- 'account.account.template', 'account.account', exceptions=['chart_template_id', 'nocreate'])
- self.check_fields_consistency(
- 'account.account', 'account.account.template', exceptions=['company_id', 'deprecated', 'opening_debit', 'opening_credit', 'allowed_journal_ids', 'group_id', 'root_id', 'non_trade', 'include_initial_balance', 'internal_group'])
-
- def test_account_tax_fields(self):
- '''Test fields consistency for ('account.tax', 'account.tax.template')
- '''
- self.check_fields_consistency('account.tax.template', 'account.tax', exceptions=['chart_template_id'])
- self.check_fields_consistency('account.tax', 'account.tax.template', exceptions=['company_id', 'country_id', 'real_amount'])
- self.check_fields_consistency('account.tax.repartition.line.template', 'account.tax.repartition.line', exceptions=['plus_report_expression_ids', 'minus_report_expression_ids'])
- self.check_fields_consistency('account.tax.repartition.line', 'account.tax.repartition.line.template', exceptions=['tag_ids', 'country_id', 'company_id', 'sequence'])
-
- def test_fiscal_position_fields(self):
- '''Test fields consistency for ('account.fiscal.position', 'account.fiscal.position.template')
- '''
- #main
- self.check_fields_consistency('account.fiscal.position.template', 'account.fiscal.position', exceptions=['chart_template_id'])
- self.check_fields_consistency('account.fiscal.position', 'account.fiscal.position.template', exceptions=['active', 'company_id', 'states_count', 'foreign_vat'])
- #taxes
- self.check_fields_consistency('account.fiscal.position.tax.template', 'account.fiscal.position.tax')
- self.check_fields_consistency('account.fiscal.position.tax', 'account.fiscal.position.tax.template')
- #accounts
- self.check_fields_consistency('account.fiscal.position.account.template', 'account.fiscal.position.account')
- self.check_fields_consistency('account.fiscal.position.account', 'account.fiscal.position.account.template')
-
- def test_reconcile_model_fields(self):
- '''Test fields consistency for ('account.reconcile.model', 'account.reconcile.model.template')
- '''
- self.check_fields_consistency('account.reconcile.model.template', 'account.reconcile.model', exceptions=['chart_template_id'])
- # exclude fields from inherited 'mail.thread'
- mail_thread_fields = [field.name for field in self.get_model_fields('mail.thread')]
- self.check_fields_consistency(
- 'account.reconcile.model',
- 'account.reconcile.model.template',
- exceptions=mail_thread_fields + ['active', 'company_id', 'past_months_limit', 'partner_mapping_line_ids'],
- )
- # lines
- self.check_fields_consistency('account.reconcile.model.line.template', 'account.reconcile.model.line', exceptions=['chart_template_id'])
- self.check_fields_consistency('account.reconcile.model.line', 'account.reconcile.model.line.template', exceptions=['company_id', 'journal_id', 'analytic_distribution', 'amount'])
-
- def test_account_group_fields(self):
- '''Test fields consistency for ('account.group', 'account.group.template')
- '''
- self.check_fields_consistency('account.group', 'account.group.template', exceptions=['company_id', 'parent_path'])
- self.check_fields_consistency('account.group.template', 'account.group', exceptions=['chart_template_id'])
diff --git a/addons/account/views/account_chart_template_views.xml b/addons/account/views/account_chart_template_views.xml
deleted file mode 100644
index ad8e09e7da2..00000000000
--- a/addons/account/views/account_chart_template_views.xml
+++ /dev/null
@@ -1,158 +0,0 @@
-
-
-
-
-
-
-
- account.tax.template.form
- account.tax.template
-
-
-
-
-
-
- account.tax.template.tree
- account.tax.template
-
-
-
-
-
-
-
-
-
- account.tax.template.search
- account.tax.template
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tax Templates
- account.tax.template
- tree,form
-
-
-
-
-
-
- account.fiscal.position.template.search
- account.fiscal.position.template
-
-
-
-
-
-
-
-
- account.fiscal.position.template.form
- account.fiscal.position.template
-
-
-
-
-
-
- account.fiscal.position.template.tree
- account.fiscal.position.template
-
-
-
-
-
-
-
-
-
diff --git a/addons/account/views/account_tax_views.xml b/addons/account/views/account_tax_views.xml
index 9c433b95829..15f2cea8679 100644
--- a/addons/account/views/account_tax_views.xml
+++ b/addons/account/views/account_tax_views.xml
@@ -228,23 +228,13 @@
+
+
-
-
-
-
+
+
+
@@ -256,17 +246,19 @@
account.tax.group
diff --git a/addons/l10n_ae/models/account_chart_template.py b/addons/l10n_ae/models/account_chart_template.py
index 923a1377c78..2114a42de06 100644
--- a/addons/l10n_ae/models/account_chart_template.py
+++ b/addons/l10n_ae/models/account_chart_template.py
@@ -1,39 +1,42 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import models
+from odoo import models, Command
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
+ @template('ae', 'account.journal')
+ def _get_ae_account_journal(self):
""" If UAE chart, we add 2 new journals TA and IFRS"""
- if self == self.env.ref('l10n_ae.uae_chart_template_standard'):
- if not journals_dict:
- journals_dict = []
- journals_dict.extend(
- [{"name": "Tax Adjustments", "company_id": company.id, "code": "TA", "type": "general", "sequence": 1,
- "favorite": True},
- {"name": "IFRS 16", "company_id": company.id, "code": "IFRS", "type": "general", "favorite": True,
- "sequence": 10}])
- return super()._prepare_all_journals(acc_template_ref, company, journals_dict=journals_dict)
+ return {
+ "tax_adjustment":{
+ "name": "Tax Adjustments",
+ "code": "TA",
+ "type": "general",
+ "show_on_dashboard": True,
+ "sequence": 1,
+ },
+ "ifrs16": {
+ "name": "IFRS 16",
+ "code": "IFRS",
+ "type": "general",
+ "show_on_dashboard": True,
+ "sequence": 10,
+ }
+ }
- def _load_template(self, company, code_digits=None, account_ref=None, taxes_ref=None):
- account_ref, taxes_ref = super(AccountChartTemplate, self)._load_template(company=company,
- code_digits=code_digits,
- account_ref=account_ref,
- taxes_ref=taxes_ref)
- if self == self.env.ref('l10n_ae.uae_chart_template_standard'):
- ifrs_journal = self.env['account.journal'].search(
- [('company_id', '=', company.id), ('code', '=', 'IFRS')]).id
- if ifrs_journal:
- ifrs_account_ids = [self.env.ref('l10n_ae.uae_account_100101').id,
- self.env.ref('l10n_ae.uae_account_100102').id,
- self.env.ref('l10n_ae.uae_account_400070').id]
- ifrs_accounts = self.env['account.account'].browse([account_ref.get(id) for id in ifrs_account_ids])
- for account in ifrs_accounts:
- account.allowed_journal_ids = [(4, ifrs_journal, 0)]
- self.env.ref('l10n_ae.ae_tax_group_5').write(
- {'property_tax_payable_account_id': account_ref.get(self.env.ref('l10n_ae.uae_account_202003').id),
- 'property_tax_receivable_account_id': account_ref.get(self.env.ref('l10n_ae.uae_account_100103').id)})
- return account_ref, taxes_ref
+ @template('ae', 'account.account')
+ def _get_ae_account_account(self):
+ return {
+ "uae_account_100101": {
+ 'allowed_journal_ids': [Command.link('ifrs16')],
+ },
+ "uae_account_100102": {
+ 'allowed_journal_ids': [Command.link('ifrs16')],
+ },
+ "uae_account_400070": {
+ 'allowed_journal_ids': [Command.link('ifrs16')],
+ },
+ }
diff --git a/addons/l10n_ar/demo/account_demo.py b/addons/l10n_ar/demo/account_demo.py
index 906794fe33b..b4ebc25cdd8 100644
--- a/addons/l10n_ar/demo/account_demo.py
+++ b/addons/l10n_ar/demo/account_demo.py
@@ -3,41 +3,43 @@ import logging
from odoo import api, models
-_logger = logging.getLogger(__name__)
-
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = "account.chart.template"
@api.model
- def _get_demo_data(self):
- ref = self.env.ref
+ def _get_demo_data(self, company=False):
+ demo_data = super()._get_demo_data(company)
+ if company in (
+ self.env.ref('l10n_ar.company_mono', raise_if_not_found=False),
+ self.env.ref('l10n_ar.company_exento', raise_if_not_found=False),
+ self.env.ref('l10n_ar.company_ri', raise_if_not_found=False),
+ ):
+ # Do not load generic demo data on these companies
+ return {}
- # Do not load generic demo data on these companies
- ar_demo_companies = (
- ref('l10n_ar.company_mono', raise_if_not_found=False),
- ref('l10n_ar.company_exento', raise_if_not_found=False),
- ref('l10n_ar.company_ri', raise_if_not_found=False),
- )
- if self.env.company in ar_demo_companies:
- return []
-
- yield ('res.partner', {
- 'base.res_partner_12': {
- 'l10n_ar_afip_responsibility_type_id': ref('l10n_ar.res_IVARI').id,
- },
- 'base.res_partner_2': {
- 'l10n_ar_afip_responsibility_type_id': ref('l10n_ar.res_IVARI').id,
- },
- })
- for model, data in super()._get_demo_data():
- yield model, data
+ if company.account_fiscal_country_id.code == "AR":
+ demo_data.setdefault('res.partner', {})
+ demo_data['account.move'] = demo_data.pop('account.move')
+ demo_data['res.partner'].setdefault('base.res_partner_2', {})
+ demo_data['res.partner']['base.res_partner_2']['l10n_ar_afip_responsibility_type_id'] = 'l10n_ar.res_IVARI'
+ demo_data['res.partner'].setdefault('base.res_partner_12', {})
+ demo_data['res.partner']['base.res_partner_12']['l10n_ar_afip_responsibility_type_id'] = 'l10n_ar.res_IVARI'
+ return demo_data
@api.model
- def _get_demo_data_move(self):
- cid = self.env.company.id
- model, data = super()._get_demo_data_move()
- if self.env.company.account_fiscal_country_id.code == "AR":
- data[f'{cid}_demo_invoice_5']['l10n_latam_document_number'] = '1-1'
- data[f'{cid}_demo_invoice_equipment_purchase']['l10n_latam_document_number'] = '1-2'
- return model, data
+ def _get_demo_data_move(self, company=False):
+ data = super()._get_demo_data_move(company)
+ if company.account_fiscal_country_id.code == "AR":
+ data['demo_invoice_5']['l10n_latam_document_number'] = '1-1'
+ data['demo_invoice_equipment_purchase']['l10n_latam_document_number'] = '1-2'
+ return data
+
+ def _post_load_demo_data(self, company=False):
+ if company not in (
+ self.env.ref('l10n_ar.company_mono', raise_if_not_found=False),
+ self.env.ref('l10n_ar.company_exento', raise_if_not_found=False),
+ self.env.ref('l10n_ar.company_ri', raise_if_not_found=False),
+ ):
+ # Do not load generic demo data on these companies
+ return super()._post_load_demo_data(company)
diff --git a/addons/l10n_ar/demo/account_supplier_invoice_demo.xml b/addons/l10n_ar/demo/account_supplier_invoice_demo.xml
index 4a08e434d32..2b8cf4611a4 100644
--- a/addons/l10n_ar/demo/account_supplier_invoice_demo.xml
+++ b/addons/l10n_ar/demo/account_supplier_invoice_demo.xml
@@ -163,32 +163,32 @@
(0, 0, {
'name': 'FOB Total',
'price_unit': 28936.06,
- 'tax_ids': [(6, 0, [ref('l10n_ar.{}_ri_tax_vat_21_compras'.format(ref('company_ri')))])],
+ 'tax_ids': [(6, 0, [ref('account.{}_ri_tax_vat_21_compras'.format(ref('company_ri')))])],
}),
(0, 0, {
'name': 'Flete',
'price_unit': 1350.00,
- 'tax_ids': [(6, 0, [ref('l10n_ar.{}_ri_tax_vat_21_compras'.format(ref('company_ri')))])],
+ 'tax_ids': [(6, 0, [ref('account.{}_ri_tax_vat_21_compras'.format(ref('company_ri')))])],
}),
(0, 0, {
'name': 'Seguro',
'price_unit': 130.21,
- 'tax_ids': [(6, 0, [ref('l10n_ar.{}_ri_tax_vat_21_compras'.format(ref('company_ri')))])],
+ 'tax_ids': [(6, 0, [ref('account.{}_ri_tax_vat_21_compras'.format(ref('company_ri')))])],
}),
(0, 0, {
'name': '-FOB Total',
'price_unit': -28936.06,
- 'tax_ids': [(6, 0, [ref('l10n_ar.{}_ri_tax_vat_no_gravado_compras'.format(ref('company_ri')))])],
+ 'tax_ids': [(6, 0, [ref('account.{}_ri_tax_vat_no_gravado_compras'.format(ref('company_ri')))])],
}),
(0, 0, {
'name': '-Flete',
'price_unit': -1350.00,
- 'tax_ids': [(6, 0, [ref('l10n_ar.{}_ri_tax_vat_no_gravado_compras'.format(ref('company_ri')))])],
+ 'tax_ids': [(6, 0, [ref('account.{}_ri_tax_vat_no_gravado_compras'.format(ref('company_ri')))])],
}),
(0, 0, {
'name': '-Seguro',
'price_unit': -130.21,
- 'tax_ids': [(6, 0, [ref('l10n_ar.{}_ri_tax_vat_no_gravado_compras'.format(ref('company_ri')))])],
+ 'tax_ids': [(6, 0, [ref('account.{}_ri_tax_vat_no_gravado_compras'.format(ref('company_ri')))])],
}),
]"/>
diff --git a/addons/l10n_ar/demo/account_tax_demo.xml b/addons/l10n_ar/demo/account_tax_demo.xml
index 3202f812999..78451d8b464 100644
--- a/addons/l10n_ar/demo/account_tax_demo.xml
+++ b/addons/l10n_ar/demo/account_tax_demo.xml
@@ -13,8 +13,8 @@
(0,0, {
'repartition_type': 'tax',
'account_id': obj().search([
- ('company_id', '=', obj().env.ref('l10n_ar.company_ri').id),
- ('group_id', '=', obj().env.ref('l10n_ar.account_group_otros_impuestos').id)
+ ('company_id', '=', ref('company_ri')),
+ ('group_id', '=', ref('account.{}_account_group_otros_impuestos'.format(ref('company_ri'))))
], limit=1).id,
}),
]"/>
@@ -24,13 +24,13 @@
(0,0, {
'repartition_type': 'tax',
'account_id': obj().search([
- ('company_id', '=', obj().env.ref('l10n_ar.company_ri').id),
- ('group_id', '=', obj().env.ref('l10n_ar.account_group_otros_impuestos').id)
+ ('company_id', '=', ref('company_ri')),
+ ('group_id', '=', ref('account.{}_account_group_otros_impuestos'.format(ref('company_ri'))))
], limit=1).id,
}),
]"/>
sale
-
+
@@ -46,8 +46,8 @@
(0,0, {
'repartition_type': 'tax',
'account_id': obj().search([
- ('company_id', '=', obj().env.ref('l10n_ar.company_ri').id),
- ('group_id', '=', obj().env.ref('l10n_ar.account_group_otros_impuestos').id)
+ ('company_id', '=', ref('company_ri')),
+ ('group_id', '=', ref('account.{}_account_group_otros_impuestos'.format(ref('company_ri'))))
], limit=1).id,
}),
@@ -58,13 +58,13 @@
(0,0, {
'repartition_type': 'tax',
'account_id': obj().search([
- ('company_id', '=', obj().env.ref('l10n_ar.company_ri').id),
- ('group_id', '=', obj().env.ref('l10n_ar.account_group_otros_impuestos').id)
+ ('company_id', '=', ref('company_ri')),
+ ('group_id', '=', ref('account.{}_account_group_otros_impuestos'.format(ref('company_ri'))))
], limit=1).id,
}),
]"/>
purchase
-
+
@@ -72,13 +72,13 @@
diff --git a/addons/l10n_ar/models/__init__.py b/addons/l10n_ar/models/__init__.py
index 02a1d06c8aa..534c2a47400 100644
--- a/addons/l10n_ar/models/__init__.py
+++ b/addons/l10n_ar/models/__init__.py
@@ -5,7 +5,6 @@ from . import l10n_ar_afip_responsibility_type
from . import account_journal
from . import account_tax_group
from . import account_fiscal_position
-from . import account_fiscal_position_template
from . import l10n_latam_document_type
from . import res_partner
from . import res_country
diff --git a/addons/l10n_ar/models/account_chart_template.py b/addons/l10n_ar/models/account_chart_template.py
index 2545699bb25..78739dc765d 100644
--- a/addons/l10n_ar/models/account_chart_template.py
+++ b/addons/l10n_ar/models/account_chart_template.py
@@ -1,59 +1,46 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, api, _
-from odoo.exceptions import UserError
-from odoo.http import request
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
-
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- def _get_fp_vals(self, company, position):
- res = super()._get_fp_vals(company, position)
- if company.country_id.code == "AR":
- res['l10n_ar_afip_responsibility_type_ids'] = [
- (6, False, position.l10n_ar_afip_responsibility_type_ids.ids)]
- return res
-
- def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
+ @template('ar_base', 'account.journal')
+ def _get_ar_account_journal(self):
""" In case of an Argentinean CoA, we modify the default values of the sales journal to be a preprinted journal"""
- res = super()._prepare_all_journals(acc_template_ref, company, journals_dict=journals_dict)
- if company.country_id.code == "AR":
- for vals in res:
- if vals['type'] == 'sale':
- vals.update({
- "name": "Ventas Preimpreso",
- "code": "0001",
- "l10n_ar_afip_pos_number": 1,
- "l10n_ar_afip_pos_partner_id": company.partner_id.id,
- "l10n_ar_afip_pos_system": 'II_IM',
- "refund_sequence": False
- })
- return res
+ return {
+ 'sale': {
+ "name": "Ventas Preimpreso",
+ "code": "0001",
+ "l10n_ar_afip_pos_number": 1,
+ "l10n_ar_afip_pos_partner_id": self.env.company.partner_id.id,
+ "l10n_ar_afip_pos_system": 'II_IM',
+ "refund_sequence": False,
+ },
+ }
@api.model
- def _get_ar_responsibility_match(self, chart_template_id):
- """ return responsibility type that match with the given chart_template_id
+ def _get_ar_responsibility_match(self, chart_template):
+ """ return responsibility type that match with the given chart_template code
"""
match = {
- self.env.ref('l10n_ar.l10nar_base_chart_template').id: self.env.ref('l10n_ar.res_RM'),
- self.env.ref('l10n_ar.l10nar_ex_chart_template').id: self.env.ref('l10n_ar.res_IVAE'),
- self.env.ref('l10n_ar.l10nar_ri_chart_template').id: self.env.ref('l10n_ar.res_IVARI'),
+ 'ar_base': self.env.ref('l10n_ar.res_RM'),
+ 'ar_ex': self.env.ref('l10n_ar.res_IVAE'),
+ 'ar_ri': self.env.ref('l10n_ar.res_IVARI'),
}
- return match.get(chart_template_id)
+ return match.get(chart_template)
- def _load(self, company):
+ def _load(self, template_code, company, install_demo):
""" Set companies AFIP Responsibility and Country if AR CoA is installed, also set tax calculation rounding
method required in order to properly validate match AFIP invoices.
Also, raise a warning if the user is trying to install a CoA that does not match with the defined AFIP
Responsibility defined in the company
"""
- self.ensure_one()
- coa_responsibility = self._get_ar_responsibility_match(self.id)
+ coa_responsibility = self._get_ar_responsibility_match(template_code)
if coa_responsibility:
- company_responsibility = company.l10n_ar_afip_responsibility_type_id
company.write({
'l10n_ar_afip_responsibility_type_id': coa_responsibility.id,
'country_id': self.env['res.country'].search([('code', '=', 'AR')]).id,
@@ -63,11 +50,10 @@ class AccountChartTemplate(models.Model):
# the default VAT type.
company.partner_id.l10n_latam_identification_type_id = self.env.ref('l10n_ar.it_cuit')
- res = super()._load(company)
+ res = super()._load(template_code, company, install_demo)
# If Responsable Monotributista remove the default purchase tax
- if self == self.env.ref('l10n_ar.l10nar_base_chart_template') or \
- self == self.env.ref('l10n_ar.l10nar_ex_chart_template'):
+ if template_code in ('ar_base', 'ar_ex'):
company.account_purchase_tax_id = self.env['account.tax']
return res
diff --git a/addons/l10n_ar/models/account_fiscal_position_template.py b/addons/l10n_ar/models/account_fiscal_position_template.py
deleted file mode 100644
index 8b6e3c0f945..00000000000
--- a/addons/l10n_ar/models/account_fiscal_position_template.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import fields, models
-
-
-class AccountFiscalPositionTemplate(models.Model):
-
- _inherit = 'account.fiscal.position.template'
-
- l10n_ar_afip_responsibility_type_ids = fields.Many2many(
- 'l10n_ar.afip.responsibility.type', 'l10n_ar_afip_reponsibility_type_fiscal_pos_temp_rel',
- string='AFIP Responsibility Types')
diff --git a/addons/l10n_ar/models/account_move.py b/addons/l10n_ar/models/account_move.py
index 1df20af7e82..ea292383f90 100644
--- a/addons/l10n_ar/models/account_move.py
+++ b/addons/l10n_ar/models/account_move.py
@@ -268,7 +268,7 @@ class AccountMove(models.Model):
if any(tax.tax_group_id.l10n_ar_vat_afip_code and tax.tax_group_id.l10n_ar_vat_afip_code not in ['0', '1', '2'] for tax in line.tax_ids):
vat_taxable |= line
- profits_tax_group = self.env.ref('l10n_ar.tax_group_percepcion_ganancias')
+ profits_tax_group = self.env.ref(f'account.{self.company_id.id}_tax_group_percepcion_ganancias')
return {'vat_amount': sign * sum(vat_taxes.mapped(amount_field)),
# For invoices of letter C should not pass VAT
'vat_taxable_amount': sign * sum(vat_taxable.mapped(amount_field)) if self.l10n_latam_document_type_id.l10n_ar_letter != 'C' else self.amount_untaxed,
diff --git a/addons/l10n_ar/models/res_company.py b/addons/l10n_ar/models/res_company.py
index afb5c050d52..d8710ec3ba3 100644
--- a/addons/l10n_ar/models/res_company.py
+++ b/addons/l10n_ar/models/res_company.py
@@ -39,6 +39,6 @@ class ResCompany(models.Model):
def _check_accounting_info(self):
""" Do not let to change the AFIP Responsibility of the company if there is already installed a chart of
account and if there has accounting entries """
- if self.env['account.chart.template'].existing_accounting(self):
+ if self._existing_accounting():
raise ValidationError(_(
'Could not change the AFIP Responsibility of this company because there are already accounting entries.'))
diff --git a/addons/l10n_ar/tests/common.py b/addons/l10n_ar/tests/common.py
index c99fc1e22db..07a139a534e 100644
--- a/addons/l10n_ar/tests/common.py
+++ b/addons/l10n_ar/tests/common.py
@@ -12,7 +12,7 @@ _logger = logging.getLogger(__name__)
class TestAr(AccountTestInvoicingCommon):
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_ar.l10nar_ri_chart_template'):
+ def setUpClass(cls, chart_template_ref='ar_ri'):
super(TestAr, cls).setUpClass(chart_template_ref=chart_template_ref)
# ==== Company ====
@@ -43,7 +43,7 @@ class TestAr(AccountTestInvoicingCommon):
cls.partner_ri = cls.company_ri.partner_id
# ==== Company MONO ====
- cls.company_mono = cls.setup_company_data('(AR) Monotributista (Unit Tests)', chart_template=cls.env.ref('l10n_ar.l10nar_base_chart_template'))['company']
+ cls.company_mono = cls.setup_company_data('(AR) Monotributista (Unit Tests)', chart_template=chart_template_ref)['company']
cls.company_mono.write({
'parent_id': cls.env.ref('base.main_company').id,
'currency_id': cls.env.ref('base.ARS').id,
@@ -719,7 +719,7 @@ class TestAr(AccountTestInvoicingCommon):
res = self.env['account.tax'].with_context(active_test=False).search([
('type_tax_use', '=', type_tax_use),
('company_id', '=', self.env.company.id),
- ('tax_group_id', '=', self.env.ref('l10n_ar.tax_group_' + tax_type).id)], limit=1)
+ ('tax_group_id', '=', self.env.ref(f'account.{self.env.company.id}_tax_group_{tax_type}').id)], limit=1)
self.assertTrue(res, '%s Tax was not found' % (tax_type))
return res
diff --git a/addons/l10n_ar_website_sale/demo/website_demo.xml b/addons/l10n_ar_website_sale/demo/website_demo.xml
index ff35d98c716..dc48249cfc1 100644
--- a/addons/l10n_ar_website_sale/demo/website_demo.xml
+++ b/addons/l10n_ar_website_sale/demo/website_demo.xml
@@ -17,7 +17,7 @@
-
+
diff --git a/addons/l10n_at/models/chart_template.py b/addons/l10n_at/models/chart_template.py
index 3b6da3ee7f7..d720b0ca05f 100644
--- a/addons/l10n_at/models/chart_template.py
+++ b/addons/l10n_at/models/chart_template.py
@@ -1,16 +1,16 @@
# -*- coding: utf-8 -*-
from odoo import models
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- # Write paperformat and report template used on company
- def _load(self, company):
- res = super(AccountChartTemplate, self)._load(company)
- if self == self.env.ref('l10n_at.l10n_at_chart_template'):
- company.write({
- 'external_report_layout_id': self.env.ref('l10n_din5008.external_layout_din5008').id,
- 'paperformat_id': self.env.ref('l10n_din5008.paperformat_euro_din').id
- })
- return res
+ @template('at', 'res.company')
+ def _get_at_res_company(self):
+ company_data = super()._get_at_res_company()
+ company_data[self.env.company.id].update({
+ 'external_report_layout_id': 'l10n_din5008.external_layout_din5008',
+ 'paperformat_id': 'l10n_din5008.paperformat_euro_din',
+ })
+ return company_data
diff --git a/addons/l10n_be/__init__.py b/addons/l10n_be/__init__.py
index 3de09c7cd0b..ea1ce1e721d 100644
--- a/addons/l10n_be/__init__.py
+++ b/addons/l10n_be/__init__.py
@@ -1,7 +1,3 @@
-# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
from . import models
-
-def load_translations(env):
- env.ref('l10n_be.l10nbe_chart_template').process_coa_translations()
+from . import demo
diff --git a/addons/l10n_be/__manifest__.py b/addons/l10n_be/__manifest__.py
index 025da614498..947377fdcb5 100644
--- a/addons/l10n_be/__manifest__.py
+++ b/addons/l10n_be/__manifest__.py
@@ -57,9 +57,7 @@ Wizards provided by this module:
'data/menuitem_data.xml',
],
'demo': [
- 'demo/l10n_be_demo.xml',
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_be/demo/__init__.py b/addons/l10n_be/demo/__init__.py
new file mode 100644
index 00000000000..7eaefb929bf
--- /dev/null
+++ b/addons/l10n_be/demo/__init__.py
@@ -0,0 +1 @@
+from . import account_demo
diff --git a/addons/l10n_be/demo/account_demo.py b/addons/l10n_be/demo/account_demo.py
new file mode 100644
index 00000000000..f68a8bd0f85
--- /dev/null
+++ b/addons/l10n_be/demo/account_demo.py
@@ -0,0 +1,20 @@
+from odoo import api, models, Command
+
+
+class AccountChartTemplate(models.AbstractModel):
+ _inherit = "account.chart.template"
+
+ @api.model
+ def _get_demo_data(self, company=False):
+ demo_data = super()._get_demo_data(company)
+ if company.account_fiscal_country_id.code == 'BE':
+ cid = company.id
+ demo_data['account.account'] = {
+ f"account.{cid}_a100": {'tag_ids': [Command.link(self.env.ref('account.demo_capital_account').id)]},
+ f"account.{cid}_a300": {'tag_ids': [Command.link(self.env.ref('account.demo_stock_account').id)]},
+ f"account.{cid}_a7600": {'tag_ids': [Command.link(self.env.ref('account.demo_sale_of_land_account').id)]},
+ f"account.{cid}_a6201": {'tag_ids': [Command.link(self.env.ref('account.demo_ceo_wages_account').id)]},
+ f"account.{cid}_a242": {'tag_ids': [Command.link(self.env.ref('account.demo_office_furniture_account').id)]},
+ }
+
+ return demo_data
diff --git a/addons/l10n_be/demo/l10n_be_demo.xml b/addons/l10n_be/demo/l10n_be_demo.xml
deleted file mode 100644
index 43966f613a2..00000000000
--- a/addons/l10n_be/demo/l10n_be_demo.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/l10n_be/models/account_chart_template.py b/addons/l10n_be/models/account_chart_template.py
index 150af383f21..3fcbc2cc879 100644
--- a/addons/l10n_be/models/account_chart_template.py
+++ b/addons/l10n_be/models/account_chart_template.py
@@ -2,16 +2,15 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, models
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- @api.model
- def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
- journal_data = super(AccountChartTemplate, self)._prepare_all_journals(
- acc_template_ref, company, journals_dict)
- for journal in journal_data:
- if journal['type'] in ('sale', 'purchase') and company.country_id.code == "BE":
- journal.update({'refund_sequence': True})
- return journal_data
+ @template('be', 'account.journal')
+ def _get_be_account_journal(self):
+ return {
+ 'sale': {'refund_sequence': True},
+ 'purchase': {'refund_sequence': True},
+ }
diff --git a/addons/l10n_bg/__init__.py b/addons/l10n_bg/__init__.py
index c68f4b60f0e..67dee8c60db 100644
--- a/addons/l10n_bg/__init__.py
+++ b/addons/l10n_bg/__init__.py
@@ -1,5 +1,2 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-def load_translations(env):
- env.ref('l10n_bg.l10n_bg_chart_template').process_coa_translations()
diff --git a/addons/l10n_bg/__manifest__.py b/addons/l10n_bg/__manifest__.py
index 30696f1028b..f3be2f22b46 100644
--- a/addons/l10n_bg/__manifest__.py
+++ b/addons/l10n_bg/__manifest__.py
@@ -24,6 +24,5 @@
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_bo/__init__.py b/addons/l10n_bo/__init__.py
index 747fcc72c84..67dee8c60db 100644
--- a/addons/l10n_bo/__init__.py
+++ b/addons/l10n_bo/__init__.py
@@ -1,5 +1,2 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-def load_translations(env):
- env.ref('l10n_bo.bo_chart_template').process_coa_translations()
diff --git a/addons/l10n_bo/__manifest__.py b/addons/l10n_bo/__manifest__.py
index 7ed7640366e..0b1351b28ce 100644
--- a/addons/l10n_bo/__manifest__.py
+++ b/addons/l10n_bo/__manifest__.py
@@ -30,5 +30,4 @@ Plan contable boliviano e impuestos de acuerdo a disposiciones vigentes
'demo/demo_company.xml',
],
'license': 'LGPL-3',
- 'post_init_hook': 'load_translations',
}
diff --git a/addons/l10n_br/__init__.py b/addons/l10n_br/__init__.py
index 9aca82f562c..e9878d0df1d 100644
--- a/addons/l10n_br/__init__.py
+++ b/addons/l10n_br/__init__.py
@@ -2,8 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
# Copyright (C) 2009 Renato Lima - Akretion
-
-from . import models
-
-def load_translations(env):
- env.ref("l10n_br.l10n_br_account_chart_template").process_coa_translations()
diff --git a/addons/l10n_br/__manifest__.py b/addons/l10n_br/__manifest__.py
index 187d7181de1..6813a274f36 100644
--- a/addons/l10n_br/__manifest__.py
+++ b/addons/l10n_br/__manifest__.py
@@ -63,5 +63,4 @@ come with any additional paid permission for online use of 'private modules'.
'demo/demo_company.xml',
],
'license': 'LGPL-3',
- 'post_init_hook': 'load_translations',
}
diff --git a/addons/l10n_br/models/__init__.py b/addons/l10n_br/models/__init__.py
index dbf13a5e804..caff68b6603 100644
--- a/addons/l10n_br/models/__init__.py
+++ b/addons/l10n_br/models/__init__.py
@@ -4,8 +4,6 @@
# Copyright (C) 2009 Renato Lima - Akretion
from . import account
-from . import account_fiscal_position_template
from . import account_fiscal_position
-from . import account_chart_template
-from . import res_company
from . import res_partner
+from . import res_company
diff --git a/addons/l10n_br/models/account.py b/addons/l10n_br/models/account.py
index 1c8816f0aa3..c433eae9bf7 100644
--- a/addons/l10n_br/models/account.py
+++ b/addons/l10n_br/models/account.py
@@ -4,18 +4,6 @@
from odoo import fields, models
-class AccountTaxTemplate(models.Model):
- """ Add fields used to define some brazilian taxes """
- _inherit = 'account.tax.template'
-
- tax_discount = fields.Boolean(string='Discount this Tax in Price',
- help="Mark it for (ICMS, PIS e etc.).")
- base_reduction = fields.Float(string='Redution', digits=0, required=True,
- help="Um percentual decimal em % entre 0-1.", default=0)
- amount_mva = fields.Float(string='MVA Percent', digits=0, required=True,
- help="Um percentual decimal em % entre 0-1.", default=0)
-
-
class AccountTax(models.Model):
""" Add fields used to define some brazilian taxes """
_inherit = 'account.tax'
diff --git a/addons/l10n_br/models/account_chart_template.py b/addons/l10n_br/models/account_chart_template.py
deleted file mode 100644
index f1129da2551..00000000000
--- a/addons/l10n_br/models/account_chart_template.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from odoo import models
-
-
-class AccountChartTemplate(models.Model):
- _inherit = 'account.chart.template'
-
- def _get_fp_vals(self, company, position):
- res = super()._get_fp_vals(company, position)
- if company.country_id.code == 'BR':
- res['l10n_br_fp_type'] = position['l10n_br_fp_type']
- return res
diff --git a/addons/l10n_br/models/account_fiscal_position_template.py b/addons/l10n_br/models/account_fiscal_position_template.py
deleted file mode 100644
index 35f4bd2ce7e..00000000000
--- a/addons/l10n_br/models/account_fiscal_position_template.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import fields, models
-
-
-class AccountFiscalPositionTemplate(models.Model):
- _inherit = 'account.fiscal.position.template'
-
- l10n_br_fp_type = fields.Selection(
- selection=[
- ('internal', 'Internal'),
- ('ss_nnm', 'South/Southeast selling to North/Northeast/Midwest'),
- ('interstate', 'Other interstate'),
- ],
- string='Interstate Fiscal Position Type',
- )
diff --git a/addons/l10n_br/views/account_view.xml b/addons/l10n_br/views/account_view.xml
index 64e84d638fb..2bda5a839f7 100644
--- a/addons/l10n_br/views/account_view.xml
+++ b/addons/l10n_br/views/account_view.xml
@@ -1,21 +1,5 @@
-
-
- l10n_br_account.tax.template.form
- account.tax.template
-
-
-
-
-
-
-
-
-
-
-
-
l10n_br_account.tax.form
account.tax
diff --git a/addons/l10n_ca/__init__.py b/addons/l10n_ca/__init__.py
index a924c5e6627..bad6e3f9965 100644
--- a/addons/l10n_ca/__init__.py
+++ b/addons/l10n_ca/__init__.py
@@ -4,7 +4,3 @@
# Copyright (C) 2010 Savoir-faire Linux ().
from . import models
-
-
-def load_translations(env):
- env.ref('l10n_ca.ca_en_chart_template_en').process_coa_translations()
diff --git a/addons/l10n_ca/__manifest__.py b/addons/l10n_ca/__manifest__.py
index 06042508054..dfceb4d4a01 100644
--- a/addons/l10n_ca/__manifest__.py
+++ b/addons/l10n_ca/__manifest__.py
@@ -55,6 +55,5 @@ position.
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_ch/__init__.py b/addons/l10n_ch/__init__.py
index b395b37d846..5c088ee515f 100644
--- a/addons/l10n_ch/__init__.py
+++ b/addons/l10n_ch/__init__.py
@@ -6,10 +6,6 @@ from . import report
from . import wizard
-def load_translations(env):
- env.ref('l10n_ch.l10nch_chart_template').process_coa_translations()
-
-
def init_settings(env):
'''If the company is localized in Switzerland, activate the cash rounding by default.
'''
@@ -24,5 +20,4 @@ def init_settings(env):
def post_init(env):
- load_translations(env)
init_settings(env)
diff --git a/addons/l10n_ch/models/chart_template.py b/addons/l10n_ch/models/chart_template.py
index aff56a1b711..a431226b6c0 100644
--- a/addons/l10n_ch/models/chart_template.py
+++ b/addons/l10n_ch/models/chart_template.py
@@ -1,16 +1,16 @@
# -*- coding: utf-8 -*-
from odoo import models
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- # Write paperformat and report template used on company
- def _load(self, company):
- res = super(AccountChartTemplate, self)._load(company)
- if self == self.env.ref('l10n_ch.l10nch_chart_template'):
- company.write({
- 'external_report_layout_id': self.env.ref('l10n_din5008.external_layout_din5008').id,
- 'paperformat_id': self.env.ref('l10n_din5008.paperformat_euro_din').id
- })
- return res
+ @template('ch', 'res.company')
+ def _get_ch_res_company(self):
+ company_data = super()._get_ch_res_company()
+ company_data[self.env.company.id].update({
+ 'external_report_layout_id': 'l10n_din5008.external_layout_din5008',
+ 'paperformat_id': 'l10n_din5008.paperformat_euro_din',
+ })
+ return company_data
diff --git a/addons/l10n_ch/models/res_bank.py b/addons/l10n_ch/models/res_bank.py
index a06542d2d81..3c5dc697bfb 100644
--- a/addons/l10n_ch/models/res_bank.py
+++ b/addons/l10n_ch/models/res_bank.py
@@ -388,5 +388,6 @@ class ResPartnerBank(models.Model):
@api.model
def _get_available_qr_methods(self):
rslt = super()._get_available_qr_methods()
- rslt.append(('ch_qr', _("Swiss QR bill"), 10))
+ if self.env.company.country_id.code == 'CH':
+ rslt.append(('ch_qr', _("Swiss QR bill"), 10))
return rslt
diff --git a/addons/l10n_ch/tests/test_ch_qr_code.py b/addons/l10n_ch/tests/test_ch_qr_code.py
index f0a03f9887d..08b5aa1e16b 100644
--- a/addons/l10n_ch/tests/test_ch_qr_code.py
+++ b/addons/l10n_ch/tests/test_ch_qr_code.py
@@ -12,11 +12,11 @@ class TestSwissQRCode(AccountTestInvoicingCommon):
"""
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_ch.l10nch_chart_template'):
+ def setUpClass(cls, chart_template_ref='ch'):
super().setUpClass(chart_template_ref=chart_template_ref)
cls.company_data['company'].qr_code = True
- cls.company_data['company'].country_id = None
+ cls.company_data['company'].country_id = cls.env.ref('base.ch')
cls.swiss_iban = cls.env['res.partner.bank'].create({
'acc_number': 'CH15 3881 5158 3845 3843 7',
@@ -58,6 +58,9 @@ class TestSwissQRCode(AccountTestInvoicingCommon):
"""
self.ch_qr_invoice.qr_code_method = 'ch_qr'
+ # flush manually to have the right env to get possible values of `qr_code_method`
+ self.env.flush_all()
+
# First check with a regular IBAN
with self.assertRaises(UserError, msg="It shouldn't be possible to generate a Swiss QR-code for partners without a complete Swiss address."):
self.ch_qr_invoice._generate_qr_code()
diff --git a/addons/l10n_ch/tests/test_gen_isr_reference.py b/addons/l10n_ch/tests/test_gen_isr_reference.py
index 046a2e72f3f..bf9564a920e 100644
--- a/addons/l10n_ch/tests/test_gen_isr_reference.py
+++ b/addons/l10n_ch/tests/test_gen_isr_reference.py
@@ -13,7 +13,7 @@ class TestGenISRReference(AccountTestInvoicingCommon):
"""Check condition of generation of and content of the structured ref"""
@classmethod
- def setUpClass(cls, chart_template_ref="l10n_ch.l10nch_chart_template"):
+ def setUpClass(cls, chart_template_ref="ch"):
super().setUpClass(chart_template_ref=chart_template_ref)
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
cls.bank = cls.env["res.bank"].create(
diff --git a/addons/l10n_ch/tests/test_l10n_ch_isr_print.py b/addons/l10n_ch/tests/test_l10n_ch_isr_print.py
index a28501f540a..026fca0668b 100644
--- a/addons/l10n_ch/tests/test_l10n_ch_isr_print.py
+++ b/addons/l10n_ch/tests/test_l10n_ch_isr_print.py
@@ -9,7 +9,7 @@ from odoo.exceptions import ValidationError
class ISRTest(AccountTestInvoicingCommon):
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_ch.l10nch_chart_template'):
+ def setUpClass(cls, chart_template_ref='ch'):
super().setUpClass(chart_template_ref=chart_template_ref)
def print_isr(self, invoice):
diff --git a/addons/l10n_ch/tests/test_l10n_ch_qr_print.py b/addons/l10n_ch/tests/test_l10n_ch_qr_print.py
index 6da8bb5b7e4..077d8d14d3a 100644
--- a/addons/l10n_ch/tests/test_l10n_ch_qr_print.py
+++ b/addons/l10n_ch/tests/test_l10n_ch_qr_print.py
@@ -12,7 +12,7 @@ _logger = logging.getLogger(__name__)
class QRPrintTest(AccountTestInvoicingCommon):
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_ch.l10nch_chart_template'):
+ def setUpClass(cls, chart_template_ref='ch'):
super().setUpClass(chart_template_ref=chart_template_ref)
# the partner must be located in Switzerland.
cls.partner = cls.env['res.partner'].create({
diff --git a/addons/l10n_ch/tests/test_swissqr.py b/addons/l10n_ch/tests/test_swissqr.py
index 32ac6bc74b6..d19a25332cc 100644
--- a/addons/l10n_ch/tests/test_swissqr.py
+++ b/addons/l10n_ch/tests/test_swissqr.py
@@ -14,7 +14,7 @@ QR_IBAN = 'CH21 3080 8001 2345 6782 7'
class TestSwissQR(AccountTestInvoicingCommon):
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_ch.l10nch_chart_template'):
+ def setUpClass(cls, chart_template_ref='ch'):
super().setUpClass(chart_template_ref=chart_template_ref)
def setUp(self):
diff --git a/addons/l10n_cl/__init__.py b/addons/l10n_cl/__init__.py
index 16c39ce7bd7..0573c49be44 100644
--- a/addons/l10n_cl/__init__.py
+++ b/addons/l10n_cl/__init__.py
@@ -2,8 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
from . import demo
-from odoo import api, SUPERUSER_ID
-
-def load_translations(cr, registry):
- env = api.Environment(cr, SUPERUSER_ID, {})
- env.ref('l10n_cl.cl_chart_template').process_coa_translations()
diff --git a/addons/l10n_cl/demo/account_demo.py b/addons/l10n_cl/demo/account_demo.py
index bd069851b3d..2475e0a64b5 100644
--- a/addons/l10n_cl/demo/account_demo.py
+++ b/addons/l10n_cl/demo/account_demo.py
@@ -6,38 +6,36 @@ from odoo import api, models
_logger = logging.getLogger(__name__)
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = "account.chart.template"
@api.model
- def _get_demo_data(self):
- yield ('res.partner', {
- 'base.res_partner_12': {
- 'l10n_cl_sii_taxpayer_type': '4',
- },
- 'base.res_partner_2': {
- 'l10n_cl_sii_taxpayer_type': '4',
- },
- })
- yield ('l10n_latam.document.type', {
- 'l10n_cl.dc_fe_dte': {'active': True},
- })
- for model, data in super()._get_demo_data():
- yield model, data
+ def _get_demo_data(self, company=False):
+ data = super()._get_demo_data(company)
+ if company.account_fiscal_country_id.code == "CL":
+ data.setdefault('res.partner', {})
+ data['res.partner'].setdefault('base.res_partner_2', {})
+ data['res.partner']['base.res_partner_2']['l10n_cl_sii_taxpayer_type'] = '4'
+ data['res.partner'].setdefault('base.res_partner_12', {})
+ data['res.partner']['base.res_partner_12']['l10n_cl_sii_taxpayer_type'] = '4'
+
+ data.setdefault('l10n_latam.document.type', {})
+ data['l10n_latam.document.type'].setdefault('l10n_cl.dc_fe_dte', {})
+ data['l10n_latam.document.type']['l10n_cl.dc_fe_dte']['active'] = True
+ return data
@api.model
- def _get_demo_data_move(self):
+ def _get_demo_data_move(self, company=False):
ref = self.env.ref
- cid = self.env.company.id
- model, data = super()._get_demo_data_move()
- if self.env.company.account_fiscal_country_id.code == "CL":
+ move_data = super()._get_demo_data_move(company)
+ if company.account_fiscal_country_id.code == "CL":
foreign = ref('l10n_cl.dc_fe_dte').id
self.env['account.journal'].search([
('type', '=', 'purchase'),
('company_id', '=', self.env.company.id),
]).l10n_latam_use_documents = False
- data[f'{cid}_demo_invoice_1']['l10n_latam_document_type_id'] = foreign
- data[f'{cid}_demo_invoice_2']['l10n_latam_document_type_id'] = foreign
- data[f'{cid}_demo_invoice_3']['l10n_latam_document_type_id'] = foreign
- data[f'{cid}_demo_invoice_followup']['l10n_latam_document_type_id'] = foreign
- return model, data
+ move_data['demo_invoice_1']['l10n_latam_document_type_id'] = foreign
+ move_data['demo_invoice_2']['l10n_latam_document_type_id'] = foreign
+ move_data['demo_invoice_3']['l10n_latam_document_type_id'] = foreign
+ move_data['demo_invoice_followup']['l10n_latam_document_type_id'] = foreign
+ return move_data
diff --git a/addons/l10n_cl/models/account_chart_template.py b/addons/l10n_cl/models/account_chart_template.py
index 9641dfbbc34..86289e3ee4f 100644
--- a/addons/l10n_cl/models/account_chart_template.py
+++ b/addons/l10n_cl/models/account_chart_template.py
@@ -1,15 +1,15 @@
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
+# -*- coding: utf-8 -*-
from odoo import models
-from odoo.http import request
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- def _load(self, company):
- """ Set tax calculation rounding method required in Chilean localization"""
- res = super()._load(company)
- if company.account_fiscal_country_id.code == 'CL':
- company.write({'tax_calculation_rounding_method': 'round_globally'})
- return res
+ @template('cl', 'res.company')
+ def _get_cl_res_company(self):
+ company_data = super()._get_cl_res_company()
+ company_data[self.env.company.id].update({
+ 'tax_calculation_rounding_method': 'round_globally',
+ })
+ return company_data
diff --git a/addons/l10n_cl/models/account_tax.py b/addons/l10n_cl/models/account_tax.py
index 0f102863763..5f4f285a497 100644
--- a/addons/l10n_cl/models/account_tax.py
+++ b/addons/l10n_cl/models/account_tax.py
@@ -4,24 +4,6 @@ from odoo import fields, models
class AccountTax(models.Model):
- _name = 'account.tax'
_inherit = 'account.tax'
l10n_cl_sii_code = fields.Integer('SII Code', group_operator=False)
-
-
-class AccountTaxTemplate(models.Model):
- _name = 'account.tax.template'
- _inherit = 'account.tax.template'
-
- l10n_cl_sii_code = fields.Integer('SII Code')
-
- def _get_tax_vals(self, company, tax_template_to_tax):
- self.ensure_one()
- vals = super(AccountTaxTemplate, self)._get_tax_vals(company, tax_template_to_tax)
- vals.update({
- 'l10n_cl_sii_code': self.l10n_cl_sii_code,
- })
- if self.tax_group_id:
- vals['tax_group_id'] = self.tax_group_id.id
- return vals
diff --git a/addons/l10n_cl/views/account_tax_view.xml b/addons/l10n_cl/views/account_tax_view.xml
index 592569c5538..b4cc8d80dce 100644
--- a/addons/l10n_cl/views/account_tax_view.xml
+++ b/addons/l10n_cl/views/account_tax_view.xml
@@ -22,27 +22,5 @@
-
-
- account.tax.template.form
- account.tax.template
-
-
-
-
-
-
-
-
-
- account.tax.template.sii.tree
- account.tax.template
-
-
-
-
-
-
-
diff --git a/addons/l10n_cn/__init__.py b/addons/l10n_cn/__init__.py
index acf6ecd6bbf..813b662dd91 100644
--- a/addons/l10n_cn/__init__.py
+++ b/addons/l10n_cn/__init__.py
@@ -4,6 +4,3 @@
# Copyright (C) 2007-2014 Jeff Wang().
from . import models
-
-def load_translations(env):
- env.ref('l10n_cn.l10n_chart_china_small_business').process_coa_translations()
diff --git a/addons/l10n_cn/__manifest__.py b/addons/l10n_cn/__manifest__.py
index 23b517e3875..99816565342 100644
--- a/addons/l10n_cn/__manifest__.py
+++ b/addons/l10n_cn/__manifest__.py
@@ -32,7 +32,7 @@ State Data/省份数据
修改小企业会计税率
-We added the option to print a voucher which will also
+We added the option to print a voucher which will also
print the amount in words (special Chinese characters for numbers)
correctly when the cn2an library is installed. (e.g. with pip3 install cn2an)
""",
@@ -51,6 +51,5 @@ correctly when the cn2an library is installed. (e.g. with pip3 install cn2an)
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_co/__init__.py b/addons/l10n_co/__init__.py
index 9bc6f3358af..0e503350ab8 100644
--- a/addons/l10n_co/__init__.py
+++ b/addons/l10n_co/__init__.py
@@ -9,6 +9,3 @@
# Humberto Ochoa (Vauxoo)
from . import models
-
-def load_translations(env):
- env.ref('l10n_co.l10n_co_chart_template_generic').process_coa_translations()
diff --git a/addons/l10n_co/__manifest__.py b/addons/l10n_co/__manifest__.py
index f0d093382fd..ae5e507c60f 100644
--- a/addons/l10n_co/__manifest__.py
+++ b/addons/l10n_co/__manifest__.py
@@ -32,6 +32,5 @@
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_cr/__init__.py b/addons/l10n_cr/__init__.py
index 3073d9a30d1..851510e72bc 100644
--- a/addons/l10n_cr/__init__.py
+++ b/addons/l10n_cr/__init__.py
@@ -7,17 +7,17 @@
# l10n_cr_account
# First author: Carlos Vásquez (ClearCorp S.A.)
# Copyright (c) 2010-TODAY ClearCorp S.A. (http://clearcorp.co.cr). All rights reserved.
-#
+#
# Redistribution and use in source and binary forms, with or without modification, are
# permitted provided that the following conditions are met:
-#
+#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
-#
+#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
-#
+#
# THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OR
@@ -27,12 +27,9 @@
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
+#
# The views and conclusions contained in the software and documentation are those of the
# authors and should not be interpreted as representing official policies, either expressed
# or implied, of ClearCorp S.A..
-#
+#
##############################################################################
-
-def load_translations(env):
- env.ref('l10n_cr.account_chart_template_0').process_coa_translations()
diff --git a/addons/l10n_de/__manifest__.py b/addons/l10n_de/__manifest__.py
index 7b63b3be263..202e96ebceb 100644
--- a/addons/l10n_de/__manifest__.py
+++ b/addons/l10n_de/__manifest__.py
@@ -16,7 +16,6 @@ German accounting chart and localization.
'base_iban',
'base_vat',
'l10n_din5008',
- 'l10n_multilang',
],
'data': [
'data/account_account_tags_data.xml',
diff --git a/addons/l10n_de/models/chart_template.py b/addons/l10n_de/models/chart_template.py
index 746d274c006..91e34bec986 100644
--- a/addons/l10n_de/models/chart_template.py
+++ b/addons/l10n_de/models/chart_template.py
@@ -1,19 +1,17 @@
# -*- coding: utf-8 -*-
-from odoo import api, models
+from odoo import models
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- # Write paperformat and report template used on company
- def _load(self, company):
- res = super(AccountChartTemplate, self)._load(company)
- if self in [
- self.env.ref('l10n_de_skr03.l10n_de_chart_template', raise_if_not_found=False),
- self.env.ref('l10n_de_skr04.l10n_chart_de_skr04', raise_if_not_found=False)
- ]:
- company.write({
- 'external_report_layout_id': self.env.ref('l10n_din5008.external_layout_din5008').id,
- 'paperformat_id': self.env.ref('l10n_din5008.paperformat_euro_din').id
- })
- return res
+ @template('de_skr03', 'res.company')
+ @template('de_skr04', 'res.company')
+ def _get_de_res_company(self):
+ return {
+ self.env.company.id: {
+ 'external_report_layout_id': 'l10n_din5008.external_layout_din5008',
+ 'paperformat_id': 'l10n_din5008.paperformat_euro_din',
+ }
+ }
diff --git a/addons/l10n_de/models/datev.py b/addons/l10n_de/models/datev.py
index 0dee75c74c4..51a01cfc711 100644
--- a/addons/l10n_de/models/datev.py
+++ b/addons/l10n_de/models/datev.py
@@ -2,15 +2,6 @@ from odoo import api, fields, models
from odoo.exceptions import UserError
from odoo.tools.translate import _
-class AccountTaxTemplate(models.Model):
- _inherit = 'account.tax.template'
-
- l10n_de_datev_code = fields.Char(size=4)
-
- def _get_tax_vals(self, company, tax_template_to_tax):
- vals = super(AccountTaxTemplate, self)._get_tax_vals(company, tax_template_to_tax)
- vals['l10n_de_datev_code'] = self.l10n_de_datev_code
- return vals
class AccountTax(models.Model):
_inherit = "account.tax"
diff --git a/addons/l10n_de_skr03/__init__.py b/addons/l10n_de_skr03/__init__.py
index 920c8559015..67dee8c60db 100644
--- a/addons/l10n_de_skr03/__init__.py
+++ b/addons/l10n_de_skr03/__init__.py
@@ -1,5 +1,2 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-def load_translations(env):
- env.ref('l10n_de_skr03.l10n_de_chart_template').process_coa_translations()
diff --git a/addons/l10n_de_skr04/__init__.py b/addons/l10n_de_skr04/__init__.py
index 2656ad2daeb..67dee8c60db 100644
--- a/addons/l10n_de_skr04/__init__.py
+++ b/addons/l10n_de_skr04/__init__.py
@@ -1,5 +1,2 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-def load_translations(env):
- env.ref('l10n_de_skr04.l10n_chart_de_skr04').process_coa_translations()
diff --git a/addons/l10n_de_skr04/__manifest__.py b/addons/l10n_de_skr04/__manifest__.py
index 75b031bd4b6..cfda8ac1141 100644
--- a/addons/l10n_de_skr04/__manifest__.py
+++ b/addons/l10n_de_skr04/__manifest__.py
@@ -56,6 +56,5 @@ German accounting chart and localization.
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_dk/__init__.py b/addons/l10n_dk/__init__.py
index ccfed4a2aa1..8134f974fbf 100644
--- a/addons/l10n_dk/__init__.py
+++ b/addons/l10n_dk/__init__.py
@@ -2,6 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
-
-def load_translations(env):
- env.ref('l10n_dk.dk_chart_template').process_coa_translations()
diff --git a/addons/l10n_do/models/chart_template.py b/addons/l10n_do/models/chart_template.py
index 6c1013e44fc..0f92651c068 100644
--- a/addons/l10n_do/models/chart_template.py
+++ b/addons/l10n_do/models/chart_template.py
@@ -1,49 +1,42 @@
# coding: utf-8
# Copyright 2016 iterativo (https://www.iterativo.do)
-from odoo import models, api, _
+from odoo import models, _
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = "account.chart.template"
- @api.model
- def _get_default_bank_journals_data(self):
- if self.env.company.account_fiscal_country_id.code == 'DO':
- return [
- {'acc_name': _('Cash'), 'account_type': 'cash'},
- {'acc_name': _('Caja Chica'), 'account_type': 'cash'},
- {'acc_name': _('Cheques Clientes'), 'account_type': 'cash'},
- {'acc_name': _('Bank'), 'account_type': 'bank'}
- ]
- return super(AccountChartTemplate, self)._get_default_bank_journals_data()
-
- def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
- """Create fiscal journals for buys"""
- res = super(AccountChartTemplate, self)._prepare_all_journals(
- acc_template_ref, company, journals_dict=journals_dict)
- if not self == self.env.ref('l10n_do.do_chart_template'):
- return res
- for journal in res:
- if journal['code'] == 'FACT':
- journal['name'] = _('Compras Fiscales')
- res += [{
- 'type': 'purchase',
- 'name': _('Gastos No Deducibles'),
- 'code': 'GASTO',
- 'company_id': company.id,
- 'show_on_dashboard': True
- }, {
- 'type': 'purchase',
- 'name': _('Migración CxP'),
- 'code': 'CXP',
- 'company_id': company.id,
- 'show_on_dashboard': True
- }, {
- 'type': 'sale',
- 'name': _('Migración CxC'),
- 'code': 'CXC',
- 'company_id': company.id,
- 'show_on_dashboard': True
- }]
- return res
+ @template('do', 'account.journal')
+ def _get_do_account_journal(self):
+ return {
+ "caja_chica": {
+ 'name': _('Caja Chica'),
+ 'type': 'cash',
+ 'sequence': 10,
+ },
+ "cheques_clientes": {
+ 'name': _('Cheques Clientes'),
+ 'type': 'cash',
+ 'sequence': 10,
+ },
+ "gasto": {
+ 'type': 'purchase',
+ 'name': _('Gastos No Deducibles'),
+ 'code': 'GASTO',
+ 'show_on_dashboard': True,
+ },
+ "cxp": {
+ 'type': 'purchase',
+ 'name': _('Migración CxP'),
+ 'code': 'CXP',
+ 'show_on_dashboard': True,
+ },
+ "cxc": {
+ 'type': 'sale',
+ 'name': _('Migración CxC'),
+ 'code': 'CXC',
+ 'show_on_dashboard': True,
+ },
+ }
diff --git a/addons/l10n_ec/__init__.py b/addons/l10n_ec/__init__.py
index 84b28105def..0573c49be44 100644
--- a/addons/l10n_ec/__init__.py
+++ b/addons/l10n_ec/__init__.py
@@ -2,6 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
from . import demo
-
-def load_translations(env):
- env.ref('l10n_ec.l10n_ec_ifrs').process_coa_translations()
diff --git a/addons/l10n_ec/demo/account_demo.py b/addons/l10n_ec/demo/account_demo.py
index ad464f1d8a3..755b3c99619 100644
--- a/addons/l10n_ec/demo/account_demo.py
+++ b/addons/l10n_ec/demo/account_demo.py
@@ -6,20 +6,17 @@ from odoo import api, models
_logger = logging.getLogger(__name__)
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = "account.chart.template"
@api.model
- def _get_demo_data_move(self):
- ref = self.env.ref
- cid = self.env.company.id
- model, data = super()._get_demo_data_move()
- if self.env.company.account_fiscal_country_id.code == 'EC':
- document_type = ref('l10n_ec.ec_dt_18', False) and ref('l10n_ec.ec_dt_18').id or False
- data[f'{cid}_demo_invoice_1']['l10n_latam_document_type_id'] = document_type
- data[f'{cid}_demo_invoice_2']['l10n_latam_document_type_id'] = document_type
- data[f'{cid}_demo_invoice_3']['l10n_latam_document_type_id'] = document_type
- data[f'{cid}_demo_invoice_followup']['l10n_latam_document_type_id'] = document_type
- data[f'{cid}_demo_invoice_5']['l10n_latam_document_number'] = '001-001-00001'
- data[f'{cid}_demo_invoice_equipment_purchase']['l10n_latam_document_number'] = '001-001-00002'
- return model, data
+ def _get_demo_data_move(self, company=False):
+ move_data = super()._get_demo_data_move(company)
+ if company.account_fiscal_country_id.code == 'EC':
+ move_data['demo_invoice_1']['l10n_latam_document_type_id'] = 'l10n_ec.ec_dt_18'
+ move_data['demo_invoice_2']['l10n_latam_document_type_id'] = 'l10n_ec.ec_dt_18'
+ move_data['demo_invoice_3']['l10n_latam_document_type_id'] = 'l10n_ec.ec_dt_18'
+ move_data['demo_invoice_followup']['l10n_latam_document_type_id'] = 'l10n_ec.ec_dt_18'
+ move_data['demo_invoice_5']['l10n_latam_document_number'] = '001-001-00001'
+ move_data['demo_invoice_equipment_purchase']['l10n_latam_document_number'] = '001-001-00002'
+ return move_data
diff --git a/addons/l10n_ec/models/account_tax.py b/addons/l10n_ec/models/account_tax.py
index 60b8d584074..1ec9f6361f9 100644
--- a/addons/l10n_ec/models/account_tax.py
+++ b/addons/l10n_ec/models/account_tax.py
@@ -20,34 +20,3 @@ class AccountTax(models.Model):
string="Code ATS",
help="Tax Identification Code for the Simplified Transactional Annex",
)
-
-
-class AccountTaxTemplate(models.Model):
-
- _inherit = "account.tax.template"
-
- def _get_tax_vals(self, company, tax_template_to_tax):
- vals = super(AccountTaxTemplate, self)._get_tax_vals(
- company, tax_template_to_tax
- )
- vals.update(
- {
- "l10n_ec_code_base": self.l10n_ec_code_base,
- "l10n_ec_code_applied": self.l10n_ec_code_applied,
- "l10n_ec_code_ats": self.l10n_ec_code_ats,
- }
- )
- return vals
-
- l10n_ec_code_base = fields.Char(
- string="Code base",
- help="Tax declaration code of the base amount prior to the calculation of the tax",
- )
- l10n_ec_code_applied = fields.Char(
- string="Code applied",
- help="Tax declaration code of the resulting amount after the calculation of the tax",
- )
- l10n_ec_code_ats = fields.Char(
- string="Code ATS",
- help="Tax Identification Code for the Simplified Transactional Annex",
- )
diff --git a/addons/l10n_eg/__init__.py b/addons/l10n_eg/__init__.py
index a01ae9dbf6a..0650744f6bc 100644
--- a/addons/l10n_eg/__init__.py
+++ b/addons/l10n_eg/__init__.py
@@ -1,5 +1 @@
from . import models
-
-
-def load_translations(env):
- env.ref('l10n_eg.egypt_chart_template_standard').process_coa_translations()
diff --git a/addons/l10n_eg/__manifest__.py b/addons/l10n_eg/__manifest__.py
index d0cc0eca9bd..457b540d115 100644
--- a/addons/l10n_eg/__manifest__.py
+++ b/addons/l10n_eg/__manifest__.py
@@ -22,6 +22,5 @@ This is the base module to manage the accounting chart for Egypt in Odoo.
'demo/demo_company.xml',
'demo/demo_partner.xml'
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_eg/models/account_chart_template.py b/addons/l10n_eg/models/account_chart_template.py
index e99d9ad0417..00a2314b0b2 100644
--- a/addons/l10n_eg/models/account_chart_template.py
+++ b/addons/l10n_eg/models/account_chart_template.py
@@ -1,17 +1,26 @@
from odoo import models
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
+ @template('eg', 'account.journal')
+ def _get_eg_account_journal(self):
""" If EGYPT chart, we add 2 new journals TA and IFRS"""
- if self == self.env.ref('l10n_eg.egypt_chart_template_standard'):
- if not journals_dict:
- journals_dict = []
- journals_dict.extend(
- [{"name": "Tax Adjustments", "company_id": company.id, "code": "TA", "type": "general", "sequence": 1,
- "favorite": True},
- {"name": "IFRS 16", "company_id": company.id, "code": "IFRS", "type": "general", "favorite": True,
- "sequence": 10}])
- return super()._prepare_all_journals(acc_template_ref, company, journals_dict=journals_dict)
+ return {
+ "tax_adjustment": {
+ "name": "Tax Adjustments",
+ "code": "TA",
+ "type": "general",
+ "sequence": 1,
+ "show_on_dashboard": True,
+ },
+ "ifrs": {
+ "name": "IFRS 16",
+ "code": "IFRS",
+ "type": "general",
+ "show_on_dashboard": True,
+ "sequence": 10,
+ },
+ }
diff --git a/addons/l10n_eg/models/account_tax.py b/addons/l10n_eg/models/account_tax.py
index 6e6b4f6bf76..025e0534287 100644
--- a/addons/l10n_eg/models/account_tax.py
+++ b/addons/l10n_eg/models/account_tax.py
@@ -1,8 +1,8 @@
from odoo import models, fields
-class ETAAccountTaxMixin(models.AbstractModel):
- _name = 'l10n_eg.eta.account.tax.mixin'
+class AccountTax(models.Model):
+ _inherit = 'account.tax'
_description = 'ETA tax codes mixin'
l10n_eg_eta_code = fields.Selection(
@@ -65,20 +65,3 @@ class ETAAccountTaxMixin(models.AbstractModel):
('t20_of04', 'T20 - OF04 - Other fees (amount)')
],
string='ETA Code (Egypt)', default=False)
-
-
-class AccountTax(models.Model):
- _name = 'account.tax'
- _inherit = ['account.tax', 'l10n_eg.eta.account.tax.mixin']
-
-
-class AccountTaxTemplate(models.Model):
- _name = 'account.tax.template'
- _inherit = ['account.tax.template', 'l10n_eg.eta.account.tax.mixin']
-
- def _get_tax_vals(self, company, tax_template_to_tax):
- vals = super(AccountTaxTemplate, self)._get_tax_vals(company, tax_template_to_tax)
- vals.update({
- 'l10n_eg_eta_code': self.l10n_eg_eta_code,
- })
- return vals
diff --git a/addons/l10n_eg_edi_eta/tests/common.py b/addons/l10n_eg_edi_eta/tests/common.py
index 7d68bb346a7..8ebd7057405 100644
--- a/addons/l10n_eg_edi_eta/tests/common.py
+++ b/addons/l10n_eg_edi_eta/tests/common.py
@@ -9,7 +9,7 @@ from odoo.addons.account_edi.tests.common import AccountEdiTestCommon
class TestEGEdiCommon(AccountEdiTestCommon):
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_eg.egypt_chart_template_standard', edi_format_ref='l10n_eg_edi_eta.edi_eg_eta'):
+ def setUpClass(cls, chart_template_ref='eg', edi_format_ref='l10n_eg_edi_eta.edi_eg_eta'):
super().setUpClass(chart_template_ref=chart_template_ref, edi_format_ref=edi_format_ref)
cls.frozen_today = datetime(year=2022, month=3, day=15, hour=0, minute=0, second=0, tzinfo=timezone('utc'))
@@ -84,7 +84,7 @@ class TestEGEdiCommon(AccountEdiTestCommon):
@classmethod
def _get_tax_by_xml_id(cls, trailing_xml_id):
- return cls.env.ref(f'l10n_es.{cls.env.company.id}_account_tax_template_{trailing_xml_id}')
+ return cls.env.ref(f'account.{cls.env.company.id}_account_tax_template_{trailing_xml_id}')
@classmethod
def create_invoice(cls, **kwargs):
diff --git a/addons/l10n_eg_edi_eta/tests/test_edi_json.py b/addons/l10n_eg_edi_eta/tests/test_edi_json.py
index b1ed2ddf904..2f3465c9a0c 100644
--- a/addons/l10n_eg_edi_eta/tests/test_edi_json.py
+++ b/addons/l10n_eg_edi_eta/tests/test_edi_json.py
@@ -179,14 +179,14 @@ class TestEdiJson(TestEGEdiCommon):
'price_unit': 120.99,
'quantity': 1.0,
'product_uom_id': self.env.ref('uom.product_uom_unit').id,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_standard_sale_14').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_standard_sale_14').ids)],
},
{
'product_id': self.product_a.id,
'price_unit': 999.99,
'quantity': 1.0,
'product_uom_id': self.env.ref('uom.product_uom_unit').id,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_standard_sale_14').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_standard_sale_14').ids)],
},
],
)
@@ -276,7 +276,7 @@ class TestEdiJson(TestEGEdiCommon):
'quantity': 1.0,
'product_uom_id': self.env.ref('uom.product_uom_unit').id,
'discount': 10.0,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_standard_sale_14').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_standard_sale_14').ids)],
},
{
'product_id': self.product_a.id,
@@ -284,7 +284,7 @@ class TestEdiJson(TestEGEdiCommon):
'quantity': 1.0,
'discount': 10.0,
'product_uom_id': self.env.ref('uom.product_uom_unit').id,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_standard_sale_14').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_standard_sale_14').ids)],
},
],
)
@@ -376,7 +376,7 @@ class TestEdiJson(TestEGEdiCommon):
'quantity': 1.0,
'product_uom_id': self.env.ref('uom.product_uom_unit').id,
'discount': 10.0,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_standard_sale_14').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_standard_sale_14').ids)],
},
{
'product_id': self.product_a.id,
@@ -384,7 +384,7 @@ class TestEdiJson(TestEGEdiCommon):
'quantity': 1.0,
'discount': 10.0,
'product_uom_id': self.env.ref('uom.product_uom_unit').id,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_standard_sale_14').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_standard_sale_14').ids)],
},
],
)
@@ -475,7 +475,7 @@ class TestEdiJson(TestEGEdiCommon):
'quantity': 1.0,
'product_uom_id': self.env.ref('uom.product_uom_unit').id,
'discount': 10.0,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_exempt_sale').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_exempt_sale').ids)],
},
{
'product_id': self.product_b.id,
@@ -483,7 +483,7 @@ class TestEdiJson(TestEGEdiCommon):
'quantity': 5.0,
'discount': 13.0,
'product_uom_id': self.env.ref('uom.product_uom_cm').id,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_exempt_sale').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_exempt_sale').ids)],
},
],
)
@@ -575,7 +575,7 @@ class TestEdiJson(TestEGEdiCommon):
'quantity': 1.0,
'product_uom_id': self.env.ref('uom.product_uom_unit').id,
'discount': 10.0,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_exempt_sale').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_exempt_sale').ids)],
},
{
'product_id': self.product_b.id,
@@ -583,7 +583,7 @@ class TestEdiJson(TestEGEdiCommon):
'quantity': 5.0,
'discount': 13.0,
'product_uom_id': self.env.ref('uom.product_uom_cm').id,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_exempt_sale').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_exempt_sale').ids)],
},
],
)
@@ -685,7 +685,7 @@ class TestEdiJson(TestEGEdiCommon):
'quantity': 1.0,
'product_uom_id': self.env.ref('uom.product_uom_unit').id,
'discount': 10.0,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_exempt_sale').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_exempt_sale').ids)],
},
{
'product_id': self.product_b.id,
@@ -693,7 +693,7 @@ class TestEdiJson(TestEGEdiCommon):
'quantity': 5.0,
'discount': 13.0,
'product_uom_id': self.env.ref('uom.product_uom_cm').id,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_exempt_sale').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_exempt_sale').ids)],
},
],
)
@@ -795,7 +795,7 @@ class TestEdiJson(TestEGEdiCommon):
'quantity': 1.0,
'product_uom_id': self.env.ref('uom.product_uom_unit').id,
'discount': 10.0,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_exempt_sale').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_exempt_sale').ids)],
},
{
'product_id': self.product_b.id,
@@ -803,7 +803,7 @@ class TestEdiJson(TestEGEdiCommon):
'quantity': 5.0,
'discount': 13.0,
'product_uom_id': self.env.ref('uom.product_uom_cm').id,
- 'tax_ids': [(6, 0, self.env.ref(f'l10n_eg.{self.env.company.id}_eg_exempt_sale').ids)],
+ 'tax_ids': [(6, 0, self.env.ref(f'account.{self.env.company.id}_eg_exempt_sale').ids)],
},
],
)
diff --git a/addons/l10n_es/upgrades/5.1/post-migrate_update_taxes.py b/addons/l10n_es/upgrades/5.1/post-migrate_update_taxes.py
deleted file mode 100644
index f0cf8694c68..00000000000
--- a/addons/l10n_es/upgrades/5.1/post-migrate_update_taxes.py
+++ /dev/null
@@ -1,7 +0,0 @@
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from odoo.addons.account.models.chart_template import update_taxes_from_templates
-
-
-def migrate(cr, version):
- update_taxes_from_templates(cr, 'l10n_es.account_chart_template_common')
diff --git a/addons/l10n_es_edi_sii/__init__.py b/addons/l10n_es_edi_sii/__init__.py
index d5a969388f1..498f682dc1b 100644
--- a/addons/l10n_es_edi_sii/__init__.py
+++ b/addons/l10n_es_edi_sii/__init__.py
@@ -4,30 +4,10 @@ from . import models
def _l10n_es_edi_post_init(env):
- companies = env['res.company'].search([('partner_id.country_id.code', '=', 'ES')])
-
- all_chart_templates = companies.chart_template_id
- current_chart_template = all_chart_templates
- while current_chart_template.parent_id:
- all_chart_templates |= current_chart_template.parent_id
- current_chart_template = current_chart_template.parent_id
-
- if all_chart_templates:
- tax_templates = env['account.tax.template'].search([
- ('chart_template_id', 'in', all_chart_templates.ids),
- '|', '|',
- ('l10n_es_type', '!=', False),
- ('l10n_es_exempt_reason', '!=', False),
- ('tax_scope', '!=', False),
- ])
- xml_ids = tax_templates.get_external_id()
- for company in companies:
- for tax_template in tax_templates:
- module, xml_id = xml_ids.get(tax_template.id).split('.')
- tax = env.ref('%s.%s_%s' % (module, company.id, xml_id), raise_if_not_found=False)
- if tax:
- tax.write({
- 'l10n_es_exempt_reason': tax_template.l10n_es_exempt_reason,
- 'tax_scope': tax_template.tax_scope,
- 'l10n_es_type': tax_template.l10n_es_type,
- })
+ for company in env['res.company'].search([('partner_id.country_id.code', '=', 'ES')]):
+ ChartTemplate = env['account.chart.template'].with_company(company)
+ taxes_data = ChartTemplate._get_es_edi_sii_account_tax()
+ for xml_id, tax_data in taxes_data.items():
+ tax = ChartTemplate.ref(xml_id, raise_if_not_found=False)
+ if tax:
+ tax.write(tax_data)
diff --git a/addons/l10n_es_edi_sii/__manifest__.py b/addons/l10n_es_edi_sii/__manifest__.py
index 96ce242593c..5a7f175e2f9 100644
--- a/addons/l10n_es_edi_sii/__manifest__.py
+++ b/addons/l10n_es_edi_sii/__manifest__.py
@@ -9,27 +9,26 @@
'version': '1.0',
'category': 'Accounting/Localizations/EDI',
'description': """
- This module sends the taxes information (mostly VAT) of the
- vendor bills and customer invoices to the SII. It is called
- Procedimiento G417 - IVA. Llevanza de libros registro. It is
- required for every company with a turnover of +6M€ and others can
- already make use of it. The invoices are automatically
- sent after validation.
-
- How the information is sent to the SII depends on the
- configuration that is put in the taxes. The taxes
- that were in the chart template (l10n_es) are automatically
- configured to have the right type. It is possible however
- that extra taxes need to be created for certain exempt/no sujeta reasons.
-
- You need to configure your certificate and the tax agency.
+ This module sends the taxes information (mostly VAT) of the
+ vendor bills and customer invoices to the SII. It is called
+ Procedimiento G417 - IVA. Llevanza de libros registro. It is
+ required for every company with a turnover of +6M€ and others can
+ already make use of it. The invoices are automatically
+ sent after validation.
+
+ How the information is sent to the SII depends on the
+ configuration that is put in the taxes. The taxes
+ that were in the chart template (l10n_es) are automatically
+ configured to have the right type. It is possible however
+ that extra taxes need to be created for certain exempt/no sujeta reasons.
+
+ You need to configure your certificate and the tax agency.
""",
'depends': [
'l10n_es',
'account_edi',
],
'data': [
- 'data/account_tax_data.xml',
'data/account_edi_data.xml',
'data/res_partner_data.xml',
diff --git a/addons/l10n_es_edi_sii/data/account_tax_data.xml b/addons/l10n_es_edi_sii/data/account_tax_data.xml
deleted file mode 100644
index 84e86400b2c..00000000000
--- a/addons/l10n_es_edi_sii/data/account_tax_data.xml
+++ /dev/null
@@ -1,418 +0,0 @@
-
-
-
- sujeto
- consu
-
-
- sujeto
- service
-
-
- sujeto_isp
-
-
- 21% IVA soportado (bienes corrientes)
- sujeto
- consu
-
-
- 21% IVA soportado (servicios corrientes)
- sujeto
- service
-
-
- IVA 21% Adquisición de servicios intracomunitarios
- sujeto
- service
-
-
- IVA 21% Adquisición Intracomunitaria. Bienes corrientes
- sujeto
- consu
-
-
- IVA 21% Adquisición Intracomunitaria. Bienes de inversión
- sujeto
- consu
-
-
- IVA 21% Importaciones bienes corrientes
- sujeto
- consu
-
-
- IVA 21% Importaciones bienes de inversión
- sujeto
- consu
-
-
- Retenciones IRPF (Trabajadores) dinerarios
- retencion
-
-
- IVA 4% Adquisición de servicios extracomunitarios
- sujeto_isp
- consu
-
-
- IVA 10% Adquisición de servicios extracomunitarios
- sujeto_isp
- consu
-
-
- IVA 21% Adquisición de servicios extracomunitarios
- sujeto_isp
- service
-
-
- IVA 4% Adquisición Intracomunitario. Bienes corrientes
- sujeto
- consu
-
-
- IVA 4% Adquisición Intracomunitario. Bienes de inversión
- sujeto
- consu
-
-
- IVA 10% Adquisición Intracomunitario. Bienes corrientes
- sujeto
- consu
-
-
- IVA 10% Adquisición Intracomunitario. Bienes de inversión
- sujeto
- consu
-
-
- IVA 0% Prestación de servicios intracomunitario
- no_sujeto
- service
-
-
- No sujeto Repercutido (Servicios)
- no_sujeto
- service
-
-
- No sujeto Repercutido (Bienes)
- no_sujeto
- consu
-
-
- IVA 0% Prestación de servicios extracomunitaria
- no_sujeto
- service
-
-
- IVA 4% Importaciones bienes corrientes
- sujeto
- consu
-
-
- IVA 4% Importaciones bienes de inversión
- sujeto
- consu
-
-
- IVA 10% Importaciones bienes corrientes
- sujeto
- consu
-
-
- IVA 10% Importaciones bienes de inversión
- sujeto
- consu
-
-
- 4% IVA Soportado (bienes de inversión)
- sujeto
- consu
- True
-
-
- 4% IVA soportado (servicios corrientes)
- sujeto
- consu
-
-
- 10% IVA Soportado (bienes de inversión)
- sujeto
- consu
- True
-
-
- 21% IVA Soportado (bienes de inversión)
- sujeto
- consu
- True
-
-
- 10% IVA soportado (bienes corrientes)
- sujeto
- consu
-
-
- 4% IVA soportado (bienes corrientes)
- sujeto
- consu
-
-
- 10% IVA soportado (servicios corrientes)
- sujeto
- consu
-
-
- IVA Exento Repercutido Sujeto
- exento
- E1
-
-
- IVA Exento Repercutido No Sujeto
- ignore
-
-
- 0.50% Recargo Equivalencia Ventas
- recargo
-
-
- IVA 4% (Bienes)
- sujeto
- consu
-
-
- IVA 10% (Bienes)
- sujeto
- consu
-
-
- 21% IVA Soportado no deducible
- no_deducible
-
-
- 10% IVA Soportado no deducible
- no_deducible
-
-
- 4% IVA Soportado no deducible
- no_deducible
-
-
- IVA 4% (Servicios)
- sujeto
- service
-
-
- IVA 10% (Servicios)
- sujeto
- service
-
-
- 1.4% Recargo Equivalencia Ventas
- recargo
-
-
- 5.2% Recargo Equivalencia Ventas
- recargo
-
-
- IVA Soportado exento (operaciones corrientes)
- sujeto
- consu
-
-
- IVA Soportado no sujeto (Servicios)
- no_sujeto
- service
-
-
- IVA Soportado no sujeto (Bienes)
- no_sujeto
- consu
-
-
- Retenciones a cuenta IRPF 9%
- retencion
-
-
- Retenciones a cuenta IRPF 18%
- retencion
-
-
- Retenciones a cuenta IRPF 19%
- retencion
-
-
- Retenciones a cuenta 19% (Arrendamientos)
- retencion
-
-
- Retenciones a cuenta 19,5% (Arrendamientos)
- retencion
-
-
- Retenciones IRPF 19%
- retencion
-
-
- Retenciones 20% (Arrendamientos)
- retencion
-
-
- Retenciones IRPF 18%
- retencion
-
-
- Retenciones 19% (Arrendamientos)
- retencion
-
-
- Retenciones 19,5% (Arrendamientos)
- retencion
-
-
- Retenciones IRPF 7%
- retencion
-
-
- Retenciones IRPF 9%
- retencion
-
-
- Retenciones IRPF 14%
- retencion
-
-
- Retenciones a cuenta IRPF 20%
- retencion
-
-
- Retenciones a cuenta 20% (Arrendamientos)
- retencion
-
-
- Retenciones a cuenta IRPF 24%
- retencion
-
-
- 12% IVA Soportado régimen agricultura
- sujeto_agricultura
-
-
- 10,5% IVA Soportado régimen ganadero o pesca
-
-
-
- IVA 0% Exportaciones
- exento
- E2
- consu
-
-
- IVA 0% Entregas Intracomunitarias exentas
- exento
- E5
- consu
-
-
- 1.4% Recargo Equivalencia Compras
- recargo
-
-
- 0.50% Recargo Equivalencia Compras
- recargo
-
-
- 5.2% Recargo Equivalencia Compras
- recargo
-
-
- Retenciones a cuenta IRPF 1%
- retencion
-
-
- Retenciones a cuenta IRPF 2%
- retencion
-
-
- Retenciones a cuenta IRPF 21%
- retencion
-
-
- Retenciones a cuenta 21% (Arrendamientos)
- retencion
-
-
- Retenciones a cuenta IRPF 7%
- retencion
-
-
- Retenciones a cuenta IRPF 15%
- retencion
-
-
- Retenciones IRPF 1%
- retencion
-
-
- Retenciones IRPF 15%
- retencion
-
-
- Retenciones IRPF (Trabajadores)
- retencion
-
-
- IVA 10% Adquisición de servicios intracomunitarios
- retencion
-
-
- IVA 4% Adquisición de servicios intracomunitarios
- retencion
-
-
- Retenciones IRPF (Trabajadores) en especie
- retencion
-
-
- Retenciones IRPF 20%
- retencion
-
-
- Retenciones 21% (Arrendamientos)
- retencion
-
-
- Retenciones IRPF 21%
- retencion
-
-
- Retenciones IRPF 2%
- retencion
-
-
- IVA 0% Venta con Inversión del Sujeto Pasivo
- sujeto_isp
-
-
- IVA 4% Compra con Inversión del Sujeto Pasivo Nacional
- sujeto_isp
-
-
- IVA 10% Compra con Inversión del Sujeto Pasivo Nacional
- sujeto_isp
-
-
- IVA 21% Compra con Inversión del Sujeto Pasivo Nacional
- sujeto_isp
-
-
- Retenciones 19% (préstamos)
- retencion
-
-
- Retenciones 19% (reparto de dividendos)
- retencion
-
-
diff --git a/addons/l10n_es_edi_sii/models/__init__.py b/addons/l10n_es_edi_sii/models/__init__.py
index ae321c40704..e94d0b98449 100644
--- a/addons/l10n_es_edi_sii/models/__init__.py
+++ b/addons/l10n_es_edi_sii/models/__init__.py
@@ -3,6 +3,7 @@
from . import account_edi_format
from . import account_move
from . import account_tax
+from . import account_chart_template
from . import l10n_es_edi_certificate
from . import res_company
from . import res_config_settings
diff --git a/addons/l10n_es_edi_sii/models/account_chart_template.py b/addons/l10n_es_edi_sii/models/account_chart_template.py
new file mode 100644
index 00000000000..b895e181727
--- /dev/null
+++ b/addons/l10n_es_edi_sii/models/account_chart_template.py
@@ -0,0 +1,427 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from odoo import models
+from odoo.addons.account.models.chart_template import template
+
+class AccountChartTemplate(models.AbstractModel):
+ _inherit = 'account.chart.template'
+
+ @template('es_common', 'account.tax')
+ def _get_es_edi_sii_account_tax(self):
+ return {
+ 'account_tax_template_s_iva21b': {
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_s_iva21s': {
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'service',
+ },
+ 'account_tax_template_s_iva21isp': {
+ 'l10n_es_type': 'sujeto_isp',
+ },
+ 'account_tax_template_p_iva21_bc': {
+ 'name': "21% IVA soportado (bienes corrientes)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva21_sc': {
+ 'name': "21% IVA soportado (servicios corrientes)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'service',
+ },
+ 'account_tax_template_p_iva21_sp_in': {
+ 'name': "IVA 21% Adquisición de servicios intracomunitarios",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'service',
+ },
+ 'account_tax_template_p_iva21_ic_bc': {
+ 'name': "IVA 21% Adquisición Intracomunitaria. Bienes corrientes",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva21_ic_bi': {
+ 'name': "IVA 21% Adquisición Intracomunitaria. Bienes de inversión",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva21_ibc': {
+ 'name': "IVA 21% Importaciones bienes corrientes",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva21_ibi': {
+ 'name': "IVA 21% Importaciones bienes de inversión",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_irpf21td': {
+ 'name': "Retenciones IRPF (Trabajadores) dinerarios",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_iva4_sp_ex': {
+ 'name': "IVA 4% Adquisición de servicios extracomunitarios",
+ 'l10n_es_type': 'sujeto_isp',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva10_sp_ex': {
+ 'name': "IVA 10% Adquisición de servicios extracomunitarios",
+ 'l10n_es_type': 'sujeto_isp',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva21_sp_ex': {
+ 'name': "IVA 21% Adquisición de servicios extracomunitarios",
+ 'l10n_es_type': 'sujeto_isp',
+ 'tax_scope': 'service',
+ },
+ 'account_tax_template_p_iva4_ic_bc': {
+ 'name': "IVA 4% Adquisición Intracomunitario. Bienes corrientes",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva4_ic_bi': {
+ 'name': "IVA 4% Adquisición Intracomunitario. Bienes de inversión",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva10_ic_bc': {
+ 'name': "IVA 10% Adquisición Intracomunitario. Bienes corrientes",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva10_ic_bi': {
+ 'name': "IVA 10% Adquisición Intracomunitario. Bienes de inversión",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_s_iva0_sp_i': {
+ 'name': "IVA 0% Prestación de servicios intracomunitario",
+ 'l10n_es_type': 'no_sujeto',
+ 'tax_scope': 'service',
+ },
+ 'account_tax_template_s_iva_ns': {
+ 'name': "No sujeto Repercutido (Servicios)",
+ 'l10n_es_type': 'no_sujeto',
+ 'tax_scope': 'service',
+ },
+ 'account_tax_template_s_iva_ns_b': {
+ 'name': "No sujeto Repercutido (Bienes)",
+ 'l10n_es_type': 'no_sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_s_iva_e': {
+ 'name': "IVA 0% Prestación de servicios extracomunitaria",
+ 'l10n_es_type': 'no_sujeto',
+ 'tax_scope': 'service',
+ },
+ 'account_tax_template_p_iva4_ibc': {
+ 'name': "IVA 4% Importaciones bienes corrientes",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva4_ibi': {
+ 'name': "IVA 4% Importaciones bienes de inversión",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva10_ibc': {
+ 'name': "IVA 10% Importaciones bienes corrientes",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva10_ibi': {
+ 'name': "IVA 10% Importaciones bienes de inversión",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva4_bi': {
+ 'name': "4% IVA Soportado (bienes de inversión)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ 'l10n_es_bien_inversion': True,
+ },
+ 'account_tax_template_p_iva4_sc': {
+ 'name': "4% IVA soportado (servicios corrientes)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva10_bi': {
+ 'name': "10% IVA Soportado (bienes de inversión)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ 'l10n_es_bien_inversion': True,
+ },
+ 'account_tax_template_p_iva21_bi': {
+ 'name': "21% IVA Soportado (bienes de inversión)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ 'l10n_es_bien_inversion': True,
+ },
+ 'account_tax_template_p_iva10_bc': {
+ 'name': "10% IVA soportado (bienes corrientes)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva4_bc': {
+ 'name': "4% IVA soportado (bienes corrientes)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva10_sc': {
+ 'name': "10% IVA soportado (servicios corrientes)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_s_iva0': {
+ 'name': "IVA Exento Repercutido Sujeto",
+ 'l10n_es_type': 'exento',
+ 'l10n_es_exempt_reason': 'E1',
+ },
+ 'account_tax_template_s_iva0_ns': {
+ 'name': "IVA Exento Repercutido No Sujeto",
+ 'l10n_es_type': 'ignore',
+ },
+ 'account_tax_template_s_req05': {
+ 'name': "0.50% Recargo Equivalencia Ventas",
+ 'l10n_es_type': 'recargo',
+ },
+ 'account_tax_template_s_iva4b': {
+ 'name': "IVA 4% (Bienes)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_s_iva10b': {
+ 'name': "IVA 10% (Bienes)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva0_nd': {
+ 'name': "21% IVA Soportado no deducible",
+ 'l10n_es_type': 'no_deducible',
+ },
+ 'account_tax_template_p_iva10_nd': {
+ 'name': "10% IVA Soportado no deducible",
+ 'l10n_es_type': 'no_deducible',
+ },
+ 'account_tax_template_p_iva4_nd': {
+ 'name': "4% IVA Soportado no deducible",
+ 'l10n_es_type': 'no_deducible',
+ },
+ 'account_tax_template_s_iva4s': {
+ 'name': "IVA 4% (Servicios)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'service',
+ },
+ 'account_tax_template_s_iva10s': {
+ 'name': "IVA 10% (Servicios)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'service',
+ },
+ 'account_tax_template_s_req014': {
+ 'name': "1.4% Recargo Equivalencia Ventas",
+ 'l10n_es_type': 'recargo',
+ },
+ 'account_tax_template_s_req52': {
+ 'name': "5.2% Recargo Equivalencia Ventas",
+ 'l10n_es_type': 'recargo',
+ },
+ 'account_tax_template_p_iva0_bc': {
+ 'name': "IVA Soportado exento (operaciones corrientes)",
+ 'l10n_es_type': 'sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_iva0_ns': {
+ 'name': "IVA Soportado no sujeto (Servicios)",
+ 'l10n_es_type': 'no_sujeto',
+ 'tax_scope': 'service',
+ },
+ 'account_tax_template_p_iva0_ns_b': {
+ 'name': "IVA Soportado no sujeto (Bienes)",
+ 'l10n_es_type': 'no_sujeto',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_s_irpf9': {
+ 'name': "Retenciones a cuenta IRPF 9%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_s_irpf18': {
+ 'name': "Retenciones a cuenta IRPF 18%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_s_irpf19': {
+ 'name': "Retenciones a cuenta IRPF 19%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_s_irpf19a': {
+ 'name': "Retenciones a cuenta 19% (Arrendamientos)",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_s_irpf195a': {
+ 'name': "Retenciones a cuenta 19,5% (Arrendamientos)",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf19': {
+ 'name': "Retenciones IRPF 19%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf20a': {
+ 'name': "Retenciones 20% (Arrendamientos)",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf18': {
+ 'name': "Retenciones IRPF 18%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf19a': {
+ 'name': "Retenciones 19% (Arrendamientos)",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf195a': {
+ 'name': "Retenciones 19,5% (Arrendamientos)",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf7': {
+ 'name': "Retenciones IRPF 7%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf9': {
+ 'name': "Retenciones IRPF 9%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf24': {
+ 'name': "Retenciones IRPF 14%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_s_irpf20': {
+ 'name': "Retenciones a cuenta IRPF 20%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_s_irpf20a': {
+ 'name': "Retenciones a cuenta 20% (Arrendamientos)",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_s_irpf24': {
+ 'name': "Retenciones a cuenta IRPF 24%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_iva12_agr': {
+ 'name': "12% IVA Soportado régimen agricultura",
+ 'l10n_es_type': 'sujeto_agricultura',
+ },
+ 'account_tax_template_p_iva105_gan': {
+ 'name': "10,5% IVA Soportado régimen ganadero o pesca",
+ },
+ 'account_tax_template_s_iva0_e': {
+ 'name': "IVA 0% Exportaciones",
+ 'l10n_es_type': 'exento',
+ # E2 for exportation
+ 'l10n_es_exempt_reason': 'E2',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_s_iva0_ic': {
+ 'name': "IVA 0% Entregas Intracomunitarias exentas",
+ 'l10n_es_type': 'exento',
+ # E5 for intra-community
+ 'l10n_es_exempt_reason': 'E5',
+ 'tax_scope': 'consu',
+ },
+ 'account_tax_template_p_req014': {
+ 'name': "1.4% Recargo Equivalencia Compras",
+ 'l10n_es_type': 'recargo',
+ },
+ 'account_tax_template_p_req05': {
+ 'name': "0.50% Recargo Equivalencia Compras",
+ 'l10n_es_type': 'recargo',
+ },
+ 'account_tax_template_p_req52': {
+ 'name': "5.2% Recargo Equivalencia Compras",
+ 'l10n_es_type': 'recargo',
+ },
+ 'account_tax_template_s_irpf1': {
+ 'name': "Retenciones a cuenta IRPF 1%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_s_irpf2': {
+ 'name': "Retenciones a cuenta IRPF 2%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_s_irpf21': {
+ 'name': "Retenciones a cuenta IRPF 21%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_s_irpf21a': {
+ 'name': "Retenciones a cuenta 21% (Arrendamientos)",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_s_irpf7': {
+ 'name': "Retenciones a cuenta IRPF 7%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_s_irpf15': {
+ 'name': "Retenciones a cuenta IRPF 15%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf1': {
+ 'name': "Retenciones IRPF 1%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf15': {
+ 'name': "Retenciones IRPF 15%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf21t': {
+ 'name': "Retenciones IRPF (Trabajadores)",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_iva10_sp_in': {
+ 'name': "IVA 10% Adquisición de servicios intracomunitarios",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_iva4_sp_in': {
+ 'name': "IVA 4% Adquisición de servicios intracomunitarios",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf21te': {
+ 'name': "Retenciones IRPF (Trabajadores) en especie",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf20': {
+ 'name': "Retenciones IRPF 20%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf21a': {
+ 'name': "Retenciones 21% (Arrendamientos)",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf21p': {
+ 'name': "Retenciones IRPF 21%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_irpf2': {
+ 'name': "Retenciones IRPF 2%",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_s_iva0_isp': {
+ 'name': "IVA 0% Venta con Inversión del Sujeto Pasivo",
+ 'l10n_es_type': 'sujeto_isp',
+ },
+ 'account_tax_template_p_iva4_isp': {
+ 'name': "IVA 4% Compra con Inversión del Sujeto Pasivo Nacional",
+ 'l10n_es_type': 'sujeto_isp',
+ },
+ 'account_tax_template_p_iva10_isp': {
+ 'name': "IVA 10% Compra con Inversión del Sujeto Pasivo Nacional",
+ 'l10n_es_type': 'sujeto_isp',
+ },
+ 'account_tax_template_p_iva21_isp': {
+ 'name': "IVA 21% Compra con Inversión del Sujeto Pasivo Nacional",
+ 'l10n_es_type': 'sujeto_isp',
+ },
+ 'account_tax_template_p_rp19': {
+ 'name': "Retenciones 19% (préstamos)",
+ 'l10n_es_type': 'retencion',
+ },
+ 'account_tax_template_p_rrD19': {
+ 'name': "Retenciones 19% (reparto de dividendos)",
+ 'l10n_es_type': 'retencion',
+ },
+ }
diff --git a/addons/l10n_es_edi_sii/models/account_tax.py b/addons/l10n_es_edi_sii/models/account_tax.py
index 602f656ede9..95bb0fe8660 100644
--- a/addons/l10n_es_edi_sii/models/account_tax.py
+++ b/addons/l10n_es_edi_sii/models/account_tax.py
@@ -3,9 +3,8 @@
from odoo import fields, models
-class SIIAccountTaxMixin(models.AbstractModel):
- _name = 'l10n_es.sii.account.tax.mixin'
- _description = 'SII Fields'
+class AccountTax(models.Model):
+ _inherit = 'account.tax'
l10n_es_exempt_reason = fields.Selection(
selection=[
@@ -34,22 +33,3 @@ class SIIAccountTaxMixin(models.AbstractModel):
string="Tax Type (Spain)", default='sujeto'
)
l10n_es_bien_inversion = fields.Boolean('Bien de Inversion', default=False)
-
-
-class AccountTax(models.Model):
- _inherit = ['account.tax', 'l10n_es.sii.account.tax.mixin']
- _name = 'account.tax'
-
-
-class AccountTaxTemplate(models.Model):
- _inherit = ['account.tax.template', 'l10n_es.sii.account.tax.mixin']
- _name = 'account.tax.template'
-
- def _get_tax_vals(self, company, tax_template_to_tax):
- # OVERRIDE
- # Copy values from 'account.tax.template' to vals will be used to create a new 'account.tax'.
- vals = super()._get_tax_vals(company, tax_template_to_tax)
- vals['l10n_es_exempt_reason'] = self.l10n_es_exempt_reason
- vals['l10n_es_type'] = self.l10n_es_type
- vals['l10n_es_bien_inversion'] = self.l10n_es_bien_inversion
- return vals
diff --git a/addons/l10n_es_edi_sii/tests/common.py b/addons/l10n_es_edi_sii/tests/common.py
index edf2fead644..da628a0fd9c 100644
--- a/addons/l10n_es_edi_sii/tests/common.py
+++ b/addons/l10n_es_edi_sii/tests/common.py
@@ -10,7 +10,7 @@ from odoo.addons.account_edi.tests.common import AccountEdiTestCommon
class TestEsEdiCommon(AccountEdiTestCommon):
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_es.account_chart_template_full', edi_format_ref='l10n_es_edi_sii.edi_es_sii'):
+ def setUpClass(cls, chart_template_ref='es_full', edi_format_ref='l10n_es_edi_sii.edi_es_sii'):
super().setUpClass(chart_template_ref=chart_template_ref, edi_format_ref=edi_format_ref)
cls.frozen_today = datetime(year=2019, month=1, day=1, hour=0, minute=0, second=0, tzinfo=timezone('utc'))
@@ -57,7 +57,7 @@ class TestEsEdiCommon(AccountEdiTestCommon):
:param trailing_xml_id: The trailing tax's xml id.
:return: An account.tax record
"""
- return cls.env.ref(f'l10n_es.{cls.env.company.id}_account_tax_template_{trailing_xml_id}')
+ return cls.env.ref(f'account.{cls.env.company.id}_account_tax_template_{trailing_xml_id}')
@classmethod
def create_invoice(cls, **kwargs):
diff --git a/addons/l10n_es_edi_sii/tests/test_edi_web_services.py b/addons/l10n_es_edi_sii/tests/test_edi_web_services.py
index b9780c0eeb0..bc3b1392c1a 100644
--- a/addons/l10n_es_edi_sii/tests/test_edi_web_services.py
+++ b/addons/l10n_es_edi_sii/tests/test_edi_web_services.py
@@ -10,7 +10,7 @@ from .common import TestEsEdiCommon
class TestEdiWebServices(TestEsEdiCommon):
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_es.account_chart_template_full', edi_format_ref='l10n_es_edi_sii.edi_es_sii'):
+ def setUpClass(cls, chart_template_ref='es_full', edi_format_ref='l10n_es_edi_sii.edi_es_sii'):
super().setUpClass(chart_template_ref=chart_template_ref, edi_format_ref=edi_format_ref)
# Invoice name are tracked by the web-services so this constant tries to get a new unique invoice name at each
diff --git a/addons/l10n_eu_oss/models/chart_template.py b/addons/l10n_eu_oss/models/chart_template.py
index 84723291122..aca36f8d53c 100644
--- a/addons/l10n_eu_oss/models/chart_template.py
+++ b/addons/l10n_eu_oss/models/chart_template.py
@@ -3,13 +3,10 @@
from odoo import models
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- def _load(self, company):
- rslt = super()._load(company)
-
+ def _post_load_data(self, template_code, company, template_data):
+ super()._post_load_data(template_code, company, template_data)
if company.account_fiscal_country_id in self.env.ref('base.europe').country_ids:
company._map_eu_taxes()
-
- return rslt
diff --git a/addons/l10n_eu_oss/models/eu_tag_map.py b/addons/l10n_eu_oss/models/eu_tag_map.py
index 69aaed38c63..f0b7b61c378 100644
--- a/addons/l10n_eu_oss/models/eu_tag_map.py
+++ b/addons/l10n_eu_oss/models/eu_tag_map.py
@@ -16,196 +16,214 @@ The EU_TAG_MAP answers the question: "which tag should I apply on the OSS tax re
EU_TAG_MAP = {
# Austria
- 'l10n_at.l10n_at_chart_template': {
+ 'at': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Belgium
- 'l10n_be.l10nbe_chart_template': {
+ 'be': {
'invoice_base_tag': 'l10n_be.tax_report_line_47_tag',
'invoice_tax_tag': None,
'refund_base_tag': 'l10n_be.tax_report_line_49_tag',
'refund_tax_tag': None,
},
# Bulgaria
- 'BG': {
+ 'bg': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Croatia
- 'l10n_hr.l10n_hr_chart_template_rrif': {
+ 'hr': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Cyprus
- 'CY': {
+ 'cy': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Czech - Done in 13.0 - CoA not available yet
- 'l10n_cz.cz_chart_template': {
+ 'cz': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Denmark
- 'l10n_dk.dk_chart_template': {
+ 'dk': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Estonia - Done in 13.0 - CoA not available yet
- 'EE': {
+ 'ee': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Finland
- 'l10n_fi.fi_chart_template': {
+ 'fi': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# France
- 'l10n_fr.l10n_fr_pcg_chart_template': {
+ 'fr': {
'invoice_base_tag': 'l10n_fr.tax_report_E3_tag',
'invoice_tax_tag': None,
'refund_base_tag': 'l10n_fr.tax_report_F8_tag',
'refund_tax_tag': None,
},
# Germany SKR03
- 'l10n_de_skr03.l10n_de_chart_template': {
+ 'de_skr03': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Germany SKR04
- 'l10n_de_skr04.l10n_chart_de_skr04': {
+ 'de_skr04': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Greece
- 'l10n_gr.l10n_gr_chart_template': {
+ 'gr': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Hungary
- 'l10n_hu.hungarian_chart_template': {
+ 'hu': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Ireland
- 'l10n_ie.l10n_ie': {
+ 'ie': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Italy
- 'l10n_it.l10n_it_chart_template_generic': {
+ 'it': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Latvia
- 'LV': {
+ 'lv': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Lithuania
- 'l10n_lt.account_chart_template_lithuania': {
+ 'lt': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Luxembourg
- 'l10n_lu.lu_2011_chart_1': {
+ 'lu': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Malta - Done in 13.0 - CoA not available yet
- 'MT': {
+ 'mt': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Netherlands
- 'l10n_nl.l10nnl_chart_template': {
+ 'nl': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Poland
- 'l10n_pl.pl_chart_template': {
+ 'pl': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Portugal
- 'l10n_pt.pt_chart_template': {
+ 'pt': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Romania
- 'l10n_ro.ro_chart_template': {
+ 'ro': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Slovakia - Done in 13.0 - CoA not available yet
- 'l10n_sk.sk_chart_template': {
+ 'sk': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Slovenia
- 'l10n_si.gd_chart': {
+ 'si': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Spain
- 'l10n_es.account_chart_template_common': {
+ 'es_assec': {
+ 'invoice_base_tag': "l10n_es.mod_303_124",
+ 'invoice_tax_tag': None,
+ 'refund_base_tag': None,
+ 'refund_tax_tag': None,
+ },
+ 'es_common': {
+ 'invoice_base_tag': "l10n_es.mod_303_124",
+ 'invoice_tax_tag': None,
+ 'refund_base_tag': None,
+ 'refund_tax_tag': None,
+ },
+ 'es_full': {
+ 'invoice_base_tag': "l10n_es.mod_303_124",
+ 'invoice_tax_tag': None,
+ 'refund_base_tag': None,
+ 'refund_tax_tag': None,
+ },
+ 'es_pymes': {
'invoice_base_tag': "l10n_es.mod_303_124",
'invoice_tax_tag': None,
'refund_base_tag': None,
'refund_tax_tag': None,
},
# Sweden
- 'l10n_se.l10nse_chart_template': {
+ 'se': {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
diff --git a/addons/l10n_eu_oss/models/res_company.py b/addons/l10n_eu_oss/models/res_company.py
index f008f48932a..a9f05e0a274 100644
--- a/addons/l10n_eu_oss/models/res_company.py
+++ b/addons/l10n_eu_oss/models/res_company.py
@@ -60,13 +60,20 @@ class Company(models.Model):
tax_amount = EU_TAX_MAP.get((company.account_fiscal_country_id.code, domestic_tax.amount, destination_country.code), False)
if tax_amount and domestic_tax not in fpos.tax_ids.tax_src_id:
if not foreign_taxes.get(tax_amount, False):
- oss_tax_group_local_xml_id = f"oss_tax_group_{str(tax_amount).replace('.', '_')}"
- if not self.env.ref(f"l10n_eu_oss.{oss_tax_group_local_xml_id}", raise_if_not_found=False):
+ oss_tax_group_local_xml_id = f"{company.id}_oss_tax_group_{str(tax_amount).replace('.', '_')}_{company.account_fiscal_country_id.code}"
+ if not self.env.ref(f"account.{oss_tax_group_local_xml_id}", raise_if_not_found=False):
+ tg = self.env['account.tax.group'].search([('company_id', '=', company.id)])
self.env['ir.model.data'].create({
'name': oss_tax_group_local_xml_id,
- 'module': 'l10n_eu_oss',
+ 'module': 'account',
'model': 'account.tax.group',
- 'res_id': self.env['account.tax.group'].create({'name': f'OSS {tax_amount}%'}).id,
+ 'res_id': self.env['account.tax.group'].create({
+ 'name': f'OSS {tax_amount}%',
+ 'country_id': company.account_fiscal_country_id.id,
+ 'company_id': company.id,
+ 'tax_payable_account_id': tg.tax_payable_account_id.id,
+ 'tax_receivable_account_id': tg.tax_receivable_account_id.id,
+ }).id,
'noupdate': True,
})
foreign_taxes[tax_amount] = self.env['account.tax'].create({
@@ -76,7 +83,7 @@ class Company(models.Model):
'refund_repartition_line_ids': refund_repartition_lines,
'type_tax_use': 'sale',
'description': f"{tax_amount}%",
- 'tax_group_id': self.env.ref(f'l10n_eu_oss.{oss_tax_group_local_xml_id}').id,
+ 'tax_group_id': self.env.ref(f'account.{oss_tax_group_local_xml_id}').id,
'country_id': company.account_fiscal_country_id.id,
'sequence': 1000,
'company_id': company.id,
@@ -129,8 +136,7 @@ class Company(models.Model):
def _get_oss_tags(self):
oss_tag = self.env.ref('l10n_eu_oss.tag_oss')
- [chart_template_xml_id] = self.chart_template_id.parent_id.get_external_id().values() or self.chart_template_id.get_external_id().values()
- tag_for_country = EU_TAG_MAP.get(chart_template_xml_id, {
+ tag_for_country = EU_TAG_MAP.get(self.chart_template, {
'invoice_base_tag': None,
'invoice_tax_tag': None,
'refund_base_tag': None,
diff --git a/addons/l10n_eu_oss/tests/test_oss.py b/addons/l10n_eu_oss/tests/test_oss.py
index 110dbe9297e..b13483236e6 100644
--- a/addons/l10n_eu_oss/tests/test_oss.py
+++ b/addons/l10n_eu_oss/tests/test_oss.py
@@ -22,7 +22,7 @@ class OssTemplateTestCase(AccountTestInvoicingCommon):
class TestOSSBelgium(OssTemplateTestCase):
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_be.l10nbe_chart_template'):
+ def setUpClass(cls, chart_template_ref='be'):
cls.load_specific_chart_template(chart_template_ref)
cls.company_data['company'].country_id = cls.env.ref('base.be')
cls.company_data['company']._map_eu_taxes()
@@ -56,7 +56,7 @@ class TestOSSBelgium(OssTemplateTestCase):
class TestOSSSpain(OssTemplateTestCase):
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_es.account_chart_template_common'):
+ def setUpClass(cls, chart_template_ref='es_full'):
cls.load_specific_chart_template(chart_template_ref)
cls.company_data['company'].country_id = cls.env.ref('base.es')
cls.company_data['company']._map_eu_taxes()
@@ -108,11 +108,12 @@ class TestOSSMap(OssTemplateTestCase):
In case of failure display the couple (chart_template_xml_id, tax_report_line_xml_id).
The test doesn't fail for unreferenced char_template or unreferenced tax_report_line.
"""
- chart_templates = self.env['account.chart.template'].search([])
- for chart_template in chart_templates:
- [chart_template_xml_id] = chart_template.get_external_id().values()
- oss_tags = EU_TAG_MAP.get(chart_template_xml_id, {})
+ chart_templates = self.env['account.chart.template']._get_chart_template_mapping()
+ for chart_template, template_vals in chart_templates.items():
+ if self.env.ref(f"base.module_{template_vals['module']}").state != 'installed':
+ continue
+ oss_tags = EU_TAG_MAP.get(chart_template, {})
for tax_report_line_xml_id in filter(lambda d: d, oss_tags.values()):
- with self.subTest(chart_template_xml_id=chart_template_xml_id, tax_report_line_xml_id=tax_report_line_xml_id):
+ with self.subTest(chart_template=chart_template, tax_report_line_xml_id=tax_report_line_xml_id):
tag = self.env.ref(tax_report_line_xml_id, raise_if_not_found=False)
- self.assertIsNotNone(tag, f"The following xml_id is incorrect in EU_TAG_MAP.py:{tax_report_line_xml_id}")
+ self.assertIsNotNone(tag, f"The following xml_id is incorrect in EU_TAG_MAP.py: {tax_report_line_xml_id}")
diff --git a/addons/l10n_fi/__init__.py b/addons/l10n_fi/__init__.py
index f0977b3f991..9775837fde8 100644
--- a/addons/l10n_fi/__init__.py
+++ b/addons/l10n_fi/__init__.py
@@ -2,6 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from. import models
-
-def load_translations(env):
- env.ref('l10n_fi.fi_chart_template').process_coa_translations()
diff --git a/addons/l10n_fi/tests/test_get_reference.py b/addons/l10n_fi/tests/test_get_reference.py
index 1f45f8341ae..5d5dd912286 100644
--- a/addons/l10n_fi/tests/test_get_reference.py
+++ b/addons/l10n_fi/tests/test_get_reference.py
@@ -7,7 +7,7 @@ from odoo.tests import tagged
class InvoiceGetReferenceTest(AccountTestInvoicingCommon):
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_fi.fi_chart_template'):
+ def setUpClass(cls, chart_template_ref='fi'):
super().setUpClass(chart_template_ref=chart_template_ref)
cls.invoice = cls.init_invoice('out_invoice', products=cls.product_a+cls.product_b)
diff --git a/addons/l10n_fi/tests/test_references.py b/addons/l10n_fi/tests/test_references.py
index 5a101b760b7..cb30dba77ad 100644
--- a/addons/l10n_fi/tests/test_references.py
+++ b/addons/l10n_fi/tests/test_references.py
@@ -12,7 +12,7 @@ class PaymentReferenceTest(AccountTestInvoicingCommon):
"""
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_fi.fi_chart_template'):
+ def setUpClass(cls, chart_template_ref='fi'):
super().setUpClass(chart_template_ref=chart_template_ref)
cls.invoice = cls.init_invoice('out_invoice', products=cls.product_a+cls.product_b)
diff --git a/addons/l10n_fr/__init__.py b/addons/l10n_fr/__init__.py
index dcfcb5c41ed..a672a456855 100644
--- a/addons/l10n_fr/__init__.py
+++ b/addons/l10n_fr/__init__.py
@@ -4,8 +4,6 @@
# Copyright (c) 2008 JAILLET Simon - CrysaLEAD - www.crysalead.fr
from . import models
-def load_translations(env):
- env.ref('l10n_fr.l10n_fr_pcg_chart_template').process_coa_translations()
def _l10n_fr_post_init_hook(env):
_preserve_tag_on_taxes(env)
diff --git a/addons/l10n_fr/migrations/2.1/post-migrate_update_taxes.py b/addons/l10n_fr/migrations/2.1/post-migrate_update_taxes.py
index a689983d072..c1387c62ead 100644
--- a/addons/l10n_fr/migrations/2.1/post-migrate_update_taxes.py
+++ b/addons/l10n_fr/migrations/2.1/post-migrate_update_taxes.py
@@ -1,6 +1,8 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.addons.account.models.chart_template import update_taxes_from_templates
+from odoo import api, SUPERUSER_ID
def migrate(cr, version):
- update_taxes_from_templates(cr, 'l10n_fr.l10n_fr_pcg_chart_template')
+ env = api.Environment(cr, SUPERUSER_ID, {})
+ for company in env['res.company'].search([('chart_template', '=', 'fr')]):
+ env['account.chart.template'].try_loading('fr', company)
diff --git a/addons/l10n_fr/models/account_chart_template.py b/addons/l10n_fr/models/account_chart_template.py
index 0cc466fa570..f44680ef5d7 100644
--- a/addons/l10n_fr/models/account_chart_template.py
+++ b/addons/l10n_fr/models/account_chart_template.py
@@ -2,19 +2,15 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, models
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- @api.model
- def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
- journal_data = super(AccountChartTemplate, self)._prepare_all_journals(
- acc_template_ref, company, journals_dict)
- if company.account_fiscal_country_id.code != 'FR':
- return journal_data
-
- for journal in journal_data:
- if journal['type'] in ('sale', 'purchase'):
- journal.update({'refund_sequence': True})
- return journal_data
+ @template('fr', 'account.journal')
+ def _get_fr_account_journal(self):
+ return {
+ 'sale': {'refund_sequence': True},
+ 'purchase': {'refund_sequence': True},
+ }
diff --git a/addons/l10n_fr_fec/tests/test_wizard.py b/addons/l10n_fr_fec/tests/test_wizard.py
index db1e00de86e..0b6b64d1572 100644
--- a/addons/l10n_fr_fec/tests/test_wizard.py
+++ b/addons/l10n_fr_fec/tests/test_wizard.py
@@ -14,7 +14,7 @@ from odoo import fields, Command
class TestAccountFrFec(AccountTestInvoicingCommon):
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_fr.l10n_fr_pcg_chart_template'):
+ def setUpClass(cls, chart_template_ref='fr'):
super().setUpClass(chart_template_ref=chart_template_ref)
company = cls.company_data['company']
diff --git a/addons/l10n_generic_coa/__manifest__.py b/addons/l10n_generic_coa/__manifest__.py
deleted file mode 100644
index fe2fa662ebf..00000000000
--- a/addons/l10n_generic_coa/__manifest__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-{
- 'name': 'Generic - Accounting',
- 'version': '1.1',
- 'category': 'Accounting/Localizations/Account Charts',
- 'description': """
-This is the base module to manage the generic accounting chart in Odoo.
-==============================================================================
-
-Install some generic chart of accounts.
- """,
- 'depends': [
- 'account',
- ],
- 'data': [
- 'data/l10n_generic_coa.xml',
- 'data/account.account.template.csv',
- 'data/l10n_generic_coa_post.xml',
- ],
- 'uninstall_hook': 'uninstall_hook',
- 'license': 'LGPL-3',
-}
diff --git a/addons/l10n_generic_coa/data/account.account.template.csv b/addons/l10n_generic_coa/data/account.account.template.csv
deleted file mode 100644
index c1c755f869c..00000000000
--- a/addons/l10n_generic_coa/data/account.account.template.csv
+++ /dev/null
@@ -1,37 +0,0 @@
-"id","name","code","account_type","chart_template_id/id","tag_ids/id","reconcile"
-"current_assets","Current Assets","1010","asset_current","l10n_generic_coa.configurable_chart_template","","False"
-"stock_valuation","Stock Valuation","1101","asset_current","l10n_generic_coa.configurable_chart_template","","False"
-"stock_in","Stock Interim (Received)","1102","asset_current","l10n_generic_coa.configurable_chart_template","","True"
-"stock_out","Stock Interim (Delivered)","1103","asset_current","l10n_generic_coa.configurable_chart_template","","True"
-"receivable","Account Receivable","1210","asset_receivable","l10n_generic_coa.configurable_chart_template","","True"
-"to_receive_rec","Products to receive","1211","asset_current","l10n_generic_coa.configurable_chart_template","","True"
-"tax_paid","Tax Paid","1310","asset_current","l10n_generic_coa.configurable_chart_template","","False"
-"tax_receivable","Tax Receivable","1320","asset_current","l10n_generic_coa.configurable_chart_template","","False"
-"prepayments","Prepayments","1410","asset_prepayments","l10n_generic_coa.configurable_chart_template","","False"
-"fixed_assets","Fixed Asset","1510","asset_fixed","l10n_generic_coa.configurable_chart_template","","False"
-"non_current_assets","Non-current assets","1910","asset_non_current","l10n_generic_coa.configurable_chart_template","","False"
-"current_liabilities","Current Liabilities","2010","liability_current","l10n_generic_coa.configurable_chart_template","","False"
-"payable","Account Payable","2110","liability_payable","l10n_generic_coa.configurable_chart_template","","True"
-"to_receive_pay","Bills to receive","2111","liability_current","l10n_generic_coa.configurable_chart_template","","True"
-"tax_received","Tax Received","2510","liability_current","l10n_generic_coa.configurable_chart_template","","False"
-"tax_payable","Tax Payable","2520","liability_current","l10n_generic_coa.configurable_chart_template","","False"
-"non_current_liabilities","Non-current Liabilities","2910","liability_non_current","l10n_generic_coa.configurable_chart_template","","False"
-"capital","Capital","3010","equity","l10n_generic_coa.configurable_chart_template","","False"
-"dividends","Dividends","3020","equity","l10n_generic_coa.configurable_chart_template","","False"
-"income","Product Sales","4000","income","l10n_generic_coa.configurable_chart_template","account.account_tag_operating","False"
-"income_currency_exchange","Foreign Exchange Gain","4410","income","l10n_generic_coa.configurable_chart_template","account.account_tag_financing","False"
-"cash_diff_income","Cash Difference Gain","4420","income","l10n_generic_coa.configurable_chart_template","account.account_tag_investing","False"
-"other_income","Other Income","4500","income_other","l10n_generic_coa.configurable_chart_template","","False"
-"cost_of_goods_sold","Cost of Goods Sold","5000","expense_direct_cost","l10n_generic_coa.configurable_chart_template","account.account_tag_operating","False"
-"expense","Expenses","6000","expense","l10n_generic_coa.configurable_chart_template","account.account_tag_operating","False"
-"expense_invest","Purchase of Equipment","6110","expense","l10n_generic_coa.configurable_chart_template","account.account_tag_investing","False"
-"expense_rent","Rent","6120","expense","l10n_generic_coa.configurable_chart_template","account.account_tag_investing","False"
-"expense_finance","Bank Fees","6200","expense","l10n_generic_coa.configurable_chart_template","account.account_tag_financing","False"
-"expense_salary","Salary Expenses","6300","expense","l10n_generic_coa.configurable_chart_template","account.account_tag_operating","False"
-"expense_currency_exchange","Foreign Exchange Loss","6410","expense","l10n_generic_coa.configurable_chart_template","account.account_tag_financing","False"
-"cash_diff_expense","Cash Difference Loss","6420","expense","l10n_generic_coa.configurable_chart_template","account.account_tag_investing","False"
-"expense_rd","RD Expenses","9610","expense","l10n_generic_coa.configurable_chart_template","account.account_tag_investing","False"
-"expense_sales","Sales Expenses","9620","expense","l10n_generic_coa.configurable_chart_template","account.account_tag_investing","False"
-"pos_receivable","Account Receivable (PoS)","1013","asset_receivable","l10n_generic_coa.configurable_chart_template","","True"
-"cash_discount_loss","Cash Discount Loss","4430","expense","l10n_generic_coa.configurable_chart_template","","False"
-"cash_discount_gain","Cash Discount Gain","6430","income","l10n_generic_coa.configurable_chart_template","","False"
diff --git a/addons/l10n_generic_coa/data/l10n_generic_coa.xml b/addons/l10n_generic_coa/data/l10n_generic_coa.xml
deleted file mode 100644
index 417250bf93b..00000000000
--- a/addons/l10n_generic_coa/data/l10n_generic_coa.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
- Configurable Account Chart Template
- 6
- 1014
- 1015
- 1017
-
-
-
-
diff --git a/addons/l10n_generic_coa/data/l10n_generic_coa_post.xml b/addons/l10n_generic_coa/data/l10n_generic_coa_post.xml
deleted file mode 100644
index e40b0f87bc2..00000000000
--- a/addons/l10n_generic_coa/data/l10n_generic_coa_post.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
-
- Tax 15%
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tax 15%
- 15
- sale
-
-
-
-
-
-
- Purchase Tax 15%
- 15
- purchase
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/l10n_generic_coa/static/description/icon.png b/addons/l10n_generic_coa/static/description/icon.png
deleted file mode 100644
index b8a9b3fdc2b..00000000000
Binary files a/addons/l10n_generic_coa/static/description/icon.png and /dev/null differ
diff --git a/addons/l10n_generic_coa/tests/__init__.py b/addons/l10n_generic_coa/tests/__init__.py
deleted file mode 100644
index 3ecb24ac29b..00000000000
--- a/addons/l10n_generic_coa/tests/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from . import test_mail_performance
diff --git a/addons/l10n_gt/__init__.py b/addons/l10n_gt/__init__.py
index e10d7f8f242..f5f622c374c 100644
--- a/addons/l10n_gt/__init__.py
+++ b/addons/l10n_gt/__init__.py
@@ -4,8 +4,3 @@
# Copyright (c) 2009-2010 Soluciones Tecnologócias Prisma S.A. All Rights Reserved.
# José Rodrigo Fernández Menegazzo, Soluciones Tecnologócias Prisma S.A.
# (http://www.solucionesprisma.com)
-from odoo import api, SUPERUSER_ID
-
-def load_translations(cr, registry):
- env = api.Environment(cr, SUPERUSER_ID, {})
- env.ref('l10n_gt.cuentas_plantilla').process_coa_translations()
diff --git a/addons/l10n_hn/__init__.py b/addons/l10n_hn/__init__.py
index 8ff98f24283..87e7742c8a4 100644
--- a/addons/l10n_hn/__init__.py
+++ b/addons/l10n_hn/__init__.py
@@ -3,8 +3,3 @@
# Copyright (c) 2009-2010 Salvatore J. Trimarchi
# (http://salvatoreweb.co.cc)
-from odoo import api, SUPERUSER_ID
-
-def load_translations(cr, registry):
- env = api.Environment(cr, SUPERUSER_ID, {})
- env.ref('l10n_hn.cuentas_plantilla').process_coa_translations()
diff --git a/addons/l10n_hr/__init__.py b/addons/l10n_hr/__init__.py
index c7275ea9046..67dee8c60db 100644
--- a/addons/l10n_hr/__init__.py
+++ b/addons/l10n_hr/__init__.py
@@ -1,5 +1,2 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-def load_translations(env):
- env.ref('l10n_hr.l10n_hr_euro_chart_template').process_coa_translations()
diff --git a/addons/l10n_hr/__manifest__.py b/addons/l10n_hr/__manifest__.py
index e611d88f3e1..1a1f6fe111a 100644
--- a/addons/l10n_hr/__manifest__.py
+++ b/addons/l10n_hr/__manifest__.py
@@ -33,6 +33,5 @@
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_hr/data/account_tax_report_data.xml b/addons/l10n_hr/data/account_tax_report_data.xml
index cfba0a926f3..2ffbc39fc98 100644
--- a/addons/l10n_hr/data/account_tax_report_data.xml
+++ b/addons/l10n_hr/data/account_tax_report_data.xml
@@ -19,7 +19,6 @@
-
Vat calculation of supplied goods and services - total value(i. + ii.)
c_0_total
@@ -36,7 +35,6 @@
-
I. Transactions not subject to vat and exempt - total value (1.+2.+3.+4.+5.+6.+7.+8.+9.+10.)
c_I_total
@@ -47,7 +45,6 @@
hr01.tax_base + hr02.tax_base + hr03.tax_base + hr04.tax_base + hr05.tax_base + hr06.tax_base + hr07.tax_base + hr08.tax_base + hr09.tax_base + hr10.tax_base
-
1. Supplies in the republic of croatia in respect of which the receiver calculates vat (domestic reverse charge)
@@ -60,9 +57,6 @@
-
-
-
2. Supplies carried out in another member state
hr02
@@ -74,9 +68,6 @@
-
-
-
3. Supplies of goods within the eu
hr03
@@ -88,9 +79,6 @@
-
-
-
4. Supplies of services within the eu
hr04
@@ -102,9 +90,6 @@
-
-
-
5. Supplies to persons not established in the republic of croatia
hr05
@@ -116,9 +101,6 @@
-
-
-
6. Installed and assembled goods in another member state
hr06
@@ -130,9 +112,6 @@
-
-
-
7. Supplies of new means of transport to another member state
hr07
@@ -144,9 +123,6 @@
-
-
-
8. Domestic supplies
hr08
@@ -158,9 +134,6 @@
-
-
-
9. Exportation
hr09
@@ -172,9 +145,6 @@
-
-
-
10. Other exemptions
hr10
@@ -188,7 +158,6 @@
-
II. Taxable transactions – total amount (1.+2.+3.+4.+5.+6.+7.+8.+9.+10.+11.+12.+13.+14.+15.)
c_II_total
@@ -204,7 +173,6 @@
hr11.tax_amount + hr12.tax_amount + hr13.tax_amount + hr14.tax_amount + hr15.tax_amount + hr16.tax_amount + hr17.tax_amount + hr18.tax_amount + hr19.tax_amount + hr20.tax_amount + hr21.tax_amount + hr22.tax_amount + hr23.tax_amount + hr24.tax_amount + hr25.tax_amount
-
1. Supplies of goods and services in the republic of croatia at a rate 5%
@@ -222,7 +190,6 @@
-
2. Supplies of goods and services in the republic of croatia at a rate 13%
hr12
@@ -239,7 +206,6 @@
-
3. Supplies of goods and services in the republic of croatia at a rate 25%
hr13
@@ -256,7 +222,6 @@
-
4. Supplies received in the republic of croatia in respect of which the receiver calculates vat (domestic reverse charge)
hr14
@@ -272,197 +237,185 @@
II.4_tax
-
-
-
- 5. Acquisition of goods within the eu at a rate 5%
- hr15
-
-
- tax_base
- tax_tags
- II.5_base
-
-
- tax_amount
- tax_tags
- II.5_tax
-
-
-
-
-
- 6. Acquisition of goods within the eu at a rate 13%
- hr16
-
-
- tax_base
- tax_tags
- II.6_base
-
-
- tax_amount
- tax_tags
- II.6_tax
-
-
-
-
-
- 7. Acquisition of goods within the eu at a rate 25%
- hr17
-
-
- tax_base
- tax_tags
- II.7_base
-
-
- tax_amount
- tax_tags
- II.7_tax
-
-
-
-
-
- 8. Services received from eu at a rate 5%
- hr18
-
-
- tax_base
- tax_tags
- II.8_base
-
-
- tax_amount
- tax_tags
- II.8_tax
-
-
-
-
-
- 9. Services received from eu at a rate 13%
- hr19
-
-
- tax_base
- tax_tags
- II.9_base
-
-
- tax_amount
- tax_tags
- II.9_tax
-
-
-
-
-
- 10. Services received from eu at a rate 25%
- hr20
-
-
- tax_base
- tax_tags
- II.10_base
-
-
- tax_amount
- tax_tags
- II.10_tax
-
-
-
-
-
- 11. Supplies of goods and services received from taxable persons not established in the republic of croatia at a rate 5%
- hr21
-
-
- tax_base
- tax_tags
- II.11_base
-
-
- tax_amount
- tax_tags
- II.11_tax
-
-
-
-
-
- 12. Supplies of goods and services received from taxable persons not established in the republic of croatia at a rate 13%
- hr22
-
-
- tax_base
- tax_tags
- II.12_base
-
-
- tax_amount
- tax_tags
- II.12_tax
-
-
-
-
-
- 13. Supplies of goods and services received from taxable persons not established in the republic of croatia at a rate 25%
- hr23
-
-
- tax_base
- tax_tags
- II.13_base
-
-
- tax_amount
- tax_tags
- II.13_tax
-
-
-
-
-
- 14. Subsequent exemption on exportation related to personal passenger transportation
- hr24
-
-
- tax_base
- tax_tags
- II.14_base
-
-
- tax_amount
- tax_tags
- II.14_tax
-
-
-
-
-
- 15. Vat calculated on importation
- hr25
-
-
- tax_base
- tax_tags
- II.15_base
-
-
- tax_amount
- tax_tags
- II.15_tax
-
-
-
-
-
-
+
+
+ 5. Acquisition of goods within the eu at a rate 5%
+ hr15
+
+
+ tax_base
+ tax_tags
+ II.5_base
+
+
+ tax_amount
+ tax_tags
+ II.5_tax
+
+
+
+
+ 6. Acquisition of goods within the eu at a rate 13%
+ hr16
+
+
+ tax_base
+ tax_tags
+ II.6_base
+
+
+ tax_amount
+ tax_tags
+ II.6_tax
+
+
+
+
+ 7. Acquisition of goods within the eu at a rate 25%
+ hr17
+
+
+ tax_base
+ tax_tags
+ II.7_base
+
+
+ tax_amount
+ tax_tags
+ II.7_tax
+
+
+
+
+ 8. Services received from eu at a rate 5%
+ hr18
+
+
+ tax_base
+ tax_tags
+ II.8_base
+
+
+ tax_amount
+ tax_tags
+ II.8_tax
+
+
+
+
+ 9. Services received from eu at a rate 13%
+ hr19
+
+
+ tax_base
+ tax_tags
+ II.9_base
+
+
+ tax_amount
+ tax_tags
+ II.9_tax
+
+
+
+
+ 10. Services received from eu at a rate 25%
+ hr20
+
+
+ tax_base
+ tax_tags
+ II.10_base
+
+
+ tax_amount
+ tax_tags
+ II.10_tax
+
+
+
+
+ 11. Supplies of goods and services received from taxable persons not established in the republic of croatia at a rate 5%
+ hr21
+
+
+ tax_base
+ tax_tags
+ II.11_base
+
+
+ tax_amount
+ tax_tags
+ II.11_tax
+
+
+
+
+ 12. Supplies of goods and services received from taxable persons not established in the republic of croatia at a rate 13%
+ hr22
+
+
+ tax_base
+ tax_tags
+ II.12_base
+
+
+ tax_amount
+ tax_tags
+ II.12_tax
+
+
+
+
+ 13. Supplies of goods and services received from taxable persons not established in the republic of croatia at a rate 25%
+ hr23
+
+
+ tax_base
+ tax_tags
+ II.13_base
+
+
+ tax_amount
+ tax_tags
+ II.13_tax
+
+
+
+
+ 14. Subsequent exemption on exportation related to personal passenger transportation
+ hr24
+
+
+ tax_base
+ tax_tags
+ II.14_base
+
+
+ tax_amount
+ tax_tags
+ II.14_tax
+
+
+
+
+ 15. Vat calculated on importation
+ hr25
+
+
+ tax_base
+ tax_tags
+ II.15_base
+
+
+ tax_amount
+ tax_tags
+ II.15_tax
+
+
+
+
+
III. Calculated input vat – total amount (1.+2.+3.+4.+5.+6.+7.+8.+9.+10.+11.+12.+13. +14.+15.)
c_III_total
@@ -478,7 +431,6 @@
hr26.tax_amount + hr27.tax_amount + hr28.tax_amount + hr29.tax_amount + hr30.tax_amount + hr31.tax_amount + hr32.tax_amount + hr33.tax_amount + hr34.tax_amount + hr35.tax_amount + hr36.tax_amount + hr37.tax_amount + hr38.tax_amount + hr39.tax_amount + hr40.tax_amount
-
1. Input vat related to supplies received in the country at a rate 5%
@@ -496,9 +448,6 @@
-
-
-
2. Input vat related to supplies received in the country at a rate 13%
hr27
@@ -515,9 +464,6 @@
-
-
-
3. Input vat related to supplies received in the country at a rate 25%
hr28
@@ -534,9 +480,6 @@
-
-
-
4. Input vat related to supplies received in the country in respect of which the receiver calculates vat (domestic reverse charge)
hr29
@@ -553,9 +496,6 @@
-
-
-
5. Input vat related to acquisition of goods within the eu at a rate 5%
hr30
@@ -572,9 +512,6 @@
-
-
-
6. Input vat related to acquisition of goods within the eu at a rate 13%
hr31
@@ -591,9 +528,6 @@
-
-
-
7. Input vat related to acquisition of goods within the eu at a rate 25%
hr32
@@ -610,9 +544,6 @@
-
-
-
8. Input vat related to services received from eu at a rate 5%
hr33
@@ -629,9 +560,6 @@
-
-
-
9. Input vat related to services received from eu at a rate 13%
hr34
@@ -648,9 +576,6 @@
-
-
-
10. Input vat related to services received from eu at a rate 25%
hr35
@@ -667,9 +592,6 @@
-
-
-
11. Input vat related to supplies of goods and services received from non-established taxable persons at a rate 5%
hr36
@@ -686,9 +608,6 @@
-
-
-
12. Input vat related to supplies of goods and services received from non-established taxable persons at a rate 13%
hr37
@@ -705,9 +624,6 @@
-
-
-
13. Input vat related to supplies of goods and services received from non-established taxable persons at a rate 25%
hr38
@@ -724,9 +640,6 @@
-
-
-
14. Input vat related to importation
hr39
@@ -743,9 +656,6 @@
-
-
-
15. Adjustments of deductions
hr40
@@ -759,7 +669,6 @@
-
IV. Vat liability in the calculation period: to pay (ii. - iii.) or to refund (iii. - ii.)
c_IV_total
@@ -797,7 +706,6 @@
-
V. According to the previous calculation: unpaid vat to the day of submitting of this return-overpaid-tax credit
c_V_total
@@ -833,7 +741,6 @@
-
VI. Total difference: to pay/to refund
c_VI_total
@@ -871,7 +778,6 @@
-
VII. Annual deductible proportion(%)
diff --git a/addons/l10n_hu/__init__.py b/addons/l10n_hu/__init__.py
index 1d02d59bd0d..67dee8c60db 100644
--- a/addons/l10n_hu/__init__.py
+++ b/addons/l10n_hu/__init__.py
@@ -1,5 +1,2 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-def load_translations(env):
- env.ref('l10n_hu.hungarian_chart_template').process_coa_translations()
diff --git a/addons/l10n_hu/__manifest__.py b/addons/l10n_hu/__manifest__.py
index 515ae766ae0..efed2e75b8a 100644
--- a/addons/l10n_hu/__manifest__.py
+++ b/addons/l10n_hu/__manifest__.py
@@ -27,6 +27,5 @@
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_id/__init__.py b/addons/l10n_id/__init__.py
index 7bfbde7824c..67dee8c60db 100644
--- a/addons/l10n_id/__init__.py
+++ b/addons/l10n_id/__init__.py
@@ -1,5 +1,2 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-def load_translations(env):
- env.ref('l10n_id.l10n_id_chart').process_coa_translations()
diff --git a/addons/l10n_id/__manifest__.py b/addons/l10n_id/__manifest__.py
index ee9cdea78af..90b0fdd1182 100644
--- a/addons/l10n_id/__manifest__.py
+++ b/addons/l10n_id/__manifest__.py
@@ -23,6 +23,5 @@ This is the latest Indonesian Odoo localisation necessary to run Odoo accounting
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_id_efaktur/tests/test_l10n_id_efaktur.py b/addons/l10n_id_efaktur/tests/test_l10n_id_efaktur.py
index 3a3a29da8c2..d1a918da8f7 100644
--- a/addons/l10n_id_efaktur/tests/test_l10n_id_efaktur.py
+++ b/addons/l10n_id_efaktur/tests/test_l10n_id_efaktur.py
@@ -18,6 +18,10 @@ class TestIndonesianEfaktur(common.TransactionCase):
self.env.company.phone = "12345"
self.partner_id = self.env['res.partner'].create({"name": "l10ntest", "l10n_id_pkp": True, "l10n_id_kode_transaksi": "01", "l10n_id_nik": "12345"})
+ self.env['account.tax.group'].create({
+ 'name': 'tax_group',
+ 'country_id': self.env.ref('base.id').id,
+ })
self.tax_id = self.env['account.tax'].create({"name": "test tax", "type_tax_use": "sale", "amount": 10.0, "price_include": True})
self.efaktur = self.env['l10n_id_efaktur.efaktur.range'].create({'min': '0000000000001', 'max': '0000000000010'})
diff --git a/addons/l10n_in/demo/account_invoice_demo.xml b/addons/l10n_in/demo/account_invoice_demo.xml
index e83d9bdc073..dbb3ebd4b77 100644
--- a/addons/l10n_in/demo/account_invoice_demo.xml
+++ b/addons/l10n_in/demo/account_invoice_demo.xml
@@ -22,7 +22,7 @@
('company_id', '=', ref('l10n_in.demo_company_in')),
('type_tax_use', '=', 'sale'),
('amount','=', 28),
- ('tax_group_id', '=', ref('l10n_in.gst_group'))], limit=1).ids)]
+ ('tax_group_id', '=', ref('account.{}_gst_group'.format(ref('l10n_in.demo_company_in'))))], limit=1).ids)]
}),
(0, 0, {
'product_id': ref('product.product_product_9'),
@@ -32,7 +32,7 @@
('company_id', '=', ref('l10n_in.demo_company_in')),
('type_tax_use', '=', 'sale'),
('amount','=', 18),
- ('tax_group_id', '=', ref('l10n_in.gst_group'))], limit=1).ids)]
+ ('tax_group_id', '=', ref('account.{}_gst_group'.format(ref('l10n_in.demo_company_in'))))], limit=1).ids)]
}),
(0, 0, {
'product_id': ref('product.product_product_10'),
@@ -44,9 +44,9 @@
'|',
'&',
('amount', '=', 18),
- ('tax_group_id', '=', ref('l10n_in.gst_group')),
+ ('tax_group_id', '=', ref('account.{}_gst_group'.format(ref('l10n_in.demo_company_in')))),
'&',
- ('tax_group_id', '=', ref('l10n_in.cess_group')),
+ ('tax_group_id', '=', ref('account.{}_cess_group'.format(ref('l10n_in.demo_company_in')))),
('children_tax_ids.amount','=', 5)
], limit=2).ids)]
}),
diff --git a/addons/l10n_in/models/chart_template.py b/addons/l10n_in/models/chart_template.py
index 4dee7db6718..348cbbb2ee7 100644
--- a/addons/l10n_in/models/chart_template.py
+++ b/addons/l10n_in/models/chart_template.py
@@ -1,30 +1,16 @@
# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from odoo import api, fields, models, _
+from odoo import models, fields
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- def _load(self, company):
- """ Set Opening Date and Fiscal Year End in Indian localization"""
- res = super(AccountChartTemplate, self)._load(company)
- if self == self.env.ref("l10n_in.indian_chart_template_standard"):
- company.write({
- 'account_opening_date': fields.Date.context_today(self).replace(month=4, day=1),
- 'fiscalyear_last_month': '3',
- })
- return res
-
-
-class AccountTaxTemplate(models.Model):
- _inherit = 'account.tax.template'
-
- l10n_in_reverse_charge = fields.Boolean("Reverse charge", help="Tick this if this tax is reverse charge. Only for Indian accounting")
-
- def _get_tax_vals(self, company, tax_template_to_tax):
- val = super(AccountTaxTemplate, self)._get_tax_vals(company, tax_template_to_tax)
- if self.tax_group_id:
- val['l10n_in_reverse_charge'] = self.l10n_in_reverse_charge
- return val
+ @template('in', 'res.company')
+ def _get_in_res_company(self):
+ company_data = super()._get_in_res_company()
+ company_data[self.env.company.id].update({
+ 'account_opening_date': fields.Date.context_today(self).replace(month=4, day=1),
+ 'fiscalyear_last_month': '3',
+ })
+ return company_data
diff --git a/addons/l10n_in_edi/tests/test_edi_json.py b/addons/l10n_in_edi/tests/test_edi_json.py
index c48e73e6ab7..3f1a07f50f2 100644
--- a/addons/l10n_in_edi/tests/test_edi_json.py
+++ b/addons/l10n_in_edi/tests/test_edi_json.py
@@ -8,7 +8,7 @@ class TestEdiJson(AccountTestInvoicingCommon):
@classmethod
- def setUpClass(cls, chart_template_ref="l10n_in.indian_chart_template_standard"):
+ def setUpClass(cls, chart_template_ref="in"):
super().setUpClass(chart_template_ref=chart_template_ref)
cls.env['ir.config_parameter'].set_param('l10n_in_edi.manage_invoice_negative_lines', True)
cls.maxDiff = None
@@ -54,8 +54,8 @@ class TestEdiJson(AccountTestInvoicingCommon):
'supplier_taxes_id': [(6, 0, cls.tax_purchase_a.ids)],
"l10n_in_hsn_code": "01111",
})
- gst_with_cess = cls.env.ref("l10n_in.%s_sgst_sale_12" % (cls.company_data["company"].id)
- ) + cls.env.ref("l10n_in.%s_cess_5_plus_1591_sale" % (cls.company_data["company"].id))
+ gst_with_cess = cls.env.ref("account.%s_sgst_sale_12" % (cls.company_data["company"].id)
+ ) + cls.env.ref("account.%s_cess_5_plus_1591_sale" % (cls.company_data["company"].id))
product_with_cess = cls.env["product.product"].create({
"name": "product_with_cess",
"uom_id": cls.env.ref("uom.product_uom_unit").id,
diff --git a/addons/l10n_in_edi_ewaybill/demo/account_invoice_demo.xml b/addons/l10n_in_edi_ewaybill/demo/account_invoice_demo.xml
index a0ce8a780ea..2cd3778d47d 100644
--- a/addons/l10n_in_edi_ewaybill/demo/account_invoice_demo.xml
+++ b/addons/l10n_in_edi_ewaybill/demo/account_invoice_demo.xml
@@ -33,7 +33,7 @@
('company_id', '=', ref('l10n_in_edi_ewaybill.demo_company_in_ewaybill')),
('type_tax_use', '=', 'sale'),
('amount','=', 28),
- ('tax_group_id', '=', ref('l10n_in.igst_group'))], limit=1).ids)]
+ ('tax_group_id', '=', ref('account.%s_igst_group' % ref('l10n_in_edi_ewaybill.demo_company_in_ewaybill')))], limit=1).ids)]
}),
(0, 0, {
'product_id': ref('product.product_product_9'),
@@ -43,7 +43,7 @@
('company_id', '=', ref('l10n_in_edi_ewaybill.demo_company_in_ewaybill')),
('type_tax_use', '=', 'sale'),
('amount','=', 18),
- ('tax_group_id', '=', ref('l10n_in.igst_group'))], limit=1).ids)]
+ ('tax_group_id', '=', ref('account.%s_igst_group' % ref('l10n_in_edi_ewaybill.demo_company_in_ewaybill')))], limit=1).ids)]
}),
(0, 0, {
'product_id': ref('product.product_product_10'),
@@ -55,9 +55,9 @@
'|',
'&',
('amount', '=', 18),
- ('tax_group_id', '=', ref('l10n_in.igst_group')),
+ ('tax_group_id', '=', ref('account.%s_igst_group' % ref('l10n_in_edi_ewaybill.demo_company_in_ewaybill'))),
'&',
- ('tax_group_id', '=', ref('l10n_in.cess_group')),
+ ('tax_group_id', '=', ref('account.%s_cess_group' % ref('l10n_in_edi_ewaybill.demo_company_in_ewaybill'))),
('children_tax_ids.amount','=', 5)
], limit=2).ids)]
}),
diff --git a/addons/l10n_in_edi_ewaybill/demo/chart_template.py b/addons/l10n_in_edi_ewaybill/demo/chart_template.py
index 86e7cf5f35f..4ad86e5a449 100644
--- a/addons/l10n_in_edi_ewaybill/demo/chart_template.py
+++ b/addons/l10n_in_edi_ewaybill/demo/chart_template.py
@@ -3,15 +3,16 @@
from odoo import models, api, Command
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
@api.model
- def _get_demo_data(self):
+ def _get_demo_data(self, company=False):
+ company = company or self.env.company
"""We need to deactivate einvoice here, as we can not send e-invoice and e-waybill in the same demo company"""
- if self.env.company == self.env.ref('l10n_in_edi_ewaybill.demo_company_in_ewaybill'):
+ if company == self.env.ref('l10n_in_edi_ewaybill.demo_company_in_ewaybill'):
val = self.env['account.journal'].search([
('type', '=', 'sale'),
- ('company_id', '=', self.env.ref('l10n_in_edi_ewaybill.demo_company_in_ewaybill').id)])
+ ('company_id', '=', company.id)])
val.write({'edi_format_ids': [Command.unlink(self.env.ref('l10n_in_edi.edi_in_einvoice_json_1_03').id)]})
- return super()._get_demo_data()
+ return super()._get_demo_data(company)
diff --git a/addons/l10n_in_edi_ewaybill/models/account_move.py b/addons/l10n_in_edi_ewaybill/models/account_move.py
index 979dd4136f6..4917d1ec11c 100755
--- a/addons/l10n_in_edi_ewaybill/models/account_move.py
+++ b/addons/l10n_in_edi_ewaybill/models/account_move.py
@@ -48,7 +48,10 @@ class AccountMove(models.Model):
@api.depends('state', 'edi_document_ids', 'edi_document_ids.state')
def _compute_l10n_in_edi_ewaybill_show_send_button(self):
- edi_format = self.env.ref('l10n_in_edi_ewaybill.edi_in_ewaybill_json_1_03')
+ edi_format = self.env.ref('l10n_in_edi_ewaybill.edi_in_ewaybill_json_1_03', raise_if_not_found=False)
+ if not edi_format:
+ self.l10n_in_edi_ewaybill_show_send_button = False
+ return
posted_moves = self.filtered(lambda x: x.is_invoice() and x.state == 'posted' and x.country_code == "IN")
for move in posted_moves:
already_sent = move.edi_document_ids.filtered(lambda x: x.edi_format_id == edi_format and x.state in ('sent', 'to_cancel', 'to_send'))
diff --git a/addons/l10n_it/__init__.py b/addons/l10n_it/__init__.py
index 4cdddb1c9a6..dc5e6b693d1 100644
--- a/addons/l10n_it/__init__.py
+++ b/addons/l10n_it/__init__.py
@@ -2,7 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
-
-
-def load_translations(env):
- env.ref('l10n_it.l10n_it_chart_template_generic').process_coa_translations()
diff --git a/addons/l10n_it/__manifest__.py b/addons/l10n_it/__manifest__.py
index 05b981feaaa..02939d1bd7b 100644
--- a/addons/l10n_it/__manifest__.py
+++ b/addons/l10n_it/__manifest__.py
@@ -36,5 +36,4 @@ Italian accounting chart and localization.
'demo/demo_company.xml',
],
'license': 'LGPL-3',
- 'post_init_hook': 'load_translations',
}
diff --git a/addons/l10n_it/models/account_chart_template.py b/addons/l10n_it/models/account_chart_template.py
index 334f582e84a..19f53e27e90 100644
--- a/addons/l10n_it/models/account_chart_template.py
+++ b/addons/l10n_it/models/account_chart_template.py
@@ -1,15 +1,16 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- def _load(self, company):
- """ Set tax calculation rounding method required in Italian localization
- Also to avoid rounding errors when sent with FatturaPA"""
- res = super()._load(company)
- if company.account_fiscal_country_id.code == 'IT':
- company.write({'tax_calculation_rounding_method': 'round_globally'})
- return res
+ @template('it', 'res.company')
+ def _get_it_res_company(self):
+ company_data = super()._get_it_res_company()
+ company_data[self.env.company.id].update({
+ 'tax_calculation_rounding_method': 'round_globally',
+ })
+ return company_data
diff --git a/addons/l10n_it_edi/__init__.py b/addons/l10n_it_edi/__init__.py
index 8a581d56ac4..344d6aa0f88 100644
--- a/addons/l10n_it_edi/__init__.py
+++ b/addons/l10n_it_edi/__init__.py
@@ -6,16 +6,14 @@ from . import tools
def _l10n_it_edi_update_export_tax(env):
- chart_template = env.ref('l10n_it.l10n_it_chart_template_generic', raise_if_not_found=False)
- if chart_template:
- for company in env['res.company'].search([('chart_template_id', '=', chart_template.id)]):
- tax = env.ref(f'l10n_it.{company.id}_00eu', raise_if_not_found=False)
- if tax:
- tax.write({
- 'l10n_it_has_exoneration': True,
- 'l10n_it_kind_exoneration': 'N3.2',
- 'l10n_it_law_reference': 'Art. 41, DL n. 331/93',
- })
+ for company in env['res.company'].search([('chart_template', '=', 'it')]):
+ tax = env.ref(f'l10n_it.{company.id}_00eu', raise_if_not_found=False)
+ if tax:
+ tax.write({
+ 'l10n_it_has_exoneration': True,
+ 'l10n_it_kind_exoneration': 'N3.2',
+ 'l10n_it_law_reference': 'Art. 41, DL n. 331/93',
+ })
def _l10n_it_edi_post_init(env):
diff --git a/addons/l10n_it_edi/models/account_chart_template.py b/addons/l10n_it_edi/models/account_chart_template.py
index 71e0d30da40..8b688b17b09 100644
--- a/addons/l10n_it_edi/models/account_chart_template.py
+++ b/addons/l10n_it_edi/models/account_chart_template.py
@@ -4,16 +4,15 @@
from odoo import models
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- def _load(self, company):
+ def _post_load_data(self, template_code, company, template_data):
"""
Override normal default taxes, which are the ones with lowest sequence.
"""
- result = super()._load(company)
- template = company.chart_template_id
- if template == self.env.ref('l10n_it.l10n_it_chart_template_generic'):
- company.account_sale_tax_id = self.env.ref(f'l10n_it.{company.id}_22v')
- company.account_purchase_tax_id = self.env.ref(f'l10n_it.{company.id}_22am')
+ result = super()._post_load_data(template_code, company, template_data)
+ if template_code == 'it':
+ company.account_sale_tax_id = self.ref('22v')
+ company.account_purchase_tax_id = self.ref('22am')
return result
diff --git a/addons/l10n_it_edi/tests/common.py b/addons/l10n_it_edi/tests/common.py
index c94649b0de9..d78d7acc2e9 100644
--- a/addons/l10n_it_edi/tests/common.py
+++ b/addons/l10n_it_edi/tests/common.py
@@ -21,7 +21,7 @@ def patch_proxy_user(func):
class TestItEdi(AccountEdiTestCommon):
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_it.l10n_it_chart_template_generic', edi_format_ref="l10n_it_edi.edi_fatturaPA"):
+ def setUpClass(cls, chart_template_ref='it', edi_format_ref="l10n_it_edi.edi_fatturaPA"):
super().setUpClass(chart_template_ref=chart_template_ref, edi_format_ref=edi_format_ref)
# Company data ------
diff --git a/addons/l10n_it_edi_withholding/__init__.py b/addons/l10n_it_edi_withholding/__init__.py
index 5d695cd52cc..cf1cbac649b 100644
--- a/addons/l10n_it_edi_withholding/__init__.py
+++ b/addons/l10n_it_edi_withholding/__init__.py
@@ -1,90 +1,22 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-import psycopg2
-from . import models
-from odoo import api, SUPERUSER_ID
import logging
+from . import models
_logger = logging.getLogger(__name__)
-def _l10n_it_edi_add_accounts(env, company):
- """ Create the transition accounts """
- generated_accounts_ref = {}
- account_templates = {account_code: env.ref(f'l10n_it_edi_withholding.{account_code}') for account_code in ['1611', '2603']}
- try:
- with env.cr.savepoint():
- for account_code, account_template in account_templates.items():
- template_vals = [(account_template, company.chart_template_id._get_account_vals(company, account_template, account_code, {}))]
- generated_accounts_ref[account_template] = company.chart_template_id._create_records_with_xmlid('account.account', template_vals, company)
- _logger.info("Created withholding accounts for company: %s(%s).", company.name, company.id)
- except psycopg2.errors.UniqueViolation:
- generated_accounts_ref = {}
- _logger.error("Cash basis transition accounts already exist for company: %s(%s).", company.name, company.id)
- return generated_accounts_ref
-
-def _l10n_it_edi_withholding_add_taxes(env, company):
- """ Create the new taxes on existing company """
- templates = env['account.tax.template']
- generated_taxes_ref = {}
- try:
- with env.cr.savepoint():
- for xml_id in (
- '20awi', '20vwi',
- '20awc', '20vwc',
- '23awo', '23vwo',
- '4vcp', '4acp',
- '4vinps', '4ainps'
- ):
- templates |= env.ref(f"l10n_it_edi_withholding.{xml_id}")
- generated_taxes_ref = templates._generate_tax(company)
- _logger.info("Created withholding taxes for company: %s(%s).", company.name, company.id)
-
- # Increase the sequence number of the old taxes multiplying it by 10 and adding 21
- # so that the withholding can have sequence=10 and the pension fund sequence=20
- offset = 21
- all_taxes = env['account.tax'].with_context(active_test=False).search([('company_id', '=', company.id)])
- for tax in all_taxes.filtered(lambda x: (x.sequence <= 20 and not x.l10n_it_pension_fund_type and not x.l10n_it_withholding_type)):
- if not tax.l10n_it_withholding_type and not tax.l10n_it_pension_fund_type:
- tax.sequence += offset
- _logger.info("Increased sequence number of old taxes by %s for company: %s(%s).", offset, company.name, company.id)
- except psycopg2.errors.UniqueViolation:
- generated_taxes_ref = {}
- _logger.error("Withholding and Pension Fund taxes already exist for company: %s(%s).", company.name, company.id)
-
- return generated_taxes_ref
-
-def _l10n_it_edi_setup_accounts_on_taxes(env, company, generated_taxes_ref, generated_accounts_ref):
- """ Setup the accounts on the taxes, after the accounts have been created """
- # Set the transition account
- for tax, value in generated_taxes_ref['account_dict']['account.tax'].items():
- transition_account = value['cash_basis_transition_account_id']
- if transition_account:
- tax.cash_basis_transition_account_id = generated_accounts_ref.get(transition_account)
-
- # The tax repartition lines accounts has already been generated from the template by l10n_it
- referenced_accounts = {}
- repartitions_dict = generated_taxes_ref['account_dict']['account.tax.repartition.line']
- for dummy, value_dict in repartitions_dict.items():
- account_template = value_dict['account_id']
- template_xml_id = account_template.get_external_id()[account_template.id]
- xml_id = template_xml_id.split('.')
- referenced_accounts[template_xml_id] = env.ref(f'{xml_id[0]}.{company.id}_{xml_id[1]}')
-
- # Set the tax repartition lines accounts on the generated taxes
- for repartition_line, value in repartitions_dict.items():
- template = value['account_id']
- if template:
- repartition_line.account_id = referenced_accounts[template.get_external_id()[template.id]]
- _logger.info("Cash Basis Transition Accounts and Repartition accounts on taxes for company: %s(%s).", company.name, company.id)
-
def _l10n_it_edi_withholding_post_init(env):
""" Existing companies that have the Italian Chart of Accounts set """
- chart_template = env.ref('l10n_it.l10n_it_chart_template_generic')
- if chart_template:
- for company in env['res.company'].search([('chart_template_id', '=', chart_template.id)]):
- _logger.info("Company %s already has the Italian localization installed, updating...", company.name)
- generated_taxes_ref = _l10n_it_edi_withholding_add_taxes(env, company)
- generated_accounts_ref = {} if not generated_taxes_ref else _l10n_it_edi_add_accounts(env, company)
- if generated_accounts_ref:
- _l10n_it_edi_setup_accounts_on_taxes(env, company, generated_taxes_ref, generated_accounts_ref)
+ template_code = 'it'
+ data = {
+ model: env['account.chart.template']._parse_csv(template_code, model, module='l10n_it_edi_withholding')
+ for model in [
+ 'account.account',
+ 'account.tax.group',
+ 'account.tax',
+ ]
+ }
+ env['account.chart.template']._deref_account_tags(template_code, data['account.tax'])
+ for company in env['res.company'].search([('chart_template', '=', 'it')]):
+ _logger.info("Company %s already has the Italian localization installed, updating...", company.name)
+ env['account.chart.template'].with_company(company)._load_data(data)
diff --git a/addons/l10n_it_edi_withholding/__manifest__.py b/addons/l10n_it_edi_withholding/__manifest__.py
index c993dfc7b8c..aa267a9a2a6 100644
--- a/addons/l10n_it_edi_withholding/__manifest__.py
+++ b/addons/l10n_it_edi_withholding/__manifest__.py
@@ -20,10 +20,7 @@ Withholding and Pension Fund handling for the E-invoice implementation for Italy
'category': 'Accounting/Localizations/EDI',
'website': 'https://www.odoo.com/documentation/16.0/applications/finance/accounting/fiscal_localizations/localizations/italy.html',
'data': [
- 'data/account_tax_group_data.xml',
'data/account_withholding_report_data.xml',
- 'data/account.account.template.csv',
- 'data/account_tax_template.xml',
'data/invoice_it_template.xml',
'views/l10n_it_view.xml'
],
diff --git a/addons/l10n_it_edi_withholding/data/account.account.template.csv b/addons/l10n_it_edi_withholding/data/account.account.template.csv
deleted file mode 100644
index 13f69dfb2b7..00000000000
--- a/addons/l10n_it_edi_withholding/data/account.account.template.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-id,code,name,account_type,reconcile,chart_template_id:id,tag_ids:id
-1611,1611,Crediti per ritenute subite (appoggio),asset_current,FALSE,l10n_it.l10n_it_chart_template_generic,l10n_it.account_tag_C_ATT
-2603,2603,Debiti per ritenute da versare (appoggio),liability_current,FALSE,l10n_it.l10n_it_chart_template_generic,l10n_it.account_tag_D_PASS
diff --git a/addons/l10n_it_edi_withholding/data/account_tax_group_data.xml b/addons/l10n_it_edi_withholding/data/account_tax_group_data.xml
deleted file mode 100644
index 002e4dd6041..00000000000
--- a/addons/l10n_it_edi_withholding/data/account_tax_group_data.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
- Fondi Pensione
- 0
-
- Fondi Pensione Esclusi
-
-
- Enasarco
- 999
-
- ENASARCO Escluso
-
-
- Ritenute
- 1000
-
- Totale Ritenute Escluse
-
-
-
diff --git a/addons/l10n_it_edi_withholding/data/account_tax_template.xml b/addons/l10n_it_edi_withholding/data/account_tax_template.xml
deleted file mode 100644
index 8e3382b59e0..00000000000
--- a/addons/l10n_it_edi_withholding/data/account_tax_template.xml
+++ /dev/null
@@ -1,460 +0,0 @@
-
-
-
-
-
-
- 20% Ritenuta Persone Fisiche
-
- 20% RIT PF
- 10
- -20
- percent
- sale
-
- RT01
- A
- on_payment
-
-
-
-
-
-
- 20% Ritenuta Persone Fisiche
-
- 20% RIT PF
- 10
- -20
- percent
- purchase
-
- RT01
- A
- on_payment
-
-
-
-
-
-
-
- 20% Ritenuta Persone Giuridiche
-
- 20% RIT PG
- 11
- -20
- percent
- sale
-
- RT02
- A
- on_payment
-
-
-
-
-
-
- 20% Ritenuta Persone Giuridiche
-
- 20% RIT PG
- 11
- -20
- percent
- purchase
-
- RT02
- A
- on_payment
-
-
-
-
-
-
-
- 23% Ritenuta Agenti e Rappresentanti
-
- 23% RIT AG
- 12
- -23
- percent
- sale
-
- RT02
- ZO
- on_payment
-
-
-
-
-
-
- 23% Ritenuta Agenti e Rappresentanti
-
- 23% RIT AG
- 12
- -23
- percent
- purchase
-
- RT02
- ZO
- on_payment
-
-
-
-
-
-
-
- 4% Contributo INPS
-
- 4% INPS
- 5
- 4
- percent
- sale
- True
-
- TC22
-
-
-
-
-
- 4% Contributo INPS
-
- 4% INPS
- 5
- 4
- percent
- purchase
- True
- TC22
-
-
-
-
-
-
-
- 4% Contributo Fondo Pensione
-
- 4% F.Pens.
- 20
- 4
- percent
- sale
- True
-
- TC01
-
-
-
-
-
- 4% Contributo Fondo Pensione
-
- 4% F.Pens.
- 20
- 4
- percent
- purchase
- True
- TC01
-
-
-
-
-
-
-
- 8.5% Ritenuta ENASARCO
-
- ENASARCO
- 13
- -8.5
- percent
- sale
-
- TC07
- on_payment
-
-
-
-
-
-
- 8.5% Ritenuta ENASARCO
-
- ENASARCO
- 13
- -8.5
- percent
- purchase
-
- TC07
- on_payment
-
-
-
-
-
diff --git a/addons/l10n_it_edi_withholding/data/template/account.account-it.csv b/addons/l10n_it_edi_withholding/data/template/account.account-it.csv
new file mode 100644
index 00000000000..21f9ecbf357
--- /dev/null
+++ b/addons/l10n_it_edi_withholding/data/template/account.account-it.csv
@@ -0,0 +1,3 @@
+id,code,name,account_type,reconcile,tag_ids
+"1611","1611","Crediti per ritenute subite (appoggio)","asset_current","False","l10n_it.account_tag_C_ATT"
+"2603","2603","Debiti per ritenute da versare (appoggio)","liability_current","False","l10n_it.account_tag_D_PASS"
diff --git a/addons/l10n_it_edi_withholding/data/template/account.tax-it.csv b/addons/l10n_it_edi_withholding/data/template/account.tax-it.csv
new file mode 100644
index 00000000000..43efdabc63d
--- /dev/null
+++ b/addons/l10n_it_edi_withholding/data/template/account.tax-it.csv
@@ -0,0 +1,49 @@
+"id","description","name","sequence","amount","amount_type","type_tax_use","price_include","tax_group_id","active","tax_scope","l10n_it_withholding_type","l10n_it_withholding_reason","tax_exigibility","cash_basis_transition_account_id","include_base_amount","l10n_it_pension_fund_type","repartition_line_ids/repartition_type","repartition_line_ids/document_type","repartition_line_ids/tag_ids","repartition_line_ids/account_id","repartition_line_ids/factor_percent","name@it"
+"20vwi","20% Ritenuta Persone Fisiche","20% RIT PF","10","-20.0","percent","sale","","tax_group_withholding","","","RT01","A","on_payment","1611","","","base","invoice","","","100",""
+"","","","","","","","","","","","","","","","","","tax","invoice","-RITV","1609","100",""
+"","","","","","","","","","","","","","","","","","base","refund","","","100",""
+"","","","","","","","","","","","","","","","","","tax","refund","+RITV","1609","100",""
+"20awi","20% Ritenuta Persone Fisiche","20% RIT PF","10","-20.0","percent","purchase","","tax_group_withholding","","","RT01","A","on_payment","2603","","","base","invoice","","","100",""
+"","","","","","","","","","","","","","","","","","tax","invoice","+RITA","2602","100",""
+"","","","","","","","","","","","","","","","","","base","refund","","","100",""
+"","","","","","","","","","","","","","","","","","tax","refund","-RITA","2602","100",""
+"20vwc","20% Ritenuta Persone Giuridiche","20% RIT PG","11","-20.0","percent","sale","","tax_group_withholding","","","RT02","A","on_payment","1611","","","base","invoice","","","100",""
+"","","","","","","","","","","","","","","","","","tax","invoice","-RITV","1609","100",""
+"","","","","","","","","","","","","","","","","","base","refund","","","100",""
+"","","","","","","","","","","","","","","","","","tax","refund","+RITV","1609","100",""
+"20awc","20% Ritenuta Persone Giuridiche","20% RIT PG","11","-20.0","percent","purchase","","tax_group_withholding","","","RT02","A","on_payment","2603","","","base","invoice","","","100",""
+"","","","","","","","","","","","","","","","","","tax","invoice","+RITA","2602","100",""
+"","","","","","","","","","","","","","","","","","base","refund","","","100",""
+"","","","","","","","","","","","","","","","","","tax","refund","-RITA","2602","100",""
+"23vwo","23% Ritenuta Agenti e Rappresentanti","23% RIT AG","12","-23.0","percent","sale","","tax_group_withholding","","","RT02","ZO","on_payment","1611","","","base","invoice","","","100",""
+"","","","","","","","","","","","","","","","","","tax","invoice","-RITV","1609","50",""
+"","","","","","","","","","","","","","","","","","base","refund","","","100",""
+"","","","","","","","","","","","","","","","","","tax","refund","+RITV","1609","50",""
+"23awo","23% Ritenuta Agenti e Rappresentanti","23% RIT AG","12","-23.0","percent","purchase","","tax_group_withholding","","","RT02","ZO","on_payment","2603","","","base","invoice","","","100",""
+"","","","","","","","","","","","","","","","","","tax","invoice","+RITA","2602","50",""
+"","","","","","","","","","","","","","","","","","base","refund","","","100",""
+"","","","","","","","","","","","","","","","","","tax","refund","-RITA","2602","50",""
+"4vinps","4% Contributo INPS","4% INPS","5","4.0","percent","sale","","tax_group_pension_fund","","","","","","","True","TC22","base","invoice","","","100",""
+"","","","","","","","","","","","","","","","","","tax","invoice","","2630","100",""
+"","","","","","","","","","","","","","","","","","base","refund","","","100",""
+"","","","","","","","","","","","","","","","","","tax","refund","","2630","100",""
+"4ainps","4% Contributo INPS","4% INPS","5","4.0","percent","purchase","","tax_group_pension_fund","","","","","","","True","TC22","base","invoice","","","100",""
+"","","","","","","","","","","","","","","","","","tax","invoice","","4402","100",""
+"","","","","","","","","","","","","","","","","","base","refund","","","100",""
+"","","","","","","","","","","","","","","","","","tax","refund","","4402","100",""
+"4vcp","4% Contributo Fondo Pensione","4% F.Pens.","20","4.0","percent","sale","","tax_group_pension_fund","","","","","","","True","TC01","base","invoice","","","100",""
+"","","","","","","","","","","","","","","","","","tax","invoice","","2630","100",""
+"","","","","","","","","","","","","","","","","","base","refund","","","100",""
+"","","","","","","","","","","","","","","","","","tax","refund","","2630","100",""
+"4acp","4% Contributo Fondo Pensione","4% F.Pens.","20","4.0","percent","purchase","","tax_group_pension_fund","","","","","","","True","TC01","base","invoice","","","100",""
+"","","","","","","","","","","","","","","","","","tax","invoice","","4402","100",""
+"","","","","","","","","","","","","","","","","","base","refund","","","100",""
+"","","","","","","","","","","","","","","","","","tax","refund","","4402","100",""
+"enasarcov","8.5% Ritenuta ENASARCO","ENASARCO","13","-8.5","percent","sale","","tax_group_enasarco","","","","","on_payment","1611","","TC07","base","invoice","","","100",""
+"","","","","","","","","","","","","","","","","","tax","invoice","-ENASARCOV","2630","100",""
+"","","","","","","","","","","","","","","","","","base","refund","","","100",""
+"","","","","","","","","","","","","","","","","","tax","refund","+ENASARCOV","2630","100",""
+"enasarcoa","8.5% Ritenuta ENASARCO","ENASARCO","13","-8.5","percent","purchase","","tax_group_enasarco","","","","","on_payment","1611","","TC07","base","invoice","","","100",""
+"","","","","","","","","","","","","","","","","","tax","invoice","+ENASARCOA","2630","100",""
+"","","","","","","","","","","","","","","","","","base","refund","","","100",""
+"","","","","","","","","","","","","","","","","","tax","refund","-ENASARCOA","2630","100",""
diff --git a/addons/l10n_it_edi_withholding/data/template/account.tax.group-it.csv b/addons/l10n_it_edi_withholding/data/template/account.tax.group-it.csv
new file mode 100644
index 00000000000..5d780b01fc2
--- /dev/null
+++ b/addons/l10n_it_edi_withholding/data/template/account.tax.group-it.csv
@@ -0,0 +1,4 @@
+"id","name","sequence","country_id","preceding_subtotal","tax_receivable_account_id","tax_payable_account_id"
+"tax_group_pension_fund","Fondi Pensione","0","base.it","Fondi Pensione Esclusi","2605","2605"
+"tax_group_enasarco","Enasarco","999","base.it","ENASARCO Escluso","2605","2605"
+"tax_group_withholding","Ritenute","1000","base.it","Totale Ritenute Escluse","2605","2605"
diff --git a/addons/l10n_it_edi_withholding/models/account_chart_template.py b/addons/l10n_it_edi_withholding/models/account_chart_template.py
index d6bc6317122..b605dbbdfa8 100644
--- a/addons/l10n_it_edi_withholding/models/account_chart_template.py
+++ b/addons/l10n_it_edi_withholding/models/account_chart_template.py
@@ -1,21 +1,23 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-import logging
from odoo import models
-
-_logger = logging.getLogger(__name__)
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- def _load(self, company):
- """
- Override normal default taxes, which are the ones with lowest sequence.
- """
- result = super()._load(company)
- if company.chart_template_id == self.env.ref('l10n_it.l10n_it_chart_template_generic'):
- company.account_sale_tax_id = self.env.ref(f'l10n_it.{company.id}_22v')
- company.account_purchase_tax_id = self.env.ref(f'l10n_it.{company.id}_22am')
- return result
+ @template('it', 'account.account')
+ def _get_it_withholding_account_account(self):
+ return self._parse_csv('it', 'account.account', module='l10n_it_edi_withholding')
+
+ @template('it', 'account.tax')
+ def _get_it_withholding_account_tax(self):
+ additionnal = self._parse_csv('it', 'account.tax', module='l10n_it_edi_withholding')
+ self._deref_account_tags('it', additionnal)
+ return additionnal
+
+ @template('it', 'account.tax.group')
+ def _get_it_withholding_account_tax_group(self):
+ return self._parse_csv('it', 'account.tax.group', module='l10n_it_edi_withholding')
diff --git a/addons/l10n_it_edi_withholding/models/account_tax.py b/addons/l10n_it_edi_withholding/models/account_tax.py
index 49be1dd1335..0e3b3ba1657 100644
--- a/addons/l10n_it_edi_withholding/models/account_tax.py
+++ b/addons/l10n_it_edi_withholding/models/account_tax.py
@@ -79,22 +79,6 @@ PENSION_FUND_TYPE_SELECTION = [
]
-class AccountTaxTemplate(models.Model):
- _inherit = 'account.tax.template'
-
- l10n_it_withholding_type = fields.Selection(WITHHOLDING_TYPE_SELECTION, string="Withholding tax type (Italy)", help="Withholding tax type. Only for Italian accounting EDI.")
- l10n_it_withholding_reason = fields.Selection(WITHHOLDING_REASON_SELECTION, string="Withholding tax reason (Italy)", help="Withholding tax reason. Only for Italian accounting EDI.")
- l10n_it_pension_fund_type = fields.Selection(PENSION_FUND_TYPE_SELECTION, string="Pension fund type (Italy)", help="Pension Fund Type. Only for Italian accounting EDI.")
-
- def _get_tax_vals(self, company, tax_template_to_tax):
- values = super()._get_tax_vals(company, tax_template_to_tax)
- values.update({
- "l10n_it_withholding_type": self.l10n_it_withholding_type,
- "l10n_it_withholding_reason": self.l10n_it_withholding_reason,
- "l10n_it_pension_fund_type": self.l10n_it_pension_fund_type,
- })
- return values
-
class AccountTax(models.Model):
_inherit = 'account.tax'
diff --git a/addons/l10n_it_edi_withholding/tests/test_withholding.py b/addons/l10n_it_edi_withholding/tests/test_withholding.py
index e4018c2218d..011cdb45944 100644
--- a/addons/l10n_it_edi_withholding/tests/test_withholding.py
+++ b/addons/l10n_it_edi_withholding/tests/test_withholding.py
@@ -21,7 +21,7 @@ class TestWithholdingAndPensionFundTaxes(TestItEdi):
cls.purchase_journal = cls.company_data_2['default_journal_purchase']
def find_tax_by_ref(ref_name):
- return cls.env.ref(f'l10n_it_edi_withholding.{cls.company.id}_{ref_name}')
+ return cls.env['account.chart.template'].with_company(cls.company).ref(ref_name)
cls.withholding_sale_tax = find_tax_by_ref('20vwc')
cls.withholding_sale_tax_23 = find_tax_by_ref('23vwo')
diff --git a/addons/l10n_it_stock_ddt/tests/test_ddt.py b/addons/l10n_it_stock_ddt/tests/test_ddt.py
index a13d074be05..7bdac99b308 100644
--- a/addons/l10n_it_stock_ddt/tests/test_ddt.py
+++ b/addons/l10n_it_stock_ddt/tests/test_ddt.py
@@ -8,7 +8,7 @@ from odoo.tests import tagged, Form
class TestDDT(TestSaleCommon):
@classmethod
- def setUpClass(cls, chart_template_ref='l10n_it.l10n_it_chart_template_generic'):
+ def setUpClass(cls, chart_template_ref='it'):
super().setUpClass(chart_template_ref=chart_template_ref)
cls.company_data['company'].write({
'vat':"IT12345670017",
diff --git a/addons/l10n_jp/__init__.py b/addons/l10n_jp/__init__.py
index 32298382d43..5a8a4c59cc1 100644
--- a/addons/l10n_jp/__init__.py
+++ b/addons/l10n_jp/__init__.py
@@ -2,8 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
# Copyright (C) Quartile Limited
-from odoo import api, SUPERUSER_ID
-
-def load_translations(cr, registry):
- env = api.Environment(cr, SUPERUSER_ID, {})
- env.ref('l10n_jp.l10n_jp1').process_coa_translations()
diff --git a/addons/l10n_kz/__init__.py b/addons/l10n_kz/__init__.py
index 3801aacc7f3..dc5e6b693d1 100644
--- a/addons/l10n_kz/__init__.py
+++ b/addons/l10n_kz/__init__.py
@@ -2,6 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
-
-def load_translations(env):
- env.ref('l10n_kz.l10nkz_chart_template').process_coa_translations()
diff --git a/addons/l10n_kz/__manifest__.py b/addons/l10n_kz/__manifest__.py
index 6bc64c85e75..81408179efa 100644
--- a/addons/l10n_kz/__manifest__.py
+++ b/addons/l10n_kz/__manifest__.py
@@ -25,6 +25,5 @@ This provides a base chart of accounts and taxes template for use in Odoo for Ka
'demo': [
'demo/demo_company.xml'
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_kz/models/chart_template.py b/addons/l10n_kz/models/chart_template.py
index fbeec114974..9deb98d8f78 100644
--- a/addons/l10n_kz/models/chart_template.py
+++ b/addons/l10n_kz/models/chart_template.py
@@ -2,32 +2,15 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import _, models
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = "account.chart.template"
- def _create_bank_journals(self, company, acc_template_ref):
- # we don't want to create new Cash and Bank accounts when
- # creating journals, so we have to pass the default_account_id to avoid it
- if company.account_fiscal_country_id.code == 'KZ':
- self.ensure_one()
- bank_journals = self.env['account.journal']
- journal_data = [
- {'acc_name': _('Cash'), 'account_type': 'cash', 'default_account_id': self.env['account.account'].search(
- [('code', '=', '1010'), ('company_id', '=', company.id)], limit=1).id},
- {'acc_name': _('Bank'), 'account_type': 'bank', 'default_account_id': self.env['account.account'].search(
- [('code', '=', '1030'), ('company_id', '=', company.id)], limit=1).id},
- ]
- for acc in journal_data:
- bank_journals += self.env['account.journal'].create({
- 'name': acc['acc_name'],
- 'type': acc['account_type'],
- 'default_account_id': acc['default_account_id'],
- 'company_id': company.id,
- 'currency_id': acc.get('currency_id', self.env['res.currency']).id,
- 'sequence': 10,
- })
- return bank_journals
-
- return super()._create_bank_journals(company, acc_template_ref)
+ @template('kz', 'account.journal')
+ def _get_kz_account_journal(self):
+ return {
+ 'cash': {'default_account_id': 'kz1010'},
+ 'bank': {'default_account_id': 'kz1030'},
+ }
diff --git a/addons/l10n_latam_check/models/account_chart_template.py b/addons/l10n_latam_check/models/account_chart_template.py
index cf5106af5d7..02d94733e5c 100644
--- a/addons/l10n_latam_check/models/account_chart_template.py
+++ b/addons/l10n_latam_check/models/account_chart_template.py
@@ -1,7 +1,8 @@
from odoo import models, Command, api, _
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
@api.model
@@ -10,30 +11,30 @@ class AccountChartTemplate(models.Model):
when installing the COA"""
return ["AR"]
- def _create_bank_journals(self, company, acc_template_ref):
- res = super()._create_bank_journals(company, acc_template_ref)
-
- if company.country_id.code in self._get_third_party_checks_country_codes():
- self.env['account.journal'].create({
- 'name': _('Third Party Checks'),
- 'type': 'cash',
- 'company_id': company.id,
- 'outbound_payment_method_line_ids': [
- Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_out_third_party_checks').id}),
- ],
- 'inbound_payment_method_line_ids': [
- Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_new_third_party_checks').id}),
- Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_in_third_party_checks').id}),
- ]})
- self.env['account.journal'].create({
- 'name': _('Rejected Third Party Checks'),
- 'type': 'cash',
- 'company_id': company.id,
- 'outbound_payment_method_line_ids': [
- Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_out_third_party_checks').id}),
- ],
- 'inbound_payment_method_line_ids': [
- Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_new_third_party_checks').id}),
- Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_in_third_party_checks').id}),
- ]})
- return res
+ @template(model='account.journal')
+ def _get_latam_check_account_journal(self, template_code):
+ if self.env.company.country_id.code in self._get_third_party_checks_country_codes():
+ return {
+ "third_party_check": {
+ 'name': _('Third Party Checks'),
+ 'type': 'cash',
+ 'outbound_payment_method_line_ids': [
+ Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_out_third_party_checks').id}),
+ ],
+ 'inbound_payment_method_line_ids': [
+ Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_new_third_party_checks').id}),
+ Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_in_third_party_checks').id}),
+ ],
+ },
+ "rejected_third_party_check": {
+ 'name': _('Rejected Third Party Checks'),
+ 'type': 'cash',
+ 'outbound_payment_method_line_ids': [
+ Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_out_third_party_checks').id}),
+ ],
+ 'inbound_payment_method_line_ids': [
+ Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_new_third_party_checks').id}),
+ Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_in_third_party_checks').id}),
+ ],
+ },
+ }
diff --git a/addons/l10n_latam_check/tests/common.py b/addons/l10n_latam_check/tests/common.py
index 0b0861b5c50..901de828405 100644
--- a/addons/l10n_latam_check/tests/common.py
+++ b/addons/l10n_latam_check/tests/common.py
@@ -11,7 +11,7 @@ class L10nLatamCheckTest(AccountTestInvoicingCommon):
def setUpClass(cls, chart_template_ref=None):
super().setUpClass(chart_template_ref=chart_template_ref)
- chart_template = cls.company_data['company'].chart_template_id
+ chart_template = cls.company_data['company'].chart_template
cls.company_data_3 = cls.setup_company_data(
'company_3_data', chart_template=chart_template, **{'country_id': cls.env.ref('base.ar').id})
diff --git a/addons/l10n_latam_invoice_document/models/account_chart_template.py b/addons/l10n_latam_invoice_document/models/account_chart_template.py
index a181655d4c1..d7e83f27954 100644
--- a/addons/l10n_latam_invoice_document/models/account_chart_template.py
+++ b/addons/l10n_latam_invoice_document/models/account_chart_template.py
@@ -1,19 +1,16 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import models, api, fields, _
+from odoo import models
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
-
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- @api.model
- def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
+ @template(model='account.journal')
+ def _get_latam_document_account_journal(self, template_code):
""" We add use_documents or not depending on the context"""
- journal_data = super()._prepare_all_journals(acc_template_ref, company, journals_dict)
-
- # if chart has localization, then we use documents by default
- if company._localization_use_documents():
- for vals_journal in journal_data:
- if vals_journal['type'] in ['sale', 'purchase']:
- vals_journal['l10n_latam_use_documents'] = True
- return journal_data
+ if self.env.company._localization_use_documents():
+ return {
+ 'sale': {'l10n_latam_use_documents': True},
+ 'purchase': {'l10n_latam_use_documents': True},
+ }
diff --git a/addons/l10n_lt/__init__.py b/addons/l10n_lt/__init__.py
index ef5b7ca391f..e69de29bb2d 100644
--- a/addons/l10n_lt/__init__.py
+++ b/addons/l10n_lt/__init__.py
@@ -1,6 +0,0 @@
-
-
-def load_translations(env):
- """Load template translations."""
- env.ref(
- 'l10n_lt.account_chart_template_lithuania').process_coa_translations()
diff --git a/addons/l10n_lt/__manifest__.py b/addons/l10n_lt/__manifest__.py
index 8def57eee99..b0383128bab 100644
--- a/addons/l10n_lt/__manifest__.py
+++ b/addons/l10n_lt/__manifest__.py
@@ -37,6 +37,5 @@
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'installable': True,
}
diff --git a/addons/l10n_lu/__init__.py b/addons/l10n_lu/__init__.py
index e4a04249d07..b04cc285e36 100644
--- a/addons/l10n_lu/__init__.py
+++ b/addons/l10n_lu/__init__.py
@@ -3,10 +3,8 @@
from . import models
-
def _post_init_hook(env):
_preserve_tag_on_taxes(env)
- env.ref('l10n_lu.lu_2011_chart_1').process_coa_translations()
def _preserve_tag_on_taxes(env):
from odoo.addons.account.models.chart_template import preserve_existing_tags_on_taxes
diff --git a/addons/l10n_lu/migrations/2.1/post-migrate_update_taxes.py b/addons/l10n_lu/migrations/2.1/post-migrate_update_taxes.py
index a36a459d145..4a60228244d 100644
--- a/addons/l10n_lu/migrations/2.1/post-migrate_update_taxes.py
+++ b/addons/l10n_lu/migrations/2.1/post-migrate_update_taxes.py
@@ -1,6 +1,7 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.addons.account.models.chart_template import update_taxes_from_templates
-
+from odoo import api, SUPERUSER_ID
def migrate(cr, version):
- update_taxes_from_templates(cr, 'l10n_lu.lu_2011_chart_1')
+ env = api.Environment(cr, SUPERUSER_ID, {})
+ for company in env['res.company'].search([('chart_template', '=', 'lu')]):
+ env['account.chart.template'].try_loading('lu', company)
diff --git a/addons/l10n_lu/models/account_chart_template.py b/addons/l10n_lu/models/account_chart_template.py
index cedcb08842c..66c4e13c33a 100644
--- a/addons/l10n_lu/models/account_chart_template.py
+++ b/addons/l10n_lu/models/account_chart_template.py
@@ -2,16 +2,15 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, models
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- @api.model
- def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
- journal_data = super(AccountChartTemplate, self)._prepare_all_journals(
- acc_template_ref, company, journals_dict)
- for journal in journal_data:
- if journal['type'] in ('sale', 'purchase') and company.account_fiscal_country_id.code == "LU":
- journal.update({'refund_sequence': True})
- return journal_data
+ @template('lu', 'account.journal')
+ def _get_lu_account_journal(self):
+ return {
+ 'sale': {'refund_sequence': True},
+ 'purchase': {'refund_sequence': True},
+ }
diff --git a/addons/l10n_lu/scripts/tax.xls b/addons/l10n_lu/scripts/tax.xls
deleted file mode 100644
index 0a3a0182728..00000000000
Binary files a/addons/l10n_lu/scripts/tax.xls and /dev/null differ
diff --git a/addons/l10n_lu/scripts/tax2csv.py b/addons/l10n_lu/scripts/tax2csv.py
deleted file mode 100644
index 2a2da358b4b..00000000000
--- a/addons/l10n_lu/scripts/tax2csv.py
+++ /dev/null
@@ -1,183 +0,0 @@
-from collections import OrderedDict
-
-import xlrd
-from odoo.tools import pycompat
-
-def _is_true(s):
- return s not in ('F', 'False', 0, '', None, False)
-
-
-class LuxTaxGenerator:
-
- def __init__(self, filename):
- self.workbook = xlrd.open_workbook('tax.xls')
- self.sheet_info = \
- self.workbook.sheet_by_name('INFO')
- self.sheet_taxes = \
- self.workbook.sheet_by_name('TAXES')
- self.sheet_tax_codes = \
- self.workbook.sheet_by_name('TAX.CODES')
- self.sheet_fiscal_pos_map = \
- self.workbook.sheet_by_name('FISCAL.POSITION.MAPPINGS')
- self.suffix = self.sheet_info.cell_value(4, 2)
-
- def iter_tax_codes(self):
- keys = [c.value for c in self.sheet_tax_codes.row(0)]
- yield keys
- for i in range(1, self.sheet_tax_codes.nrows):
- row = (c.value for c in self.sheet_tax_codes.row(i))
- d = OrderedDict(zip(keys, row))
- d['sign'] = int(d['sign'])
- d['sequence'] = int(d['sequence'])
- yield d
-
- def iter_taxes(self):
- keys = [c.value for c in self.sheet_taxes.row(0)]
- yield keys
- for i in range(1, self.sheet_taxes.nrows):
- row = (c.value for c in self.sheet_taxes.row(i))
- yield OrderedDict(zip(keys, row))
-
- def iter_fiscal_pos_map(self):
- keys = [c.value for c in self.sheet_fiscal_pos_map.row(0)]
- yield keys
- for i in range(1, self.sheet_fiscal_pos_map.nrows):
- row = (c.value for c in self.sheet_fiscal_pos_map.row(i))
- yield OrderedDict(zip(keys, row))
-
- def tax_codes_to_csv(self):
- writer = pycompat.csv_writer(open('account.tax.code.template-%s.csv' %
- self.suffix, 'wb'))
- tax_codes_iterator = self.iter_tax_codes()
- keys = next(tax_codes_iterator)
- writer.writerow(keys)
-
- # write structure tax codes
- tax_codes = {} # code: id
- for row in tax_codes_iterator:
- tax_code = row['code']
- if tax_code in tax_codes:
- raise RuntimeError('duplicate tax code %s' % tax_code)
- tax_codes[tax_code] = row['id']
- writer.writerow([pycompat.to_text(v) for v in row.values()])
-
- # read taxes and add leaf tax codes
- new_tax_codes = {} # id: parent_code
-
- def add_new_tax_code(tax_code_id, new_name, new_parent_code):
- if not tax_code_id:
- return
- name, parent_code = new_tax_codes.get(tax_code_id, (None, None))
- if parent_code and parent_code != new_parent_code:
- raise RuntimeError('tax code "%s" already exist with '
- 'parent %s while trying to add it with '
- 'parent %s' %
- (tax_code_id, parent_code, new_parent_code))
- else:
- new_tax_codes[tax_code_id] = (new_name, new_parent_code)
-
- taxes_iterator = self.iter_taxes()
- next(taxes_iterator)
- for row in taxes_iterator:
- if not _is_true(row['active']):
- continue
- if row['child_depend'] and row['amount'] != 1:
- raise RuntimeError('amount must be one if child_depend '
- 'for %s' % row['id'])
- # base parent
- base_code = row['BASE_CODE']
- if not base_code or base_code == '/':
- base_code = 'NA'
- if base_code not in tax_codes:
- raise RuntimeError('undefined tax code %s' % base_code)
- if base_code != 'NA':
- if row['child_depend']:
- raise RuntimeError('base code specified '
- 'with child_depend for %s' % row['id'])
- if not row['child_depend']:
- # ... in lux, we have the same code for invoice and refund
- if base_code != 'NA':
- assert row['base_code_id:id'], 'missing base_code_id for %s' % row['id']
- assert row['ref_base_code_id:id'] == row['base_code_id:id']
- add_new_tax_code(row['base_code_id:id'],
- 'Base - ' + row['name'],
- base_code)
- # tax parent
- tax_code = row['TAX_CODE']
- if not tax_code or tax_code == '/':
- tax_code = 'NA'
- if tax_code not in tax_codes:
- raise RuntimeError('undefined tax code %s' % tax_code)
- if tax_code == 'NA':
- if row['amount'] and not row['child_depend']:
- raise RuntimeError('TAX_CODE not specified '
- 'for non-zero tax %s' % row['id'])
- if row['tax_code_id:id']:
- raise RuntimeError('tax_code_id specified '
- 'for tax %s' % row['id'])
- else:
- if row['child_depend']:
- raise RuntimeError('TAX_CODE specified '
- 'with child_depend for %s' % row['id'])
- if not row['amount']:
- raise RuntimeError('TAX_CODE specified '
- 'for zero tax %s' % row['id'])
- if not row['tax_code_id:id']:
- raise RuntimeError('tax_code_id not specified '
- 'for tax %s' % row['id'])
- if not row['child_depend'] and row['amount']:
- # ... in lux, we have the same code for invoice and refund
- assert row['tax_code_id:id'], 'missing tax_code_id for %s' % row['id']
- assert row['ref_tax_code_id:id'] == row['tax_code_id:id']
- add_new_tax_code(row['tax_code_id:id'],
- 'Taxe - ' + row['name'],
- tax_code)
-
- for tax_code_id in sorted(new_tax_codes):
- name, parent_code = new_tax_codes[tax_code_id]
- writer.writerow([
- tax_code_id,
- u'lu_tct_m' + parent_code,
- tax_code_id.replace('lu_tax_code_template_', u''),
- u'1',
- u'',
- pycompat.to_text(name),
- u''
- ])
-
- def taxes_to_csv(self):
- writer = pycompat.csv_writer(open('account.tax.template-%s.csv' %
- self.suffix, 'wb'))
- taxes_iterator = self.iter_taxes()
- keys = next(taxes_iterator)
- writer.writerow(keys[3:] + ['sequence'])
- seq = 100
- for row in sorted(taxes_iterator, key=lambda r: r['description']):
- if not _is_true(row['active']):
- continue
- seq += 1
- if row['parent_id:id']:
- cur_seq = seq + 1000
- else:
- cur_seq = seq
- writer.writerow([
- pycompat.to_text(v)
- for v in list(row.values())[3:]
- ] + [cur_seq])
-
- def fiscal_pos_map_to_csv(self):
- writer = pycompat.csv_writer(open('account.fiscal.'
- 'position.tax.template-%s.csv' %
- self.suffix, 'wb'))
- fiscal_pos_map_iterator = self.iter_fiscal_pos_map()
- keys = next(fiscal_pos_map_iterator)
- writer.writerow(keys)
- for row in fiscal_pos_map_iterator:
- writer.writerow([pycompat.to_text(s) for s in row.values()])
-
-
-if __name__ == '__main__':
- o = LuxTaxGenerator('tax.xls')
- o.tax_codes_to_csv()
- o.taxes_to_csv()
- o.fiscal_pos_map_to_csv()
diff --git a/addons/l10n_multilang/__init__.py b/addons/l10n_multilang/__init__.py
deleted file mode 100644
index dc5e6b693d1..00000000000
--- a/addons/l10n_multilang/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from . import models
diff --git a/addons/l10n_multilang/__manifest__.py b/addons/l10n_multilang/__manifest__.py
deleted file mode 100644
index db5f069b445..00000000000
--- a/addons/l10n_multilang/__manifest__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-{
- 'name': 'Multi Language Chart of Accounts',
- 'version': '1.1',
- 'category': 'Accounting/Localizations',
- 'description': """
- * Multi language support for Chart of Accounts, Taxes, Tax Codes, Journals,
- Accounting Templates, Analytic Chart of Accounts and Analytic Journals.
- * Setup wizard changes
- - Copy translations for COA, Tax, Tax Code and Fiscal Position from
- templates to target objects.
- """,
- 'depends': ['account'],
- 'license': 'LGPL-3',
-}
diff --git a/addons/l10n_multilang/i18n/af.po b/addons/l10n_multilang/i18n/af.po
deleted file mode 100644
index d1cdf87f16a..00000000000
--- a/addons/l10n_multilang/i18n/af.po
+++ /dev/null
@@ -1,83 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-11-10 13:44+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: Afrikaans (http://www.transifex.com/odoo/odoo-9/language/"
-"af/)\n"
-"Language: af\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Rekening"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Joernaal"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Belasting"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/ar.po b/addons/l10n_multilang/i18n/ar.po
deleted file mode 100644
index ecde69b8f0f..00000000000
--- a/addons/l10n_multilang/i18n/ar.po
+++ /dev/null
@@ -1,157 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Mustafa Rawi , 2019
-# Osoul , 2019
-# Shaima Safar , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: Shaima Safar , 2019\n"
-"Language-Team: Arabic (https://www.transifex.com/odoo/teams/41243/ar/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: ar\n"
-"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "الحساب"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "قالب مخطط الحساب"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "وسم الحساب"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "التقسيم الإداري للدولة. مثال: ولايات فيدرالية، أقسام، أقاليم"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "الحساب التحليلي"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "الولاية أو المحافظة"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "عرض على الفواتير"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "الموقف الضريبي"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "قالب الموقف الضريبي"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "تثبيت اللغة"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "دفتر اليومية"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "اسم دفتر اليومية"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "تسمية الفواتير"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "الإشارات القانونية التي يجب طباعتها على الفواتير."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "الاسم"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "الملاحظات"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "اللغات التي يتحدث بها"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "اسم الولاية"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"يذكر هنا اللغات التي يمكن تحميل ترجمات النماذج في وقت التثبيت هذه الموديول "
-"الأقلمة ونسخ في الكائن النهائي عندما بتوليد لهم من النماذج. يجب توفير رموز "
-"لغة مفصولة '؛'"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "الضريبة"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "اسم الضريبة"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "قالب للموقف الضريبي"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "قوالب الحسابات"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "قوالب الضرائب"
diff --git a/addons/l10n_multilang/i18n/az.po b/addons/l10n_multilang/i18n/az.po
deleted file mode 100644
index 8e903bfcb93..00000000000
--- a/addons/l10n_multilang/i18n/az.po
+++ /dev/null
@@ -1,148 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:34+0000\n"
-"Language-Team: Azerbaijani (https://www.transifex.com/odoo/teams/41243/az/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: az\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
diff --git a/addons/l10n_multilang/i18n/bg.po b/addons/l10n_multilang/i18n/bg.po
deleted file mode 100644
index c479d967233..00000000000
--- a/addons/l10n_multilang/i18n/bg.po
+++ /dev/null
@@ -1,95 +0,0 @@
-# #-#-#-#-# bg.po (Odoo 9.0) #-#-#-#-#
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Kaloyan Naumov , 2016
-# #-#-#-#-# bg.po (Odoo 9.0) #-#-#-#-#
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-09-10 15:16+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: Bulgarian (http://www.transifex.com/odoo/odoo-9/language/"
-"bg/)\n"
-"Language: bg\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"#-#-#-#-# bg.po (Odoo 9.0) #-#-#-#-#\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"#-#-#-#-# bg.po (Odoo 9.0) #-#-#-#-#\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Сметка"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr "Аналитична сметка"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr "Фискална Позиция"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Дневник"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr "Говорими Езици"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Данък"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Шаблон с фискална позиция"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr "Шаблони за диаграми на сметки"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Шаблони за сметки"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Шаблон за Данъци"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/bs.po b/addons/l10n_multilang/i18n/bs.po
deleted file mode 100644
index cd322df74f1..00000000000
--- a/addons/l10n_multilang/i18n/bs.po
+++ /dev/null
@@ -1,152 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2018
-# Boško Stojaković , 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:33+0000\n"
-"Last-Translator: Boško Stojaković , 2018\n"
-"Language-Team: Bosnian (https://www.transifex.com/odoo/teams/41243/bs/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: bs\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Konto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Oznaka konta"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "Administrativna podjela države. (federacije, republike, kantoni...)"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Analitički konto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Fed. država/Kanton"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Prikaži na fakturama"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Fiskalna pozicija"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Predložak fiskalne pozicije"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Instalacija jezika"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Dnevnik knjiženja"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Naziv naloga za knjiženje"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Oznake na fakturama"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Naziv:"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Zabilješke"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Naziv Fed. države/Kantona"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Porez"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Naziv poreza"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Prijedlog za fiskalnu poziciju"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Prijedlozi konta"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Prijedlozi poreza"
diff --git a/addons/l10n_multilang/i18n/ca.po b/addons/l10n_multilang/i18n/ca.po
deleted file mode 100644
index 43736bbc68b..00000000000
--- a/addons/l10n_multilang/i18n/ca.po
+++ /dev/null
@@ -1,156 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2018
-# Quim - eccit , 2018
-# Manel Fernandez , 2018
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:34+0000\n"
-"Last-Translator: Manel Fernandez , 2018\n"
-"Language-Team: Catalan (https://www.transifex.com/odoo/teams/41243/ca/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: ca\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Compte"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Etiqueta de compte"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-"Divisions administratives d'un país. Ex. Departament, Comunitat Autònoma, "
-"Provincia"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Compte analític"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Província"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Mostra en factures"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Posició fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Plantilla de posició fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Instal·lar idioma"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Diari"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Nom diari"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Etiqueta en factures"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Mencions legals que s'han d'imprimir a les factures."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Nom"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Notes"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Nom província"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Impost"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Nom impost"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Plantilla per posició fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Plantilles per comptes"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Plantilla pels impostos"
diff --git a/addons/l10n_multilang/i18n/cs.po b/addons/l10n_multilang/i18n/cs.po
deleted file mode 100644
index 3a8cd94709a..00000000000
--- a/addons/l10n_multilang/i18n/cs.po
+++ /dev/null
@@ -1,158 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2019
-# Michal Veselý , 2019
-# trendspotter , 2019
-# milda dvorak , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: milda dvorak , 2019\n"
-"Language-Team: Czech (https://www.transifex.com/odoo/teams/41243/cs/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: cs\n"
-"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Účet"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Šablona schématu účtu"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Tag účtu"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "Administrativní členění země. Např. Stát, ministerstvo, kraj, okres"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Analytický účet"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Stav státu"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Zobrazit na fakturách"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Daňová pozice"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Šablon finanční pozice"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Instalovat jazyk"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Deník"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Název deníku"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Označení faktur"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Právní zmínky, které musí být vytištěny na fakturách."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Název"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Poznámky"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Mluvené jazyky"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Název státu"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Zde uveďte jazyky, pro které by mohly být překlady šablon načteny v okamžiku"
-" instalace tohoto lokalizačního modulu a zkopírovány do konečného objektu "
-"při generování ze šablon. Musíte zadat kódy jazyků oddělené znakem ';'"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Daň"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Název daně"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Šablona pro finanční pozici"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Šablony pro účty"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Šablony pro daně"
diff --git a/addons/l10n_multilang/i18n/da.po b/addons/l10n_multilang/i18n/da.po
deleted file mode 100644
index e5b4a8aaa59..00000000000
--- a/addons/l10n_multilang/i18n/da.po
+++ /dev/null
@@ -1,156 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2019
-# Per Rasmussen , 2019
-# Pernille Kristensen , 2019
-# Sanne Kristensen , 2019
-# Ejner Sønniksen , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: Ejner Sønniksen , 2019\n"
-"Language-Team: Danish (https://www.transifex.com/odoo/teams/41243/da/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: da\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Konto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Kontoplansskabelon"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Konto tag"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Analysekonto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Landestat"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Vis på fakturaer"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Bogføringsgruppe"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Skabelon til bogføringsgruppe"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Installer sprog"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Journal"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Journal navn"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Tekst på fakturaer"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Juridiske navne, der skal udskrives på fakturaerne."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Navn"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Notater"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Talte sprog"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Delstatens navn"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Moms"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Momsnavn"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Skabelon for bogføringsgruppe"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Skabeloner for konti"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Momsskabeloner"
diff --git a/addons/l10n_multilang/i18n/de.po b/addons/l10n_multilang/i18n/de.po
deleted file mode 100644
index bcb2918e4ec..00000000000
--- a/addons/l10n_multilang/i18n/de.po
+++ /dev/null
@@ -1,162 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2019
-# Ermin Trevisan , 2019
-# Rudolf Schnapka , 2019
-# darenkster , 2019
-# Jan Meyer, 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: Jan Meyer, 2019\n"
-"Language-Team: German (https://www.transifex.com/odoo/teams/41243/de/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: de\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Konto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Kontenplanvorlage"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Konto-Schlagwort"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-"Verwaltungseinheiten eines Landes. Z.B. in Bundesstaaten, Länder, Regionen"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Kostenstelle"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Bundesland"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Verwendung auf Rechnungen"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Steuerzuordnung"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Steuerzuordnung-Vorlage"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Sprache installieren"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Journal"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Journalbezeichnung"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Bezeichnung auf Rechnungen"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-"Gesetzliche Vorgaben, die auf den Rechnungen ausgegeben werden müssen."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Name"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Notizen"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Gesprochene Sprachen"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Bundesland"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Hier führen Sie die Sprachen an, für die die Übersetzungen der Vorlagen zur "
-"Zeit der Installation dieses Lokalisierungsmoduls geladen werden können und "
-"dann bei der Generierung aus den Vorlagen in die endgültigen Objekte kopiert"
-" werden. Sie müssen die Sprachcodes mit Semikolons ';' separieren"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Steuer"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Steuerbezeichnung"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Vorlage für die Steuerzuordnung"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Vorlagen für Konti"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Vorlagen für Steuern"
diff --git a/addons/l10n_multilang/i18n/el.po b/addons/l10n_multilang/i18n/el.po
deleted file mode 100644
index 621a16de48d..00000000000
--- a/addons/l10n_multilang/i18n/el.po
+++ /dev/null
@@ -1,162 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2018
-# Kostas Goutoudis , 2018
-# Vasilis Dimopoulos , 2018
-# Timos Zacharatos , 2018
-# George M, 2018
-# George Tarasidis , 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:33+0000\n"
-"Last-Translator: George Tarasidis , 2018\n"
-"Language-Team: Greek (https://www.transifex.com/odoo/teams/41243/el/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: el\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Λογαριασμός"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Ετικέτα Λογαριασμού"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-"Διαχειριστικές περιοχές μιας χώρας. Π.χ. Ομοσπονδιακή Πολιτεία, Καντόνι, "
-"Περιφέρεια"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Αναλυτικός Λογαριασμός"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Νομός/Πολιτεία"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Εμφάνιση στα τιμολόγια"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Φορολογική Θέση"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Πρότυπο Φορολογικής Θέσης"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Εγκατάσταση γλώσσας"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Ημερολόγιο"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Όνομα Ημερολογίου"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Ετικέτα στα Tιμολόγια"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Νομικές αναφορές που πρέπει να εκτυπωθούν στα τιμολόγια."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Περιγραφή"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Σημειώσεις"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Ομιλούμενες Γλώσσες"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Όνομα Νομού/Πολιτείας"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Αναφέρετε εδώ τις γλώσσες για τις οποίες θα μπορούσαν να φορτωθούν οι "
-"μεταφράσεις των προτύπων κατά τη στιγμή της εγκατάστασης αυτής της ενότητας "
-"εντοπισμού και αντιγραφείς στο τελικό αντικείμενο κατά την παραγωγή τους από"
-" τα πρότυπα. Πρέπει να δώσετε τους κωδικούς γλώσσας ξεχωριστά με \";\""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Φόρος"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Όνομα Φόρου"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Πρότυπο για Φορολογική Θέση"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Πρότυπα για Λογαριασμούς"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Πρότυπα για Φόρους"
diff --git a/addons/l10n_multilang/i18n/en_AU.po b/addons/l10n_multilang/i18n/en_AU.po
deleted file mode 100644
index 4a19d3266dd..00000000000
--- a/addons/l10n_multilang/i18n/en_AU.po
+++ /dev/null
@@ -1,83 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-09-10 15:16+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: English (Australia) (http://www.transifex.com/odoo/odoo-9/"
-"language/en_AU/)\n"
-"Language: en_AU\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/en_GB.po b/addons/l10n_multilang/i18n/en_GB.po
deleted file mode 100644
index 74751ddac40..00000000000
--- a/addons/l10n_multilang/i18n/en_GB.po
+++ /dev/null
@@ -1,84 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Andi Chandler , 2015
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-09-14 10:52+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: English (United Kingdom) (http://www.transifex.com/odoo/"
-"odoo-9/language/en_GB/)\n"
-"Language: en_GB\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/es.po b/addons/l10n_multilang/i18n/es.po
deleted file mode 100644
index 4512a668903..00000000000
--- a/addons/l10n_multilang/i18n/es.po
+++ /dev/null
@@ -1,160 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Cristian Salamea , 2018
-# Martin Trigaux, 2018
-# Luis M. Ontalba , 2018
-# Antonio Trueba, 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:33+0000\n"
-"Last-Translator: Antonio Trueba, 2018\n"
-"Language-Team: Spanish (https://www.transifex.com/odoo/teams/41243/es/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: es\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Cuenta"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Plantilla de Plan de Cuentas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Etiqueta de cuenta"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-"División administrativa de un país. Por ejemplo Comunidad Autónoma, "
-"Provincia, Ayuntamiento"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Cuenta analítica"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Provincia"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Mostrar en facturas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Posición fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Plantilla de posición fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Instalar idioma"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Diario"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Nombre del diario"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Etiqueta en facturas"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Menciones legales que se tienen que imprimir en las facturas."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Nombre"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Notas"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Idiomas hablados"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Nombre provincia"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Indique aquí los idiomas para los que podrían cargarse las traducciones de "
-"las plantillas en el momento de la instalación de este módulo de "
-"localización, y copiarse en el objeto final cuando se generen desde las "
-"plantillas. Debe indicar los códigos de los idiomas separados por ';'"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Impuesto"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Nombre del impuesto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Plantilla de posición fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Plantillas de cuentas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Plantilla de impuestos"
diff --git a/addons/l10n_multilang/i18n/es_BO.po b/addons/l10n_multilang/i18n/es_BO.po
deleted file mode 100644
index 89f019827b3..00000000000
--- a/addons/l10n_multilang/i18n/es_BO.po
+++ /dev/null
@@ -1,83 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-09-24 20:01+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: Spanish (Bolivia) (http://www.transifex.com/odoo/odoo-9/"
-"language/es_BO/)\n"
-"Language: es_BO\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Cuenta"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr "Cuenta analítica"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr "Posición fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Diario"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Impuesto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Plantilla para posición fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr "Plantillas para el plan contable"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Plantillas para cuentas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Plantilla para los impuestos"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr ""
diff --git a/addons/l10n_multilang/i18n/es_CL.po b/addons/l10n_multilang/i18n/es_CL.po
deleted file mode 100644
index d482a715cad..00000000000
--- a/addons/l10n_multilang/i18n/es_CL.po
+++ /dev/null
@@ -1,83 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-10-06 08:55+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: Spanish (Chile) (http://www.transifex.com/odoo/odoo-9/"
-"language/es_CL/)\n"
-"Language: es_CL\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Cuenta"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/es_CO.po b/addons/l10n_multilang/i18n/es_CO.po
deleted file mode 100644
index 82ff493f9a4..00000000000
--- a/addons/l10n_multilang/i18n/es_CO.po
+++ /dev/null
@@ -1,92 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Mateo Tibaquirá , 2015
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-10-24 06:54+0000\n"
-"Last-Translator: Mateo Tibaquirá \n"
-"Language-Team: Spanish (Colombia) (http://www.transifex.com/odoo/odoo-9/"
-"language/es_CO/)\n"
-"Language: es_CO\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"#-#-#-#-# es_CO.po (Odoo 9.0) #-#-#-#-#\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"#-#-#-#-# es_CO.po (Odoo 9.0) #-#-#-#-#\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Cuenta"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr "Cuenta Analítica"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr "Posición Fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Libro"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr "Idiomas Hablados"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Indique aquí los idiomas para los que podrían cargarse las traducciones de "
-"las plantillas en el momento de la instalación de este módulo de "
-"localización, y copiarse en el objeto final cuando se generen desde las "
-"plantillas. Debe indicar los códigos de los idiomas separados por ';'"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Impuesto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Plantilla de Posición Fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr "Plantillas de Plan de Cuentas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Plantillas de Cuentas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Plantilla de Impuestos"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/es_CR.po b/addons/l10n_multilang/i18n/es_CR.po
deleted file mode 100644
index c2c184f0540..00000000000
--- a/addons/l10n_multilang/i18n/es_CR.po
+++ /dev/null
@@ -1,83 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-09-10 15:16+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: Spanish (Costa Rica) (http://www.transifex.com/odoo/odoo-9/"
-"language/es_CR/)\n"
-"Language: es_CR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/es_DO.po b/addons/l10n_multilang/i18n/es_DO.po
deleted file mode 100644
index 3d2c7d9b604..00000000000
--- a/addons/l10n_multilang/i18n/es_DO.po
+++ /dev/null
@@ -1,87 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2016-04-13 18:01+0000\n"
-"Last-Translator: Juliano Henriquez \n"
-"Language-Team: Spanish (Dominican Republic) (http://www.transifex.com/odoo/"
-"odoo-9/language/es_DO/)\n"
-"Language: es_DO\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Cuenta"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr "Cuenta analítica"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr "Posición fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Diario"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr "Comunicación oral"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Establece aquí los idiomas para que las traducciones de plantillas puedan "
-"cargarse en el momento de la instalación de este módulo de localización y "
-"copiado en el objeto final cuando se generen de plantillas. Usted debe "
-"proporcionar los códigos de idioma separados por ';'"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Impuesto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Plantilla de posición fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr "Plantillas de plan contable"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Plantillas de cuentas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Plantilla de impuestos"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/es_EC.po b/addons/l10n_multilang/i18n/es_EC.po
deleted file mode 100644
index ce11533aa93..00000000000
--- a/addons/l10n_multilang/i18n/es_EC.po
+++ /dev/null
@@ -1,89 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Rick Hunter , 2015
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-11-27 06:09+0000\n"
-"Last-Translator: Rick Hunter \n"
-"Language-Team: Spanish (Ecuador) (http://www.transifex.com/odoo/odoo-9/"
-"language/es_EC/)\n"
-"Language: es_EC\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Cuenta"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr "Cuenta analítica"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr "Posición fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Diario"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr "Lenguajes habladas"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Encuentre aquí el estado de los idiomas para que las traducciones de las "
-"plantillas podrían ser cargados en el momento de la instalación de este "
-"módulo de localización y copiados en el objeto final cuando se hayan "
-"generado a partir de plantillas. Debe proporcionar los códigos de idioma "
-"separadas por ';'"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Impuesto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Plantilla de posición fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr "Plantillas de plan contable"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Plantillas de cuentas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Plantilla para impuestos"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "Plan de Cuentas Multiple"
diff --git a/addons/l10n_multilang/i18n/es_PE.po b/addons/l10n_multilang/i18n/es_PE.po
deleted file mode 100644
index 62e100edbc9..00000000000
--- a/addons/l10n_multilang/i18n/es_PE.po
+++ /dev/null
@@ -1,88 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Carlos Eduardo Rodriguez Rossi , 2016
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2016-06-14 14:52+0000\n"
-"Last-Translator: Carlos Eduardo Rodriguez Rossi \n"
-"Language-Team: Spanish (Peru) (http://www.transifex.com/odoo/odoo-9/language/"
-"es_PE/)\n"
-"Language: es_PE\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Cuenta"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr "Cuenta Analítica"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr "Posicion Fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Diario"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr "Idiomas Hablados"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Establezca aquí el idioma para el que se deben de cargar las plantillas de "
-"traducción al momento de la instalación de este módulo de localización y "
-"copiada al final del objecto cuando se generen desde plantillas. Usted debe "
-"proporcionar los códigos del idiomar separados por ';'"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Impuesto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Plantillas Para Posición Fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr "Plantillas para Plan de Cuentas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Plantillas para Cuentas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Plantillas para Impuestos"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/es_PY.po b/addons/l10n_multilang/i18n/es_PY.po
deleted file mode 100644
index de3c26043f9..00000000000
--- a/addons/l10n_multilang/i18n/es_PY.po
+++ /dev/null
@@ -1,83 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-09-10 15:16+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: Spanish (Paraguay) (http://www.transifex.com/odoo/odoo-9/"
-"language/es_PY/)\n"
-"Language: es_PY\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/et.po b/addons/l10n_multilang/i18n/et.po
deleted file mode 100644
index 2b8555dd05a..00000000000
--- a/addons/l10n_multilang/i18n/et.po
+++ /dev/null
@@ -1,158 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Rivo Zängov , 2018
-# Martin Trigaux, 2018
-# Arma Gedonsky , 2018
-# Egon Raamat , 2018
-# Eneli Õigus , 2018
-# Marek Pontus, 2018
-# Martin Aavastik , 2018
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:34+0000\n"
-"Last-Translator: Martin Aavastik , 2018\n"
-"Language-Team: Estonian (https://www.transifex.com/odoo/teams/41243/et/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: et\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Konto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Konto silt"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "Riigi haldusüksused nt Fed. State, Departement, Canton"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Analüütiline konto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Maakond"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Näita arvetel"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Finantspositsioon"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Finantspositsiooni mall"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Paigalda keel"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Andmik"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Andmiku nimi"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Arve sildid"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Ametlikud märkmed, mis tuleb printida arvetele."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Nimi"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Märkused"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Räägitavad keeled"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Maakonna nimi"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Tulumaks"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Maksu Nimi"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Finantspositsiooni mall"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Konto mall"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Maksude mall"
diff --git a/addons/l10n_multilang/i18n/fa.po b/addons/l10n_multilang/i18n/fa.po
deleted file mode 100644
index a17aeb850ba..00000000000
--- a/addons/l10n_multilang/i18n/fa.po
+++ /dev/null
@@ -1,153 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2018
-# Hamid Darabi, 2018
-# Hamed Mohammadi , 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:33+0000\n"
-"Last-Translator: Hamed Mohammadi , 2018\n"
-"Language-Team: Persian (https://www.transifex.com/odoo/teams/41243/fa/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: fa\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "حساب"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "برچسب حساب"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "حساب تحلیلی"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "استان کشور"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "نمایش در فاکتورها"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "موقعیت مالی"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "نصب زبان"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "روزنامه"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "نام روزنامه"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "برچسب بر روی فاکتورها"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "نام"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "یادداشتها"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "نام استان"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "مالیات"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "نام مالیات"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "قالبها برای حسابها"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "قالبها برای مالیاتها"
diff --git a/addons/l10n_multilang/i18n/fi.po b/addons/l10n_multilang/i18n/fi.po
deleted file mode 100644
index 37aedfd5937..00000000000
--- a/addons/l10n_multilang/i18n/fi.po
+++ /dev/null
@@ -1,159 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Eino Mäkitalo , 2018
-# Tommi Rintala , 2018
-# Martin Trigaux, 2018
-# Kari Lindgren , 2018
-# Mikko Salmela , 2018
-# Jarmo Kortetjärvi , 2018
-# Tuomo Aura , 2018
-# Pekko Tuomisto , 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:33+0000\n"
-"Last-Translator: Pekko Tuomisto , 2018\n"
-"Language-Team: Finnish (https://www.transifex.com/odoo/teams/41243/fi/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: fi\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Tili"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Tili tunniste"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-"Maan hallinnoillinen aluejako. Esim. liittovaltio, departementti, kanttoni"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Kustannuspaikka"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Valtio"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Näytä laskulla"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Verokanta"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Verokannan malli"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Asenna kieli"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Päiväkirja"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Päiväkirjan nimi"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Viralliset laskumerkinnät."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Nimi"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Muistiinpanot"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Puhutut kielet"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Valtion nimi"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Vero"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Veronimi"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Verokannan malli"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Tilimallit"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Verojen mallipohjat"
diff --git a/addons/l10n_multilang/i18n/fr.po b/addons/l10n_multilang/i18n/fr.po
deleted file mode 100644
index 4ceabe66b2e..00000000000
--- a/addons/l10n_multilang/i18n/fr.po
+++ /dev/null
@@ -1,162 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Cécile Collart , 2019
-# Martin Trigaux, 2019
-# Maxime Chambreuil , 2019
-# Olivier Lenoir , 2019
-# Xavier Symons , 2019
-# Rémi CAZENAVE , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: Rémi CAZENAVE , 2019\n"
-"Language-Team: French (https://www.transifex.com/odoo/teams/41243/fr/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: fr\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Compte"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Modèle de plan comptable"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Étiquette du compte"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-"Divisions administratives d'un pays. Par exemple État, Département, Canton"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Compte analytique"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "État"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Affichage sur les factures"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Position fiscale"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Modèles des positions fiscales"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Installation de langue"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Journal"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Nom du journal"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Étiquettes sur les factures"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Les mentions juridiques qui doivent être imprimées sur les factures."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Nom"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Notes"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Langues parlées"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Nom de l'État"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Indiquer ici les langues pour lesquelles les traductions de modèles "
-"pourraient être chargés au moment de l'installation de ce module de "
-"localisation et copiés dans l'objet final lors de leur génération à partir "
-"des modèles. Fournir les codes de langue séparés par des ';'"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Taxe"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Nom de la taxe"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Modèle de position fiscale"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Modèles pour les comptes"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Modèles pour les taxes"
diff --git a/addons/l10n_multilang/i18n/fr_CA.po b/addons/l10n_multilang/i18n/fr_CA.po
deleted file mode 100644
index 5eb7ac30268..00000000000
--- a/addons/l10n_multilang/i18n/fr_CA.po
+++ /dev/null
@@ -1,83 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2016-07-19 02:21+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: French (Canada) (http://www.transifex.com/odoo/odoo-9/"
-"language/fr_CA/)\n"
-"Language: fr_CA\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Compte"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Journal"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr ""
diff --git a/addons/l10n_multilang/i18n/gu.po b/addons/l10n_multilang/i18n/gu.po
deleted file mode 100644
index 6bc8921b33a..00000000000
--- a/addons/l10n_multilang/i18n/gu.po
+++ /dev/null
@@ -1,151 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:33+0000\n"
-"Last-Translator: Martin Trigaux, 2018\n"
-"Language-Team: Gujarati (https://www.transifex.com/odoo/teams/41243/gu/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: gu\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "ખાતું"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "વિશ્લેષણાત્મક ખાતું"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "દેશ નુ રાજ્ય"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "રોજનામું"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "નામ"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "નોંધ"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
diff --git a/addons/l10n_multilang/i18n/he.po b/addons/l10n_multilang/i18n/he.po
deleted file mode 100644
index b96c79d5b0d..00000000000
--- a/addons/l10n_multilang/i18n/he.po
+++ /dev/null
@@ -1,156 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2019
-# Moshe Flam , 2019
-# Yihya Hugirat , 2019
-# שהאב חוסיין , 2019
-# דודי מלכה , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: דודי מלכה , 2019\n"
-"Language-Team: Hebrew (https://www.transifex.com/odoo/teams/41243/he/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: he\n"
-"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "חשבון"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "תבנית תרשים חשבון"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "תגית חשבון"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "חלוקה מנהלית של מדינה. למשל האכיל. מדינה, מחלקת, קנטון"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "חשבון אנליטי"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "מחוז מדינה"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "מצב כספי"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "התקן שפה"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "יומנים"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "שם היומן"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "תווית על חשבוניות"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "אזכורים משפטיים שצריכים להיות מודפסים על החשבונית."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "שם"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "הערות"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "שם מדינה"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "מע\"מ"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
diff --git a/addons/l10n_multilang/i18n/hr.po b/addons/l10n_multilang/i18n/hr.po
deleted file mode 100644
index 121db029068..00000000000
--- a/addons/l10n_multilang/i18n/hr.po
+++ /dev/null
@@ -1,157 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2019
-# Bole , 2019
-# Davor Bojkić , 2019
-# Vladimir Olujić , 2019
-# Karolina Tonković , 2019
-# Tina Milas, 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: Tina Milas, 2019\n"
-"Language-Team: Croatian (https://www.transifex.com/odoo/teams/41243/hr/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: hr\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Konto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Predložak kontnog plana"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Oznaka konta"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "Administrativna podjela države. ( Županije, fed. jedinice, kantoni)"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Konto analitike"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Županija/fed.država"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Prikaži na računima"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Fiskalna pozicija"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Predložak fiskalne pozicije"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Instalacija jezika"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Dnevnik"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Naziv dnevnika"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Natpis na računu"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Zakonske napomene koje se trebaju ispisati na računima."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Naziv"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Bilješke"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Govoreni jezici"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Naziv države"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Porez"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Naziv poreza"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Predložak fiskalne pozicije"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Predlošci za konta"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Predlošci poreza"
diff --git a/addons/l10n_multilang/i18n/hu.po b/addons/l10n_multilang/i18n/hu.po
deleted file mode 100644
index 9261576587f..00000000000
--- a/addons/l10n_multilang/i18n/hu.po
+++ /dev/null
@@ -1,159 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2018
-# krnkris, 2018
-# gezza , 2018
-# Kovács Tibor , 2018
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:34+0000\n"
-"Last-Translator: Kovács Tibor , 2018\n"
-"Language-Team: Hungarian (https://www.transifex.com/odoo/teams/41243/hu/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: hu\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Főkönyvi számla"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Főkönyvi számla címke"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-"Egy ország adminisztrációs megyoszlása. Pl. Szöv. állam, Tagozat, Kanton"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Analitikus számla"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Állam megye"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Feltüntetve a számlákon"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Költségvetési pozíció"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Költségvetési ÁFA pozíció sablon"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Nyelv telepítése"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Napló"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Napló neve"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Felirat a számlákon"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Számviteli megjegyzések mejeket a számlára kell nyomtatni."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Név"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Megjegyzések"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Beszélt nyelvek"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Állam neve"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Adja meg itt a nyelvet amelyen a sablon be fog töltődni a lokalizációs modul"
-" telepítése után és az át lesz másolva a végső objektumba a sablonokból való"
-" létrehozás után. A nyelvi kódot ';' kell elválasztani."
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Adó"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Adó megnevezése"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Költségvetési pozíció sablon"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Főkönyvi számla sablonok"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Sablonok adókhoz"
diff --git a/addons/l10n_multilang/i18n/id.po b/addons/l10n_multilang/i18n/id.po
deleted file mode 100644
index 20499665a8a..00000000000
--- a/addons/l10n_multilang/i18n/id.po
+++ /dev/null
@@ -1,88 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# William Surya Permana , 2015
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-10-20 07:19+0000\n"
-"Last-Translator: William Surya Permana \n"
-"Language-Team: Indonesian (http://www.transifex.com/odoo/odoo-9/language/"
-"id/)\n"
-"Language: id\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Akun"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr "Akun Analitik"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr "Posisi Fiskal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Jurnal"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr "Bahasa Ucapan"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Tuliskan di sini bahasa dari terjemahan cetakan mana yang akan dimuat pada "
-"saat pemasangan dari modul lokalisasi ini dan yang akan disalin pada objek "
-"akhir saat menghasilkannya dari cetakan. Anda harus menyediakan kode bahasa "
-"yang dipisahkan dengan ';'"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Pajak"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Cetakan Posisi Fiskal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr "Cetakan Bagan Akun"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Cetakan Akun"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Cetakan Perpajakan"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/is.po b/addons/l10n_multilang/i18n/is.po
deleted file mode 100644
index 88822417bc3..00000000000
--- a/addons/l10n_multilang/i18n/is.po
+++ /dev/null
@@ -1,155 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2018
-# Birgir Steinarsson , 2018
-# Bjorn Ingvarsson , 2018
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:34+0000\n"
-"Last-Translator: Bjorn Ingvarsson , 2018\n"
-"Language-Team: Icelandic (https://www.transifex.com/odoo/teams/41243/is/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: is\n"
-"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Bókhaldslykill"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Account Tag"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Kostnaðarreikningur"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Country state"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Display on Invoices"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Bókhaldsleg staðsetning "
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Fiscal Position Template"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Install Language"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Færslubók"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Journal Name"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Label on Invoices"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Legal mentions that have to be printed on the invoices."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Nafn"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Athugasemdir"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "State Name"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "VSK"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Tax Name"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Template for Fiscal Position"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Templates for Accounts"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Templates for Taxes"
diff --git a/addons/l10n_multilang/i18n/it.po b/addons/l10n_multilang/i18n/it.po
deleted file mode 100644
index ab7e78521bf..00000000000
--- a/addons/l10n_multilang/i18n/it.po
+++ /dev/null
@@ -1,162 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Lorenzo Battistini , 2019
-# Giacomo Grasso , 2019
-# Paolo Valier, 2019
-# Léonie Bouchat , 2019
-# Sergio Zanchetta , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: Sergio Zanchetta , 2019\n"
-"Language-Team: Italian (https://www.transifex.com/odoo/teams/41243/it/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: it\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Conto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Modello piano dei conti"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Etichetta conto"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-"Divisioni amministrative di una nazione. Es.: stato federale, dipartimento, "
-"cantone"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Conto analitico"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Stato nazionale"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Visualizza sulle fatture"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Posizione fiscale"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Modello posizione fiscale"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Installa lingua"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Registro"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Nome registro"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Etichetta su fatture"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Riferimenti legali che devono essere stampati sulla fattura."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Nome"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Note"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Lingue parlate"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Nome provincia"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Indicare qui le lingue per le quali caricare le traduzioni dei modelli al "
-"momento dell'installazione di questo modulo di localizzazione. Le traduzioni"
-" saranno copiate nell'oggetto finale quando verranno generate dai modelli "
-"stessi. Indicare i codici della lingua separati da \";\""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Imposta"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Nome imposta"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Modello per posizione fiscale"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Modelli per i conti"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Modelli per le imposte"
diff --git a/addons/l10n_multilang/i18n/ja.po b/addons/l10n_multilang/i18n/ja.po
deleted file mode 100644
index 4907b999614..00000000000
--- a/addons/l10n_multilang/i18n/ja.po
+++ /dev/null
@@ -1,155 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2018
-# Yoshi Tashiro , 2018
-# Norimichi Sugimoto , 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:33+0000\n"
-"Last-Translator: Norimichi Sugimoto , 2018\n"
-"Language-Team: Japanese (https://www.transifex.com/odoo/teams/41243/ja/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: ja\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "勘定科目"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "国の行政区画。たとえば連邦、省、州。"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "分析勘定"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "都道府県/州"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "会計ポジション"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "会計ポジションテンプレート"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "言語をインストール"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "仕訳帳"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "仕訳帳名"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "請求書上のラベル"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "名称"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "ノート"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "使用可能言語"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "都道府県/州名"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"テンプレートの翻訳がこのローカリゼーションモジュールのインストール時にロードされ、テンプレートからテンプレートを生成するときに最終オブジェクトにコピーされる言語をここに記述します。"
-" ';'で区切られた言語コードを提供する必要があります。"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "税"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "税名"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "会計ポジションテンプレート"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "アカウントのテンプレート"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "税テンプレート"
diff --git a/addons/l10n_multilang/i18n/kab.po b/addons/l10n_multilang/i18n/kab.po
deleted file mode 100644
index 32009b18b61..00000000000
--- a/addons/l10n_multilang/i18n/kab.po
+++ /dev/null
@@ -1,82 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-09-10 15:16+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: Kabyle (http://www.transifex.com/odoo/odoo-9/language/kab/)\n"
-"Language: kab\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/km.po b/addons/l10n_multilang/i18n/km.po
deleted file mode 100644
index 06d456d37d4..00000000000
--- a/addons/l10n_multilang/i18n/km.po
+++ /dev/null
@@ -1,152 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Sengtha Chay , 2018
-# Samkhann Seang , 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:33+0000\n"
-"Last-Translator: Samkhann Seang , 2018\n"
-"Language-Team: Khmer (https://www.transifex.com/odoo/teams/41243/km/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: km\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "គណនី"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "គំរូទីតាំងថសារពើរពន្ធ"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "ច្បាប់បានចែងថា ត្រូវតែព្រីនលើវិក័យប័ត្រ។"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "ឈ្មោះ"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "កំណត់សម្គាល់"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "គំរូសម្រាប់គណនី"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
diff --git a/addons/l10n_multilang/i18n/ko.po b/addons/l10n_multilang/i18n/ko.po
deleted file mode 100644
index 11bc42cdcd3..00000000000
--- a/addons/l10n_multilang/i18n/ko.po
+++ /dev/null
@@ -1,156 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2018
-# 최재호 , 2018
-# Linda Stockelova , 2018
-# Link Up링크업 , 2018
-# Linkup , 2018
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:34+0000\n"
-"Last-Translator: Linkup , 2018\n"
-"Language-Team: Korean (https://www.transifex.com/odoo/teams/41243/ko/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: ko\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "계정"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "계정 태그"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "국가의 행정 구역. 예를 들어 도, 시, 군"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "분석 계정"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "국가 상태"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "청구서에 표시"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "재정 포지션"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "재정 포지션 템플릿"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "언어 설치"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "분개장"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "분개장 명칭"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "청구서에 대한 라벨"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "청구서에 인쇄해야 하는 법적 문구입니다."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "이름"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "메모"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "세금"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "세금 이름"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "재정 포지션 템플릿"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "계정 템플릿"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "세금 템플릿"
diff --git a/addons/l10n_multilang/i18n/l10n_multilang.pot b/addons/l10n_multilang/i18n/l10n_multilang.pot
deleted file mode 100644
index d2f09010d1e..00000000000
--- a/addons/l10n_multilang/i18n/l10n_multilang.pot
+++ /dev/null
@@ -1,143 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 16.0beta\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-09-23 08:02+0000\n"
-"PO-Revision-Date: 2022-09-23 08:02+0000\n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_group
-msgid "Account Group"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-msgid "Account Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_group__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_group_template__name
-msgid "Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-msgid "Tag Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_group_template
-msgid "Template for Account Groups"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
diff --git a/addons/l10n_multilang/i18n/lb.po b/addons/l10n_multilang/i18n/lb.po
deleted file mode 100644
index 78acd24a3f0..00000000000
--- a/addons/l10n_multilang/i18n/lb.po
+++ /dev/null
@@ -1,148 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Language-Team: Luxembourgish (https://www.transifex.com/odoo/teams/41243/lb/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: lb\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
diff --git a/addons/l10n_multilang/i18n/lt.po b/addons/l10n_multilang/i18n/lt.po
deleted file mode 100644
index ba6c3971179..00000000000
--- a/addons/l10n_multilang/i18n/lt.po
+++ /dev/null
@@ -1,158 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2019
-# Silvija Butko , 2019
-# Audrius Palenskis , 2019
-# digitouch UAB , 2019
-# Eimantas , 2019
-# Linas Versada , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: Linas Versada , 2019\n"
-"Language-Team: Lithuanian (https://www.transifex.com/odoo/teams/41243/lt/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: lt\n"
-"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Sąskaita"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Sąskaitų plano šablonas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Sąskaitos žyma"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-"Valstybės administracinis vienetas. Pvz. savivaldybė, valstija, kantonas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Analitinė sąskaita"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Šalies valstija"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Rodyti sąskaitose"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Mokestinė aplinka"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Mokestinės aplinkos šablonas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Diegti kalbą"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Žurnalas"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Žurnalo pavadinimas"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Etiketė sąskaitoje"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Teisinė informacija, privalomai spausdinama sąskaitose."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Vardas"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Pastabos"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Savivaldybės pavadinimas"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Mokesčiai"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Mokesčio pavadinimas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Fiskalinės pozicijos šablonas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Sąskaitų šablonai"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Šablonai mokesčiams"
diff --git a/addons/l10n_multilang/i18n/lv.po b/addons/l10n_multilang/i18n/lv.po
deleted file mode 100644
index ef7ae44ed31..00000000000
--- a/addons/l10n_multilang/i18n/lv.po
+++ /dev/null
@@ -1,83 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-09-10 15:16+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: Latvian (http://www.transifex.com/odoo/odoo-9/language/lv/)\n"
-"Language: lv\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
-"2);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/mk.po b/addons/l10n_multilang/i18n/mk.po
deleted file mode 100644
index c55bcd20777..00000000000
--- a/addons/l10n_multilang/i18n/mk.po
+++ /dev/null
@@ -1,84 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Aleksandar Vangelovski , 2016
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2016-05-12 12:36+0000\n"
-"Last-Translator: Aleksandar Vangelovski \n"
-"Language-Team: Macedonian (http://www.transifex.com/odoo/odoo-9/language/"
-"mk/)\n"
-"Language: mk\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr "Аналитичка сметка"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr "Фискална позиција"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Данок"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Урнек за фискална позиција"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr "Урнеци за контен план"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Урнеци за сметки"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Урнеци за Даноци"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/mn.po b/addons/l10n_multilang/i18n/mn.po
deleted file mode 100644
index 73ea234f20e..00000000000
--- a/addons/l10n_multilang/i18n/mn.po
+++ /dev/null
@@ -1,158 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Baskhuu Lodoikhuu , 2019
-# Martin Trigaux, 2019
-# Otgonbayar.A , 2019
-# Khishigbat Ganbold , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: Khishigbat Ganbold , 2019\n"
-"Language-Team: Mongolian (https://www.transifex.com/odoo/teams/41243/mn/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: mn\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Данс"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Дансны модны загвар"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Дансны пайз"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "Улсын засаг захиргааны нэгж. Тухайлбал: Холбоо. Муж, Хэсэг, Аймаг"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Шинжилгээний данс"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Муж"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Нэхэмжлэл дээр харуулах"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Татварын тайлангийн тохируулга"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Татварын тайлангийн тохируулгын загвар"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Хэл суулгах"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Журнал"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Журналын нэр"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Нэхэмжлэл дээрх тэмдэглэгээ"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Нэхэмжлэл дээр хэвлэгдэх ёстой хуулийн нэршил."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Нэр"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Тэмдэглэл"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Ярианы хэлүүд"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Мужын нэр"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Энэ орон нутагийн модулийг суулгах үедорчуулгын үлгэрүүдийн ачаалж улмаар "
-"эцсийн обьектуудыг үүсгэхдээ үлгэрүүдээс хуулах хэлийг энд "
-"дурьдана.Хэлүүдийн кодыг ';'-с тусгаарлан бичнэ."
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Татвар"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Татварын нэр"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Татварын тайлангийн тохируулгын загвар"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Дансны загварууд"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Татварын загварууд"
diff --git a/addons/l10n_multilang/i18n/nb.po b/addons/l10n_multilang/i18n/nb.po
deleted file mode 100644
index caa4d0129bb..00000000000
--- a/addons/l10n_multilang/i18n/nb.po
+++ /dev/null
@@ -1,155 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2019
-# Jorunn D. Newth, 2019
-# Marius Stedjan , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: Marius Stedjan , 2019\n"
-"Language-Team: Norwegian Bokmål (https://www.transifex.com/odoo/teams/41243/nb/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: nb\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Konto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Konto-tag"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-"Administrative inndelinger for landet. For eksempel stat, departement, fylke"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Analytisk konto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Navn på stat"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Vis på fakturaer"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Regnskapsstatus"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Regnskapsstatus Mal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Installer språk"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Journal"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Journalnavn"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Tekst på fakturaer"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Navn"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Notater"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Navn på stat"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Avgift"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Avgiftsnavn"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Mal for regnskapsstatus"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Maler for konti"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Maler for skatter og avgifter"
diff --git a/addons/l10n_multilang/i18n/nl.po b/addons/l10n_multilang/i18n/nl.po
deleted file mode 100644
index dc4a399c734..00000000000
--- a/addons/l10n_multilang/i18n/nl.po
+++ /dev/null
@@ -1,159 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2019
-# Erwin van der Ploeg , 2019
-# Yenthe Van Ginneken , 2019
-# Cas Vissers , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: Cas Vissers , 2019\n"
-"Language-Team: Dutch (https://www.transifex.com/odoo/teams/41243/nl/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: nl\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Rekening"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Rekeningstelsel sjabloon"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Rekeninglabel"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "Administratieve onderverdelen van een land."
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Kostenplaats"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Staat / Provincie"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Weergaven op facturen"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Fiscale positie"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Fiscale positie sjabloon"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Taal installeren"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Dagboek"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Dagboeknaam"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Label op facturen"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Juridische notities welke op de factuur moeten worden afgedrukt."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Naam"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Notities"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Gesproken talen"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Naam staat/provincie"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Geef hier aan voor welke talen de vertalingen van sjablonen geladen kunnen "
-"worden, tijdens het installeren van de lokale modules en gekopieerd kunnen "
-"worden in het uiteindelijke object wanneer deze gegenereerd worden vanuit de"
-" sjablonen. Je moet de taalcode ingeven en scheiden door ';'"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "BTW"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "BTW naam"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Sjabloon voor fiscale positie"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Sjablonen voor grootboekrekeningen"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Sjablonen voor BTW"
diff --git a/addons/l10n_multilang/i18n/nl_BE.po b/addons/l10n_multilang/i18n/nl_BE.po
deleted file mode 100644
index 1d6c0e2800a..00000000000
--- a/addons/l10n_multilang/i18n/nl_BE.po
+++ /dev/null
@@ -1,83 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-09-27 10:36+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: Dutch (Belgium) (http://www.transifex.com/odoo/odoo-9/"
-"language/nl_BE/)\n"
-"Language: nl_BE\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/pl.po b/addons/l10n_multilang/i18n/pl.po
deleted file mode 100644
index f3b5eecfed2..00000000000
--- a/addons/l10n_multilang/i18n/pl.po
+++ /dev/null
@@ -1,162 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2019
-# Grzegorz Grzelak , 2019
-# Judyta Kaźmierczak , 2019
-# Jaroslaw Kaczmarski, 2019
-# Piotr Szlązak , 2019
-# Marcin Młynarczyk , 2019
-# Paweł Wodyński , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: Paweł Wodyński , 2019\n"
-"Language-Team: Polish (https://www.transifex.com/odoo/teams/41243/pl/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: pl\n"
-"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Konto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Szablon planów kont"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Znacznik konta"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "Jednostka administracyjnego podziału kraju. Np. Stan, Województwo"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Konto analityczne"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Region kraju"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Wyświetl na fakturach"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Obszar podatkowy"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Szablon obszaru podatkowego"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Instaluj Język"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Dziennik"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Nazwa dziennika"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Znacznik na fakturach"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Formułki prawne do wydrukowania na fakturach."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Nazwa"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Notatki"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Używane języki"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Stan"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Podaj tutaj języki, dla których tłumaczenia szablonów mogą być ładowane "
-"podczas instalacji tego modułu lokalizacji i skopiowane do końcowego obiektu"
-" podczas generowania ich z szablonów. Musisz podać kody języków oddzielone "
-"\";\""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Podatek"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Nazwa podatku"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Szablon dla obszaru podatkowego"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Szablony kont"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Szablony podatków"
diff --git a/addons/l10n_multilang/i18n/pt.po b/addons/l10n_multilang/i18n/pt.po
deleted file mode 100644
index 6ebd23d81ed..00000000000
--- a/addons/l10n_multilang/i18n/pt.po
+++ /dev/null
@@ -1,148 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Language-Team: Portuguese (https://www.transifex.com/odoo/teams/41243/pt/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: pt\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
diff --git a/addons/l10n_multilang/i18n/pt_BR.po b/addons/l10n_multilang/i18n/pt_BR.po
deleted file mode 100644
index a2120836775..00000000000
--- a/addons/l10n_multilang/i18n/pt_BR.po
+++ /dev/null
@@ -1,161 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Rodrigo de Almeida Sottomaior Macedo , 2018
-# Martin Trigaux, 2018
-# Mateus Lopes , 2018
-# falexandresilva , 2018
-# grazziano , 2018
-# Thiago Alves Cavalcante , 2018
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:34+0000\n"
-"Last-Translator: Thiago Alves Cavalcante , 2018\n"
-"Language-Team: Portuguese (Brazil) (https://www.transifex.com/odoo/teams/41243/pt_BR/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: pt_BR\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Conta"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Modelo de Gráfico da Conta"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Etiqueta de Conta"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "Divisões administrativas de um país. Ex: Estados, Cidades"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Conta Analítica"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Estado do país"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Exibir em Faturas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Posição Fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Modelo de Posição Fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Instalar idioma"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Diário"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Nome do Diário"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Etiqueta em Faturas"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Menções legais que devem ser impressas nas faturas."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Nome"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Observações"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Idiomas falados"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Nome do Estado"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Declare aqui os idiomas para os quais as traduções de modelos poderiam ser "
-"carregados no momento da instalação deste módulo de localização e copiado no"
-" objeto final, quando gerá-los a partir de modelos. Você deve fornecer os "
-"códigos de idioma separados por ';'"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Imposto"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Nome da taxa"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Modelo para Posição Fiscal"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Modelos para Contas"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Modelos para Impostos"
diff --git a/addons/l10n_multilang/i18n/ro.po b/addons/l10n_multilang/i18n/ro.po
deleted file mode 100644
index 3b7fcd112c0..00000000000
--- a/addons/l10n_multilang/i18n/ro.po
+++ /dev/null
@@ -1,148 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Language-Team: Romanian (https://www.transifex.com/odoo/teams/41243/ro/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: ro\n"
-"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
diff --git a/addons/l10n_multilang/i18n/ru.po b/addons/l10n_multilang/i18n/ru.po
deleted file mode 100644
index 9ef7fbfd4e6..00000000000
--- a/addons/l10n_multilang/i18n/ru.po
+++ /dev/null
@@ -1,161 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Максим Дронь , 2018
-# Martin Trigaux, 2018
-# Sergey Vilizhanin, 2018
-# Max Belyanin , 2018
-# Denis Baranov , 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:33+0000\n"
-"Last-Translator: Denis Baranov , 2018\n"
-"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: ru\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Счёт"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Шаблон плана счетов"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Тег счёта"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-"Административно-территориальное деление страны. Например, штат, регион, "
-"область"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Аналитический счёт"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Область"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Показать на счет-фактурах"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Система налогов"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Шаблон системы налогов"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Установить язык"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Журнал"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Название журнала"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Обозначение на Счет-фактурах"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Юридическая заметка, которая должна отображаться на счет-фактуре. "
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Название"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Заметки"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Разговорные языки"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Название Региона"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Укажите здесь языки, для которых можно загрузить переводы шаблонов во время "
-"установки этого модуля локализации и скопировать их в финальный объект при "
-"генерировании из шаблонов. Вы должны предоставить языковые коды, отделенные "
-"\";\""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Налог"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Наименование Налога"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Шаблон для системы налогов"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Шаблоны для счетов"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Шаблоны для налогов"
diff --git a/addons/l10n_multilang/i18n/sk.po b/addons/l10n_multilang/i18n/sk.po
deleted file mode 100644
index fabf63565aa..00000000000
--- a/addons/l10n_multilang/i18n/sk.po
+++ /dev/null
@@ -1,157 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2018
-# Matus Krnac , 2018
-# Jaroslav Bosansky , 2018
-# gebri , 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:33+0000\n"
-"Last-Translator: gebri , 2018\n"
-"Language-Team: Slovak (https://www.transifex.com/odoo/teams/41243/sk/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: sk\n"
-"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Účet"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Menovka účtu"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "Administratívne rozdelenie krajiny. Napr. Fed. Štát, Kraj, Okres"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Analytický účet"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Štátny štát"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Zobraziť na faktúrach"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Fiškálna pozícia"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Šablóna fiškánej pozície"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Nainštalovať Jazyk"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Účtovná kniha"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Názov účtovnej knihy"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Popisok na faktúrach"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Právne údaje ktoré musia byť vytlačené na faktúre."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Meno"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Poznámky"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Hovorené jazyky"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Meno štátu"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Uveďte tu jazyky pre ktoré môže byť nahraný preklad šablón počas inštalácie "
-"tohto lokalizačného modulu a skopírované do cieľového objektu počas "
-"generovania zo šablón. Kódy jazykov musia byť uvedené oddeľovačom ';'"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Daň"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Názov dane"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Šablóna pre fiškálnu pozíciu"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Šablóny pre účty"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Templates for Taxes"
diff --git a/addons/l10n_multilang/i18n/sl.po b/addons/l10n_multilang/i18n/sl.po
deleted file mode 100644
index 045995e5d97..00000000000
--- a/addons/l10n_multilang/i18n/sl.po
+++ /dev/null
@@ -1,85 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Dejan Sraka , 2016
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2016-03-27 21:01+0000\n"
-"Last-Translator: Dejan Sraka \n"
-"Language-Team: Slovenian (http://www.transifex.com/odoo/odoo-9/language/"
-"sl/)\n"
-"Language: sl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
-"%100==4 ? 2 : 3);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Račun"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/sq.po b/addons/l10n_multilang/i18n/sq.po
deleted file mode 100644
index fb2c84c8662..00000000000
--- a/addons/l10n_multilang/i18n/sq.po
+++ /dev/null
@@ -1,82 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2016-03-31 15:24+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: Albanian (http://www.transifex.com/odoo/odoo-9/language/sq/)\n"
-"Language: sq\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Llogaria"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Ditar"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr ""
diff --git a/addons/l10n_multilang/i18n/sr.po b/addons/l10n_multilang/i18n/sr.po
deleted file mode 100644
index 94d03647e52..00000000000
--- a/addons/l10n_multilang/i18n/sr.po
+++ /dev/null
@@ -1,155 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2018
-# Slobodan Simić , 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:33+0000\n"
-"Last-Translator: Slobodan Simić , 2018\n"
-"Language-Team: Serbian (https://www.transifex.com/odoo/teams/41243/sr/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: sr\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Рачун"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Рачун аналитике"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Forma države"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Фискална позиција"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Instaliraj Jezik"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Извештај"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Naziv dnevnika"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Ime"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Beleške"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Говори језике"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Ime države"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Овде наведите језике за које ће се преводи шаблона учитати при инсталацији "
-"овог модула за локализацију и бити ископирани у финални објекат када се "
-"генерише из шаблона. Морате навести кодове језика раздвојене са „;“"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Порез"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Naziv Poreza"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Шаблон фискалне позиције"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Шаблони за рачуне"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Шаблони за порезе"
diff --git a/addons/l10n_multilang/i18n/sr@latin.po b/addons/l10n_multilang/i18n/sr@latin.po
deleted file mode 100644
index 85a76494b00..00000000000
--- a/addons/l10n_multilang/i18n/sr@latin.po
+++ /dev/null
@@ -1,89 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2015-09-10 15:16+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: Serbian (Latin) (http://www.transifex.com/odoo/odoo-9/"
-"language/sr@latin/)\n"
-"Language: sr@latin\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"#-#-#-#-# sr@latin.po (Odoo 9.0) #-#-#-#-#\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"#-#-#-#-# sr@latin.po (Odoo 9.0) #-#-#-#-#\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Konto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Porez"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "carobnjak.vise.kontnih.naloga"
diff --git a/addons/l10n_multilang/i18n/sv.po b/addons/l10n_multilang/i18n/sv.po
deleted file mode 100644
index a3ee46dc8af..00000000000
--- a/addons/l10n_multilang/i18n/sv.po
+++ /dev/null
@@ -1,82 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo 9.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-18 08:20+0000\n"
-"PO-Revision-Date: 2016-07-12 00:49+0000\n"
-"Last-Translator: Martin Trigaux\n"
-"Language-Team: Swedish (http://www.transifex.com/odoo/odoo-9/language/sv/)\n"
-"Language: sv\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-msgid "Analytic Account"
-msgstr "Objektkonto"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-msgid "Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template_spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template_spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in "
-"the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Skatt"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Templates for Account Chart"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
-msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
diff --git a/addons/l10n_multilang/i18n/th.po b/addons/l10n_multilang/i18n/th.po
deleted file mode 100644
index 29a0617b87a..00000000000
--- a/addons/l10n_multilang/i18n/th.po
+++ /dev/null
@@ -1,155 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2018
-# Khwunchai Jaengsawang , 2018
-# Pornvibool Tippayawat , 2018
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:34+0000\n"
-"Last-Translator: Pornvibool Tippayawat , 2018\n"
-"Language-Team: Thai (https://www.transifex.com/odoo/teams/41243/th/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: th\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "บัญชี"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "บัญชีวิเคราะห์"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "จังหวัด"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "ประเภทผู้เสียภาษี"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "แม่แบบประเภทผู้เสียภาษี"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "ติดตั้งภาษา"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "สมุดบัญชี"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "ชื่อสมุดรายวัน"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "ชื่อ"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "โน้ต"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "ภาษาพูด"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "ชื่อจังหวัด"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "ภาษี"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "ชื่อภาษี"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "รูปแบบสำหรับบัญชี"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "แม่แบบสำหรับภาษี"
diff --git a/addons/l10n_multilang/i18n/tr.po b/addons/l10n_multilang/i18n/tr.po
deleted file mode 100644
index d996723bec0..00000000000
--- a/addons/l10n_multilang/i18n/tr.po
+++ /dev/null
@@ -1,160 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Ediz Duman , 2018
-# Ayhan KIZILTAN , 2018
-# Martin Trigaux, 2018
-# Murat Kaplan , 2018
-# Ertuğrul Güreş , 2018
-# Ramiz Deniz Öner , 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:33+0000\n"
-"Last-Translator: Ramiz Deniz Öner , 2018\n"
-"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: tr\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Hesap"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Hesap Planı Şablonu"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Hesap Etiketi"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "Bir ülkenin idari bölümleri. örn. Eyalet, Bölge, Kanton"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Analitik Hesap"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Ülke İl/Eyaleti"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Faturalarda Görüntüle"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Mali Koşul"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Mali Koşul Şablonu"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Dil Yükleyin"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Yevmiye"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Yevmiye Adı"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Faturalarda Etiket"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Faturalarda basılması gereken yasal bildirimler."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Adı"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Notlar"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Konuşulan Diller"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "İl/Eyalet Adı"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Bu yerelleştirme modülünün kurulumu sırasında şablonlar için hangi dilin "
-"yükleneceğini ve şablonlardan nesneleri oluştururken son nesneye "
-"kopyalanacak dilleri burada belirtin. Dil kodlarını ';' ile ayırarak "
-"belirtin"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Vergi"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Vergi Adı"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Mali Koşul Şablonu"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Hesap Şablonları"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Vergi Şablonları"
diff --git a/addons/l10n_multilang/i18n/uk.po b/addons/l10n_multilang/i18n/uk.po
deleted file mode 100644
index 62d11b544b1..00000000000
--- a/addons/l10n_multilang/i18n/uk.po
+++ /dev/null
@@ -1,159 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2019
-# Bohdan Lisnenko, 2019
-# ТАрас , 2019
-# Alina Lisnenko , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: Alina Lisnenko , 2019\n"
-"Language-Team: Ukrainian (https://www.transifex.com/odoo/teams/41243/uk/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: uk\n"
-"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Рахунок"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Шаблон плану рахунків"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Тег рахунку"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "Адміністративні підрозділи країни. Наприклад, Фед. Штат, Кантон"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Аналітичний рахунок"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Область країни"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Відображати на рахунках"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Схема оподаткування"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Шаблон схеми оподаткування"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Встановити мову"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Журнал"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Назва журналу"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Мітки на рахунках"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr ""
-"Юридичні посилання, які повинні бути надруковані на рахунках-фактурах."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Ім'я"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Примітки"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "Мови"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Назва області"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-"Вкажіть мови, для яких переклади шаблонів буде завантажено, коли "
-"інсталюється модуль локалізації, і скопійовано в кінцевий об'єкт при їх "
-"генерації з шаблонів. Вкажіть мовні коди розділяючи їх знаком ';'"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Податок"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Назва податку"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Шаблон для схеми оподаткування"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Шаблон для Рахунків"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Шаблон для податків"
diff --git a/addons/l10n_multilang/i18n/vi.po b/addons/l10n_multilang/i18n/vi.po
deleted file mode 100644
index f90f493f50a..00000000000
--- a/addons/l10n_multilang/i18n/vi.po
+++ /dev/null
@@ -1,153 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Nancy Momoland , 2019
-# Dao Nguyen , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: Dao Nguyen , 2019\n"
-"Language-Team: Vietnamese (https://www.transifex.com/odoo/teams/41243/vi/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: vi\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "Tài khoản"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "Bảng hệ thống tài khoản"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "Thẻ tài khoản"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "Thông tin hành chính mỗi quốc gia. Vd. Tỉnh/TP/Bang, Bộ ngành, Canton"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "Tài khoản phân tích"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "Tỉnh/TP/Bang"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "Hiển thị trên hóa đơn"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "Vị thế tài chính"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "Mẫu vị thế tài chính"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "Cài đặt ngôn ngữ"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "Sổ nhật ký"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "Tên sổ nhật ký"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "Nội dung trên hóa đơn"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "Các ghi chú mang tính pháp lý để in lên các hoá đơn."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "Tên"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "Ghi chú"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "Tên Tỉnh/TP"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "Thuế"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "Tên thuế"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "Biểu mẫu cho vị thế tài chính"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "Các mẫu tài khoản"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "Mẫu cho thuế"
diff --git a/addons/l10n_multilang/i18n/zh_CN.po b/addons/l10n_multilang/i18n/zh_CN.po
deleted file mode 100644
index 1846fdc493d..00000000000
--- a/addons/l10n_multilang/i18n/zh_CN.po
+++ /dev/null
@@ -1,159 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Jeanphy , 2019
-# Martin Trigaux, 2019
-# Jeffery CHEN , 2019
-# liAnGjiA , 2019
-# Gary Wei , 2019
-# guohuadeng , 2019
-# keecome <7017511@qq.com>, 2019
-# inspur qiuguodong , 2019
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2019-08-26 09:11+0000\n"
-"Last-Translator: inspur qiuguodong , 2019\n"
-"Language-Team: Chinese (China) (https://www.transifex.com/odoo/teams/41243/zh_CN/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: zh_CN\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "账户"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "科目表模版"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "账户标签"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "管理国家/地区或州省的分类。"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "分析账户"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "国家/地区州/省"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "显示在发票上"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "税科目调整"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "税科目调整模版"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "安装语言"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "日记账"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "日记账名称"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "发票上的标签"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "法律上提到必须在发票上打印。"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "名称"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "备注"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr "口语"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "州省名称"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr "模板翻译可以在安装此本地模块时上传和最终对象的生成时复制。你必须提供语言代码并以';'分隔"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "税率"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "税率名称"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "税科目调整模板"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "科目模板"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "税率模板"
diff --git a/addons/l10n_multilang/i18n/zh_TW.po b/addons/l10n_multilang/i18n/zh_TW.po
deleted file mode 100644
index 03ccedcd643..00000000000
--- a/addons/l10n_multilang/i18n/zh_TW.po
+++ /dev/null
@@ -1,153 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * l10n_multilang
-#
-# Translators:
-# Martin Trigaux, 2018
-# Andy Cheng , 2018
-# 敬雲 林 , 2018
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-10-08 14:33+0000\n"
-"PO-Revision-Date: 2018-10-08 14:33+0000\n"
-"Last-Translator: 敬雲 林 , 2018\n"
-"Language-Team: Chinese (Taiwan) (https://www.transifex.com/odoo/teams/41243/zh_TW/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: zh_TW\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account
-msgid "Account"
-msgstr "帳戶"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_chart_template
-msgid "Account Chart Template"
-msgstr "科目表模版"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_tag
-msgid "Account Tag"
-msgstr "帳戶標籤"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_res_country_state__name
-msgid ""
-"Administrative divisions of a country. E.g. Fed. State, Departement, Canton"
-msgstr "管理國家或地區的分類。"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_analytic_account
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_analytic_account__name
-msgid "Analytic Account"
-msgstr "分析帳戶"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_res_country_state
-msgid "Country state"
-msgstr "國家州/省"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__description
-msgid "Display on Invoices"
-msgstr "顯示在憑單上"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__name
-msgid "Fiscal Position"
-msgstr "財政狀況"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__name
-msgid "Fiscal Position Template"
-msgstr "財政狀況模版"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_base_language_install
-msgid "Install Language"
-msgstr "安裝語系"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_journal
-msgid "Journal"
-msgstr "日記帳"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_journal__name
-msgid "Journal Name"
-msgstr "日記帳名稱"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__description
-msgid "Label on Invoices"
-msgstr "憑單上的標籤"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_fiscal_position__note
-msgid "Legal mentions that have to be printed on the invoices."
-msgstr "法律提到必須列印在憑單上的."
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_tag__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_account_template__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__name
-msgid "Name"
-msgstr "名称"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position__note
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_fiscal_position_template__note
-msgid "Notes"
-msgstr "備註"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_chart_template__spoken_languages
-msgid "Spoken Languages"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_res_country_state__name
-msgid "State Name"
-msgstr "州/省名稱"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,help:l10n_multilang.field_account_chart_template__spoken_languages
-msgid ""
-"State here the languages for which the translations of templates could be "
-"loaded at the time of installation of this localization module and copied in"
-" the final object when generating them from templates. You must provide the "
-"language codes separated by ';'"
-msgstr ""
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax
-msgid "Tax"
-msgstr "稅金"
-
-#. module: l10n_multilang
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax__name
-#: model:ir.model.fields,field_description:l10n_multilang.field_account_tax_template__name
-msgid "Tax Name"
-msgstr "稅金名稱"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
-msgid "Template for Fiscal Position"
-msgstr "替換規則模板"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_account_template
-msgid "Templates for Accounts"
-msgstr "科目模板"
-
-#. module: l10n_multilang
-#: model:ir.model,name:l10n_multilang.model_account_tax_template
-msgid "Templates for Taxes"
-msgstr "稅金模板"
diff --git a/addons/l10n_multilang/models/__init__.py b/addons/l10n_multilang/models/__init__.py
deleted file mode 100644
index c57ec139e10..00000000000
--- a/addons/l10n_multilang/models/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from . import account
-from . import l10n_multilang
diff --git a/addons/l10n_multilang/models/account.py b/addons/l10n_multilang/models/account.py
deleted file mode 100644
index c538986edff..00000000000
--- a/addons/l10n_multilang/models/account.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-
-from odoo import fields, models
-
-#in this file, we mostly add the tag translate=True on existing fields that we now want to be translated
-
-class AccountAccountTag(models.Model):
- _inherit = 'account.account.tag'
-
- name = fields.Char(translate=True)
-
-class AccountAccountTemplate(models.Model):
- _inherit = 'account.account.template'
-
- name = fields.Char(translate=True)
-
-
-class AccountAccount(models.Model):
- _inherit = 'account.account'
-
- name = fields.Char(translate=True)
-
-class AccountGroupTemplate(models.Model):
- _inherit = 'account.group.template'
-
- name = fields.Char(translate=True)
-
-class AccountGroup(models.Model):
- _inherit = 'account.group'
-
- name = fields.Char(translate=True)
-
-class AccountTax(models.Model):
- _inherit = 'account.tax'
-
- name = fields.Char(translate=True)
- description = fields.Char(translate=True)
-
-
-class AccountTaxTemplate(models.Model):
- _inherit = 'account.tax.template'
-
- name = fields.Char(translate=True)
- description = fields.Char(translate=True)
-
-
-class AccountChartTemplate(models.Model):
- _inherit = 'account.chart.template'
- _order = 'name'
-
- name = fields.Char(translate=True)
- spoken_languages = fields.Char(string='Spoken Languages')
- # the languages for which the translations of templates could be loaded at
- # the time of installation of this localization module and copied in the
- # final object when generating them from templates. You must provide the
- # language codes separated by ';'
-
-
-class AccountFiscalPosition(models.Model):
- _inherit = 'account.fiscal.position'
-
- name = fields.Char(translate=True)
- note = fields.Html(translate=True)
-
-
-class AccountFiscalPositionTemplate(models.Model):
- _inherit = 'account.fiscal.position.template'
-
- name = fields.Char(translate=True)
- note = fields.Text(translate=True)
-
-
-class AccountJournal(models.Model):
- _inherit = 'account.journal'
-
- name = fields.Char(translate=True)
-
-
-class AccountAnalyticAccount(models.Model):
- _inherit = 'account.analytic.account'
-
- name = fields.Char(translate=True)
diff --git a/addons/l10n_multilang/models/l10n_multilang.py b/addons/l10n_multilang/models/l10n_multilang.py
deleted file mode 100644
index aa1d35bd056..00000000000
--- a/addons/l10n_multilang/models/l10n_multilang.py
+++ /dev/null
@@ -1,162 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from collections import defaultdict
-import logging
-
-from odoo import models
-
-_logger = logging.getLogger(__name__)
-
-
-class AccountChartTemplate(models.Model):
- _inherit = 'account.chart.template'
-
- def _load(self, company):
- res = super(AccountChartTemplate, self)._load(company)
- # Copy chart of account translations when loading chart of account
- for chart_template in self.filtered('spoken_languages'):
- external_id = self.env['ir.model.data'].search([
- ('model', '=', 'account.chart.template'),
- ('res_id', '=', chart_template.id),
- ], order='id', limit=1)
- module = external_id and self.env.ref('base.module_' + external_id.module)
- if module and module.state == 'installed':
- langs = chart_template._get_langs()
- if langs:
- chart_template._process_single_company_coa_translations(company.id, langs)
- return res
-
- def process_translations(self, langs, in_field, in_ids, out_ids):
- """
- This method copies translations values of templates into new Accounts/Taxes/Journals for languages selected
-
- :param langs: List of languages to load for new records
- :param in_field: Name of the translatable field of source templates
- :param in_ids: Recordset of ids of source object
- :param out_ids: Recordset of ids of destination object
-
- :return: True
- """
- for lang in langs:
- for in_id, out_id in zip(in_ids.with_context(lang=lang), out_ids.with_context(lang=lang)):
- out_id[in_field] = in_id[in_field]
- return True
-
- def process_coa_translations(self):
- company_obj = self.env['res.company']
- for chart_template_id in self:
- langs = chart_template_id._get_langs()
- if langs:
- company_ids = company_obj.search([('chart_template_id', '=', chart_template_id.id)])
- for company in company_ids:
- chart_template_id._process_single_company_coa_translations(company.id, langs)
- return True
-
- def _process_single_company_coa_translations(self, company_id, langs):
- # write account.account translations in the real COA
- self._process_accounts_translations(company_id, langs, 'name')
- # write account.group translations
- self._process_account_group_translations(company_id, langs, 'name')
- # copy account.tax name translations
- self._process_taxes_translations(company_id, langs, 'name')
- # copy account.tax description translations
- self._process_taxes_translations(company_id, langs, 'description')
- # copy account.fiscal.position translations
- self._process_fiscal_pos_translations(company_id, langs, 'name')
-
- def _get_langs(self):
- if not self.spoken_languages:
- return []
-
- installed_langs = dict(self.env['res.lang'].get_installed())
- langs = []
- for lang in self.spoken_languages.split(';'):
- if lang not in installed_langs:
- # the language is not installed, so we don't need to load its translations
- continue
- else:
- langs.append(lang)
- return langs
-
- def _process_accounts_translations(self, company_id, langs, field):
- in_ids, out_ids = self._get_template_from_model(company_id, 'account.account')
- return self.process_translations(langs, field, in_ids, out_ids)
-
- def _process_account_group_translations(self, company_id, langs, field):
- in_ids, out_ids = self._get_template_from_model(company_id, 'account.group')
- return self.process_translations(langs, field, in_ids, out_ids)
-
- def _process_taxes_translations(self, company_id, langs, field):
- in_ids, out_ids = self._get_template_from_model(company_id, 'account.tax')
- return self.process_translations(langs, field, in_ids, out_ids)
-
- def _process_fiscal_pos_translations(self, company_id, langs, field):
- in_ids, out_ids = self._get_template_from_model(company_id, 'account.fiscal.position')
- return self.process_translations(langs, field, in_ids, out_ids)
-
- def _get_template_from_model(self, company_id, model):
- """ Find the records and their matching template """
- # generated records have an external id with the format _
- grouped_out_data = defaultdict(lambda: self.env['ir.model.data'])
- for imd in self.env['ir.model.data'].search([
- ('model', '=', model),
- ('name', '=like', str(company_id) + '_%')
- ]):
- grouped_out_data[imd.module] += imd
-
- in_records = self.env[model + '.template']
- out_records = self.env[model]
- for module, out_data in grouped_out_data.items():
- # templates and records may have been created in a different order
- # reorder them based on external id names
- expected_in_xml_id_names = {xml_id.name.partition(str(company_id) + '_')[-1]: xml_id for xml_id in out_data}
-
- in_xml_ids = self.env['ir.model.data'].search([
- ('model', '=', model + '.template'),
- ('module', '=', module),
- ('name', 'in', list(expected_in_xml_id_names))
- ])
- in_xml_ids = {xml_id.name: xml_id for xml_id in in_xml_ids}
-
- for name, xml_id in expected_in_xml_id_names.items():
- # ignore nonconforming customized data
- if name not in in_xml_ids:
- continue
- in_records += self.env[model + '.template'].browse(in_xml_ids[name].res_id)
- out_records += self.env[model].browse(xml_id.res_id)
-
- return (in_records, out_records)
-
-class BaseLanguageInstall(models.TransientModel):
- """ Install Language"""
- _inherit = "base.language.install"
-
- def lang_install(self):
- self.ensure_one()
- installed = {code for code, __ in self.env['res.lang'].get_installed()}
- res = super(BaseLanguageInstall, self).lang_install()
- to_install = set(self.lang_ids.mapped('code')) - installed
- if not to_install:
- # update of translations instead of new installation
- # skip to avoid duplicating the translations
- return res
-
- # CoA in multilang mode
- for coa in self.env['account.chart.template'].search([('spoken_languages', '!=', False)]):
- coa_langs_codes = to_install & set(coa.spoken_languages.split(';'))
- if coa_langs_codes:
- # companies on which it is installed
- for company in self.env['res.company'].search([('chart_template_id', '=', coa.id)]):
- # write account.account translations in the real COA
- coa.sudo()._process_accounts_translations(company.id, coa_langs_codes, 'name')
- # write account.group translations
- coa.sudo()._process_account_group_translations(company.id, coa_langs_codes, 'name')
- # copy account.tax name translations
- coa.sudo()._process_taxes_translations(company.id, coa_langs_codes, 'name')
- # copy account.tax description translations
- coa.sudo()._process_taxes_translations(company.id, coa_langs_codes, 'description')
- # copy account.fiscal.position translations
- coa.sudo()._process_fiscal_pos_translations(company.id, coa_langs_codes, 'name')
-
- return res
diff --git a/addons/l10n_mx/__init__.py b/addons/l10n_mx/__init__.py
index 46fb439304a..dc5e6b693d1 100644
--- a/addons/l10n_mx/__init__.py
+++ b/addons/l10n_mx/__init__.py
@@ -2,6 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
-
-def load_translations(env):
- env.ref('l10n_mx.mx_coa').process_coa_translations()
diff --git a/addons/l10n_mx/models/account_tax.py b/addons/l10n_mx/models/account_tax.py
index a435a9ea25a..0ba98c2016a 100644
--- a/addons/l10n_mx/models/account_tax.py
+++ b/addons/l10n_mx/models/account_tax.py
@@ -2,27 +2,6 @@
from odoo import models, fields
-class AccountTaxTemplate(models.Model):
- _inherit = 'account.tax.template'
-
- l10n_mx_tax_type = fields.Selection(
- selection=[
- ('Tasa', "Tasa"),
- ('Cuota', "Cuota"),
- ('Exento', "Exento"),
- ],
- string="Factor Type",
- default='Tasa',
- help="The CFDI version 3.3 have the attribute 'TipoFactor' in the tax lines. In it is indicated the factor "
- "type that is applied to the base of the tax.")
-
- def _get_tax_vals(self, company, tax_template_to_tax):
- # OVERRIDE
- res = super()._get_tax_vals(company, tax_template_to_tax)
- res['l10n_mx_tax_type'] = self.l10n_mx_tax_type
- return res
-
-
class AccountTax(models.Model):
_inherit = 'account.tax'
diff --git a/addons/l10n_mx/models/chart_template.py b/addons/l10n_mx/models/chart_template.py
index 7993c191fb1..bf159743bbb 100644
--- a/addons/l10n_mx/models/chart_template.py
+++ b/addons/l10n_mx/models/chart_template.py
@@ -2,51 +2,34 @@
# Copyright 2016 Vauxoo (https://www.vauxoo.com)
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
-from odoo import models, api, _
+from odoo import models, _
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = "account.chart.template"
- @api.model
- def generate_journals(self, acc_template_ref, company, journals_dict=None):
- """Set the tax_cash_basis_journal_id on the company"""
- res = super(AccountChartTemplate, self).generate_journals(
- acc_template_ref, company, journals_dict=journals_dict)
- if not self == self.env.ref('l10n_mx.mx_coa'):
- return res
- journal_basis = self.env['account.journal'].search([
- ('company_id', '=', company.id),
- ('type', '=', 'general'),
- ('code', '=', 'CBMX')], limit=1)
- company.write({'tax_cash_basis_journal_id': journal_basis.id})
- return res
+ @template('mx', 'account.journal')
+ def _get_mx_account_journal(self):
+ return {
+ "cbmx": {
+ 'type': 'general',
+ 'name': _('Effectively Paid'),
+ 'code': 'CBMX',
+ 'default_account_id': "cuenta118_01",
+ 'show_on_dashboard': True,
+ }
+ }
- def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
- """Create the tax_cash_basis_journal_id"""
- res = super(AccountChartTemplate, self)._prepare_all_journals(
- acc_template_ref, company, journals_dict=journals_dict)
- if not self == self.env.ref('l10n_mx.mx_coa'):
- return res
- account = acc_template_ref.get(self.env.ref('l10n_mx.cuenta118_01').id)
- res.append({
- 'type': 'general',
- 'name': _('Effectively Paid'),
- 'code': 'CBMX',
- 'company_id': company.id,
- 'default_account_id': account,
- 'show_on_dashboard': True,
+ @template('mx', 'res.company')
+ def _get_mx_res_company(self):
+ company_data = super()._get_mx_res_company()
+ company_data[self.env.company.id].update({
+ 'tax_cash_basis_journal_id': 'cbmx',
})
- return res
+ return company_data
- @api.model
- def _create_liquidity_journal_suspense_account(self, company, code_digits):
- if not self == self.env.ref('l10n_mx.mx_coa'):
- return super()._create_liquidity_journal_suspense_account(company, code_digits)
- return self.env['account.account'].create({
- 'name': _("Bank Suspense Account"),
- 'code': self.env['account.account']._search_new_account_code(company, code_digits, company.bank_account_code_prefix or ''),
- 'account_type': 'asset_current',
- 'company_id': company.id,
- 'tag_ids': self.env.ref('l10n_mx.tag_credit_balance_account')
- })
+
+ def _setup_utility_bank_accounts(self, template_code, company, template_data):
+ super()._setup_utility_bank_accounts(template_code, company, template_data)
+ company.account_journal_suspense_account_id.tag_ids = self.env.ref('l10n_mx.tag_credit_balance_account')
diff --git a/addons/l10n_my/__init__.py b/addons/l10n_my/__init__.py
index cce53e259c0..e69de29bb2d 100644
--- a/addons/l10n_my/__init__.py
+++ b/addons/l10n_my/__init__.py
@@ -1,4 +0,0 @@
-
-
-def load_translations(env):
- env.ref("l10n_my.l10n_my_chart_template").process_coa_translations()
diff --git a/addons/l10n_my/__manifest__.py b/addons/l10n_my/__manifest__.py
index b2a8b46fe5f..e3e37ed0805 100644
--- a/addons/l10n_my/__manifest__.py
+++ b/addons/l10n_my/__manifest__.py
@@ -23,6 +23,5 @@ This is the base module to manage the accounting chart for Malaysia in Odoo.
'demo/demo_company.xml',
],
"icon": "/base/static/img/country_flags/my.png",
- "post_init_hook": "load_translations",
"license": "LGPL-3",
}
diff --git a/addons/l10n_nl/__init__.py b/addons/l10n_nl/__init__.py
index adc9c21e418..d8aee4cf365 100644
--- a/addons/l10n_nl/__init__.py
+++ b/addons/l10n_nl/__init__.py
@@ -4,6 +4,3 @@
# Copyright (C) 2016 Onestein ().
from . import models
-
-def load_translations(env):
- env.ref('l10n_nl.l10nnl_chart_template').process_coa_translations()
diff --git a/addons/l10n_nl/models/account_chart_template.py b/addons/l10n_nl/models/account_chart_template.py
index a8d1fe74534..37ec654fce4 100644
--- a/addons/l10n_nl/models/account_chart_template.py
+++ b/addons/l10n_nl/models/account_chart_template.py
@@ -1,23 +1,13 @@
# -*- coding: utf-8 -*-
-from odoo import api, Command, models
+from odoo import models
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- def _load(self, company):
- # Add tag to 999999 account
- res = super(AccountChartTemplate, self)._load(company)
- if company.account_fiscal_country_id.code == 'NL':
- account = self.env['account.account'].search([('code', '=', '999999'), ('company_id', '=', self.env.company.id)])
- if account:
- account.tag_ids = [(4, self.env.ref('l10n_nl.account_tag_12').id)]
- return res
-
- @api.model
- def _create_liquidity_journal_suspense_account(self, company, code_digits):
- account = super()._create_liquidity_journal_suspense_account(company, code_digits)
- if company.account_fiscal_country_id.code == 'NL':
- account.tag_ids = [Command.link(self.env.ref('l10n_nl.account_tag_25').id)]
- return account
+ def _post_load_data(self, template_code, company, template_data):
+ super()._post_load_data(template_code, company, template_data)
+ if template_code == 'nl':
+ company.account_journal_suspense_account_id.tag_ids += self.env.ref('l10n_nl.account_tag_25')
+ company.get_unaffected_earnings_account().tag_ids += self.env.ref('l10n_nl.account_tag_12')
diff --git a/addons/l10n_no/__init__.py b/addons/l10n_no/__init__.py
index 30370d843f6..824bdbfcbed 100644
--- a/addons/l10n_no/__init__.py
+++ b/addons/l10n_no/__init__.py
@@ -2,11 +2,6 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
-from odoo import api, SUPERUSER_ID
-
-def load_translations(cr, registry):
- env = api.Environment(cr, SUPERUSER_ID, {})
- env.ref('l10n_no.no_chart_template').process_coa_translations()
def _preserve_tag_on_taxes(env):
from odoo.addons.account.models.chart_template import preserve_existing_tags_on_taxes
diff --git a/addons/l10n_pa/__init__.py b/addons/l10n_pa/__init__.py
index 6e0a4496520..fdcb151b02b 100644
--- a/addons/l10n_pa/__init__.py
+++ b/addons/l10n_pa/__init__.py
@@ -2,6 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
# Copyright (c) 2011 Cubic ERP - Teradata SAC. (http://cubicerp.com).
-
-def load_translations(env):
- env.ref('l10n_pa.l10npa_chart_template').process_coa_translations()
diff --git a/addons/l10n_pe/__init__.py b/addons/l10n_pe/__init__.py
index bc2ef6cac7a..5320d2b35d0 100644
--- a/addons/l10n_pe/__init__.py
+++ b/addons/l10n_pe/__init__.py
@@ -3,7 +3,3 @@
from . import models
from . import demo
-
-
-def load_translations(env):
- env.ref('l10n_pe.pe_chart_template').process_coa_translations()
diff --git a/addons/l10n_pe/__manifest__.py b/addons/l10n_pe/__manifest__.py
index 9c183557e26..650d34b49ea 100644
--- a/addons/l10n_pe/__manifest__.py
+++ b/addons/l10n_pe/__manifest__.py
@@ -36,5 +36,4 @@
'demo/demo_company.xml',
'demo/demo_partner.xml',
],
- 'post_init_hook': 'load_translations',
}
diff --git a/addons/l10n_pe/demo/account_demo.py b/addons/l10n_pe/demo/account_demo.py
index 289e6ce07e0..dcb40036afe 100644
--- a/addons/l10n_pe/demo/account_demo.py
+++ b/addons/l10n_pe/demo/account_demo.py
@@ -3,23 +3,21 @@
from odoo import api, models
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = "account.chart.template"
@api.model
- def _get_demo_data_move(self):
- cid = self.env.company.id
- model, data = super()._get_demo_data_move()
- if self.env.company.account_fiscal_country_id.code == "PE":
- document_type = self.env.ref('l10n_pe.document_type01')
- data[f'{cid}_demo_invoice_1']['l10n_latam_document_type_id'] = document_type.id
- data[f'{cid}_demo_invoice_1']['l10n_latam_document_number'] = 'FFI-000001'
- data[f'{cid}_demo_invoice_2']['l10n_latam_document_type_id'] = document_type.id
- data[f'{cid}_demo_invoice_2']['l10n_latam_document_number'] = 'FFI-000002'
- data[f'{cid}_demo_invoice_3']['l10n_latam_document_type_id'] = document_type.id
- data[f'{cid}_demo_invoice_3']['l10n_latam_document_number'] = 'FFI-000003'
- data[f'{cid}_demo_invoice_followup']['l10n_latam_document_type_id'] = document_type.id
- data[f'{cid}_demo_invoice_followup']['l10n_latam_document_number'] = 'FFI-000004'
- data[f'{cid}_demo_invoice_5']['l10n_latam_document_number'] = '1'
- data[f'{cid}_demo_invoice_equipment_purchase']['l10n_latam_document_number'] = 'INV-000089'
- return model, data
+ def _get_demo_data_move(self, company=False):
+ move_data = super()._get_demo_data_move(company)
+ if company.account_fiscal_country_id.code == "PE":
+ move_data['demo_invoice_1']['l10n_latam_document_type_id'] = 'l10n_pe.document_type01'
+ move_data['demo_invoice_1']['l10n_latam_document_number'] = 'FFI-000001'
+ move_data['demo_invoice_2']['l10n_latam_document_type_id'] = 'l10n_pe.document_type01'
+ move_data['demo_invoice_2']['l10n_latam_document_number'] = 'FFI-000002'
+ move_data['demo_invoice_3']['l10n_latam_document_type_id'] = 'l10n_pe.document_type01'
+ move_data['demo_invoice_3']['l10n_latam_document_number'] = 'FFI-000003'
+ move_data['demo_invoice_followup']['l10n_latam_document_type_id'] = 'l10n_pe.document_type01'
+ move_data['demo_invoice_followup']['l10n_latam_document_number'] = 'FFI-000004'
+ move_data['demo_invoice_5']['l10n_latam_document_number'] = '1'
+ move_data['demo_invoice_equipment_purchase']['l10n_latam_document_number'] = 'INV-000089'
+ return move_data
diff --git a/addons/l10n_pe/models/account_tax.py b/addons/l10n_pe/models/account_tax.py
index 14fcef59c13..96096641e65 100644
--- a/addons/l10n_pe/models/account_tax.py
+++ b/addons/l10n_pe/models/account_tax.py
@@ -32,44 +32,3 @@ class AccountTax(models.Model):
('03', 'Retail Price System'),
], 'ISC Type',
help='Used in Selective Consumption Tax to indicate the type of calculation for the ISC.')
-
-
-class AccountTaxTemplate(models.Model):
- _inherit = "account.tax.template"
-
- l10n_pe_edi_tax_code = fields.Selection([
- ('1000', 'IGV - General Sales Tax'),
- ('1016', 'IVAP - Tax on Sale Paddy Rice'),
- ('2000', 'ISC - Selective Excise Tax'),
- ('7152', 'ICBPER - Plastic bag tax'),
- ('9995', 'EXP - Exportation'),
- ('9996', 'GRA - Free'),
- ('9997', 'EXO - Exonerated'),
- ('9998', 'INA - Unaffected'),
- ('9999', 'OTHERS - Other taxes')
- ], 'EDI peruvian code')
-
- l10n_pe_edi_unece_category = fields.Selection([
- ('E', 'Exempt from tax'),
- ('G', 'Free export item, tax not charged'),
- ('O', 'Services outside scope of tax'),
- ('S', 'Standard rate'),
- ('Z', 'Zero rated goods')], 'EDI UNECE code',
- help="Follow the UN/ECE 5305 standard from the United Nations Economic Commission for Europe for more "
- "information http://www.unece.org/trade/untdid/d08a/tred/tred5305.htm"
- )
- l10n_pe_edi_isc_type = fields.Selection([
- ('01', 'System to value'),
- ('02', 'Application of the Fixed Amount'),
- ('03', 'Retail Price System'),
- ], 'ISC Type',
- help='Used in Selective Consumption Tax to indicate the type of calculation for the ISC.')
-
- def _get_tax_vals(self, company, tax_template_to_tax):
- val = super()._get_tax_vals(company, tax_template_to_tax)
- val.update({
- 'l10n_pe_edi_tax_code': self.l10n_pe_edi_tax_code,
- 'l10n_pe_edi_unece_category': self.l10n_pe_edi_unece_category,
- 'l10n_pe_edi_isc_type': self.l10n_pe_edi_isc_type,
- })
- return val
diff --git a/addons/l10n_ph/models/__init__.py b/addons/l10n_ph/models/__init__.py
index e32724d8bb3..bff17e5c146 100644
--- a/addons/l10n_ph/models/__init__.py
+++ b/addons/l10n_ph/models/__init__.py
@@ -4,4 +4,3 @@ from . import res_partner
from . import account_move
from . import account_payment
from . import account_tax
-from . import account_tax_template
diff --git a/addons/l10n_ph/models/account_tax_template.py b/addons/l10n_ph/models/account_tax_template.py
deleted file mode 100644
index f1334ae021e..00000000000
--- a/addons/l10n_ph/models/account_tax_template.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from odoo import fields, models
-
-
-class AccountTaxTemplate(models.Model):
- _inherit = "account.tax.template"
-
- l10n_ph_atc = fields.Char("Philippines ATC")
-
- def _get_tax_vals(self, company, tax_template_to_tax):
- val = super()._get_tax_vals(company, tax_template_to_tax)
- val.update({"l10n_ph_atc": self.l10n_ph_atc})
- return val
diff --git a/addons/l10n_pl/__init__.py b/addons/l10n_pl/__init__.py
index ec4fa278a0f..2df6df29a15 100644
--- a/addons/l10n_pl/__init__.py
+++ b/addons/l10n_pl/__init__.py
@@ -7,10 +7,5 @@ def _preserve_tag_on_taxes(env):
preserve_existing_tags_on_taxes(env, 'l10n_pl')
-def load_translations(env):
- env.ref('l10n_pl.pl_chart_template').process_coa_translations()
-
-
def post_init_hook(env):
_preserve_tag_on_taxes(env)
- load_translations(env)
diff --git a/addons/l10n_pt/models/__init__.py b/addons/l10n_pt/models/__init__.py
index 3fe6a514991..1d5112c3207 100644
--- a/addons/l10n_pt/models/__init__.py
+++ b/addons/l10n_pt/models/__init__.py
@@ -1,2 +1,2 @@
from . import account_account
-from . import chart_template
+from . import account_journal
diff --git a/addons/l10n_pt/models/account_account.py b/addons/l10n_pt/models/account_account.py
index 937ff06cc5a..59f2a4fa8c2 100644
--- a/addons/l10n_pt/models/account_account.py
+++ b/addons/l10n_pt/models/account_account.py
@@ -5,9 +5,3 @@ class AccountAccount(models.Model):
_inherit = "account.account"
l10n_pt_taxonomy_code = fields.Integer(string="Taxonomy code")
-
-
-class AccountAccountTemplate(models.Model):
- _inherit = "account.account.template"
-
- l10n_pt_taxonomy_code = fields.Integer(string="Taxonomy code")
diff --git a/addons/l10n_pt/models/account_journal.py b/addons/l10n_pt/models/account_journal.py
new file mode 100644
index 00000000000..5fefd099f7f
--- /dev/null
+++ b/addons/l10n_pt/models/account_journal.py
@@ -0,0 +1,14 @@
+from odoo import models
+
+
+class AccountJournal(models.Model):
+ _inherit = 'account.journal'
+
+ def _prepare_liquidity_account_vals(self, company, code, vals):
+ account_vals = super()._prepare_liquidity_account_vals(company, code, vals)
+ if company.account_fiscal_country_id.code == 'PT':
+ if vals.get('type') == 'cash':
+ account_vals['l10n_pt_taxonomy_code'] = 1
+ elif vals.get('type') == 'bank':
+ account_vals['l10n_pt_taxonomy_code'] = 2
+ return account_vals
diff --git a/addons/l10n_pt/models/chart_template.py b/addons/l10n_pt/models/chart_template.py
deleted file mode 100644
index 241ba10e535..00000000000
--- a/addons/l10n_pt/models/chart_template.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from odoo import models
-
-
-class AccountChartTemplate(models.Model):
- _inherit = "account.chart.template"
-
- def _get_account_vals(self, company, account_template, code_acc, tax_template_ref):
- vals = super()._get_account_vals(company, account_template, code_acc, tax_template_ref)
- vals['l10n_pt_taxonomy_code'] = account_template.l10n_pt_taxonomy_code
- return vals
-
- def _create_bank_journals(self, company, acc_template_ref):
- journals = super()._create_bank_journals(company, acc_template_ref)
- if company.account_fiscal_country_id.code == 'PT':
- for journal in journals:
- if journal.type == 'cash':
- journal.default_account_id.l10n_pt_taxonomy_code = 1
- elif journal.type == 'bank':
- journal.default_account_id.l10n_pt_taxonomy_code = 2
- return journals
diff --git a/addons/l10n_ro/__init__.py b/addons/l10n_ro/__init__.py
index d7d74b3ddc7..30d03247107 100644
--- a/addons/l10n_ro/__init__.py
+++ b/addons/l10n_ro/__init__.py
@@ -9,7 +9,3 @@
# Copyright (C) 2009 ()
from . import models
-
-
-def load_translations(env):
- env.ref('l10n_ro.ro_chart_template').process_coa_translations()
diff --git a/addons/l10n_ro/__manifest__.py b/addons/l10n_ro/__manifest__.py
index e22c485fdd9..8ab39ba2f12 100644
--- a/addons/l10n_ro/__manifest__.py
+++ b/addons/l10n_ro/__manifest__.py
@@ -41,6 +41,5 @@ Romanian accounting chart and localization.
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_rs/__init__.py b/addons/l10n_rs/__init__.py
index 4813bf5d92b..dc5e6b693d1 100644
--- a/addons/l10n_rs/__init__.py
+++ b/addons/l10n_rs/__init__.py
@@ -2,7 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
-
-
-def load_translations(env):
- env.ref('l10n_rs.l10n_rs_chart_template').process_coa_translations()
diff --git a/addons/l10n_rs/__manifest__.py b/addons/l10n_rs/__manifest__.py
index 3554a29268a..713608f2313 100644
--- a/addons/l10n_rs/__manifest__.py
+++ b/addons/l10n_rs/__manifest__.py
@@ -27,6 +27,5 @@
"views/report_invoice.xml",
],
"demo": ["demo/demo_company.xml"],
- 'post_init_hook': 'load_translations',
"license": "LGPL-3",
}
diff --git a/addons/l10n_sa/__init__.py b/addons/l10n_sa/__init__.py
index 7bd1a4efda9..8134f974fbf 100644
--- a/addons/l10n_sa/__init__.py
+++ b/addons/l10n_sa/__init__.py
@@ -2,7 +2,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
-
-
-def load_translations(env):
- env.ref('l10n_sa.sa_chart_template_standard').process_coa_translations()
diff --git a/addons/l10n_sa/__manifest__.py b/addons/l10n_sa/__manifest__.py
index 8a30d6c8b92..752c39255ec 100644
--- a/addons/l10n_sa/__manifest__.py
+++ b/addons/l10n_sa/__manifest__.py
@@ -29,6 +29,5 @@ Odoo Arabic localization for most Saudi Arabia.
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_sa/models/account_chart_template.py b/addons/l10n_sa/models/account_chart_template.py
index 656a5726f46..08cdd1e0222 100644
--- a/addons/l10n_sa/models/account_chart_template.py
+++ b/addons/l10n_sa/models/account_chart_template.py
@@ -1,44 +1,45 @@
# -*- encoding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import models
+from odoo import models, Command
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
+ @template('sa', 'account.journal')
+ def _get_sa_account_journal(self):
""" If Saudi Arabia chart, we add 3 new journals Tax Adjustments, IFRS 16 and Zakat"""
- if self == self.env.ref('l10n_sa.sa_chart_template_standard'):
- if not journals_dict:
- journals_dict = []
- journals_dict.extend(
- [{'name': 'Tax Adjustments', 'company_id': company.id, 'code': 'TA', 'type': 'general',
- 'favorite': True, 'sequence': 1},
- {'name': 'IFRS 16 Right of Use Asset', 'company_id': company.id, 'code': 'IFRS', 'type': 'general',
- 'favorite': True, 'sequence': 10},
- {'name': 'Zakat', 'company_id': company.id, 'code': 'ZAKAT', 'type': 'general', 'favorite': True,
- 'sequence': 10}])
- return super()._prepare_all_journals(acc_template_ref, company, journals_dict=journals_dict)
+ return {
+ "tax_adjustment": {
+ 'name': 'Tax Adjustments',
+ 'code': 'TA',
+ 'type': 'general',
+ 'show_on_dashboard': True,
+ 'sequence': 1,
+ },
+ "ifrs16": {
+ 'name': 'IFRS 16 Right of Use Asset',
+ 'code': 'IFRS',
+ 'type': 'general',
+ 'show_on_dashboard': True,
+ 'sequence': 10,
+ },
+ "zakat": {
+ 'name': 'Zakat',
+ 'code': 'ZAKAT',
+ 'type': 'general',
+ 'show_on_dashboard': True,
+ 'sequence': 10,
+ }
+ }
- def _load_template(self, company, code_digits=None, account_ref=None, taxes_ref=None):
- account_ref, taxes_ref = super(AccountChartTemplate, self)._load_template(company=company,
- code_digits=code_digits,
- account_ref=account_ref,
- taxes_ref=taxes_ref)
- if self == self.env.ref('l10n_sa.sa_chart_template_standard'):
- ifrs_journal_id = self.env['account.journal'].search([('company_id', '=', company.id), ('code', '=', 'IFRS')], limit=1)
- if ifrs_journal_id:
- ifrs_account_ids = [self.env.ref('l10n_sa.sa_account_100101').id,
- self.env.ref('l10n_sa.sa_account_100102').id,
- self.env.ref('l10n_sa.sa_account_400070').id]
- ifrs_accounts = self.env['account.account'].browse([account_ref.get(id) for id in ifrs_account_ids])
- for account in ifrs_accounts:
- account.allowed_journal_ids = [(4, ifrs_journal_id.id, 0)]
- zakat_journal_id = self.env['account.journal'].search([('company_id', '=', company.id), ('code', '=', 'ZAKAT')], limit=1)
- if zakat_journal_id:
- zakat_account_ids = [self.env.ref('l10n_sa.sa_account_201019').id,
- self.env.ref('l10n_sa.sa_account_400072').id]
- zakat_accounts = self.env['account.account'].browse([account_ref.get(id) for id in zakat_account_ids])
- for account in zakat_accounts:
- account.allowed_journal_ids = [(4, zakat_journal_id.id, 0)]
- return account_ref, taxes_ref
+ @template('sa', 'account.account')
+ def _get_sa_account_account(self):
+ return {
+ "sa_account_100101": {'allowed_journal_ids': [Command.link('ifrs16')]},
+ "sa_account_100102": {'allowed_journal_ids': [Command.link('ifrs16')]},
+ "sa_account_400070": {'allowed_journal_ids': [Command.link('ifrs16')]},
+ "sa_account_201019": {'allowed_journal_ids': [Command.link('zakat')]},
+ "sa_account_400072": {'allowed_journal_ids': [Command.link('zakat')]},
+ }
diff --git a/addons/l10n_sg/migrations/2.1/post-migrate_update_tax.py b/addons/l10n_sg/migrations/2.1/post-migrate_update_tax.py
index b8e0213c44d..0e920fb0ede 100644
--- a/addons/l10n_sg/migrations/2.1/post-migrate_update_tax.py
+++ b/addons/l10n_sg/migrations/2.1/post-migrate_update_tax.py
@@ -1,6 +1,8 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.addons.account.models.chart_template import update_taxes_from_templates
+from odoo import api, SUPERUSER_ID
def migrate(cr, version):
- update_taxes_from_templates(cr, 'l10n_sg.sg_chart_template')
+ env = api.Environment(cr, SUPERUSER_ID, {})
+ for company in env['res.company'].search([('chart_template', '=', 'sg')]):
+ env['account.chart.template'].try_loading('sg', company)
diff --git a/addons/l10n_si/__init__.py b/addons/l10n_si/__init__.py
index 06ed8a1aaea..67dee8c60db 100644
--- a/addons/l10n_si/__init__.py
+++ b/addons/l10n_si/__init__.py
@@ -1,5 +1,2 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-def load_translations(env):
- env.ref('l10n_si.gd_chart').process_coa_translations()
diff --git a/addons/l10n_si/__manifest__.py b/addons/l10n_si/__manifest__.py
index 2257efb4e19..35a8c6b36eb 100644
--- a/addons/l10n_si/__manifest__.py
+++ b/addons/l10n_si/__manifest__.py
@@ -29,6 +29,5 @@
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_sk/__init__.py b/addons/l10n_sk/__init__.py
index 426636ef35e..67dee8c60db 100644
--- a/addons/l10n_sk/__init__.py
+++ b/addons/l10n_sk/__init__.py
@@ -1,5 +1,2 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-def load_translations(env):
- env.ref('l10n_sk.sk_chart_template').process_coa_translations()
diff --git a/addons/l10n_syscohada/__init__.py b/addons/l10n_syscohada/__init__.py
index e21e15c5037..e69de29bb2d 100644
--- a/addons/l10n_syscohada/__init__.py
+++ b/addons/l10n_syscohada/__init__.py
@@ -1,5 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-def load_translations(env):
- env.ref('l10n_syscohada.syscohada_chart_template').process_coa_translations()
diff --git a/addons/l10n_syscohada/__manifest__.py b/addons/l10n_syscohada/__manifest__.py
index 531b4f91dee..fe87de10607 100644
--- a/addons/l10n_syscohada/__manifest__.py
+++ b/addons/l10n_syscohada/__manifest__.py
@@ -36,6 +36,5 @@ Countries that use OHADA are the following:
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_tr/__init__.py b/addons/l10n_tr/__init__.py
index eeebf5aefa8..e69de29bb2d 100644
--- a/addons/l10n_tr/__init__.py
+++ b/addons/l10n_tr/__init__.py
@@ -1,5 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-def load_translations(env):
- env.ref('l10n_tr.l10n_tr_chart_template').process_coa_translations()
diff --git a/addons/l10n_tr/__manifest__.py b/addons/l10n_tr/__manifest__.py
index 7c11df8c8ee..e33d47f3306 100644
--- a/addons/l10n_tr/__manifest__.py
+++ b/addons/l10n_tr/__manifest__.py
@@ -35,6 +35,5 @@ Bu modül kurulduktan sonra, Muhasebe yapılandırma sihirbazı çalışır
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': 'load_translations',
'license': 'LGPL-3',
}
diff --git a/addons/l10n_tw/__init__.py b/addons/l10n_tw/__init__.py
index 0769d4efac5..e69de29bb2d 100644
--- a/addons/l10n_tw/__init__.py
+++ b/addons/l10n_tw/__init__.py
@@ -1,4 +0,0 @@
-
-
-def load_translations(env):
- env.ref("l10n_tw.l10n_tw_chart_template").process_coa_translations()
diff --git a/addons/l10n_tw/__manifest__.py b/addons/l10n_tw/__manifest__.py
index bf7cc57540b..e3872ad2558 100644
--- a/addons/l10n_tw/__manifest__.py
+++ b/addons/l10n_tw/__manifest__.py
@@ -28,6 +28,5 @@ This is the base module to manage the accounting chart for Taiwan in Odoo.
'demo/demo_company.xml',
],
"icon": "/base/static/img/country_flags/tw.png",
- "post_init_hook": "load_translations",
"license": "LGPL-3",
}
diff --git a/addons/l10n_us/__manifest__.py b/addons/l10n_us/__manifest__.py
index 564886171f2..7430f6495c4 100644
--- a/addons/l10n_us/__manifest__.py
+++ b/addons/l10n_us/__manifest__.py
@@ -9,7 +9,7 @@
United States - Chart of accounts.
==================================
""",
- 'depends': ['l10n_generic_coa'],
+ 'depends': ['account'],
'data': [
'data/res_company_data.xml',
'views/res_partner_bank_views.xml'
diff --git a/addons/l10n_uy/__init__.py b/addons/l10n_uy/__init__.py
index e19267f4ac1..67dee8c60db 100644
--- a/addons/l10n_uy/__init__.py
+++ b/addons/l10n_uy/__init__.py
@@ -1,5 +1,2 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-def load_translations(env):
- env.ref('l10n_uy.uy_chart_template').process_coa_translations()
diff --git a/addons/l10n_ve/__init__.py b/addons/l10n_ve/__init__.py
index ac52c95f9b6..67dee8c60db 100644
--- a/addons/l10n_ve/__init__.py
+++ b/addons/l10n_ve/__init__.py
@@ -1,5 +1,2 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-def load_translations(env):
- env.ref('l10n_ve.ve_chart_template_amd').process_coa_translations()
diff --git a/addons/l10n_vn/__init__.py b/addons/l10n_vn/__init__.py
index c0c5a487ff0..e69de29bb2d 100644
--- a/addons/l10n_vn/__init__.py
+++ b/addons/l10n_vn/__init__.py
@@ -1,8 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-# This module is Copyright (c) 2009-2013 General Solutions (http://gscom.vn) All Rights Reserved.
-
-
-def _post_init_hook(env):
- env.ref('l10n_vn.vn_template').process_coa_translations()
diff --git a/addons/l10n_vn/__manifest__.py b/addons/l10n_vn/__manifest__.py
index c9d7468fa68..4a13c5335fa 100644
--- a/addons/l10n_vn/__manifest__.py
+++ b/addons/l10n_vn/__manifest__.py
@@ -37,7 +37,5 @@ with Chart of account under Circular No. 200/2014/TT-BTC
'demo': [
'demo/demo_company.xml',
],
- 'post_init_hook': '_post_init_hook',
-
'license': 'LGPL-3',
}
diff --git a/addons/point_of_sale/models/chart_template.py b/addons/point_of_sale/models/chart_template.py
index 6feafdec556..80f0d2fb455 100644
--- a/addons/point_of_sale/models/chart_template.py
+++ b/addons/point_of_sale/models/chart_template.py
@@ -1,11 +1,11 @@
# -*- coding: utf-8 -*-
-from odoo import api, models
+from odoo import models
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
- def _load(self, company):
+ def _load(self, template_code=False, company=False, install_demo=True):
"""Remove the payment methods that are created for the company before installing the chart of accounts.
Keeping these existing pos.payment.method records interferes with the installation of chart of accounts
@@ -13,6 +13,6 @@ class AccountChartTemplate(models.Model):
deleted during the loading of chart of accounts.
"""
self.env['pos.payment.method'].search([('company_id', '=', company.id)]).unlink()
- result = super(AccountChartTemplate, self)._load(company)
+ result = super()._load(template_code, company, install_demo)
self.env['pos.config'].post_install_pos_localisation(companies=company)
return result
diff --git a/addons/point_of_sale/models/pos_config.py b/addons/point_of_sale/models/pos_config.py
index d36d470c871..1c278245df7 100644
--- a/addons/point_of_sale/models/pos_config.py
+++ b/addons/point_of_sale/models/pos_config.py
@@ -191,7 +191,7 @@ class PosConfig(models.Model):
@api.depends('company_id')
def _compute_company_has_template(self):
for config in self:
- if config.company_id.chart_template_id:
+ if config.company_id.chart_template:
config.company_has_template = True
else:
config.company_has_template = False
@@ -572,7 +572,7 @@ class PosConfig(models.Model):
self = self.sudo()
if not companies:
companies = self.env['res.company'].search([])
- for company in companies.filtered('chart_template_id'):
+ for company in companies.filtered('chart_template'):
pos_configs = self.search([('company_id', '=', company.id)])
pos_configs.setup_defaults(company)
diff --git a/addons/pos_restaurant/models/pos_config.py b/addons/pos_restaurant/models/pos_config.py
index 028898c99dd..dcb262de088 100644
--- a/addons/pos_restaurant/models/pos_config.py
+++ b/addons/pos_restaurant/models/pos_config.py
@@ -53,7 +53,7 @@ class PosConfig(models.Model):
@api.model
def add_cash_payment_method(self):
companies = self.env['res.company'].search([])
- for company in companies.filtered('chart_template_id'):
+ for company in companies.filtered('chart_template'):
pos_configs = self.search([('company_id', '=', company.id), ('module_pos_restaurant', '=', True)])
journal_counter = 2
for pos_config in pos_configs:
diff --git a/addons/repair/tests/test_repair.py b/addons/repair/tests/test_repair.py
index 5486e6d6312..08fd2aee461 100644
--- a/addons/repair/tests/test_repair.py
+++ b/addons/repair/tests/test_repair.py
@@ -289,8 +289,16 @@ class TestRepair(AccountTestInvoicingCommon):
company01 = self.env.company
company02 = self.env['res.company'].create({
'name': 'SuperCompany',
+ 'country_id': self.env.ref('base.us').id,
})
+ self.env["account.tax.group"].create([{
+ "name": "default",
+ "company_id": company01.id
+ }, {
+ "name": "default",
+ "company_id": company02.id
+ }])
tax01 = self.env["account.tax"].create({
"name": "C01 Tax",
"amount": "0.00",
diff --git a/addons/stock_account/__init__.py b/addons/stock_account/__init__.py
index 517ab2fa50e..a3bbb2dfc4b 100644
--- a/addons/stock_account/__init__.py
+++ b/addons/stock_account/__init__.py
@@ -5,61 +5,26 @@ from . import models
from . import report
from . import wizard
-from odoo import _
-
def _configure_journals(env):
- """Setting journal and property field (if needed)"""
-
# if we already have a coa installed, create journal and set property field
- company_ids = env['res.company'].search([('chart_template_id', '!=', False)])
- todo_list = [
- 'property_stock_account_input_categ_id',
- 'property_stock_account_output_categ_id',
- 'property_stock_valuation_account_id',
- ]
- # Property Stock Accounts
- for company_id in company_ids:
- # Check if property exists for stock account journal exists
- field = env['ir.model.fields']._get("product.category", "property_stock_journal")
- properties = env['ir.property'].sudo().search([
- ('fields_id', '=', field.id),
- ('company_id', '=', company_id.id)])
-
- # If not, check if you can find a journal that is already there with the same code, otherwise create one
- if not properties:
- journal_id = env['account.journal'].search([
- ('code', '=', 'STJ'),
- ('company_id', '=', company_id.id),
- ('type', '=', 'general')], limit=1).id
- if not journal_id:
- journal_id = env['account.journal'].create({
- 'name': _('Inventory Valuation'),
- 'type': 'general',
- 'code': 'STJ',
- 'company_id': company_id.id,
- 'show_on_dashboard': False
- }).id
- env['ir.property']._set_default(
- 'property_stock_journal',
- 'product.category',
- journal_id,
- company_id,
- )
-
- for name in todo_list:
- account = getattr(company_id, name)
- if account:
- env['ir.property']._set_default(
- name,
- 'product.category',
- account,
- company_id,
- )
- for name in todo_list:
- env['ir.property']._set_multi(
- name,
- 'product.category',
- {category.id: False for category in env['product.category'].search([])},
- True
- )
+ for company in env['res.company'].search([('chart_template', '!=', False)]):
+ ChartTemplate = env['account.chart.template'].with_company(company)
+ template_code = company.chart_template
+ full_data = ChartTemplate._get_chart_template_data(template_code)
+ data = {
+ 'account.journal': ChartTemplate._get_stock_account_journal(template_code),
+ 'template_data': {
+ fname: value
+ for fname, value in full_data['template_data'].items()
+ if fname in [
+ 'property_stock_journal',
+ 'property_stock_account_input_categ_id',
+ 'property_stock_account_output_categ_id',
+ 'property_stock_valuation_account_id',
+ ]
+ }
+ }
+ template_data = data.pop('template_data')
+ ChartTemplate._load_data(data)
+ ChartTemplate._post_load_data(template_code, company, template_data)
diff --git a/addons/stock_account/models/account_chart_template.py b/addons/stock_account/models/account_chart_template.py
index d5c8984955b..6fd1ecf7f05 100644
--- a/addons/stock_account/models/account_chart_template.py
+++ b/addons/stock_account/models/account_chart_template.py
@@ -1,35 +1,28 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import api, models, _
-
-import logging
-_logger = logging.getLogger(__name__)
+from odoo import models, _
+from odoo.addons.account.models.chart_template import template
-class AccountChartTemplate(models.Model):
+class AccountChartTemplate(models.AbstractModel):
_inherit = "account.chart.template"
- @api.model
- def generate_journals(self, acc_template_ref, company, journals_dict=None):
- journal_to_add = [{'name': _('Inventory Valuation'), 'type': 'general', 'code': 'STJ', 'favorite': False, 'sequence': 8}]
- return super(AccountChartTemplate, self).generate_journals(acc_template_ref=acc_template_ref, company=company, journals_dict=journal_to_add)
- def generate_properties(self, acc_template_ref, company, property_list=None):
- res = super(AccountChartTemplate, self).generate_properties(acc_template_ref=acc_template_ref, company=company)
- PropertyObj = self.env['ir.property'] # Property Stock Journal
- value = self.env['account.journal'].search([('company_id', '=', company.id), ('code', '=', 'STJ'), ('type', '=', 'general')], limit=1)
- if value:
- PropertyObj._set_default("property_stock_journal", "product.category", value, company)
+ @template(model='account.journal')
+ def _get_stock_account_journal(self, template_code):
+ return {
+ 'inventory_valuation': {
+ 'name': _('Inventory Valuation'),
+ 'code': 'STJ',
+ 'type': 'general',
+ 'sequence': 8,
+ 'show_on_dashboard': False,
+ },
+ }
- todo_list = [ # Property Stock Accounts
- 'property_stock_account_input_categ_id',
- 'property_stock_account_output_categ_id',
- 'property_stock_valuation_account_id',
- ]
- for field in todo_list:
- account = self[field]
- value = acc_template_ref[account].id if account else False
- PropertyObj._set_default(field, "product.category", value, company)
-
- return res
+ @template()
+ def _get_stock_template_data(self, template_code):
+ return {
+ 'property_stock_journal': 'inventory_valuation',
+ }
diff --git a/addons/stock_account/models/product.py b/addons/stock_account/models/product.py
index a8543b06af8..862f7c99fc0 100644
--- a/addons/stock_account/models/product.py
+++ b/addons/stock_account/models/product.py
@@ -760,8 +760,22 @@ class ProductCategory(models.Model):
@api.constrains('property_stock_valuation_account_id', 'property_stock_account_output_categ_id', 'property_stock_account_input_categ_id')
def _check_valuation_accouts(self):
- # Prevent to set the valuation account as the input or output account.
for category in self:
+ # "compute" properties in constraint because ORM doesn't support computed properties
+ category.property_stock_account_input_categ_id = category.property_valuation == 'real_time' and (
+ category.property_stock_account_input_categ_id
+ or self.env['ir.property']._get('property_stock_account_input_categ_id', 'product.category')
+ )
+ category.property_stock_account_output_categ_id = category.property_valuation == 'real_time' and (
+ category.property_stock_account_output_categ_id
+ or self.env['ir.property']._get('property_stock_account_output_categ_id', 'product.category')
+ )
+ category.property_stock_valuation_account_id = category.property_valuation == 'real_time' and (
+ category.property_stock_valuation_account_id
+ or self.env['ir.property']._get('property_stock_valuation_account_id', 'product.category')
+ )
+
+ # Prevent to set the valuation account as the input or output account.
valuation_account = category.property_stock_valuation_account_id
input_and_output_accounts = category.property_stock_account_input_categ_id | category.property_stock_account_output_categ_id
if valuation_account and valuation_account in input_and_output_accounts:
@@ -792,22 +806,6 @@ class ProductCategory(models.Model):
new_valuation = vals.get('property_valuation')
for product_category in self:
- property_stock_fields = ['property_stock_account_input_categ_id', 'property_stock_account_output_categ_id', 'property_stock_valuation_account_id']
- if 'property_valuation' in vals and vals['property_valuation'] == 'manual_periodic' and product_category.property_valuation != 'manual_periodic':
- for stock_property in property_stock_fields:
- vals[stock_property] = False
- elif 'property_valuation' in vals and vals['property_valuation'] == 'real_time' and product_category.property_valuation != 'real_time':
- company_id = self.env.company
- for stock_property in property_stock_fields:
- vals[stock_property] = vals.get(stock_property, False) or company_id[stock_property]
- elif product_category.property_valuation == 'manual_periodic':
- for stock_property in property_stock_fields:
- if stock_property in vals:
- vals.pop(stock_property)
- else:
- for stock_property in property_stock_fields:
- if stock_property in vals and vals[stock_property] is False:
- vals.pop(stock_property)
valuation_impacted = False
if new_cost_method and new_cost_method != product_category.property_cost_method:
valuation_impacted = True
@@ -848,31 +846,7 @@ class ProductCategory(models.Model):
account_moves._post()
return res
-
- @api.model_create_multi
- def create(self, vals_list):
- for vals in vals_list:
- if 'property_valuation' not in vals or vals['property_valuation'] == 'manual_periodic':
- vals['property_stock_account_input_categ_id'] = False
- vals['property_stock_account_output_categ_id'] = False
- vals['property_stock_valuation_account_id'] = False
- if 'property_valuation' in vals and vals['property_valuation'] == 'real_time':
- company_id = self.env.company
- vals['property_stock_account_input_categ_id'] = vals.get('property_stock_account_input_categ_id', False) or company_id.property_stock_account_input_categ_id
- vals['property_stock_account_output_categ_id'] = vals.get('property_stock_account_output_categ_id', False) or company_id.property_stock_account_output_categ_id
- vals['property_stock_valuation_account_id'] = vals.get('property_stock_valuation_account_id', False) or company_id.property_stock_valuation_account_id
-
- return super().create(vals_list)
-
@api.onchange('property_valuation')
def onchange_property_valuation(self):
# Remove or set the account stock properties if necessary
- if self.property_valuation == 'manual_periodic':
- self.property_stock_account_input_categ_id = False
- self.property_stock_account_output_categ_id = False
- self.property_stock_valuation_account_id = False
- if self.property_valuation == 'real_time':
- company_id = self.env.company
- self.property_stock_account_input_categ_id = company_id.property_stock_account_input_categ_id
- self.property_stock_account_output_categ_id = company_id.property_stock_account_output_categ_id
- self.property_stock_valuation_account_id = company_id.property_stock_valuation_account_id
+ self._check_valuation_accouts()
diff --git a/addons/stock_account/tests/test_stockvaluationlayer.py b/addons/stock_account/tests/test_stockvaluationlayer.py
index 7e946d59402..9c1ce8e0381 100644
--- a/addons/stock_account/tests/test_stockvaluationlayer.py
+++ b/addons/stock_account/tests/test_stockvaluationlayer.py
@@ -895,11 +895,6 @@ class TestStockValuationChangeValuation(TestStockValuationCommon):
'property_stock_valuation_account_id': cls.stock_valuation_account.id,
'property_stock_journal': cls.stock_journal.id,
})
- cls.env.company.write({
- 'property_stock_account_input_categ_id': cls.stock_input_account.id,
- 'property_stock_account_output_categ_id': cls.stock_output_account.id,
- 'property_stock_valuation_account_id': cls.stock_valuation_account.id,
- })
def test_standard_manual_to_auto_1(self):
self.product1.product_tmpl_id.categ_id.property_cost_method = 'standard'
diff --git a/addons/stock_landed_costs/tests/test_stock_landed_costs_purchase.py b/addons/stock_landed_costs/tests/test_stock_landed_costs_purchase.py
index 906f2225767..ca69084dc05 100644
--- a/addons/stock_landed_costs/tests/test_stock_landed_costs_purchase.py
+++ b/addons/stock_landed_costs/tests/test_stock_landed_costs_purchase.py
@@ -115,10 +115,8 @@ class TestLandedCosts(TestStockLandedCostsCommon):
])
def test_00_landed_costs_on_incoming_shipment_without_real_time(self):
- chart_of_accounts = self.env.company.chart_template_id
- generic_coa = self.env.ref('l10n_generic_coa.configurable_chart_template')
- if chart_of_accounts != generic_coa:
- raise unittest.SkipTest('Skip this test as it works only with %s (%s loaded)' % (generic_coa.name, chart_of_accounts.name))
+ if self.env.company.chart_template != 'generic_coa':
+ raise unittest.SkipTest('Skip this test as it works only with `generic_coa`')
# Test landed cost on incoming shipment
#
# (A) Purchase product
diff --git a/addons/website/tests/test_get_current_website.py b/addons/website/tests/test_get_current_website.py
index c23d5653902..6a84894ba69 100644
--- a/addons/website/tests/test_get_current_website.py
+++ b/addons/website/tests/test_get_current_website.py
@@ -8,18 +8,10 @@ from odoo.tests.common import TransactionCase
@tagged('post_install', '-at_install')
class TestGetCurrentWebsite(TransactionCase):
- def setUp(self):
- # Unlink unused website(s) to avoid messing with the expected results
- self.website = self.env.ref('website.default_website')
- for w in self.env['website'].search([('id', '!=', self.website.id)]):
- try:
- # Website are impossible to delete most often than not, as if
- # there is critical business data linked to it, it will prevent
- # the unlink. Could easily happen with a bridge module adding
- # some custom data.
- w.unlink()
- except Exception:
- pass
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.website = cls.env.ref('website.default_website')
def test_01_get_current_website_id(self):
"""Make sure `_get_current_website_id works`."""
diff --git a/addons/website_sale/tests/test_website_sale_pricelist.py b/addons/website_sale/tests/test_website_sale_pricelist.py
index c7d02a332e5..7cb12033b69 100644
--- a/addons/website_sale/tests/test_website_sale_pricelist.py
+++ b/addons/website_sale/tests/test_website_sale_pricelist.py
@@ -496,9 +496,6 @@ class TestWebsitePriceListMultiCompany(TransactionCaseWithUserDemo):
Website = self.env['website']
self.website = self.env.ref('website.default_website')
self.website.company_id = self.company2
- # Delete unused website, it will make PL manipulation easier, avoiding
- # UserError being thrown when a website wouldn't have any PL left.
- Website.search([('id', '!=', self.website.id)]).unlink()
self.website2 = Website.create({
'name': 'Website 2',
'company_id': self.company1.id,