Cómo añadir un campo a un formulario en Odoo sin programar

[AVISO: Este artículo es más complejo que los anteriores y son necesarios conocimientos técnicos para poder llevar a cabo lo que se explica sin romper nada]
Emergencia!! El comercial necesita poder registrar hoy el nombre de la mascota del cliente para la campaña que se lanza mañana!!

Seguro que esto os ha pasado alguna vez, versión de urgencia, despliegue en horario de oficina, corte del servicio, los usuarios como motos… Con Odoo tenemos una alternativa, podremos hacer los cambios “al vuelo” y solucionarlo en 15 minutos, no es lo más recomendable, y debemos tomar todas las precauciones posibles (backups, hacerlo primero en un entorno de preproducción, documentar los cambios…).

Bien, vamos a ello. La primera alternativa obvia sería utilizar un campo existente en el sistema para almacenar esta información temporalmente y salir del paso, pero si no tenemos uno disponible o necesitamos poder realizar búsquedas por ese campo, darle formato o que tire de una lista de valores nos veremos obligados a añadir un nuevo campo.

Lo primero que necesitamos saber es a qué modelo (objeto de Odoo) tenemos que añadir el campo. Para ello arrancaremos el “Modo Desarrollador” de Odoo, desplegamos el menú de opciones de nuestro usuario y pulsamos en “Acerca de Odoo”, en el diálogo que se abre pulsamos en la esquina superior derecha “Activar Modo Desarrollador”.

Ahora iremos al apartado donde queremos añadir el campo, en nuestro caso a la ficha de cliente y desplegamos el menú de desarrollador que ha aparecido arriba a la izquierda, seleccionamos “Ver Campos”, esto abre un diálogo con todos los campos del modelo y en la cabecera el nombre del modelo, que es lo que nos interesa ahora. En este caso “res.partner”.

Estamos listos para añadir el campo. Vamos al menú Configuración>Técnico>Estructura de la base de datos>Modelos (debemos hacerlo con un usuario que tenga el permiso de “Características técnicas” habilitado), y buscamos “res.partner”. Accedemos al registro correspondiente:

Pulsamos editar y en la lista de campos “Añadir un elemento”.

Vamos a cubrir los valores:

  • Nombre: en nuestro caso pondremos x_nombreMascota (dejamos la x_ al principio para indicar que son campos personalizados)
  • Etiqueta de Campo: La etiqueta a mostrar en los formularios, “Nombre Mascota”.
  • Tipo de campo: En este caso seleccionaremos char, si quisiéramos una listas de valores, marcaríamos “selection” y nos abre un campo para cargar las opciones posibles.
  • Dominio: con esto podemos limitar los valores del campo. Lo dejaremos tal cual está
  • Requerido: lo dejaremos sin marcar
  • Sólo lectura: lo mismo
  • Puede ser objeto de búsquedas: Marcaremos “Siempre puede ser buscado”
  • Traducible: Podemos marcarlo si utilizamos varios idiomas

Ahora pulsamos en guardar y cerrar, y otra vez en Guardar del modelo. Ahora volveremos a la ficha del cliente para añadir el campo al formulario de datos.

En la ficha de cliente desplegamos el menú de desarrollador y elegimos “Editar Form Vista”.

Esta es la parte más complicada, lo más cómodo es añadir el campo debajo de uno existente, para ello copiaremos la sección de xml de ese campo y la pegaremos a continuación, sustituyendo el nombre del campo por el nuevo “x_nombreMascota”, por ejemplo a continuación de “Título” (title). Pulsamos Guardar abajo, y al recargar la ficha de cliente “voilà!” ya está nuestro nuevo campo, podemos editar y darle valor.

A continuación vamos a hacer lo mismo para que aparezca en los listados de clientes. Igual que antes, desplegamos menú desarrollador, ahora desde un listado de clientes y elegimos “Editar treeVista”.

Tal como hicimos antes añadimos el campo donde queramos, guardamos y ya podemos ver el cambio. Ahora podemos ordenar por ese campo y utilizar el filtro de búsqueda avanzado para buscar por él. Ya tenemos a nuestro comercial contento, crisis solventada en menos de media hora.

De todos modos vuelvo a recordar que esta forma de trabajar no es lo aconsejable, nos puede servir para salir del paso, pero una vez pasado el agobio debemos trasladar los cambios a un módulo python extendiendo el modelo res.partner y las vistas afectadas. Con esto evitaremos problemas futuros de conflictos y pérdida de cambios.

4 Comments

  1. David Sánchez 14/04/2017 at 2:36 am - Reply

    Muy buen artículo, muchas gracias por la información.

    Me queda la duda de si podrías hacer una entrada para explicarnos como se haría “bien hecho”, como indicas de realizar los cambios “extendiendo el modelo y las vistas”.

    Muchas gracias

    • Sinerkia Innovación y Desarrollo 03/05/2017 at 5:07 pm - Reply

      Muchas gracias David.

      Cómo hacerlo “bien hecho”, desarrollando un módulo para extender la funcionalidad, es algo bastante complejo y depende de la versión de Odoo. De todos modos lo tenemos en mente para futuras publicaciones.

      Un saludo

  2. Xavier Torres 30/06/2017 at 3:50 pm - Reply

    Excelente explicacion, lo he aplicado en odoo 10 y ha funcionado de maravilla, solo tengo una pequeña consulta: como puedo hacer para que este campo creado (nombre de mascota) se refleje en la factura ? de ante mano agradezco tu respuesta.

    • Muchas gracias Xavier. Te contestamos aquí, pero nos has dado una idea para la “parte 2” de este post donde lo explicaremos de forma más detallada.
      Para modificar la factura sin desarrollar un módulo, lo más sencillo es ir a “Configuración> Interfaz de Usuario>Vistas” y buscas ahí la vista report_invoice_document.
      Al abrirla verás que es un qweb similar al formulario donde añadiste el campo.
      Aquí tienes que hacer lo mismo que antes, buscar el punto donde lo quieres introducir y copiando como están otros campos en la factura, añades un “<span t-field=”o.x_nombreMascota”/>”, suponiendo que el campo x_nombreMascota esté en la factura. Si lo has introducido en el “res.partner” puedes usar “<span t-field=”o.partner_id.x_nombreMascota”/>”

      Esperamos que te sirvan de ayuda estas indicaciones. Un saludo!

Leave A Comment

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies