Avertissement dynamique
Le module Avertissement dynamique permet d'afficher un avertissement sur l'enregistrement en cours de modification. Ce module est très utilisé pour rappeler aux utilisateurs de renseigner un ou plusieurs champs avant de pouvoir faire évoluer un enregistrement ou pour bloquer un flux.
Exemples d'utilisation : rendre l'ajout de frais de port dans une vente obligatoire avant confirmation, bloquer le traitement d'une livraison si la limite de crédit du client est atteinte.
Après l'installation du module, le sous-menu Avertissement dynamique s'ajoute dans le menu Configuration> Communication.
Ce module technique se base sur les langages python ou SQL pour implémenter les conditions d'affichage de l'avertissement. Des connaissances en Python ou SQL sont donc nécessaires pour configurer ce module.
Création d'un avertissement
Un avertissement s'identifie par son nom (en-tête) ; il s'affiche si un test prédéfini est vérifié lors d'un déclenchement, et peut-être limité des utilisateurs et/ou groupes. Le formulaire est construit dans cette logique.
Il est recommandé de décrire ce que l'avertissement bloque dans le nom de l'avertissement.
Paramétrage du déclenchement
Cet onglet permet de définir quel champ déclenchera le test lors de sa création/modification, et aboutira éventuellement à l'affichage de l'avertissement.
-
Modèle : objet sur lequel l'avertissement va s'appliquer.
-
Est bloquant : à cocher si l'avertissement doit être bloquant. Si ce champ n'est pas coché un message de confirmation sera affiché demandant si l'utilisateur veut continuer ou non.
-
Actif à la modification / création : à cocher pour rendre l'avertissement effectif à la modification et/ou la création.
-
Cadre déclenchement : liste des conditions d'application du test. On se base sur un champ de l'objet, un opérateur logique et une Valeur.
Définir un état comme déclencheur permet d'ajouter simplement des conditions d'avancement dans un workflow (cf. illustration ci-contre).
Paramétrage du test
L'avertissement ne s'affiche que lorsque le test est vérifié (valeur True renvoyée). Pour rappel, le test ne s'effectue que si le déclenchement se produit.
Cadre Test
Le test peut être de type SQL ou Python : sélectionner le langage souhaité. Créer ensuite le Test Python/Test SQL qu'Open-Prod effectuera au moment du déclenchement.
Cadre Message
Renseigner le message à afficher lorsque le test est vérifié. Il est possible d'utiliser la syntaxe ${object.XXX} pour améliorer le message d'erreur par une information dynamique.
L'exemple ci-contre renvoie True si le montant facturé au client est supérieur au montant de la limite de crédit. Dans ce cas, la livraison sera bloquée : le passage du champ state à la valeur done sera interrompue, et le message s'affichera.
Limitation à des utilisateurs ou groupes
L'onglet « Utilisateurs et groupes » permet de lister les groupes ou utilisateurs sur lesquels l'avertissement ne sera pas appliqué.
Pour faire référence à l'utilisateur en cours dans le test python, utiliser la synthaxe « %object.env.user ».
Autres exemples de tests (Python)
Avertir l'utilisateur si une ligne des ventes ne contient pas de taxe à la validation
[True for x in %object.order_line_ids if not bool(x.taxes_ids)]
Bloquer un OT si un document est rattaché à un autre partenaire
[True for x in %object.rm_draft_ids if (x.product_id.partner_id != %object.customer_id and x.product_id.partner_id != %object.company_id.partner_id)]
Bloquer les livraisons sur un client bloqué
%object.partner_id.display_state == 'blocked'
Autres exemples de tests (SQL)
Bloquer le traitement d'un picking si le client a un dépassement de paiement supérieur à 1 mois
SELECT true WHERE EXISTS( SELECT stock_picking.id FROM stock_picking JOIN account_invoice ON (stock_picking.partner_id=account_invoice.partner_id) WHERE stock_picking.id=%object_id AND account_invoice.state='open' AND (account_invoice.date_due + interval '1 month') < current_date)