Chapitre 6 : Création d’un module sur Odoo (part 16)

Rechercher et filtrer les enregistrements

Odoo utilise des filtres pour n’inclure que les enregistrements les plus pertinents en fonction de l’objectif de la vue sur laquelle vous vous trouvez. Cependant, vous pouvez modifier le filtre par défaut ou rechercher des valeurs spécifiques.

Filtres préconfigurés

Vous pouvez modifier la sélection par défaut des enregistrements en cliquant sur Filtres et en sélectionnant un ou plusieurs filtres préconfigurés.

 Exemple

Dans le rapport Analyse des ventes, seuls les enregistrements au stade de la commande client sont sélectionnés par défaut. Cependant, vous pouvez également inclure des enregistrements au stade de l’offre en sélectionnant Offres. En outre, vous pouvez inclure uniquement les enregistrements d’une année spécifique, par exemple 2022, en sélectionnant Date de commande ‣ 2022.

Remarque

Si vous sélectionnez des filtres préconfigurés dans le même groupe (c’est-à-dire qui ne sont pas séparés par une ligne horizontale), les enregistrements peuvent correspondre à n’importe quelle condition pour être inclus. En revanche, si vous sélectionnez des filtres dans des groupes différents, les enregistrements doivent répondre à toutes les conditions pour être inclus.

Filtres personnalisés

Vous pouvez créer des filtres personnalisés en utilisant la plupart des champs présents sur le modèle en cliquant sur Filtres ‣ Ajouter un filtre personnalisé, en sélectionnant un champ, un opérateur, une valeur et en cliquant sur Appliquer.

 Exemple

Vous ne pouvez inclure que les enregistrements d’un seul vendeur dans le rapport d’analyse des ventes, par exemple Mitchell Admin, en sélectionnant Vendeur comme champ, est égal à comme opérateur et en tapant Mitchell Admin comme valeur.

Remarque

Si les enregistrements ne doivent répondre qu’à une condition parmi plusieurs, cliquez sur Ajouter une condition avant d’appliquer un filtre personnalisé. Si les enregistrements doivent répondre à toutes les conditions, ajoutez plutôt de nouveaux filtres personnalisés.

Recherche de valeurs

Vous pouvez utiliser le champ de recherche pour rechercher rapidement des valeurs spécifiques et les ajouter comme filtre. Saisissez la valeur complète que vous recherchez et sélectionnez le champ souhaité, ou saisissez une partie de la valeur, cliquez sur le bouton déroulant (⏵) situé devant le champ choisi et sélectionnez la valeur exacte que vous recherchez.

Exemple

Au lieu d’ajouter un filtre personnalisé pour sélectionner les enregistrements dont le vendeur est Mitchell Admin dans le rapport d’analyse des ventes, vous pouvez rechercher Mitch, cliquer sur le bouton déroulant (⏵) en regard de Rechercher un vendeur pour : Mitch, et sélectionner Mitchell Admin.

Searching for a specific value on the Sales Analysis report

Remarque

L’utilisation du champ de recherche équivaut à l’utilisation de l’opérateur « contains » lors de l’ajout d’un filtre personnalisé. Si vous saisissez une valeur partielle et que vous sélectionnez directement le champ souhaité, tous les enregistrements contenant les caractères que vous avez saisis pour le champ sélectionné seront inclus.

Group records

Vous pouvez cliquer sur Grouper par sous le champ de recherche pour regrouper les enregistrements en fonction de l’un des groupes préconfigurés.

 Exemple

Vous pouvez regrouper les enregistrements par vendeur dans le rapport d’analyse des ventes en cliquant sur Grouper par et en sélectionnant Vendeur. Aucun enregistrement n’est filtré.

Grouping records on the Sales Analysis report

Vous pouvez également personnaliser les groupes en utilisant une large sélection de champs présents sur le modèle. Pour ce faire, cliquez sur Grouper par ‣ Ajouter un groupe personnalisé, sélectionnez un champ et cliquez sur Appliquer.

Activité :

  1. Copiez le code donné dans l’exercice :
   <odoo>
       <data>
           <record id="view_hospital_patient_tree" model="ir.ui.view">
               <field name="name">hospital.patient.tree</field>
               <field name="model">hospital.patient</field>
               <field name="arch" type="xml">
                   <tree>
                       <field name="name"/>
                       <field name="age"/>
                       <field name="gender"/>
                   </tree>
               </field>
           </record>
       </data>
   </odoo>
  1. Remplacez toutes les occurrences du mot « tree » par « search » dans le code copié. Par exemple :
   <odoo>
       <data>
           <record id="view_hospital_patient_search" model="ir.ui.view">
               <field name="name">hospital.patient.search</field>
               <field name="model">hospital.patient</field>
               <field name="arch" type="xml">
                   <search>
                       <field name="name"/>
                       <field name="age"/>
                       <field name="gender"/>
                   </search>
               </field>
           </record>
       </data>
   </odoo>
  1. Enregistrez le code modifié dans un fichier XML, par exemple « patient.xml ».

Maintenant, vous avez un nouvel enregistrement de vue « search » qui est une copie de l’enregistrement de vue « tree » initial, mais avec le mot « tree » remplacé par « search ». Vous pouvez utiliser ce nouvel enregistrement de vue pour afficher une liste de recherche des enregistrements du modèle « HospitalPatient ».

Activité :

  1. Ouvrez le fichier XML contenant l’enregistrement « action_hospital_patient » (par exemple, « patient.xml »).
  2. Recherchez l’enregistrement avec l’id « action_hospital_patient » et ajoutez les attributs context et search_view_id :
<record id="action_hospital_patient" model="ir.actions.act_window">
    <field name="name">Patients</field>
    <field name="res_model">hospital.patient</field>
    <field name="view_mode">tree,form</field>
    <field name="context">{'default_child_filter': True}</field>
    <field name="search_view_id" ref="om_hospital.view_hospital_patient_search"/>
</record>
  1. Enregistrez les modifications dans le fichier XML.

Maintenant, l’enregistrement « action_hospital_patient » comprend le contexte spécifié, qui définit la valeur par défaut du filtre « child_filter » à True, et l’attribut search_view_id est défini sur la référence « om_hospital.view_hospital_patient_search ». Cela permettra d’appliquer le filtre et d’utiliser la vue de recherche personnalisée lors de l’utilisation de cette action pour afficher la liste des patients.

Activité :

  1. Ouvrez le fichier XML contenant la vue formulaire du modèle « hospital.patient » (par exemple, « patient.xml »).
  2. Recherchez le champ « ref » dans la vue formulaire et supprimez-le :
<field name="ref"/>
  1. Ajoutez un filtre sur les champs « name » et « ref » pour permettre la recherche par nom et référence. Utilisez l’attribut filter_domain pour spécifier la condition de recherche :
<field name="name" filter_domain="['|',('name', 'ilike', self), ('ref', 'ilike', self)]"/>
  1. Enregistrez les modifications dans le fichier XML.

Maintenant, le champ « ref » a été supprimé de la vue formulaire et un filtre a été ajouté sur les champs « name » et « ref » pour rechercher à la fois le nom et la référence. Lorsque vous utilisez la vue formulaire pour afficher les enregistrements du modèle « hospital.patient », vous pouvez saisir un nom ou une référence dans le champ de recherche pour filtrer les résultats en conséquence.

Activité :

  1. Ouvrez le fichier XML contenant la vue formulaire du modèle « hospital.patient » (par exemple, « patient.xml »).
  2. Recherchez la balise <field> correspondant au champ « gender » et ajoutez l’attribut domain avec la condition pour filtrer uniquement les enregistrements ayant le genre « male » ou « female » :
<field name="filter_male" string="Male" domain="[('gender', '=', 'male')]"/>
<field name="filter_female" string="Female" domain="[('gender', '=', 'female')]"/>
  1. Enregistrez les modifications dans le fichier XML.

Maintenant, lorsque vous utilisez la vue formulaire pour afficher les enregistrements du modèle « hospital.patient », seuls les enregistrements ayant le genre « male » seront affichés grâce au filtre appliqué par le domaine spécifié.

Activité :

Pour ajouter un filtre sur le champ « is_child » avec la valeur « True » en utilisant uniquement le domaine, vous pouvez procéder comme suit :

  1. Ouvrez le fichier XML contenant la vue formulaire du modèle « hospital.patient » (par exemple, « patient_view.xml »).
  2. Recherchez la balise <field> correspondant au champ « is_child » et ajoutez l’attribut domain avec la condition pour filtrer uniquement les enregistrements ayant la valeur « True » pour le champ « is_child » :
<separator/>
<field name="filter_childs" string="Childs" domain="[('is_child', '=', True)]"/>
  1. Enregistrez les modifications dans le fichier XML.

Maintenant, lorsque vous utilisez la vue formulaire pour afficher les enregistrements du modèle « hospital.patient », seuls les enregistrements ayant la valeur « True » pour le champ « is_child » seront affichés grâce au filtre appliqué par le domaine spécifié.

Activité :

  1. Ouvrez le fichier XML contenant la vue « tree » du modèle « hospital.patient » (par exemple, « patient.xml »).
  2. Recherchez la balise <tree> et à l’intérieur, ajoutez une balise <group> pour spécifier le champ de regroupement. Utilisez l’attribut string pour définir le libellé du groupe :
<search>
    <field name="name"/>
    <field name="age"/>
    <field name="gender"/>
    ...
    <group expand="0" string="Group by ...">
        <filter name="group_by_gender" string="Gender" context="{'group_by': 'gender'}"/>
    </group>
</search>

Assurez-vous de remplacer « … » par les autres champs existants dans votre vue « tree ».

  1. Enregistrez les modifications et actualisez l’application Odoo.

Maintenant, lorsque vous utilisez la vue « tree » du modèle « hospital.patient », vous verrez un groupe avec l’étiquette « Group by … » (remplacez « … » par le libellé approprié) et un filtre « Gender ». Vous pouvez cliquer sur le filtre « Gender » pour regrouper les enregistrements en fonction de leur valeur de champ « gender ».