odoo/addons/l10n_es/migrations/8.0.5.0/pre-migration.py

449 lines
19 KiB
Python

# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2015 Serv. Tecnol. Avanz. (<http://www.serviciosbaeza.com>)
# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
# FactorLibre (<http://factorlibre.com>)
# Hugo santos <hugo.santos@factorlibre.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
__name__ = u"Renombrar impuestos, códigos de impuestos y posiciones fiscales"
def rename_fiscal_positions(cr):
cr.execute("""
UPDATE account_fiscal_position
SET name='Régimen Extracomunitario / Canarias, Ceuta y Melilla'
WHERE name='Régimen Extracomunitario'
""")
def rename_tax_codes(cr):
tax_code_mapping = [
# IVA devengado. Base
{'previous_code': '--',
'previous_name': 'IVA devengado. Base imponible', 'code': 'IDBI'},
{'previous_code': '--',
'previous_name': 'IVA Devengado Base Imponible', 'code': 'IDBI'},
{'previous_code': '[01]',
'code': 'RGIDBI4'},
{'previous_code': '[04]',
'previous_name': 'Régimen general IVA devengado. Base imponible 10%',
'code': 'RGIDBI10'},
{'previous_code': '[04]',
'previous_name': 'Régimen general IVA Devengado. Base Imponible 10%',
'code': 'RGIDBI10'},
{'previous_code': '[07]',
'previous_name': 'Régimen general IVA devengado. Base imponible 21%',
'code': 'RGIDBI21'},
{'previous_code': '[07]',
'previous_name': 'Régimen general IVA Devengado. Base Imponible 21%',
'code': 'RGIDBI21'},
# IVA devengado. Cuota
{'previous_code': '[21]', 'code': 'ITDC'},
{'previous_code': '[03]', 'code': 'RGIDC4'},
{'previous_code': '[06]',
'previous_name': 'Régimen general IVA devengado. Cuota 10%',
'code': 'RGIDC10'},
{'previous_code': '[06]',
'previous_name': 'Régimen general IVA Devengado. Cuota 10%',
'code': 'RGIDC10'},
{'previous_code': '[09]',
'previous_name': 'Régimen general IVA devengado. Cuota 21%',
'code': 'RGIDC21'},
{'previous_code': '[09]',
'previous_name': 'Régimen general IVA Devengado. Cuota 21%',
'code': 'RGIDC21'},
# Adquisiciones intracomunitarias
{'previous_code': '[19]', 'code': 'AIDBYSBI'},
{'previous_code': '[20]', 'code': 'AIDBYSC'},
# IVA deducible. Base Imponible
{'previous_code': '--',
'previous_name': 'IVA deducible. Base imponible', 'code': 'ISBI'},
{'previous_code': '--',
'previous_name': 'IVA Deducible Base Imponible', 'code': 'ISBI'},
{'previous_code': '--',
'previous_name': 'Base de compensaciones Régimen Especial A., G. y'
' P. 12%', 'code': 'CREAGYPBI12'},
# Base operaciones interiores corrientes
{'previous_code': '[22]', 'code': 'OICBI'},
{'previous_code': '--',
'previous_name': 'Base operaciones interiores corrientes (4%)',
'code': 'OICBI4'},
{'previous_code': '--',
'previous_name': 'Base operaciones interiores corrientes (10%)',
'code': 'OICBI10'},
{'previous_code': '--',
'previous_name': 'Base operaciones interiores corrientes (21%)',
'code': 'OICBI21'},
# Base operaciones interiores bienes de inversión
{'previous_code': '[24]', 'code': 'OIBIBI'},
{'previous_code': '--',
'previous_name': 'Base operaciones interiores bienes inversión (4%)',
'code': 'OIBIBI4'},
{'previous_code': '--',
'previous_name': 'Base operaciones interiores bienes inversión (10%)',
'code': 'OIBIBI10'},
{'previous_code': '--',
'previous_name': 'Base operaciones interiores bienes inversión (21%)',
'code': 'OIBIBI21'},
# Base importaciones de bienes corrientes
{'previous_code': '[26]', 'code': 'IBCBI'},
{'previous_code': '--',
'previous_name': 'Base importaciones bienes y servicios corrientes'
' (4%)', 'code': 'IBYSCBI4'},
{'previous_code': '--',
'previous_name': 'Base importaciones bienes y servicios corrientes'
' (10%)', 'code': 'IBYSCBI10'},
{'previous_code': '--',
'previous_name': 'Base importaciones bienes y servicios corrientes'
' (21%)', 'code': 'IBYSCBI21'},
# Base importaciones de bienes de inversión
{'previous_code': '[28]', 'code': 'IBIBI'},
{'previous_code': '--',
'previous_name': 'Base importaciones bienes inversión (4%)',
'code': 'IBIBI4'},
{'previous_code': '--',
'previous_name': 'Base importaciones bienes inversión (10%)',
'code': 'IBIBI10'},
{'previous_code': '--',
'previous_name': 'Base importaciones bienes inversión (21%)',
'code': 'IBIBI21'},
# Adquisiciones intracomunitarias de bienes corrientes
{'previous_code': '[30]', 'code': 'AIBYSCBI'},
{'previous_code': '--',
'previous_name': 'Base adquisiciones intracomunitarias bienes y'
' serv. corr. (4%)', 'code': 'AIBYSCBI4'},
{'previous_code': '--',
'previous_name': 'Base adquisiciones intracomunitarias bienes y'
' serv. corr. (10%)', 'code': 'AIBYSCBI10'},
{'previous_code': '--',
'previous_name': 'Base adquisiciones intracomunitarias bienes y'
' serv. corr. (21%)', 'code': 'AIBYSCBI21'},
# Adquisiciones intracomunitarias de bienes de inversión
{'previous_code': '[32]', 'code': 'AIBIBI'},
{'previous_code': '--',
'previous_name': 'Base adquisiciones intracomunitarias bienes'
' inversión (4%)', 'code': 'AIBIBI4'},
{'previous_code': '--',
'previous_name': 'Base adquisiciones intracomunitarias bienes'
' inversión (10%)', 'code': 'AIBIBI10'},
{'previous_code': '--',
'previous_name': 'Base adquisiciones intracomunitarias bienes'
' inversión (21%)', 'code': 'AIBIBI21'},
# Base recargo de equivalencia
{'previous_code': '--',
'previous_name': 'Recargo equivalencia ded. Base imponible 0.5%',
'code': 'REDBI05'},
{'previous_code': '--',
'previous_name': 'Recargo equivalencia ded. Base imponible 1.4%',
'code': 'REDBI014'},
{'previous_code': '--',
'previous_name': 'Recargo equivalencia ded. Base imponible 5.2%',
'code': 'REDBI52'},
# Iva deducible cuotas
{'previous_code': '[37]', 'code': 'ITADC'},
{'previous_code': '34', 'code': 'CREAGYP12'},
# Cuotas operaciones interiores corrientes
{'previous_code': '[23]', 'code': 'SOICC'},
{'previous_code': '--',
'previous_name': 'Cuotas soportadas operaciones interiores corrientes'
' (4%)', 'code': 'SOICC4'},
{'previous_code': '--',
'previous_name': 'Cuotas soportadas operaciones interiores corrientes'
' (10%)', 'code': 'SOICC10'},
{'previous_code': '--',
'previous_name': 'Cuotas soportadas operaciones interiores corrientes'
' (21%)', 'code': 'SOICC21'},
# Cuotas operaciones interiores con bienes de inversión
{'previous_code': '[25]', 'code': 'SOIBIC'},
{'previous_code': '--',
'previous_name': 'Cuotas soportadas operaciones interiores bienes'
' inversión (4%)', 'code': 'SOIBIC4'},
{'previous_code': '--',
'previous_name': 'Cuotas soportadas operaciones interiores bienes'
' inversión (10%)', 'code': 'SOIBIC10'},
{'previous_code': '--',
'previous_name': 'Cuotas soportadas operaciones interiores bienes'
' inversión (21%)', 'code': 'SOIBIC21'},
# Cuotas devengadas en importaciones de bienes y serv. corr.
{'previous_code': '[27]', 'code': 'DIBCC'},
{'previous_code': '--',
'previous_name': 'Cuotas devengadas importaciones bienes y serv.'
' corr. (4%)', 'code': 'DIBYSCC4'},
{'previous_code': '--',
'previous_name': 'Cuotas devengadas importaciones bienes y serv.'
' corr. (10%)', 'code': 'DIBYSCC10'},
{'previous_code': '--',
'previous_name': 'Cuotas devengadas importaciones bienes y serv.'
' corr. (21%)', 'code': 'DIBYSCC21'},
# Cuotas devengadas en importaciones de bienes de inversión
{'previous_code': '[29]', 'code': 'DIBIC'},
{'previous_code': '--',
'previous_name': 'Cuotas devengadas importaciones bienes inversión'
' (4%)', 'code': 'DIBIC4'},
{'previous_code': '--',
'previous_name': 'Cuotas devengadas importaciones bienes inversión'
' (10%)', 'code': 'DIBIC10'},
{'previous_code': '--',
'previous_name': 'Cuotas devengadas importaciones bienes inversión'
' (21%)', 'code': 'DIBIC21'},
# Adquisiciones intracomunitarias de bienes corrientes - Cuota
{'previous_code': '[31]', 'code': 'AIBYSCC'},
{'previous_code': '--',
'previous_name': 'En adquisiciones intracomunitarias bienes y serv.'
' corr. (4%)', 'code': 'AIBYSCC4'},
{'previous_code': '--',
'previous_name': 'En adquisiciones intracomunitarias bienes y serv.'
' corr. (10%)', 'code': 'AIBYSCC10'},
{'previous_code': '--',
'previous_name': 'En adquisiciones intracomunitarias bienes y serv.'
' corr. (21%)', 'code': 'AIBYSCC21'},
# Adquisiciones intracomunitarias bienes de inversión - Cuota
{'previous_code': '[33]', 'code': 'AIBIC'},
{'previous_code': '--',
'previous_name': 'En adquisiciones intracomunitarias bienes inversión'
' (4%)', 'code': 'AIBIC4'},
{'previous_code': '--',
'previous_name': 'En adquisiciones intracomunitarias bienes inversión'
' (10%)', 'code': 'AIBIC10'},
{'previous_code': '--',
'previous_name': 'En adquisiciones intracomunitarias bienes inversión'
' (21%)', 'code': 'AIBIC21'},
# Otros códigos de impuestos
{'previous_code': '[42]', 'code': 'EIDBYS'},
{'previous_code': '[43]', 'code': 'EYOA'},
# Recargo equivalencia Cuota
{'previous_code': '[12]',
'previous_name': 'Recargo equivalencia. Cuota 0.5%',
'code': 'REC05'},
{'previous_code': '[15]',
'previous_name': 'Recargo equivalencia. Cuota 1.4%',
'code': 'REC014'},
{'previous_code': '[18]',
'previous_name': 'Recargo equivalencia. Cuota 5.2%',
'code': 'REC52'},
# Recargo equivalencia ded. Cuota
{'previous_code': '[12]',
'previous_name': 'Recargo equivalencia ded. Cuota 0.5%',
'code': 'REDC05'},
{'previous_code': '[15]',
'previous_name': 'Recargo equivalencia ded. Cuota 1.4%',
'code': 'REDC014'},
{'previous_code': '[18]',
'previous_name': 'Recargo equivalencia ded. Cuota 5.2%',
'code': 'REDC52'},
# Recargo equivalencia base imponible
{'previous_code': '[10]', 'code': 'REBI05'},
{'previous_code': '[13]', 'code': 'REBI014'},
{'previous_code': '[16]', 'code': 'REBI52'},
# IRPF Retenciones a cuenta
{'previous_code': 'B.IRPF AC', 'code': 'IRACBI'},
{'previous_code': 'B.IRPF1 AC', 'code': 'IRACBI1'},
{'previous_code': 'B.IRPF2 AC', 'code': 'IRACBI2'},
{'previous_code': 'B.IRPF7 AC', 'code': 'IRACBI7'},
{'previous_code': 'B.IRPF9 AC', 'code': 'IRACBI9'},
{'previous_code': 'B.IRPF15 AC', 'code': 'IRACBI15'},
{'previous_code': 'B.IRPF20 AC', 'code': 'IRACBI20'},
{'previous_code': 'B.IRPF21 AC', 'code': 'IRACBI21'},
# IRPF total retenciones a cuenta
{'previous_code': 'IRPF AC', 'code': 'ITRACC'},
{'previous_code': 'IRPF1 AC', 'code': 'IRACC1'},
{'previous_code': 'IRPF2 AC', 'code': 'IRACC2'},
{'previous_code': 'IRPF7 AC', 'code': 'IRACC7'},
{'previous_code': 'IRPF9 AC', 'code': 'IRACC9'},
{'previous_code': 'IRPF15 AC', 'code': 'IRACC15'},
{'previous_code': 'IRPF20 AC', 'code': 'IRACC20'},
{'previous_code': 'IRPF21 AC', 'code': 'IRACC21'},
# IRPF retenciones practicadas. base imponible
{'previous_code': 'B.IRPF', 'code': 'IRPBI'},
{'previous_code': 'B.IRPF1', 'code': 'IRPBI1'},
{'previous_code': 'B.IRPF2', 'code': 'IRPBI2'},
{'previous_code': 'B.IRPF7', 'code': 'IRPBI7'},
{'previous_code': 'B.IRPF9', 'code': 'IRPBI9'},
{'previous_code': 'B.IRPF15', 'code': 'IRPBI15'},
{'previous_code': 'B.IRPF20', 'code': 'IRPBI20'},
{'previous_code': 'B.IRPF21', 'code': 'IRPBI21'},
# IRPF retenciones practicadas. total cuota
{'previous_code': 'IRPF', 'code': 'ITRPC'},
{'previous_code': 'IRPF1', 'code': 'IRPC1'},
{'previous_code': 'IRPF2', 'code': 'IRPC2'},
{'previous_code': 'IRPF7', 'code': 'IRPC7'},
{'previous_code': 'IRPF9', 'code': 'IRPC9'},
{'previous_code': 'IRPF15', 'code': 'IRPC15'},
{'previous_code': 'IRPF20', 'code': 'IRPC20'},
{'previous_code': 'IRPF21', 'code': 'IRPC21'},
# IVA exento
{'previous_code': '--',
'previous_name': 'Base adquisiciones exentas',
'code': 'AEBI'},
{'previous_code': '--',
'previous_name': 'Base ventas exentas',
'code': 'OESDAD'},
]
for mapping in tax_code_mapping:
sql = """
UPDATE account_tax_code
SET code=%s
WHERE code=%s"""
if mapping.get('previous_name'):
sql += " AND name=%s"
cr.execute(sql, (mapping['code'], mapping['previous_code'],
mapping['previous_name']))
else:
cr.execute(sql, (mapping['code'], mapping['previous_code']))
def rename_taxes(cr):
tax_mapping = {
'S_IVA4': 'S_IVA4B',
'S_IVA10': 'S_IVA10B',
'S_IVA21': 'S_IVA21B',
'P_IVA21_IC_SV': 'P_IVA21_SP_IN',
'P_IVA21_IC_SV_1': 'P_IVA21_SP_IN_1',
'P_IVA21_IC_SV_2': 'P_IVA21_SP_IN_2',
}
for old_description, new_description in tax_mapping.iteritems():
sql = """
UPDATE account_tax
SET description=%s
WHERE description=%s"""
cr.execute(sql, (new_description, old_description))
def change_refunds_tax_codes(cr):
"""Cambia los códigos de impuestos de los abonos posteriores a 2014 para
que vayan a la parte de modificación de bases/cuotas en lugar de minorar
las bases/cuotas normales.
"""
refund_tax_codes = {
# IVA repercutido
'RGIDBI4': 'MBYCRBI',
'RGIDBI10': 'MBYCRBI',
'RGIDBI21': 'MBYCRBI',
'RGIDC4': 'MBYCRC',
'RGIDC10': 'MBYCRC',
'RGIDC21': 'MBYCRC',
# Recargo equivalencia compras
'REDBI05': 'RDDSBI',
'REDBI014': 'RDDSBI',
'REDBI52': 'RDDSBI',
'REDC05': 'RDDSC',
'REDC014': 'RDDSC',
'REDC52': 'RDDSC',
# Recargo equivalencia ventas
'REBI05': 'MBYCDRDERBI',
'REBI014': 'MBYCDRDERBI',
'REBI52': 'MBYCDRDERBI',
'REC05': 'MBYCDRDERC',
'REC014': 'MBYCDRDERC',
'REC52': 'MBYCDRDERC',
# IVA soportado
'OICBI4': 'RDDSBI',
'OIBIBI4': 'RDDSBI',
'OICBI10': 'RDDSBI',
'OIBIBI10': 'RDDSBI',
'OICBI21': 'RDDSBI',
'OIBIBI21': 'RDDSBI',
'SOICC4': 'RDDSC',
'SOIBIC4': 'RDDSC',
'SOICC10': 'RDDSC',
'SOIBIC10': 'RDDSC',
'SOICC21': 'RDDSC',
'SOIBIC21': 'RDDSC',
# Importaciones
'IBYSCBI4': 'RDDSBI',
'IBYSCBI10': 'RDDSBI',
'IBYSCBI21': 'RDDSBI',
'IBIBI4': 'RDDSBI',
'IBIBI10': 'RDDSBI',
'IBIBI21': 'RDDSBI',
'DIBYSCC4': 'RDDSC',
'DIBYSCC10': 'RDDSC',
'DIBYSCC21': 'RDDSC',
'DIBIC4': 'RDDSC',
'DIBIC10': 'RDDSC',
'DIBIC21': 'RDDSC',
# Intracomunitario
'AIBYSCBI4': 'RDDSBI',
'AIBYSCBI10': 'RDDSBI',
'AIBYSCBI21': 'RDDSBI',
'AISCBI4': 'RDDSBI',
'AISCBI10': 'RDDSBI',
'AISCBI21': 'RDDSBI',
'AIBIBI4': 'RDDSBI',
'AIBIBI10': 'RDDSBI',
'AIBIBI21': 'RDDSBI',
'AIBYSCC4': 'RDDSC',
'AIBYSCC10': 'RDDSC',
'AIBYSCC21': 'RDDSC',
'AISCC4': 'RDDSC',
'AISCC10': 'RDDSC',
'AISCC21': 'RDDSC',
'AIBIC4': 'RDDSC',
'AIBIC10': 'RDDSC',
'AIBIC21': 'RDDSC',
'AIDBYSBI': 'MBYCRBI',
'AIBBI': 'MBYCRBI',
'AIBIBIA': 'MBYCRBI',
'OCIDSPEAIBI': 'MBYCRBI',
'AISBI': 'MBYCRBI',
'AIDBYSC': 'MBYCRC',
'AIBC': 'MBYCRC',
'AIBICA': 'MBYCRC',
'OOCIDSPEAIC': 'MBYCRC',
'AISC': 'MBYCRC',
}
cr.execute("SELECT id FROM res_company")
for record in cr.fetchall():
company_id = record[0]
for old_tax_code, new_tax_code in refund_tax_codes.iteritems():
cr.execute(
"SELECT id FROM account_tax_code WHERE code=%s",
(new_tax_code, ))
new_tax_code_id = cr.fetchone()
if not new_tax_code_id:
# Create fake tax code
cr.execute(
"""
INSERT INTO account_tax_code
(code, name, sign, company_id)
VALUES (%s, %s, %s, %s)
RETURNING id
""", (new_tax_code, new_tax_code, 1.0, company_id))
new_tax_code_id = cr.fetchone()[0]
cr.execute(
"""
UPDATE account_move_line aml
SET tax_code_id=%s
FROM account_tax_code atc
WHERE aml.tax_code_id=atc.id
AND atc.code=%s
AND aml.tax_amount < 0
AND aml.date>='2014-01-01'
AND aml.company_id=%s
""", (new_tax_code_id, old_tax_code, company_id))
def migrate(cr, version):
if not version:
return
rename_fiscal_positions(cr)
rename_tax_codes(cr)
rename_taxes(cr)
change_refunds_tax_codes(cr)