<info> <name>Frédéric Péters</name> <email>fpeters@entrouvert.com</email> </info>

Dans la définition de pages conditionnelles et dans le paramétrage de sauts dans le workflow, il y a besoin d'exprimer une condition sous forme d'une expression Python. Cette page ne se veut évidemment pas un guide complet, toutes les possibilités offertes par le langage Python étant possibles, mais une série d'exemples concrets, rencontrés dans le paramétrage.

<note>

Une explication sur les variables accessibles se trouve dans la page variables de substitution.

</note>
Expressions simples

Pour tester le code postal associé à l'utilisateur courant, par exemple pour proposer une page différente aux habitants d'une commune particulière, l'expression suivante pourrait être utilisée :

<example>`session_user_var_codepostal == '07530'`</example>

Dans le même ordre d'idée, pour les utilisateurs qui ne seraient pas de cette commune :

<example>`session_user_var_codepostal != '07530'`</example>

De manière générale, la négative peut également être obtenue en entourant l'expression d'un `not()` :

<example>`not(session_user_var_codepostal == '07530')`</example>

Il peut également être imaginé de viser un département entier, en regardant les deux premiers chiffres, deux manières sont possibles :

<example>`session_user_var_codepostal.startswith('07')`</example>

Ou, en utilisant `[:2]` pour signifier « les deux premiers caractères » :

<example>`session_user_var_codepostal[:2] == '07'`</example>

Pour afficher une page uniquement si un champ texte optionnel a été complété, la condition serait la suivante : (en considérant un champ de formulaire auquel la variable "texte" a été associée)

<example>`bool(form_var_texte)`</example>

Tout autre chose, pour une réservation, on pourrait vouloir afficher une page supplémentaire demandant les noms des inscrits, quand l'inscription est faite pour plusieurs personnes. L'utilisation de `int()` permet les comparaisons numériques :

<example>`int(form_var_nombre_de_reservations) > 1`</example>

Expressions combinées

Pour étendre un exemple donné plus haut, si on voulait afficher une page aux usagers de deux communes différentes, on combinerait les expressions avec le mot-clé `or` :

<example>`session_user_var_codepostal == '07520' or session_user_var_codepostal == '07530'`</example>

Cela peut devenir long avec un grand nombre de codes postaux, la même expression peut être réduite en expression simple avec `in` :

<example>`session_user_var_codepostal in ('07510', '07520', '07530')`</example>

Sur ces exemples de codes postaux, si l'application visait plusieurs pays, on devrait combiner le test, pour par exemple avoir « 07530 » comme code postal et « France » comme pays. Cela se fait avec le mot-clé `and` :

<example>`session_user_var_codepostal == '07530' and session_user_var_pays == 'France'`</example>

Condition sur un âge ou un délai

Pour limiter une condition aux enfants dont l'âge est inférieur à 6 ans vous pouvez utiliser la fonction `utils.age_in_years` sur une variable de type date.

<example>`utils.age_in_years(form_var_date_de_naissance) < 6`</example>

Pour prendre en compte le nombre de mois vous disposez aussi de `utils.age_in_years_and_months`. Ici l'âge à ne pas dépasser sera 6 ans et 3 mois.

<example>`utils.age_in_years_and_months(form_var_date_de_naissance) < (6, 3)`</example>

Les délais en terme de jour se calculeront avec `utils.age_in_days`. Ici le délai est de 31 jours à dater de la soumission d'un formulaire.

<example>`utils.age_in_days(form_receipt_datetime) >= 31`</example>

Les délais en terme de secondes se calculeront avec `utils.age_in_seconds`. Ici on attendra au mieux deux heures (7200 secondes) avant de déclencher cette condition.

<example>`utils.age_in_seconds(form_receipt_datetime) >= 7200`</example>