Filtrer les informations par date

dans la barre de recherche de Odoo
24 mai 2024 par
Nexelans, Emmanuel Chaumery
| Aucun commentaire pour l'instant

Introduction

Lorsque l'on fait une recherche dans Odoo, le champ des possibles est assez large. En fait même, il est maximal. On peut faire des recherches sur toutes les zones disponibles dans les formulaires de saisie (ou presque).

Mais il en est une qui est un peu différente car son format l'est aussi : la date.

Les options disponibles par défaut

Quand on doit filtrer par dates, les options sont limitées par défaut. Par exemple, pour les documents de vente :

  • Les 3 derniers mois
  • Les 3 derniers trimestres
  • Les 3 dernières années

Il arrive régulièrement que l'on ait besoin de données correspondant à une date précise ou à une plage de dates précises.

Rappel sur le format

Dans le langage Python qui est la base du développement de Odoo, il y a 2 formats de dates :

  • La date simple qui peut aussi s'afficher sous forme de plage de dates
  • le format datetime qui intègre la date elle même avec l'heure

Dès lors, indiquer une date de recherche sur une journée ne sera pas problématique sur une date simple mais le sera sur une datetime.

En effet, dire qu'une date est égale au 6 mai 2024 sur une date cherchera toutes les occurrences de cette date mais sur une datetime, cela ne renverra rien car il faudra plutôt préciser que cette date doit être située entre le 6 mai 2024 à 00:00 et le 6 mai 2024 à 23:59.

Chercher une date simplement

En V17, Odoo nous propose une plage de date dans le domaine de recherche. Voici la marche à suivre :

  1. Dans la barre de recherche, cliquer sur "Ajouter un filtre personnalisé"
  2. Aller chercher la date dans la liste des champs
  3. Choisir l'opérateur "est entre"
  4. Attention, les dates sont alors indiquées avec l'heure actuelle. Modifier donc les dates ET les heures de la plage

Filtre dates

En cliquant sur "Ajouter", votre filtre s'applique.

Mais il s'applique uniquement sur cette recherche. Il faudra donc recommencer à chaque fois ou enregistrer cette recherche mais ça restera statique donc il faudra changer la date à chaque recherche.

Si vous disposez de Studio, la version personnalisée de Odoo Entreprise, vous allez pouvoir améliorer votre recherche.

Personnalisation

Ce n'est pas une énorme évolution mais vous allez pouvoir ajouter la date recherchée dans le champ d'autocomplétion. Mais taper une date dans la barre de recherche ne renverra rien, il faudra cliquer sur la roue dentée pour modifier la plage de dates comme indiqué au paragraphe précédent.

autocomplétion date

En allant plus loin dans la personnalisation, on va pouvoir quand même améliorer notre recherche mais il va falloir faire un peu de code.

Comme d'habitude, si vous ne comprenez pas ce qui suit, évitez de le faire, vous pouvez potentiellement faire des dégâts dans votre base. Dans le doute, contactez nous pour le faire.

Rappel : la barre de recherche est une vue de type recherche. Comme pour toute modification de vue, créez une vue héritée de la vue standard sinon vos modifications seront probablement supprimées lors de la prochaine mise à jour. Et comme pour toute modification de code, créez une base de test en Saas ou une brache de développement et une de staging sur www.odoo.sh/

Dans notre exemple, nous souhaitons ajouter 2 nouveaux filtres : les commandes de la semaine passée et celles du mois passé. Voici le code qu'il va falloir ajouter à notre vue héritée de la vue standard qui s'appelle (pour les commandes) sale.order.search.inherit.quotation , elle même héritée de sale.order.list.select

<data>
  <xpath expr="//filter[@name='filter_create_date']" position="after"> <!-- on se positionne après le filtre de date de création -->
    <filter string="Date commande semaine dernière" name="date_commande_semaine" domain="[('date_order','&gt;=',(context_today() + relativedelta(days=-7)).strftime('%Y-%m-%d'))]"/> <!-- on ajoute la semaine dernière-->
    <filter string="Date commande mois dernier" name="date_commande_mois" domain="[('date_order','&gt;=',(context_today() + relativedelta(months=-1)).strftime('%Y-%m-%d'))]"/> <!-- puis le mois dernier -->
  </xpath>
</data>

Ce que l'on fait, c'est apporter une modification du domaine en dur avec des fonctions Python spécifiques :

context_today() : la date du jour

relativedelta(...) : on ajoute à la date du jour un certain nombre d'années (years), mois (months), semaines(weeks) ou jours (days) en mettant "-" si on veut remonter dans le temps. relativedelta(days=-7) va chercher jusqu'à 7 jours dans le passé. On aurait pu mettre relativedelta(weeks=-1)

strftime est le format de la date

Et voilà 

filtre code

Conclusion

Ce n'est pas forcément évident de filtrer (ou regrouper) sur les dates dans Odoo, les filtres de base étant limités mais avec un peu de manipulation voire un peu de code on peut se faciliter la vie assez simplement.

Et si vous voulez éviter de mettre les doigts dans le cambouis et faire de possibles grosses bêtises, nous sommes là pour vous !

Se connecter pour laisser un commentaire.