6 min read

Booster votre CRM avec les actions automatisées OpenERP 7 ou Odoo 8

Booster votre CRM avec les actions automatisées OpenERP 7 ou Odoo 8

Les actions automatisées peuvent être créées soit via du code python soit via l’interface. Nous nous intéressons ici à une création via l’interface.

Le but est de pouvoir créer une règle qui déclencherait l’envoi d’un email de notification en fonction du statut d’une opportunité et de sa date de clôture prévue.

Création d’une règle

Les règles automatisées permettent de déclencher une action sur un modèle Odoo.

Cette action peut être déclenchée soit à la modification de l’objet(création, enregistrement), soit à date.

Pour réaliser une règle il est donc nécessaire de poser ses conditions et identifier le bon objet Odoo à observer.

  • model : Le modèle
  • domain : le domaine, le filtre sur les objets concernés
  • user_id : l’utilisateur concerné, non requis

Pour trouver le bon objet, il faut soit aller voir dans le code, soit aller sur une page de l’objet concerné et activer le mode développeur (menu utilisateur/A propos de openerp/activer le mode développeur) pour connaître le nom des champs.

Les règles de déclenchement sont de deux types. Les filtres et le timer.

Les filtres se déclenchent à l’action. Si il n’y a pas de dates, c’est à la création/modification de l’objet.

Les conditions de filtres

Il y a la condition pre et la condition post. La condition pre ne peut être vérifiée qu’à la modification(update) de l’objet alors que la condition post sera vérifiée dans tous les cas.

Ces conditions sont représenteés comme des filtres. Pour créer un nouveau filtre, il suffit d’aller dans l’interface correspondante, de créer un nouveau filtre personnalisé et de le rendre visible à tous. Le filtre sera alors accessible via l’interface.

Le timer

Le timer permet d’indiquer un champs date de l’objet à vérifier et de déclencher ces actions lorsque la date est atteinte. On peut mettre une valeur négative, ce qui permet par exemple de déclencher l’action avant la date.

Ce peut être pratique pour déclencher une notification 15 minutes avant un rendez-vous par exemple.

Les actions

Les actions représentent les actions à exécuter quand les conditions de filtres et de timer sont réunies.

Il y a plusieurs types d’actions, qui représentent l’ensemble des possibilités d’actions. Ce peut être du code python, ou des références aux méthodes d’un objet ou encore des actions avancées comme envoyer un email.

Pour ce qui nous concerne, c’est le type d’actions “Couriel” qui nous intéresse.

Une fois ce type sélectionné, plusieurs champs sont à remplir, notamment “Adresse électronique” (l’expéditeur), “Objet”, le sujet du message, et enfin “Message” pour le corps du message. Si l’on survole avec la souris ces 3 labels, une aide contextuelle nous indique la syntaxe à utiliser.

Dans ce cas, c’est la syntaxe [nom_de_lobjet] qui est proposée.

Une alternative ?

La solution avec l'action “Courriel”, est bien car elle est relativement simple et rapide à implémenter via l’interface. Pour autant dés que l’on veut mettre en oeuvre un corps de message plus évolué, avec plus de variables à traiter, ça peut rapidement devenir difficile, surtout si l’on ne connaît pas bien le modèle de données de l’objet et ses méthodes.

Il existe pourtant une interface de gestion de modèles d’email dans la v7 d’Openerp qui offre beaucoup d’avantages :

  • Prévisualition du corp du message avec un objet en contexte
  • Outil de construction de variable

Malheureusement ces 2 interfaces ne sont pas connectées, et n’utilisent pas la même syntaxe, ou les crochets sont remplacés par des accolades et préfixé du signe $ ${“nom_de_lobjet”}

Pour profiter du meilleur des 2 solutions il est possible de :

  • Créer un modèle de mail depuis “Configuration / Technical / Courriel / Modèles”
  • Dans l’interface d’actions automatisées, créer une server action python qui va appeler le modèle de courriel précédemment créé

Exemple (code python à mettre dans l’action)

email_templates = self.pool.get(“email.template”)
template_ids = email_templates.search(cr, uid, [(“name”, “=”, u”Test mail opportunité”)])

if template_ids:
   email_templates.send_mail(cr, uid, template_ids[0], object.id, True)

La partie qui nous intéresse plus particulièrement est :

[(“name”, “=”, u”Test mail opportunité”)]

Elle correspond à l’expression du domaine qui va oeuvrer comme filtre pour sélectionner le bon modèle de courriel. Dans ce cas u”Test mail opportunité”. Il vous suffit donc de reprendre ce code, et de remplacer cette valeur par celle du nom de votre modèle de courriel.

Des évolutions dans Odoo v8 ?

Dans Odoo v8, l’interface de gestion des actions automatisées, dans le cas d’une action de type “Courriel”, permet de sélectionner un modèle de courriel, tout simplement. L’interface de gestion des actions automatisées, est également simplifiée.

Il n’est plus possible de mixer les conditions du déclencheurs. C’est le résultat de la refactorisation/fusion/unification d’interfaces dans la v8. On peut considérer que dés la v8 la question de la gestion des modèles de courriel est unifiée.

La v8 apporte également un nouveau composeur graphique, qui cette fois, permettra d’éditer visuellement le contenu du modèle, et de profiter du styling css pour des compositions plus avancées.

Tester ses actions automatisées

Le problème avec les actions automatisées, notamment quand elles sont déclenchées via le timer, c’est de les tester. C’est à dire s’assurer que l’action est correctement déclenchée à date, et s’assurer que l’action executée se passe comme attendu.

En allant dans (Configuration / technical / Planificateur / actions planifiées) on trouvera l’action Check actions rules qui s’occupe de déclencher l’ensemble des actions automatisées. Une fois dans la configuration de Check actions rules, il est possible de réduire la fréquence du planificateur et de forcer sa prochaine date de déclenchement, pour forcer l’execution par exemple dans la minute qui vient. Il faut également faire attention au réglage de la timezone du serveur et à la différence entre la timezone de l’utilisateur et l’utc (temps universel). Toutes les valeurs de dates sont stockées au format UTC dans la base donnée.

Ce processus est relativement hasardeux et il rare que l’on réussisse au premier coup à avoir ce que l’on veut. Nous vous recommandons de ne pas faire ce genre de tests en production.

L’autre solution est de développer un module personnalisé, dans lequel on va programmatiquement définir les actions et les triggers. Le gros avantage de coder les actions automatisées, c’est que l’on peut écrire des tests fonctionnels basés sur des user-case. Nous avons pour ce cas particulier, développé chez Anybox un module pour jouer avec le temps lors des tests en manipulant les dates.

https://pypi.python.org/pypi/anybox.testing.datetime

Ainsi l’on peut simuler via les tests l’ensemble des comportements, et s’assurer donc d’un niveau de qualité élevée pour l’action automatisée, ce qui en facilite la maintenance et l’évolution.

Pour aller plus loin

Openerp technical memento

Ce memento fait une synthèse technique des objets, champs et méthodes standard d’Odoo. C’est intéressant à consulter pour mieux comprendre la syntaxe des domaines dans Openerp.

https://www.odoo.com/files/memento/OpenERP_Technical_Memento_latest.pdf

Vidéo action automatisée V7

Une vidéo de l’éditeur, sur la mise en place d’une action automatisée

https://www.youtube.com/watch?v=Uk8XEe-YCNk

Code python pour appeller le modèle de courriel

La réponse à une question qui montre l’utilisation de code python pour utiliser un template, et l’utilisation d’une valeur négative dans le timer

https://accounts.openerp.com/forum/Help-1/question/how-to-get-Reminder-for-Scheduled-Phone-call-9871