Ajouter un champ dans Odoo par l’interface

Odoo permet d’ajouter des nouveaux champs par l’interface, voyons comment faire sans prendre de risque de perdre son travail lors de la prochaine mise à jour.
par Pierre Verkest, mis à jour le 24/03/2015

Odoo permet d’ajouter des nouveaux champs par l’interface. Cependant cela représente des risques et l’on peut perdre son travail à la prochaine mise à jour de la base de données.

Voyons ici comment ajouter un champ sans perdre son travail lorsque l’intégrateur fera la prochaine mise à jour de notre base de données.

Dans cet exemple nous allons ajouter le champ SIRET sur les compagnies, puis afficher le champ sur la vue formulaire dans le menu Ventes → Ventes → Clients en dessous du champ Site Web.

Prés-requis:

  • Pouvoir se connecter avec le compte administrateur.
  • Avoir les droits “Caractéristiques techniques” (Configurable dans l’onglet “Droits d’accès” sur la vue formulaire des utilisateurs).
  • Activer le mode développeur (À propos → Activer le mode développeur)
  • Comprendre ce qu’est une base de données, c’est l’endroit où sont stockées toutes vos données de manière structurée dans des tables. Dans Odoo, beaucoup de choses sont stockées dans la base de données, vos données métiers (les clients, les factures, ...) mais aussi des informations technique (une partie de l’interface utilisateur, les modèles, les champs...).
  • Comprendre ce qu’est un modèle, un modèle représente un objet (une facture, une compagnie...) et est majoritairement représenté par une table dans la base de données.
  • Comprendre ce qu’est un champ, c’est un attribut du modèle, ce qui correspond à une colonne d’une table dans la base de données.

Ajouter un champ à un modèle

Note

Le modèle res.partner regroupe à la fois les clients, les fournisseurs que ce soit des entreprises ou des personnes.

Note

Pour connaître le nom technique d’un champ et/ou d’un modèle, avec le mode développeur activé, il suffit de survoler un champ de la vue formulaire pour avoir toutes les informations nécessaires dans l’info bulle.

  • Aller dans le menu Configuration → Technical → Structure de la base de données → Champs
  • Créer le champ qui recevra l’identifiant SIRETde l’entreprise, nous avons paramétré les champs suivants :
    • Par convention, les champs créés par l’interface doivent commencer par x_, nous avons donc mis x_siret
    • Le libellé est celui qui sera affiché dans l’interface, SIRET
    • Choisir le type de champ parmi la liste, char
    • La taille, c’est la longueur maximum pour la zone de texte, 14 caractères
    • Le modèle Partenaire, il est possible de rechercher un modèle en tapant son nom technique (res.partner)
    • Recherche toujours possible pour permettre de trouver une société par son identifiant SIRET en utilisant la recherche avancée.

Les principaux type de champ

  • char : pour les zones de texte d’une taille limitée (<256)
  • boolean : pour les case à cocher Vrai / Faux
  • text :pour avoir un grande zone de saisie
  • html : pour permettre du contenu html
  • date : pour les dates
  • datetime : pour gérer la date & l’heure
  • float : pour gérer les nombres décimaux
  • integer : pour les nombres entiers
  • selection : pour une liste de valeurs prédéfinies
  • many2many, many2one, one2many : relation pour lier les modèles entre eux

Ajouter un champ sur une vue

Warning

Pour ne pas perdre votre travail quand votre intégrateur effectuera la prochaine mise en production, il est important de ne pas modifier une vue existante mais d’en créer une nouvelle qui hérite de cette première.

Warning

Il est fortement conseillé d’effectuer ces étapes sur une plateforme de test avant de le faire sur un serveur de production.

  • Aller dans le menu Configuration → Technical → Interface utilisateur → Vues

  • Repérer la vue dans laquelle vous souhaitez ajouter le champ

    • Filtrer par l’objet (modèle) res.partner
    • Filtrer par type de vue Formulaire
    • Noter le nom de la vue dont vous souhaitez hériter res.partner.form

  • Repérer la position où vous souhaitez l’ajouter

    • Ouvrir la vue à héritée en vue formulaire pour visualiser la définition de la vue au format XML

    • Préparer l’expression Xpath, le but d’une expression Xpath est de sélectionner une une balise parmi l’ensemble des balises xml:

      //field[@name='website']
      

      cela signifie:

      • //: recherche dans tous le document
      • field: les balises field
      • [@name='website']: ayant un attribut name égal à website

  • Créer une nouvelle vue qui hérite de la vue précédente

    • dupliquer une vue existante

      Note

      Le champ type de vue étant en lecture seule, il devient impossible d’éditer le type de vue, il faut donc dupliquer une vue du même type pour en créer des nouvelles vues avec le type souhaité, ici Formulaire

    • Nommer la vue Ma vue personalisée de res.partner

    • Objet est le nom du modèle res.partner

    • Vue héritée, celle repérée précédemment res.partner.form

    • Architecture:

      <?xml version="1.0"?>
      <xpath expr="//field[@name='website']" position="after">
        <field name="x_siret" attrs="{'invisible': [('is_company','!=', True)]}"/>
      </xpath>
      
      • expr=”//field[@name=’website’]”: on retrouve l’expression xpath précédemment préparée pour retrouver la balise XML du champ Site web dans la vue parente
      • position=”after”: on souhaite positionner le contenu de la balise xpath après le champ Site Web
      • field name=”x_siret”: Ajout du champ SIRET
      • attrs=”{‘invisible’: [(‘is_company’,’!=’, True)]}”: afficher le champ SIRET que si c’est une entreprise.
  • Vous pouvez faire de même avec les vues listes (Arbre) et de recherches

  • Allez voir le résultat !

Les valeurs possible de l’attribut position dans une balise xpath

  • inside (par défaut): en dernier à l’intérieure de la balise sélectionnée
  • replace: remplace la balise sélectionnée
  • after: après la balise sélectionnée
  • before: avant la balise sélectionnée

 

Pour plus de renseignement vous pouvez consulter la documentation sur les vues Odoo