Odoo18-Base/addons/l10n_ec/migrations/3.4/post-migration.py
2025-03-10 11:12:23 +07:00

74 lines
3.4 KiB
Python

# -*- coding: utf-8 -*-
from odoo import api, SUPERUSER_ID
def update_withhold_type(env):
# reclassifies withhold taxes into independent tax groups for sales and purchases
env.cr.execute('''
UPDATE account_tax
SET tax_group_id=t.id FROM (SELECT id FROM account_tax_group WHERE l10n_ec_type='withhold_vat_sale') AS t
WHERE account_tax.id IN (SELECT id FROM account_tax WHERE tax_group_id IN (SELECT id FROM account_tax_group WHERE l10n_ec_type='withhold_vat') AND type_tax_use='sale')
''')
env.cr.execute('''
UPDATE account_tax
SET tax_group_id=t.id FROM (SELECT id FROM account_tax_group WHERE l10n_ec_type='withhold_vat_purchase') AS t
WHERE account_tax.id IN (SELECT id FROM account_tax WHERE tax_group_id IN (SELECT id FROM account_tax_group WHERE l10n_ec_type='withhold_vat') AND type_tax_use='purchase')
''')
env.cr.execute('''
UPDATE account_tax
SET tax_group_id=t.id FROM (SELECT id FROM account_tax_group WHERE l10n_ec_type='withhold_income_sale') AS t
WHERE account_tax.id IN (SELECT id FROM account_tax WHERE tax_group_id IN (SELECT id FROM account_tax_group WHERE l10n_ec_type='withhold_income_tax') AND type_tax_use='sale')
''')
env.cr.execute('''
UPDATE account_tax
SET tax_group_id=t.id FROM (SELECT id FROM account_tax_group WHERE l10n_ec_type='withhold_income_purchase') AS t
WHERE account_tax.id IN (SELECT id FROM account_tax WHERE tax_group_id IN (SELECT id FROM account_tax_group WHERE l10n_ec_type='withhold_income_tax') AND type_tax_use='purchase')
''')
def update_type_tax_use(env):
# sets type_tax_use = none for withholding taxes
env.cr.execute('''
UPDATE account_tax
SET type_tax_use = 'none'
WHERE tax_group_id IN (SELECT id FROM account_tax_group WHERE l10n_ec_type IN ('withhold_income_purchase','withhold_vat_purchase','withhold_income_sale','withhold_vat_sale'))
''')
def update_tax_repartition_line_vat_withhold(env):
# For tax repartition lines in vat withhold taxes, replace factor_percent=12% with factor_percent=100%
env.cr.execute('''
--for invoice_tax_id
UPDATE account_tax_repartition_line
SET factor_percent = 100
WHERE factor_percent = 12
AND repartition_type = 'tax'
AND invoice_tax_id in (
SELECT id
FROM account_tax
WHERE country_id = (SELECT id FROM res_country WHERE code = 'EC' LIMIT 1) --Country is Ecuador)
AND tax_group_id IN (
SELECT id FROM account_tax_group WHERE l10n_ec_type IN ('withhold_vat_sale', 'withhold_vat_purchase')
)
)
''')
env.cr.execute('''
--for refund_tax_id
UPDATE account_tax_repartition_line
SET factor_percent = 100
WHERE factor_percent = 12
AND repartition_type = 'tax'
AND refund_tax_id in (
SELECT id
FROM account_tax
WHERE country_id = (SELECT id FROM res_country WHERE code = 'EC' LIMIT 1) --Country is Ecuador)
AND tax_group_id IN (
SELECT id FROM account_tax_group WHERE l10n_ec_type IN ('withhold_vat_sale','withhold_vat_purchase')
)
)
''')
def migrate(cr, version):
env = api.Environment(cr, SUPERUSER_ID, {})
update_withhold_type(env)
update_type_tax_use(env)
update_tax_repartition_line_vat_withhold(env)