Como agregar números de líneas a las órdenes de compra o venta

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

Esto se aplica tanto para ordenes de venta como compras, pero es util por sobre todo a los departamentos de compras debido a que existen órdenes de compra con decenas de líneas. Esto es el agregado del número de línea a las órdenes de compra con el fin de evitar malentendidos con los proveedores. Odoo por defecto tiene un campo sequence en el modelo purchase.order.line, pero no se imprime y además arranca desde el número 10.

Es por esto que desarrollamos el módulo purchase_order_line_number, el cual se instala como cualquier otro módulo (no tiene dependencias extrañas por sobre todo, y además no necesita configuración ni actualización previa de datos). Este módulo hace un par de cosas; la primera agrega un campo a las líneas de las órdenes de compra:

Y agrega dicha columna a los reportes impresos:


Esto mismo se puede hacer para las órdenes de venta.

Aspectos técnicos


El módulo añade un campo al modelo purchase.order.line. El nombre del campo es  purchase_order_line_number y es computado. No se almacena, simplemente se computa solo en dos momentos. Cuando se abre el formulario de las órdenes de compra y cuando se imprime el reporte del pedido de compras. Y para computar el número de línea simplemente contamos la cantidad de líneas para esa orden de compra, cuyo ID sea menor al de la línea con la que estamos trabajando.


def _compute_purchase_order_line_number(self):
for rec in self:
res = 0
res = len(self.env['purchase.order.line'].search([('order_id','=',rec.order_id.id),('id','<',rec.id)])) 
rec.purchase_order_line_number = res + 1


Por otra parte, se extiende la vista de la purchase order y utilizando xpath localizamos el campo product_id y agregamos a la vista tree el campo purchase_order_line_number. Noten la sintaxis del xpath para agregar un campo dentro de un campo one2many en un tree

<xpath expr="//field[@name='order_line']/tree/field[@name='product_id']" position="before">
<field name="purchase_order_line_number" />
</xpath>

Si quieren leer un poco más sobre xpath solo tienen que leer el artículo correspondiente. También extendemos los reportes de las órdenes de compra, para agregar el header y el campo purchase_order_line a la tabla que muestra las líneas de compra. Para ello otra vez usamos xpath porque basicamente no hay otra herramienta para hacerlo (de vuelta, es por eso que aprender xpath es importante, no es complejo).



<xpath expr="//th[@name='th_description']" position="before">
<th name="th_order_line_number"><strong>#</strong></th>
</xpath>
<xpath expr="//td[@id='product']" position="before">
<td id="td_line_number"><span t-field="line.purchase_order_line_number"></span></td>
</xpath>
Gustavo Orrillo 26 de junio de 2023
Compartir
Categorías
Archivar
Identificarse dejar un comentario