from trytond.model import fields from trytond.pool import PoolMeta from trytond.transaction import Transaction from sql import Null, Table TAX_KIND = [ ('', ''), ('itbis', 'ITBIS'), ('itbis_withholding', 'Retención ITBIS'), ('itbis_withholding_acquirer', 'Retención ITBIS Adquirentes'), ('isr_withholding', 'Retención ISR'), ('isc', 'ISC — Selectivo al Consumo'), ('cdt', 'CDT INDOTEL'), ('tip', 'Propina Legal'), ('others', 'Other Taxes'), ] MODEL_DATA_RENAMES = { 'do_tax_group_otros': 'do_tax_group_others', 'do_tc_otros': 'do_tc_others', 'do_tc_otros_propina': 'do_tc_others_tip', 'do_tc_otros_cheques': 'do_tc_others_checks', 'do_tc_otros_activos': 'do_tc_others_assets', 'do_tc_otros_iti': 'do_tc_others_iti', } ROOT_TAX_CODE_CHILDREN = [ 'ITBIS — Balance Neto (Débito − Crédito)', 'ISR - Retenciones', 'ISR - Retenciones en la Fuente', 'ISC - Impuesto Selectivo al Consumo', 'CDT INDOTEL 2% (Ley 153-98)', 'Otros Impuestos y Contribuciones', ] def migrate_model_data_names(cursor, module_name): if module_name != 'account_do': return model_data = Table('ir_model_data') for old, new in MODEL_DATA_RENAMES.items(): cursor.execute(*model_data.update( [model_data.fs_id], [new], where=(model_data.module == module_name) & (model_data.fs_id == old))) class TaxTemplate(metaclass=PoolMeta): __name__ = 'account.tax.template' tax_kind = fields.Selection(TAX_KIND, 'Tax Kind', sort=False) @classmethod def __register__(cls, module_name): cursor = Transaction().connection.cursor() table = cls.__table__() super().__register__(module_name) migrate_model_data_names(cursor, module_name) cursor.execute(*table.update( [table.tax_kind], ['others'], where=table.tax_kind == 'otros')) def _get_tax_value(self, tax=None): values = super()._get_tax_value(tax=tax) if not tax or tax.tax_kind != self.tax_kind: values['tax_kind'] = self.tax_kind return values class Tax(metaclass=PoolMeta): __name__ = 'account.tax' tax_kind = fields.Selection(TAX_KIND, 'Tax Kind', sort=False) @classmethod def __register__(cls, module_name): cursor = Transaction().connection.cursor() table = cls.__table__() super().__register__(module_name) cursor.execute(*table.update( [table.tax_kind], ['others'], where=table.tax_kind == 'otros')) class TaxCode(metaclass=PoolMeta): __name__ = 'account.tax.code' @classmethod def __register__(cls, module_name): cursor = Transaction().connection.cursor() super().__register__(module_name) if module_name != 'account_do': return table = cls.__table__() cursor.execute(*table.update( [table.name], ['ISR - Retenciones'], where=table.name == 'ISR - Retenciones en la Fuente')) cursor.execute(*table.update( [table.parent], [None], where=table.name.in_(ROOT_TAX_CODE_CHILDREN) & table.parent.in_(table.select(table.id, where=table.name == 'Impuestos República Dominicana')))) class TaxCodeLine(metaclass=PoolMeta): __name__ = 'account.tax.code.line' @classmethod def __register__(cls, module_name): cursor = Transaction().connection.cursor() super().__register__(module_name) if module_name != 'account_do': return line = cls.__table__() code = Table('account_tax_code') tax = Table('account_tax') cursor.execute(*line.delete( where=(line.template == Null) & line.code.in_(code.select(code.id, where=code.name == ( 'Retención ISR Intereses 1% ' '(Personas Jurídicas, NG 07-19)'))) & line.tax.in_(tax.select(tax.id, where=tax.description == ( 'Retención ISR Intereses Persona Física 10%')))))