Bloqueo automático de pedidos de venta al confirmarse

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

No recuerdo a partir de que versión, pero Odoo agregó un feature de dudosa utilidad que es la posibilidad de editar los pedidos de venta una vez confirmados. Lo cual es bastante peligroso y si necesita hacerse, debería ser encarado como una customización en lugar de un feature del ERP. Sobre todo la posibilidad de modificar cantidades, precios unitarios y descuentos. Un total despropósito. Para bloquear los pedidos de venta una vez confirmados, se cuenta con una opción de configuración:


La cual habilita el botón "Bloquear" en el pedido de ventas, el cual después de ser clickeado deshabilita la posibilidad de edición. También habilita la posibilidad de desbloquear y agrega el estado Bloqueado al pedido de ventas.


Que es el estado Bloqueado en un pedido de venta? Es un pedido de venta confirmado que hizo algo con las transacciones de pago del e-commerce. O sea que si no usas el módulo de e-commerce, solo mete ruido. Lo mismo que el botón Desbloquear.

Es por eso que agregamos el módulo sale_automatic_block, el cual una vez instalado hace lo siguiente:

  • Oculta los botones de Bloquear y Desbloquear pedido de venta

  • Al confirmarse el pedido, lo marca como bloqueado

Por otra parte, ya no es necesario utilizar la opción de configuración. Una vez instalado el módulo se va a ignorar lo que se indica en la opción "Bloquear pedidos confirmados" de la configuración

Anexo técnico

El módulo consta de un archivo de una vista que extiende la vista sale.view_order_form y utilizando xpath, setea el atributo invisible de los botones "Bloquear" y "Desbloquear"

<xpath expr="//button[@name='action_done']" position="attributes">
    <attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//button[@name='action_unlock']" position="attributes">
    <attribute name="invisible">1</attribute>
</xpath>

Después la confirmación, es extendida por medio del super y luego de confirmada se llama al método action_done, que solo setea la orden como bloqueada.

def action_confirm(self):
    res = super(SaleOrder, self).action_confirm()
    self.action_done()
    return res

Sospecho que lo mismo voy a tener que hacer con los pedidos de compra

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.