Agregando números de líneas a las órdenes de compra

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

Algo que va a resultar de utilidad a muchos departamentos de compras es el agregado del número de línea a las órdenes de compra (principalmente para evitar malentendidos con los proveedores). Para eso desarrollamos el módulo purchase_order_line_number, el cual se instala como cualquier otro módulo. Este hace un par de cosas; la primera agrega un campo a las líneas de las órdenes de compra:


Y ademas agrega dicho campo a los reportes impresos


Lo mismo se puede hacer para las órdenes de venta

Notas técnicas

Este módulo agrega un campo, purchase_order_line_number el cual es computado. No se almacena, simplemente se computa solo en dos partes. En el formulario de órdenes de compra. Y cuando se imprime el reporte. 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, extendemos la vista de la purchase order y por medio de xpath 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>

Por último extendemos los reportes de las órdenes de compra, para agregar el header y el campo purchase_order_line. Usamos xpath porque basicamente no hay otra herramienta para hacerlo (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>
Acerca de:

Gustavo Orrillo

Passionate about programming, he has implemented Odoo for different types of businesses since 2010. In Moldeo Interactive he is a founding Partner and Programmer; In addition to writing on the Blog about different topics related to the developments he makes.