Corrección escenario: Factura en pesos 2 o más pagos
Closed
Corrección escenario: Factura en pesos 2 o más pagos
Hola Agus buena tarde
Si me puedes apoyar con el siguiente problema con un pago de Odoo 15, por favor.
A continuación describo a detalle el escenario:
Escenario:
Factura en pesos (MXN) por el monto de 4,173.68, 2 pagos, el primero de 173.68 y el segundo de 4000
Se crea una factura a un cliente, la factura debe ser emitida en pesos (MXN), las líneas de la factura llevarán n productos y x cantidades con IVA 16. La factura se valida. Esta se timbra correctamente.
Se registran 2 pagos
El primero un pago en pesos (MXN) por un monto de 173.68. Se valida el pago. Este no se timbra correctamente.
El segundo un pago en pesos (MXN) por un monto de 4000. Se valida el pago. Este no se timbra correctamente.
Error:
['Finkok: Error CRP20261 - El valor del campo ImporteDR o que corresponde a Traslado no se encuentra entre el límite inferior y superior permitido.']
Problemática:
En el XML del pago 1 y 2 en el nodo Totales específicamente en el campo TotalTrasladosBaseIVA16 pone el monto base (3598.00) del documento relacionado (Factura).
Lo mismo para el nodo TrasladosDR en el campo BaseDR y en el nodo TrasladosP en el campo BaseP.
En este campo tendría que ir la base del monto pagado, en este caso para el pago 1 debería ir la cantidad de 149.72 y para el pago 2 la cantidad de 3448.28
Evidencias:
Pago 1
Adjunto xml de la factura y de los pagos
Quedo al pendiente de cualquier comentario, gracias.
Saludos
added Bug label
@noe.izquierdo recomendación para ir avanzado y facilitando el trabajo, crea una rama oficial para la migración a odoo 15, llámala master_odoo_15 o algo parecido para que ahí tengamos la última versión del módulo y que después simplemente la convirtamos en la rama master para la liberación oficial.
Ahora me surge la pregunta, ¿el comportamiento sigue siendo el mismo después de los últimos cambios que hicimos en la función
_l10n_mx_tax_base_dr
?En caso de que el comportamiento siga siendo el mismo, creo que la solución está en reescribir esa función de esta manera:
def _l10n_mx_tax_base_dr(self, invoice, tax_move): account = ( tax_move.company_id.account_cash_basis_base_account_id or tax_move.account_id ) base_line = tax_move.move_id.line_ids.filtered( lambda l: l.id != tax_move.id and l.account_id == account and l.tax_ids ) amount = base_line.balance if invoice.currency_id != self.company_id.currency_id: amount = base_line.amount_currency return -1 * amount
El cambio lo hice directamente aquí, sin probarlo, así que tal vez no funcione a la primera.
Básicamente puedes ver que reutilizo lo que hicimos para identificar la línea de la póliza que correponde a la base del impuesto y de ahí obtenemos el balance o saldo que se corresponde con la base del impuesto trasladada en el pago específico con el que se está trabajando.