Skip to content

[FIX] l10n_ar_payment_bundle: linked payments honor forced main counterpart rate#1019

Closed
rov-adhoc wants to merge 1 commit intoingadhoc:19.0from
adhoc-dev:19.0-h-115320-rpov
Closed

[FIX] l10n_ar_payment_bundle: linked payments honor forced main counterpart rate#1019
rov-adhoc wants to merge 1 commit intoingadhoc:19.0from
adhoc-dev:19.0-h-115320-rpov

Conversation

@rov-adhoc
Copy link
Copy Markdown
Contributor

Modified _compute_counterpart_rate to inherit main rate when linked and main share currency Modified _compute_accounting_rate to apply forced main counterpart rate for USD linked payments (A_linked = B_main) Enhanced depends decorators with all rate-related fields to trigger proper recomputation on rate changes Added regression test test_b3_linked_usd_uses_forced_main_counterpart_rate validating rate inheritance with custom 1400 USD/ARS rate

Change note: Cuando fijas una cotización personalizada en el pago principal del bundle, ahora los medios de pago vinculados respetan exactamente esa tasa en lugar de recalcularla con la tasa contable del sistema. Si estableces 1.400 USD/ARS manualmente, todos los pagos USD del bundle usarán exactamente esa cotización.

…erpart rate

Modified _compute_counterpart_rate to inherit main rate when linked and main share currency
Modified _compute_accounting_rate to apply forced main counterpart rate for USD linked payments (A_linked = B_main)
Enhanced depends decorators with all rate-related fields to trigger proper recomputation on rate changes
Added regression test test_b3_linked_usd_uses_forced_main_counterpart_rate validating rate inheritance with custom 1400 USD/ARS rate

Change note: Cuando fijas una cotización personalizada en el pago principal del bundle,
ahora los medios de pago vinculados respetan exactamente esa tasa en lugar de recalcularla con la tasa contable del sistema.
Si estableces 1.400 USD/ARS manualmente, todos los pagos USD del bundle usarán exactamente esa cotización.
Copilot AI review requested due to automatic review settings April 20, 2026 14:50
@roboadhoc
Copy link
Copy Markdown
Contributor

Pull request status dashboard

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Este PR busca corregir el comportamiento de los pagos vinculados (linked) dentro de un bundle cuando el pago principal tiene una cotización forzada, para que los linked en USD respeten exactamente esa tasa en vez de recalcular con la tasa contable del sistema.

Changes:

  • Ajuste en el cómputo de accounting_rate para pagos vinculados, intentando heredar la tasa del pago principal en el caso A=B (pago en USD cancelando en USD).
  • Agregado de un test de regresión que valida la herencia de la tasa forzada desde el main hacia un linked USD.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
l10n_ar_payment_bundle/models/account_payment.py Override de _compute_accounting_rate para forzar la herencia de tasa desde el main en pagos vinculados.
l10n_ar_payment_bundle/tests/test_payment_bundle_multimoneda.py Nuevo test de regresión para la herencia de cotización forzada en linked USD.

Comment on lines +164 to +166
@api.depends("main_payment_id")
def _compute_accounting_rate(self):
super(AccountPayment, self)._compute_accounting_rate()
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

El override de _compute_accounting_rate redefine @api.depends solo con main_payment_id, pero el método (y el super()) depende de currency_id, company_currency_id, company_id, date, etc. Así se pierde el grafo de dependencias original y accounting_rate puede quedar desactualizado en pagos NO vinculados (y también no recomputar cuando cambia la tasa/fecha/moneda). Mantener los depends del padre y agregar los del main (p.ej. main_payment_id.counterpart_rate/main_payment_id.accounting_rate y las monedas involucradas).

Copilot uses AI. Check for mistakes.
Comment on lines +168 to +170
# Si B = C en ambos pagos, tomamos la tasa forzada del main como
# fuente de verdad para mantener counterpart_rate alineado.
if rec.main_payment_id.counterpart_rate and rec.accounting_rate != rec.main_payment_id.counterpart_rate:
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La condición if rec.main_payment_id.counterpart_rate and rec.accounting_rate != rec.main_payment_id.counterpart_rate hace que, cuando la tasa del linked ya coincide con la del main (caso normal sin “forced rate”), caiga en el else y termine asignando rec.main_payment_id.accounting_rate (que para el main suele ser 1.0). Esto parece incorrecto: para linked con currency_id == counterpart_currency_id debería tomar siempre la tasa del main (o, si no aplica, una fuente consistente), sin depender del !=.

Suggested change
# Si B = C en ambos pagos, tomamos la tasa forzada del main como
# fuente de verdad para mantener counterpart_rate alineado.
if rec.main_payment_id.counterpart_rate and rec.accounting_rate != rec.main_payment_id.counterpart_rate:
# Si B = C en ambos pagos, tomamos la tasa del main como fuente de
# verdad para mantener counterpart_rate alineado. Si el main tiene
# counterpart_rate, debe prevalecer siempre; si no, usamos su
# accounting_rate como fallback consistente.
if rec.main_payment_id.counterpart_rate:

Copilot uses AI. Check for mistakes.
"""B.3.x · Main con deuda USD y counterpart rate forzado.

Caso de regresión:
- Main: A=ARS, B=USD, se fuerza user_counterpart_rate=1400 (en vez de tasa vigente)
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En el docstring del test se indica que se fuerza user_counterpart_rate=1400, pero el test en realidad setea main.counterpart_rate = 1/1400. Para evitar confusión (y dejar claro qué campo es la “fuente de verdad”), conviene alinear el texto con el código o setear el campo que describe el docstring.

Suggested change
- Main: A=ARS, B=USD, se fuerza user_counterpart_rate=1400 (en vez de tasa vigente)
- Main: A=ARS, B=USD, se fuerza counterpart_rate=1/1400 (equivalente a user rate 1400)

Copilot uses AI. Check for mistakes.
for rec in self.filtered(lambda x: x.main_payment_id and x.currency_id == x.company_currency_id):
rec.counterpart_rate = rec.main_payment_id.counterpart_rate

@api.depends("main_payment_id")
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acá capaz agregar el rate del main en el depends, por si cambia el rate que no quede el anterior?

@maq-adhoc
Copy link
Copy Markdown
Contributor

@roboadhoc r+

@maq-adhoc
Copy link
Copy Markdown
Contributor

@roboadhoc nobump

@roboadhoc roboadhoc closed this in 98343f8 Apr 23, 2026
@roboadhoc roboadhoc deleted the 19.0-h-115320-rpov branch April 23, 2026 18:32
@roboadhoc roboadhoc added the 18.1 label Apr 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants