Problemas con el campo Equipo de Ventas en una Iniciativa generada desde el formulario web

Ignacio Buioli
- 10/11/2018

Parece una situación un tanto extraña, pero al que le pasó seguramente sabe lo complejo que puede ser. Ciertamente es de las cosas más curiosas de Odoo y la respuesta no es tan simple como pueda parecer. Cuando instalamos el módulo de "Formulario de Contacto" de Odoo, necesitaremos el módulo de Iniciativas (Leads, Oportunidades) para que su funcionamiento sea óptimo. El usuario anónimo llegará a nuestra web, y al llenar un formulario sus datos serán dirigidos a las iniciativas. Si no hemos hecho ninguna modificación, tendrá asignado en el Equipo de Ventas el de Ventas Directas, pese a que existe un valor llamado Ventas del Sitio web. Esto es curioso, puesto que la iniciativa se genera desde el sitio web y sin embargo el equipo de ventas es otro. Y es especialmente problemático si tenemos muchos equipos de venta y la necesidad de que las iniciativas lleguen a su sitio correspondiente (no es necesario hablar de empresas enormes o multinacionales, son situaciones de muchas de las pequeñas y medianas empresas).

¿Por qué pasa esto? Difícil saberlo, teniendo en cuenta que el ecosistema de módulos de Odoo no es sencillo de comprender al 100%. Pero si nos dedicamos a investigar el campo team_id del módulo sales_team veremos que el campo computa su valor default automáticamente. Eso explica porque se llena desde el formulario web pero, ¿por qué no usa el de Ventas del sitio web? Al parecer, buscará si el partner tiene un equipo de ventas asociado para usar, y en caso de no encontrarlo usará el que es por defecto (Ventas Directas). Ya que el formulario web no genera un partner (aunque podríamos generarlo) usará el team_id por defecto. La opción más clara es una nueva función para computar el campo por defecto, muy similar a la original pero que, en caso de no encontrar un Partner, utilice el equipo de Ventas del sitio web.

Suele ser la mejor opción, pero quiero compartir algo curioso que me pasó estos días y no creo ser el único al que le ocurrió:

En un proyecto de Odoo actual, bastante grande, con varios equipos de venta (ventas nacionales, internacionales, intermediadas, etc), poseen el equipo Ventas del sitio web relacionado con el formulario. A pesar de haber realizado la condición con el partner, se reportó que algunas Oportunidades no llegaban a ningún lado, no se le asignaba ningún equipo de ventas. Muy extraño, puesto que hay una condición que siempre fuerza un valor por defecto. Pero este error ocurría solo con usuarios que visitaban el sitio en inglés (desconozco si ocurre con otros idiomas, el sitio tiene el español por defecto). El valor por defecto del team_id es None y, al llenar el formulario con el sitio en inglés, no reconoce el self, por lo tanto, no puede hacer un search. La solución, por más extraña y poco estable que puede llegar a ser, consiste en detectar si self existe y, en caso contrario como con el formulario en inglés, se le asigne el número de ID del equipo de Ventas del sitio web. Ya sé que usar un ID puede no ser muy estable porque estos pueden cambiar, pero no hay otra opción si no trae el self (al menos no una opción rápida para un problema que debe solucionarse con carácter de urgencia). Y debemos considerar que difícilmente se borrará el equipo de Ventas del sitio web para modificar su ID. De esta forma solucionaremos este extraño inconveniente en Odoo 10 (desconozco si ocurre lo mismo en Odoo 11, 12, etc).