Cuando un número de serie se encuentra reservado?

Gustavo Orrillo
- 06/20/2022 - 1 min. de lectura

Un pequeño issue que encontré es no saber cuando un número de serie se encuentra reservado por algún movimiento de stock (algo primordial si uno quiere listar los quants que se pueden transferir de una ubicación a otra). Es por eso que hice el módulo stock_production_lot_reserved. Al instalar el módulo, podremos ver que a la vista lista del modelo stock.production.lot dos campos: is_reserved y reservation_move:



La idea es utilizar este módulo con otros módulos para mover inventario de una ubicación a otra. En futuras modificaciones vamos a agregarle al módulo la información de las transferencias a la que pertenece el movimiento de producto de la reserva, y el soporte de lotes (en este momento el módulo esta pensado para números de serie).

Notas técnicas

Es un módulo sencillo que solo agrega dos campos computados. Ahora con el fin de acelerar el cálculo (y debido a que no quiero extender los movimientos de producto para almacenar la información de la reserva en el número de serie), se busca el número de lote en la tabla de los movimientos de producto (stock_move_line)

def _compute_reservation(self):
    for rec in self:
        query = """
            SELECT id,move_id
                FROM stock_move_line
                WHERE lot_id = %s
                and state not in ('cancel','done')
                LIMIT 1
            """
            self.env.cr.execute(query, (rec.id,))
            result = self.env.cr.dictfetchall()
            if result != [] and result[0].get('move_id'):
                rec.is_reserved = True
                rec.reservation_move = result[0].get('move_id')
            else:
                rec.is_reserved = False
                rec.reservation_move = None

Aca primero definimos el query para que busque el número de serie en la tabla stock_move_line para aquellos movimientos de producto que no esten ni cancelados ni finalizados. Si el query devuelve algún resultado, significa que el número de serie esta reservado. Es por eso que actualizamos el campo is_reserved con el valor verdadero, y actualizamos el campo del movimiento de stock.

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.