Odoo18-Base/addons/l10n_ec/models/account_chart_template.py
2025-03-10 11:12:23 +07:00

77 lines
4.3 KiB
Python

# -*- coding: utf-8 -*-
# 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_account_from_template(self, companies, template):
if template:
return self.env['account.account'].search([('company_id', 'in', companies.ids), ('code', '=', template.code)])
return self.env['account.account']
def _load(self, company):
# EXTENDS account to setup taxes groups accounts configuration
res = super()._load(company)
self._l10n_ec_configure_ecuadorian_tax_groups_accounts(company)
return res
def _l10n_ec_configure_ecuadorian_tax_groups_accounts(self, companies):
'''
Set tax groups accounts for automatic closing entry in 103 and 104 reports
The structure of the variable with the list of accounts by tax group:
('<tax_group_record_id>', '<payable_account_code>', '<receivable_account_code>')
'''
_TAX_GROUPS_ACCOUNTS_LIST = [
('tax_group_vat_05', '21070102', '11050202'),
('tax_group_vat_08', '21070102', '11050202'),
('tax_group_vat_12', '21070102', '11050202'),
('tax_group_vat_13', '21070102', '11050202'),
('tax_group_vat14', '21070102', '11050202'),
('tax_group_vat_15', '21070102', '11050202'),
('tax_group_vat0', '21070102', '11050202'),
('tax_group_vat_not_charged', '21070102', '11050202'),
('tax_group_vat_exempt', '21070102', '11050202'),
('tax_group_ice', '21070104', '21070104'),
('tax_group_irbpnr', '21070105', '21070105'),
('tax_group_withhold_vat_sale', '21070102', '11050203'),
('tax_group_withhold_vat_purchase', '21070102', '11050203'),
('tax_group_withhold_income_sale', '21070103', '11050201'),
('tax_group_withhold_income_purchase', '21070103', '11050201'),
('tax_group_outflows', '21070106', '11050205'),
('tax_group_others', '21070106', '11050205'),
]
for tax_group_xml_id, payable_account_code, receivable_account_code in _TAX_GROUPS_ACCOUNTS_LIST:
for company in companies.filtered(lambda company: company.account_fiscal_country_id.code == 'EC' and
company.chart_template_id == self.env.ref('l10n_ec.l10n_ec_ifrs')):
# search accounts
AccountObject = self.env['account.account']
company_domain = [('company_id', '=', company.id)]
payable_account_id = AccountObject.search([('code', '=', payable_account_code)] + company_domain)
receivable_account_id = AccountObject.search([('code', '=', receivable_account_code)] + company_domain)
# set accounts in tax groups by company
self.env.ref(f'l10n_ec.{tax_group_xml_id}').with_company(company).property_tax_payable_account_id = payable_account_id
self.env.ref(f'l10n_ec.{tax_group_xml_id}').with_company(company).property_tax_receivable_account_id = receivable_account_id
def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
res = super()._prepare_all_journals(acc_template_ref, company, journals_dict=journals_dict)
if company.account_fiscal_country_id.code == 'EC':
for journal_values in res:
if journal_values.get('type') == 'sale':
journal_values.update({
'name': f"001-001 {journal_values['name']}",
'l10n_ec_entity': '001',
'l10n_ec_emission': '001',
'l10n_ec_emission_address_id': company.partner_id.id,
})
sale_account = acc_template_ref.get(self.env.ref('l10n_ec.ec410101', raise_if_not_found=False))
if sale_account:
journal_values['default_account_id'] = sale_account.id
if journal_values.get('type') == 'purchase':
purchase_account = acc_template_ref.get(self.env.ref('l10n_ec.ec52022816', raise_if_not_found=False))
if purchase_account:
journal_values['default_account_id'] = purchase_account.id
return res