Ingresando pagos en pesos como dolares

Gustavo Orrillo
- 11/07/2022 - 2 min. de lectura

Por motivos bastante oscuros, en Argentina muchas empresas facturan en USD pero cobran en ARS. Andá a saber porque... el caso es que para eso se necesita realizar una factura en dolares al tipo de cambio del día (otro no te permite la factura electrónica de AFIP), y se necesita ingresar mucho tiempo después con diferente tipo de cambio el pago en pesos. Por ejemplo, el primero de mayo emitimos la factura por 100 dolares, al tipo de cambio de 100. Un mes más tarde el tipo de cambio es de 120, y el cliente ingresa el pago de 100 dolares pero en pesos. Lo que necesita es hacerse dicho pago en Odoo.

Veamos como se realiza el pago (no tiene sentido mostrar como se hace la factura). Primero se crea el recibo y se procede a crear la línea de pago


Se selecciona el método de pago y la moneda, por ejemplo el USD. Cuando se selecciona la moneda extranjera, se permite ingresar el monto del pago en la moneda extranjera y el monto en la moneda de la empresa. En un primer momento, el sistema propone el tipo de cambio presente en el sistema (en el ejemplo 128,185:


Se ingresan en el ejemplo 100 USD que representarían 12818,50 ARS. Ahora supongamos que por esos 100 USD el cliente pagó 15,000ARS (porque el tipo de cambio pasó a 150). Solo se debe cambiar el campo del importe local


Lo que crea la línea del recibo con el monto en la moneda extranjera y la moneda local


Al confirmar el recibo, veremos que se creó el asiento contable cuyos débitos/créditos reflejan la moneda de la empresa, y el importe en la moneda del pago


Lo que permite al realizar una factura en USD, que se pague dicha factura con el recibo en USD pagado anteriormente


Anexo técnico

El campo con el tipo de cambio en el pago es un campo computado, cada vez que se cambia el monto en ARS o USD se refleja automáticamente el tipo de cambio. No se pide al usuario que ingrese el tipo de cambio porque es innecesario. Al principio al usuario le resulta contra-intuitivo pero a los pocos minutos ya está ingresando los pagos en moneda local y moneda extranjera (al fin y al cabo, tiene la información de los dos montos a mano ya que es lo que le informa el cobrador).

Lo que es interesante es cuando se crea el asiento contable cada vez que se crea el pago (algo que sucede automáticamente). Si se observa el código, se ve que se extiendo el método que crea el asiento contable y se actualiza el monto del débito/crédito con el valor ingresado por el usuario

def _get_shared_move_line_vals(
    self, debit, credit, amount_currency, move_id, invoice_id=False):
    """
    Si se esta forzando importe en moneda de cia, usamos este importe
    para debito/credito
    """
    res = super(AccountPayment, self)._get_shared_move_line_vals(
        debit, credit, amount_currency, move_id, invoice_id=invoice_id)
    if self.force_amount_company_currency:
        if res.get('debit', False):
            res['debit'] = self.force_amount_company_currency
        if res.get('credit', False):
            res['credit'] = self.force_amount_company_currency
    return res

Más allá del mecanismo contable que usa Odoo para administrar la contabilidad multi-moneda (lo cual es cubierto en otro post), creo que es de destacar este mecanismo para extender la funcionalidad de Odoo (lo que cubriremos en otro post).  

Acerca de:

Gustavo Orrillo

Apasionado de la programación, implementa Odoo para distintos tipos de negocios desde el año 2010. En Moldeo Interactive es Socio fundador y Programador; además de escribir en el Blog sobre distintos temas relacionados a los desarrollos que realiza.