Cómo reemplazar funciones existentes en el POS de Odoo 14 usando OWL
POS Odoo OWL Framework


Cómo reemplazar funciones existentes usando OWL

El punto de venta es uno de los mejores y más importantes módulos de Odoo ERP. En todos los casos, la pantalla del POS de Odoo debe ser atractiva y sencilla de manejar. Como probablemente sabemos, Odoo es un ERP fácil de entender con una interfaz de usuario atractiva. En el POS de Odoo JavaScript tiene un trabajo vital para garantizar una interfaz fácil de usar. Además, Odoo utiliza Backbone JS para lidiar con el front-end. Una de las variantes más recientes que Odoo 14 presentó es otra biblioteca web llamada Odoo Web Library (OWL): Un sistema de UI siguiendo el camino de React y Vue.

En este blog, veremos cómo superponer o reemplazar funciones existentes usando OWL en Odoo 14. Como todos sabemos, la función de extender y/o reemplazar una funcionalidad en cualquier lenguaje de programación es muy útil.

Entonces, veamos cómo sobrescribir una función en el framework OWL. Para esto veamos antes como se comporta el POS de manera original en el siguiente escenario.

Cuando estamos en el POS de Odoo 14 podemos ver arriba un Botón Pedidos.  Este botón sirve para ver los pedidos del POS, puede hacer clic en el botón de pedidos para ver los pedidos realizados en determinada jornada o también llamada session. 


En la siguiente captura de pantalla, podemos ver el listado de tickets también llamado pedidos. Esta pantalla aparece luego de hacer click en el botón "Pedidos" y en caso de haber mas pedidos/tickets los mismos aparecerían apilados uno debajo del otro utilizando el siguiente formato que se muestra en la pantalla.


A partir de aquí, si hacemos clic en el botón de eliminar para quitar el pedido de la lista, puede ver una ventana emergente como se muestra a continuación con un mensaje.



Desde acá comenzamos a reemplazar esta función para cambiar el mensaje de la ventana emergente recibida.

A continuación, se muestra la captura de pantalla de la estructura del módulo que desarrollaremos para realizar el cambio en el POS de Odoo. 
.

Entonces, primero, podemos comenzar con el archivo js

owl_pos_super.js

odoo.define('owl_pos_super.TicketScreen_Popup', function(require) {

   'use strict';

   const Registries = require('point_of_sale.Registries');

   const TicketScreen = require('point_of_sale.TicketScreen');

   const { posbus } = require('point_of_sale.utils');

});

En el código anterior, hemos añadido las 3 constantes necesarias a nuestra función overriding y hemos asignado los valores necesarios.

En el código siguiente extendimos la pantalla de Tickets y copiamos la función existente de 'deleteOrder', y la pegamos aquí. A continuación, vamos a sobrescribir la función. Aquí vamos a cambiar el mensaje emergente. En el siguiente código hemos cambiado el cuerpo de la ventana emergente como se necesitaba.

const PosTicketScreen = (TicketScreen) =>

class extends TicketScreen {

    async deleteOrder(order) {

    const screen = order.get_screen_data();

    if (['ProductScreen', 'PaymentScreen'].includes(screen.name) && order.get_orderlines().length > 0) {

        const { confirmed } = await this.showPopup('ConfirmPopup', {

            title: 'Líneas de pedido existentes',

            body: `¿Está seguro de que quiere eliminar el ticket ${order.name}?`

        });

        if (!confirmed) return;

    }

    if (order) {

        order.destroy({ reason: 'abandon' });

    }

    posbus.trigger('order-deleted');

}

};


   Registries.Component.extend(TicketScreen, PosTicketScreen);

   return TicketScreen;

A continuación, tenemos que crear un archivo XML para agregar rutas al documento JS.

assets.xml

<odoo>

  <template id="assets" inherit_id="point_of_sale.assets">

      <xpath expr="." position="inside">

          <script type="text/javascript" src="/owl_pos_super/static/src/js/owl_pos_super.js"/>

      </xpath>

  </template>

</odoo>

Podemos comprobar el resultado final del código actualizado luego de instalar el módulo desarrollado.



Odoo Backups
Copias de seguridad y su importancia