Registrando débitos y créditos en dolares

18 de agosto de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

A veces necesitamos no solo administrar las deudas de proveedores en dolares, sino también registrar los débitos y créditos contables. Para ello desarrollamos el módulo accounting_usd el cual para cada transacción que se confirma, actualiza los débitos y créditos con su correspondiente valor en USD.

Supongamos que hacemos una factura en ARS,


En el asiento contable podremos observar que para dicha factura se actualizaron dos columnas extras llamadas Débito USD y Crédito USD


Este módulo hace la parte facil de la contabilidad dolarizada, que es convertir las transacciones a su valor en USD. Como pueden ver en el código, la contabilidad sigue siendo en ARS pero hay una contabilidad paralela en USD. Lo que es complicado de hacer es reemplazar los reportes, quiza se pueda hacer algo por medio del override de métodos de lectura así cuando se leen los campos debit y credit, retorna los campos debit_usd y credit_usd bajo ciertos contextos... o quiza sea más sano desarrollar los nuevos reportes desde cero.

Notas técnicas

Como pueden ver el módulo extiende el método action_post del modelo account.move. Una vez confirmado el asiento contable, se procede a actualizar cada línea con su correspondiente valor en USD 

    def action_post(self):
res = super(AccountMove, self).action_post()
for rec in self:
for line in rec.line_ids:
if line.move_id.currency_id.id == self.env.ref('base.USD').id:
line.debit_usd = line.debit
line.credit_usd = line.credit
else:
line.credit_usd = line.move_id.currency_id._convert(
line.credit,
self.env.ref('base.USD'),
line.company_id,
line.date,
)

return res

Y para obtener el tipo de cambio se utiliza la función convert, la cual devuelve el monto convertido desde la moneda origen a la moneda destino. A continuación pueden ver la definición del método para utilizarlo correctamente

    def _convert(self, from_amount, to_currency, company, date, round=True):
"""Returns the converted amount of ``from_amount``` from the currency
``self`` to the currency ``to_currency`` for the given ``date`` and
company.

:param company: The company from which we retrieve the convertion rate
:param date: The nearest date from which we retriev the conversion rate.
:param round: Round the result or not
"""
Gustavo Orrillo 18 de agosto de 2023
Compartir
Archivar
Identificarse dejar un comentario