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 = "" + + # 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 + +
+ + + + + + +
+
+
+