diff --git a/l10n_ar_arba_ws/__init__.py b/l10n_ar_arba_ws/__init__.py
index d0337769..173091eb 100644
--- a/l10n_ar_arba_ws/__init__.py
+++ b/l10n_ar_arba_ws/__init__.py
@@ -3,3 +3,4 @@
# directory
##############################################################################
from . import models
+from . import wizard
diff --git a/l10n_ar_arba_ws/__manifest__.py b/l10n_ar_arba_ws/__manifest__.py
index e1d7f3b2..e9028f2b 100644
--- a/l10n_ar_arba_ws/__manifest__.py
+++ b/l10n_ar_arba_ws/__manifest__.py
@@ -37,6 +37,7 @@
"views/account_payment_views.xml",
"views/res_config_settings_views.xml",
"views/l10n_ar_payment_withholding_views.xml",
+ "wizard/arba_withholding_draft_warning_views.xml",
],
"installable": True,
"auto_install": False,
diff --git a/l10n_ar_arba_ws/models/account_payment.py b/l10n_ar_arba_ws/models/account_payment.py
index b07ef108..c50cb09c 100644
--- a/l10n_ar_arba_ws/models/account_payment.py
+++ b/l10n_ar_arba_ws/models/account_payment.py
@@ -24,3 +24,46 @@ def action_post(self):
)
wh_lines.send_to_arba()
return res
+
+ def action_draft(self):
+ """Verificar si hay retenciones informadas a ARBA antes de volver a borrador.
+ Si hay retenciones informadas, mostrar un warning."""
+ # Verificar si debemos mostrar el warning (solo si no viene del wizard)
+ if not self.env.context.get("skip_arba_draft_warning"):
+ for payment in self:
+ # Buscar retenciones que ya fueron informadas a ARBA
+ wh_lines = payment.l10n_ar_withholding_line_ids.filtered(
+ lambda x: x.is_arba_ws_needed and x.l10n_ar_cert_number and x.l10n_ar_dj_arba_id
+ )
+
+ if wh_lines:
+ # Generar información HTML de las retenciones
+ wh_info_html = "
"
+ for wh in wh_lines:
+ wh_info_html += (
+ f"- {wh.name} - "
+ f"Certificado: {wh.l10n_ar_cert_number} - "
+ f"DDJJ: {wh.l10n_ar_dj_arba_id.display_name} "
+ f"(Monto: ${wh.amount:,.2f})
"
+ )
+ wh_info_html += "
"
+
+ # Crear el wizard con el warning
+ wizard = self.env["arba.withholding.draft.warning"].create(
+ {
+ "payment_id": payment.id,
+ "withholding_count": len(wh_lines),
+ "withholding_info": wh_info_html,
+ }
+ )
+
+ return {
+ "name": "Advertencia - Retenciones ARBA",
+ "type": "ir.actions.act_window",
+ "res_model": "arba.withholding.draft.warning",
+ "res_id": wizard.id,
+ "view_mode": "form",
+ "target": "new",
+ }
+
+ return super().action_draft()
diff --git a/l10n_ar_arba_ws/security/ir.model.access.csv b/l10n_ar_arba_ws/security/ir.model.access.csv
index e3bf78c1..71bbca60 100644
--- a/l10n_ar_arba_ws/security/ir.model.access.csv
+++ b/l10n_ar_arba_ws/security/ir.model.access.csv
@@ -3,3 +3,4 @@ l10n_ar_arba_ws.access_l10n_ar_dj_arba_admin,access_l10n_ar_dj_arba_admin,l10n_a
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
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
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
+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
diff --git a/l10n_ar_arba_ws/wizard/__init__.py b/l10n_ar_arba_ws/wizard/__init__.py
new file mode 100644
index 00000000..bc5a1261
--- /dev/null
+++ b/l10n_ar_arba_ws/wizard/__init__.py
@@ -0,0 +1,2 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from . import arba_withholding_draft_warning
diff --git a/l10n_ar_arba_ws/wizard/arba_withholding_draft_warning.py b/l10n_ar_arba_ws/wizard/arba_withholding_draft_warning.py
new file mode 100644
index 00000000..61c42706
--- /dev/null
+++ b/l10n_ar_arba_ws/wizard/arba_withholding_draft_warning.py
@@ -0,0 +1,19 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from odoo import fields, models
+
+
+class ArbaWithholdingDraftWarning(models.TransientModel):
+ _name = "arba.withholding.draft.warning"
+ _description = "ARBA Withholding Draft Warning"
+
+ payment_id = fields.Many2one("account.payment", required=True)
+ withholding_count = fields.Integer(readonly=True)
+ withholding_info = fields.Html(readonly=True)
+
+ def action_confirm_reset_to_draft(self):
+ """Confirma que el usuario entiende que la retención quedará informada en ARBA
+ y procede a volver el pago a borrador."""
+ self.ensure_one()
+ # Volver el pago a borrador (las retenciones con certificado no se reenviarán)
+ self.payment_id.with_context(skip_arba_draft_warning=True).action_draft()
+ return {"type": "ir.actions.act_window_close"}
diff --git a/l10n_ar_arba_ws/wizard/arba_withholding_draft_warning_views.xml b/l10n_ar_arba_ws/wizard/arba_withholding_draft_warning_views.xml
new file mode 100644
index 00000000..ecd47760
--- /dev/null
+++ b/l10n_ar_arba_ws/wizard/arba_withholding_draft_warning_views.xml
@@ -0,0 +1,24 @@
+
+
+
+ arba.withholding.draft.warning.form
+ arba.withholding.draft.warning
+
+
+
+
+