Calculando el costo de los productos

14 de junio de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Muchas veces necesitamos actualizar los costos de los productos que se importan de proveedores en el exterior (les conté que Odoo es muy popular entre los distribuidores?). Y ese costo del producto tiene dos componentes: el costo directo (que es el costo sin impuestos que se paga al proveedor) mas los costos indirectos asociados (por ejemplo, los gastos de transporte asociados o de gestión de aduanas).

Como hacemos este cálculo? Una opción es utilizar el módulo stock_landed_costs, pero tiene un problema con el multimoneda y no es precisamente usable en Argentina donde se necesita tener un tipo de cambio diferente para cada operación. Entonces desarrollamos el módulo purchase_indirect_costs. Este módulo permite asociar a cada producto presente en una orden de compras, los costos indirectos asociados a los mismos. 

Como funciona? La instalación del módulo no tiene grandes requerimientos. Le agrega a la factura de proveedor un campo (que es orden de compra) que permite asociar una factura de proveedor a una orden de compra.


Si observamos las ordenes de compra, podemos ver que hay un tab nuevo denominado "Facturas" donde se muestran las facturas relacionadas (la magia de los campos one2many)


Despues en cada línea de la orden de compra se agregó un campo computado, "Costo total unitario". En este campo se computa para cada producto de la orden de compra el nuevo costo unitario teniendo en cuenta las facturas de compra relacionadas.


Es un módulo que sirve para arrancar, pero le faltan funcionalidades. La primera es que pueda actualizar el campo standard_price en el producto (hasta este momento solo informa el costo calculado del producto). No permite seleccionar notas de crédito ni prorratear los gastos de las facturas teniendo en cuenta unidades, porcentajes... Tampoco tiene tiene soporte multimoneda (asume que la moneda de la orden de compra es la misma que la moneda de la factura del proveedor, en este caso sería deseable que tanto la orden de compra como cada una de las facturas tenga su propio tipo de cambio (por esa idiosincracia argentina). Tambien estaría bueno brindar un histórico de los costos de un producto junto con sus facturas asociadas. Lo mismo los reportes asociados de costos. 

Notas técnicas


Primero en el objeto purchase.order.line agregamos un campo computado (no es necesario almacenarlo ya que no me imagino que alguien quiera buscar por dicho campo) que se muestra en la línea de la orden de compra. Por cuestiones de real-estate en el formulario de la orden de compra el campo se muestra como opcional (el muy util atributo optional="hide")

<xpath expr="//field[@name='order_line']/tree/field[@name='price_subtotal']" 
​position="after">
​<field name="total_unit_cost" optional="hide" />
</xpath>

El cálculo del monto del costo total unitario se realiza de la siguiente manera:


for invoice in rec.order_id.account_move_ids:
​tax_percent = invoice.amount_total / invoice.amount_untaxed
​amount_invoices = amount_invoices + (abs(invoice.amount_total_in_currency_signed) / tax_percent)
​percent = rec.price_subtotal / rec.order_id.amount_untaxed
​res = (rec.price_subtotal + amount_invoices * percent) / rec.product_qty

Donde primero se calcula la tasa de impuestos que se paga en la factura del proveedor (ya que tenemos que considerar los costos indirectos sin impuestos). Y se suman los montos netos en la moneda de la factura (aca es donde sería util definir el tipo de cambio utilizado para dicha factura). Paso siguiente se calcula el porcentual de la línea con respecto a la factura (para prorratear el costo) y se multiplica dicho porcentual por el total de los montos netos de la factura. Para por último sumarlo al costo total unitario.


Gustavo Orrillo 14 de junio de 2023
Compartir
Categorías
Archivar
Identificarse dejar un comentario