60 lines
3.0 KiB
Python
60 lines
3.0 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from . import models
|
|
from . import wizard
|
|
|
|
from odoo import api, SUPERUSER_ID
|
|
import logging
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
def _l10n_it_edi_doi_post_init(cr, registry):
|
|
""" Update existing companies that have the Italian Chart of Accounts set """
|
|
env = api.Environment(cr, SUPERUSER_ID, {})
|
|
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)]):
|
|
_logger.info("Company %s already has the Italian localization installed, updating...", company.name)
|
|
|
|
# Create the declaration of intent fiscal position
|
|
doi_fp_template = env.ref('l10n_it_edi_doi.declaration_of_intent_fiscal_position')
|
|
doi_fp_vals = ((doi_fp_template, chart_template._get_fp_vals(company, doi_fp_template)),)
|
|
doi_fp = chart_template._create_records_with_xmlid('account.fiscal.position', doi_fp_vals, company)
|
|
|
|
# Create the declaration of intent tax
|
|
doi_tax_template = env.ref('l10n_it_edi_doi.00di')
|
|
tax_template_ref = doi_tax_template._generate_tax(company)['tax_template_to_tax']
|
|
doi_tax = tax_template_ref[doi_tax_template]
|
|
doi_tax.write({
|
|
'l10n_it_has_exoneration': True,
|
|
'l10n_it_kind_exoneration': 'N3.5',
|
|
'l10n_it_law_reference': 'art. 8, c. 1, lett. c) D.P.R. 633/1972',
|
|
})
|
|
|
|
# Create the fiscal position tax mappings
|
|
# Add all the taxes needed for the fiscal position to `tax_template_ref`
|
|
for tax_template_id, external_xml_id in doi_fp_template.tax_ids.tax_src_id.get_external_id().items():
|
|
tax_template = env['account.tax.template'].browse(tax_template_id)
|
|
module, xml_id = external_xml_id.split('.')
|
|
tax = env.ref('%s.%s_%s' % (module, company.id, xml_id), raise_if_not_found=False)
|
|
if tax:
|
|
tax_template_ref[tax_template] = tax
|
|
# Gather all the info for the tax mappings
|
|
doi_fp_tax_template_vals = []
|
|
for tax in doi_fp_template.tax_ids:
|
|
tax_src_id = tax_template_ref.get(tax.tax_src_id)
|
|
tax_dest_id = tax_template_ref.get(tax.tax_dest_id)
|
|
if tax_src_id is None or tax_dest_id is None:
|
|
continue
|
|
doi_fp_tax_template_vals.append((tax, {
|
|
'tax_src_id': tax_src_id.id,
|
|
'tax_dest_id': tax_dest_id.id or False,
|
|
'position_id': doi_fp.id,
|
|
}))
|
|
chart_template._create_records_with_xmlid('account.fiscal.position.tax', doi_fp_tax_template_vals, company)
|
|
|
|
# Set the info on the company
|
|
company.l10n_it_edi_doi_tax_id = doi_tax
|
|
company.l10n_it_edi_doi_fiscal_position_id = doi_fp
|