|
1 | 1 | import logging |
2 | 2 |
|
3 | | -from odoo import SUPERUSER_ID, api |
4 | | - |
5 | 3 | _logger = logging.getLogger(__name__) |
6 | 4 |
|
7 | 5 |
|
8 | | -def post_init_hook(cr, registry): |
| 6 | +def post_init_hook(env): |
9 | 7 | """Loaded after installing the module. Configuramos impuesto de Retención IIBB Mendoza Aplicada para que tengan código python. |
10 | 8 | Se crea registro de coincidencia de importación para importar archivo de actividades de mendoza para que se actualice en base a los códigos |
11 | 9 | existentes.""" |
12 | | - env = api.Environment(cr, SUPERUSER_ID, {}) |
13 | | - ar_companies = env["res.company"].search([]).filtered(lambda x: x.country_code == "AR") |
14 | | - for company in ar_companies: |
15 | | - ret_mendoza_aplicada_ext_id = "l10n_ar_account_withholding.%s_ri_tax_retencion_iibb_za_aplicada" % (company.id) |
16 | | - ret_mendoza_aplicada_tax = env.ref(ret_mendoza_aplicada_ext_id, False) |
17 | | - if not ret_mendoza_aplicada_tax: |
| 10 | + # Crear registros de fiscal position para todas las compañías argentinas |
| 11 | + for company in env["res.company"].search([]).filtered(lambda x: x.country_code == "AR"): |
| 12 | + # Buscar la posición fiscal "Retenciones" de esta compañía --> esta se crea en la ul 1415 [RET18] Migración retenciones de Ganancias |
| 13 | + fiscal_position = env["account.fiscal.position"].search( |
| 14 | + [("name", "=", "Retenciones"), ("company_id", "=", company.id)], limit=1 |
| 15 | + ) |
| 16 | + |
| 17 | + if not fiscal_position: |
| 18 | + # No se encontró la posición fiscal 'Retenciones' para la compañía |
18 | 19 | continue |
19 | | - ret_mendoza_aplicada_tax.withholding_type = "code" |
20 | | - ret_mendoza_aplicada_tax.withholding_python_compute = ( |
21 | | - "\n# withholdable_base_amount\n# payment: account.payment.group object\n# partner: res.partner object (commercial partner of payment group)\n" |
22 | | - "# withholding_tax: account.tax.withholding object\n\nmove_to_pay = payment.to_pay_move_line_ids.move_id\nactivities = move_to_pay.activities_mendoza_ids\n" |
23 | | - "if activities:\n activity_codes = activities.mapped('code')\n partner_vat = move_to_pay.partner_id.l10n_ar_formatted_vat\n" |
24 | | - " actividades_con_riesgo, actividades_con_alicuota_cero = payment.company_id.process_mendoza_csv_file(partner_vat, activity_codes)\n" |
25 | | - " menor_alicuota = activities.menor_alicuota(actividades_con_alicuota_cero)\n\n if menor_alicuota[0] in actividades_con_riesgo:\n" |
26 | | - " alicuota = menor_alicuota[1] * 2\n else:\n alicuota = menor_alicuota[1]\n payment.write({'alicuota_mendoza': alicuota})\n" |
27 | | - " result = withholdable_base_amount * alicuota\nelse:\n result = False\n " |
| 20 | + |
| 21 | + tax_ext_id_option_a = "account.%s_ex_tax_withholding_iibb_mza_applied" % company.id |
| 22 | + tax_ext_id_option_b = "l10n_ar_tax.%s_ri_tax_retencion_iibb_za_aplicada" % company.id |
| 23 | + default_tax = env.ref(tax_ext_id_option_a, raise_if_not_found=False) or env.ref( |
| 24 | + tax_ext_id_option_b, raise_if_not_found=False |
28 | 25 | ) |
29 | | - _logger.info( |
30 | | - "Se establece código python en impuesto de Retención IIBB Mendoza Aplicada para la compañía %s" |
31 | | - % (company.name) |
| 26 | + if not default_tax: |
| 27 | + _logger.warning( |
| 28 | + "No se encontró el impuesto %s ni %s para la compañía %s" |
| 29 | + % (tax_ext_id_option_a, tax_ext_id_option_b, company.name) |
| 30 | + ) |
| 31 | + continue |
| 32 | + |
| 33 | + # Verificar si ya existe el registro para esta compañía |
| 34 | + existing_record = env["account.fiscal.position.l10n_ar_tax"].search( |
| 35 | + [ |
| 36 | + ("fiscal_position_id", "=", fiscal_position.id), |
| 37 | + ("default_tax_id", "=", default_tax.id), |
| 38 | + ("tax_type", "=", "withholding"), |
| 39 | + ], |
| 40 | + limit=1, |
32 | 41 | ) |
| 42 | + |
| 43 | + if not existing_record: |
| 44 | + python_formula = """ |
| 45 | +# payment: account.payment object |
| 46 | +# partner: res.partner object (commercial partner of payment) |
| 47 | +
|
| 48 | +move_to_pay = payment.to_pay_move_line_ids.move_id |
| 49 | +if not move_to_pay: |
| 50 | + raise UserError( |
| 51 | + "No puede calcular retenciones automáticas de aplicadas de Mendoza si no seleccionó una factura para pagar" |
| 52 | + ) |
| 53 | +activities = move_to_pay.activities_mendoza_ids |
| 54 | +if activities: |
| 55 | + activity_codes = activities.mapped('code') |
| 56 | + partner_vat = move_to_pay.partner_id.l10n_ar_formatted_vat |
| 57 | + actividades_con_riesgo, actividades_con_alicuota_cero = payment.company_id.process_mendoza_csv_file(partner_vat, activity_codes) |
| 58 | + menor_alicuota = activities.menor_alicuota(actividades_con_alicuota_cero) |
| 59 | +
|
| 60 | + if menor_alicuota[0] in actividades_con_riesgo: |
| 61 | + aliquot = menor_alicuota[1] * 2 |
| 62 | + else: |
| 63 | + aliquot = menor_alicuota[1] |
| 64 | +else: |
| 65 | + aliquot = 0 |
| 66 | +""" |
| 67 | + env["account.fiscal.position.l10n_ar_tax"].create( |
| 68 | + { |
| 69 | + "fiscal_position_id": fiscal_position.id, |
| 70 | + "default_tax_id": default_tax.id, |
| 71 | + "tax_type": "withholding", |
| 72 | + "webservice": "python_formula", |
| 73 | + "python_formula": python_formula, |
| 74 | + } |
| 75 | + ) |
| 76 | + _logger.info("Se crea registro de fiscal position para IIBB Mendoza en la compañía %s" % (company.name)) |
| 77 | + |
33 | 78 | afip_activity_model_id = env["ir.model"].search([("name", "=", "afip.activity")]).id |
34 | 79 |
|
35 | 80 | # Se crea registro de coincidencia de importación para importar archivo de actividades de mendoza para que se actualice en base a los códigos existentes. |
|
0 commit comments