Algo que piden muchas veces los clientes argentinos es poder cambiar el tipo de cambio en las facturas de compra (AFIP no se los permite hacer en las facturas de venta). Y este tipo de cambio es arbitrario... en pocas palabras llega el proveedor y dice esto que me tenes que pagar son X dolares a Y tipo de cambio (el cual se determina con la humedad del dia).
Como hacemos para implementar esto en Odoo? Tenemos que darle las gracias a OCA que publicaron el modulo account_manual_currency que permite hacerlo. El mismo se encuentra en el repositorio account-invoicing y su instalación es sencilla, no tiene complicaciones.
Como se usa? Supongamos que tenemos un proveedor que nos da una factura de 150 USD y (a efectos de este post) nos indica que cada USD es un ARS (todo un samaritano). Se ingresa la factura de forma normal y se indica que la moneda va a ser en USD
Ahora, como hacemos para indicar el nuevo tipo de cambio? Solo tenemos que clickear en Manual Currency y lo ingresamos
Si vemos ahora los apuntes contables, podremos ver como los mismos se ingresaron correctamente con el nuevo tipo de cambio
En el siguiente post vamos a indicar como los usuarios pueden ingresar el tipo de cambio de una manera humana, ya que en este momento el modulo exige el tipo de cambio real (por ejemplo, cuantos dolares se compran con un peso argentino, que no son muchos)
Notas técnicas
Es un módulo interesante con el que aprendí que el tipo de cambio se encuentra en el modelo account.move.line )en la columna currency_rate). Es una columna computada y se actualiza por medio del método _compute_currency_rate, el cual es extendido de la siguiente manera
@api.depends(
"currency_id",
"company_id",
"move_id.invoice_currency_rate",
"move_id.date",
"move_id.manual_currency_rate",
)
def _compute_currency_rate(self):
res = super()._compute_currency_rate()
for line in self:
if not line.move_id.manual_currency:
continue
# Currency Rate on move line use 'company_rate'
rate = (
line.move_id._origin.manual_currency_rate
if line.move_id.type_currency == "company_rate"
else (1.0 / line.move_id._origin.manual_currency_rate)
)
line.currency_rate = rate
return res