Files
account_do/tax.py
T

134 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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%')))))