Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions l10n_ar_arba_ws/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
# directory
##############################################################################
from . import models
from . import wizard
1 change: 1 addition & 0 deletions l10n_ar_arba_ws/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
43 changes: 43 additions & 0 deletions l10n_ar_arba_ws/models/account_payment.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 = "<ul>"
for wh in wh_lines:
wh_info_html += (
f"<li><strong>{wh.name}</strong> - "
f"Certificado: {wh.l10n_ar_cert_number} - "
f"DDJJ: {wh.l10n_ar_dj_arba_id.display_name} "
f"(Monto: ${wh.amount:,.2f})</li>"
)
wh_info_html += "</ul>"

# 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()
1 change: 1 addition & 0 deletions l10n_ar_arba_ws/security/ir.model.access.csv
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 2 additions & 0 deletions l10n_ar_arba_ws/wizard/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import arba_withholding_draft_warning
19 changes: 19 additions & 0 deletions l10n_ar_arba_ws/wizard/arba_withholding_draft_warning.py
Original file line number Diff line number Diff line change
@@ -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"}
24 changes: 24 additions & 0 deletions l10n_ar_arba_ws/wizard/arba_withholding_draft_warning_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_arba_withholding_draft_warning_form" model="ir.ui.view">
<field name="name">arba.withholding.draft.warning.form</field>
<field name="model">arba.withholding.draft.warning</field>
<field name="arch" type="xml">
<form string="ARBA Withholding Warning">
<div class="alert alert-warning" role="alert">
<p><strong>⚠️ Advertencia:</strong></p>
<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>
<p>Recomendamos no realizar modificaciones en el pago, ya que las mismas no impactarán en las retenciones ya informadas.</p>
</div>
<group>
<field name="payment_id" invisible="1"/>
<field name="withholding_info" nolabel="1" widget="html"/>
</group>
<footer>
<button string="Entiendo, volver a borrador" name="action_confirm_reset_to_draft" type="object" class="btn-primary"/>
<button string="Cancelar" special="cancel" class="btn-secondary"/>
</footer>
</form>
</field>
</record>
</odoo>
Loading