Skip to content

fix(ECOCONTROL#10): "Pendiente a facturar" daba 0 cuando habia mas de una moneda

Estefania requested to merge ECOCONTROL#10-pendiente-a-facturar-multimoneda into dev

En _compute_amounts_to_invoice_ars_usd se restaban importes de monedas distintas sin convertirlos:

amount_invoiced = sum(invoices.mapped('amount_untaxed'))
amount_pending = order.amount_untaxed - amount_invoiced
amount_pending = max(amount_pending, 0.0)

order.amount_untaxed esta en la moneda del pedido; invoice.amount_untaxed en la de cada factura.

En el pedido reportado -S00007, en USD por 130.961,47, con el anticipo facturado en ARS por 75.957.655,50- la resta daba un negativo enorme y el max(0) lo convertia en cero. El pedido figuraba sin nada pendiente teniendo una linea entera sin facturar. Ese max es lo que hacia dificil notarlo: sin el habria saltado un numero absurdo el primer dia.

Ahora cada factura se lleva a la moneda del pedido antes de sumarla, con el dolar_ref_value del propio comprobante y no con la cotizacion de Odoo: es el valor con el que se emitio, y es el que usa el resto del modulo. Si una factura esta en otra moneda y no tiene cotizacion cargada se cuenta como 0, a proposito: mejor que el pendiente quede alto y alguien lo revise, a descontar un importe con una cotizacion inventada.

De paso se corrige _convert_amount_pending, que tomaba la cotizacion de la primera factura del pedido: si el pedido todavia no tenia ninguna quedaba en 0 y el importe convertido daba 0, o sea que un pedido sin facturar aparecia sin nada pendiente. Ahora cae a la cotizacion del pedido.

Verificado sobre el entorno local, con rollback:

  • pedido USD 130.961,47 + anticipo ARS 75.957.655,50 -> 78.576,88 USD (daba 0)
  • pedido ARS 100.000 facturado ARS 40.000 -> 60.000 (sin cambios)
  • pedido USD 1.000 facturado USD 400 -> 600 (sin cambios)
  • pedido USD 1.000 sin facturas -> 1.000 USD y 1.450.000 ARS (el ARS daba 0)

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

No puedo verlo funcionar el DEV: Hola, ¿cómo están?

El MR !728 (merged) ("Pendiente a facturar" daba 0 cuando había más de una moneda) figura mergeado a dev hace 3 días, pero en ecocontrol-dev el pedido S00007 sigue mostrando "Pendiente a facturar" en 0,00. Según el propio MR debería dar aproximadamente 78.576,88 USD.

Dos consultas / pedidos:

  1. Deploy

¿La instancia de dev se redesplegó después del merge? Queremos descartar que siga corriendo el código anterior.

  1. Recálculo

amount_to_invoice_ars y amount_to_invoice_usd (modelo sale.order) están almacenados (store=True). Lo verificamos en Ajustes → Técnico → Estructura de la base de datos → Campos.

Eso significa que, aunque el código nuevo ya esté corriendo, los pedidos existentes conservan en la base el valor calculado con la fórmula vieja: no se recalculan solos al cambiar el compute.

¿Pueden correr un recálculo masivo de esos dos campos sobre todos los pedidos? Tocarlos uno por uno no es viable, y no hay forma de forzarlo desde la interfaz.

Si el recálculo se puede dejar dentro de la actualización del módulo (por ejemplo un post_init_hook), mejor, así queda resuelto también cuando esto pase a staging y a producción.

¡Gracias!

Edited by Estefania

Merge request reports

Loading