Skip to content

Commit aea7279

Browse files
committed
[IMP] l10n_ar_arba_ws: Add warning when trying to validate a draft withholding
1 parent c694157 commit aea7279

7 files changed

Lines changed: 91 additions & 0 deletions

File tree

l10n_ar_arba_ws/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
# directory
44
##############################################################################
55
from . import models
6+
from . import wizard

l10n_ar_arba_ws/__manifest__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
"views/account_payment_views.xml",
3838
"views/res_config_settings_views.xml",
3939
"views/l10n_ar_payment_withholding_views.xml",
40+
"wizard/arba_withholding_draft_warning_views.xml",
4041
],
4142
"installable": True,
4243
"auto_install": False,

l10n_ar_arba_ws/models/account_payment.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,46 @@ def action_post(self):
2424
)
2525
wh_lines.send_to_arba()
2626
return res
27+
28+
def action_draft(self):
29+
"""Verificar si hay retenciones informadas a ARBA antes de volver a borrador.
30+
Si hay retenciones informadas, mostrar un warning."""
31+
# Verificar si debemos mostrar el warning (solo si no viene del wizard)
32+
if not self.env.context.get("skip_arba_draft_warning"):
33+
for payment in self:
34+
# Buscar retenciones que ya fueron informadas a ARBA
35+
wh_lines = payment.l10n_ar_withholding_line_ids.filtered(
36+
lambda x: x.is_arba_ws_needed and x.l10n_ar_cert_number and x.l10n_ar_dj_arba_id
37+
)
38+
39+
if wh_lines:
40+
# Generar información HTML de las retenciones
41+
wh_info_html = "<ul>"
42+
for wh in wh_lines:
43+
wh_info_html += (
44+
f"<li><strong>{wh.name}</strong> - "
45+
f"Certificado: {wh.l10n_ar_cert_number} - "
46+
f"DDJJ: {wh.l10n_ar_dj_arba_id.display_name} "
47+
f"(Monto: ${wh.amount:,.2f})</li>"
48+
)
49+
wh_info_html += "</ul>"
50+
51+
# Crear el wizard con el warning
52+
wizard = self.env["arba.withholding.draft.warning"].create(
53+
{
54+
"payment_id": payment.id,
55+
"withholding_count": len(wh_lines),
56+
"withholding_info": wh_info_html,
57+
}
58+
)
59+
60+
return {
61+
"name": "Advertencia - Retenciones ARBA",
62+
"type": "ir.actions.act_window",
63+
"res_model": "arba.withholding.draft.warning",
64+
"res_id": wizard.id,
65+
"view_mode": "form",
66+
"target": "new",
67+
}
68+
69+
return super().action_draft()

l10n_ar_arba_ws/security/ir.model.access.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ l10n_ar_arba_ws.access_l10n_ar_dj_arba_admin,access_l10n_ar_dj_arba_admin,l10n_a
33
l10n_ar_arba_ws.access_l10n_ar_dj_arba_readonly,access_l10n_ar_dj_arba_readonly,l10n_ar_arba_ws.model_l10n_ar_dj_arba,account.group_account_readonly,1,0,0,0
44
l10n_ar_arba_ws.access_l10n_ar_dj_arba_invoice,access_l10n_ar_dj_arba_invoice,l10n_ar_arba_ws.model_l10n_ar_dj_arba,account.group_account_invoice,1,1,1,1
55
l10n_ar_arba_ws.access_l10n_ar_dj_arba_account_user,access_l10n_ar_dj_arba_account_user,l10n_ar_arba_ws.model_l10n_ar_dj_arba,account.group_account_user,1,1,1,1
6+
l10n_ar_arba_ws.access_arba_withholding_draft_warning_user,access_arba_withholding_draft_warning_user,l10n_ar_arba_ws.model_arba_withholding_draft_warning,account.group_account_user,1,1,1,1

l10n_ar_arba_ws/wizard/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Part of Odoo. See LICENSE file for full copyright and licensing details.
2+
from . import arba_withholding_draft_warning
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Part of Odoo. See LICENSE file for full copyright and licensing details.
2+
from odoo import fields, models
3+
4+
5+
class ArbaWithholdingDraftWarning(models.TransientModel):
6+
_name = "arba.withholding.draft.warning"
7+
_description = "ARBA Withholding Draft Warning"
8+
9+
payment_id = fields.Many2one("account.payment", required=True)
10+
withholding_count = fields.Integer(readonly=True)
11+
withholding_info = fields.Html(readonly=True)
12+
13+
def action_confirm_reset_to_draft(self):
14+
"""Confirma que el usuario entiende que la retención quedará informada en ARBA
15+
y procede a volver el pago a borrador."""
16+
self.ensure_one()
17+
# Volver el pago a borrador (las retenciones con certificado no se reenviarán)
18+
self.payment_id.with_context(skip_arba_draft_warning=True).action_draft()
19+
return {"type": "ir.actions.act_window_close"}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<odoo>
3+
<record id="view_arba_withholding_draft_warning_form" model="ir.ui.view">
4+
<field name="name">arba.withholding.draft.warning.form</field>
5+
<field name="model">arba.withholding.draft.warning</field>
6+
<field name="arch" type="xml">
7+
<form string="ARBA Withholding Warning">
8+
<div class="alert alert-warning" role="alert">
9+
<p><strong>⚠️ Advertencia:</strong></p>
10+
<p>Este pago tiene <strong><field name="withholding_count"/> retención(es)</strong> que ya fueron informadas a ARBA a través de una Declaración Jurada (DDJJ).</p>
11+
<p>Recomendamos no realizar modificaciones en el pago, ya que las mismas no impactarán en las retenciones ya informadas.</p>
12+
</div>
13+
<group>
14+
<field name="payment_id" invisible="1"/>
15+
<field name="withholding_info" nolabel="1" widget="html"/>
16+
</group>
17+
<footer>
18+
<button string="Entiendo, volver a borrador" name="action_confirm_reset_to_draft" type="object" class="btn-primary"/>
19+
<button string="Cancelar" special="cancel" class="btn-secondary"/>
20+
</footer>
21+
</form>
22+
</field>
23+
</record>
24+
</odoo>

0 commit comments

Comments
 (0)