SmartExpressions

De YoWiki
Sauter à la navigation Sauter à la recherche

Cette page est en cours de construction

Introduction

On désigne par "SmartExpressions" la syntaxe permettant de paramétrer les Dynvars et les Visible If.

Paramétrage

Pour mémoire : la syntaxe est basée sur PHP : https://www.php.net/manual/fr/funcref.php

Bases de la syntaxe

Cette page est encore en cours de construction

Principes

La syntaxe SmartExpressions permet d'effectuer des enchaînements logiques de type SI ... ALORS afin de déterminer des règles d'applications, ainsi que des calculs mathématiques

? : Alors

: : Sinon

or, and : OU, ET

~ : Concaténation (entre plusieurs chaînes de caractères)

*+-/=!= : opérateurs mathématiques

Illustration

Smartex complexe.png

Ici la SmartExpression utilisée signifie :

Si la variable TYPE_SOCIETE est égale à "Entreprise unipersonnelle à responsabilité limitée" OU si la variable TYPE_SOCIETE est égale à "Société à responsabilité limitée" OU si la variable TYPE_SOCIETE est égale à "Société civile", ALORS la Dynvar ACTIONS_PARTS devra valoir "parts sociales", sinon SI si la variable TYPE_SOCIETE est égale à "Société par actions simplifiée" OU si la variable TYPE_SOCIETE est égale à "Société par actions simplifiée unipersonnelle", alors la la Dynvar ACTIONS_PARTS devra valoir "actions"

Décomposition @LEO TODO


Exemples d'application

Opérations mathématiques

Les Dynvars peuvent servir à effectuer des opérations mathématiques, en utilisant les opérateurs basiques, comme par exemple :

Dans cet exemple, une variable PRIX_HT est multipliée par 1.20 pour obtenir un prix TTC

Il est possible d'effectuer des opérations mathématiques entre plusieurs variables, et aussi entre plusieurs Dynvars.

Liste des opérateurs mathématiques pouvant être utilisés : *+-/

Factorisation du raisonnement

Factorisation simple

On peut aussi prévoir qu'une Dynvar prenne pour valeur TRUE ou FALSE en fonction de la valeur d'autres variables

Par exemple :

Si une des deux variables vaut "france", alors la variable FISCALITE_FR vaudra "vrai".

Cette formule signifie : la Dynvar nommée FISCALITE_FR vaudra TRUE si NATIONALITE_ACHETEUR ou NATIONALITE_VENDEUR est égal à "france"

Il sera donc possible d'utiliser la Dynvar FISCALITE_FR dans des Visible Ifs, ou même dans les formules d'autres Dynvars.

Pour utiliser la dynvar FISCALITE_FR, on utilisera donc la SmartExpression suivante : FISCALITE_FR = true ou FISCALITE_FR = false

Factorisation et chaînes de caractères
La SmartExpression contenue dans cette dynvar

Dans l'exemple ci-dessus, la SmartExpression signifie : "Si la variable SOCIETE_RESULTAT est supérieure à 0, Alors la Dynvar BENEFICE_PERTE doit valoir "bénéfice", sinon si la variable SOCIETE_RESULTAT est inférieure à 0, Alors la Dynvar BENEFICE_PERTE doit valoir "perte".

Dynvars et chaînes de caractères

Une Dynvar peut avoir pour formule plusieurs chaînes de caractères, par exemple pour reconstruire un nom complet ou une phrase en utilisant plusieurs variables.

Une dynvar FULL_NAME qui reprend grâce à la concaténation : la civilité, le nom, et le prénom.

Les fonctions

Principes

Une fonction prend toujours la forme suivante : MA_FONCTION( xxx )


Une fonction est donc toujours composée de trois éléments :

MA_FONCTION : on commence toujours par nommer la fonction souhaitée.

( ) : ces parenthèses dites "d'exécution" peuvent contenir plusieurs paramètres, séparés chacun par une virgule. Chaque fonction pourra avoir plus ou moins de paramètres.

xxx : les paramètres de la fonction. Ce sont les paramètres qui vont permettre à la fonction de s'exécuter.

Fonctions sur les Dates

Opération sur une date

Cette fonction permet de réaliser des opérations (somme et soustraction) sur une date. C'est à dire que pour une date donnée, la fonction permet d'obtenir une date antérieur ou postérieure de N jours / années / heures (etc.). Cette fonction est utile pour calculer une date d'échéance (ex : "3 mois après la date de signature…"), ou parler d'une date en fonction d'une autre (Ex : "12 jours avant la date…").

  1. Nom de la fonction : date_sum
  2. Nombre de paramètres : 3
  • 1 - Date à traiter (variable provenant d'un DateInput, ou chaîne format "d-m-Y H:i")
  • 2 - Un nombre entier (positif ou négatif)
  • 3 - L'unité sous forme d'une chaîne de caractères parmi : "year"; "month"; "day"; "hour"; "minute"; "second".
    Unité spéciale pour la France et ses territoires : "jour_ouvrable", "jour_ouvré", "jour_franc" (tenant compte des jours fériés Français)
  • 4 - (facultatif) La zone géographique qui doit être utilisée pour calculer les jours fériés (utile uniquement pour le calcul des jours spéciaux tel que jour_ouvré etc.). À choisir parmi : Métropole', 'Alsace-Moselle', 'Guadeloupe', 'Guyane', 'Martinique', 'Mayotte', 'Nouvelle-Calédonie', 'La Réunion', 'Polynésie Française', 'Saint-Barthélémy', 'Saint-Martin', 'Wallis-et-Futuna', 'Saint-Pierre-et-Miquelon.

Par exemple :

Soit une date de signature (DATE_SIGNATURE) ayant pour valeur le 12/05/2020, et l'on veut rajouter 3 jours à cette date :

date_sum(DATE_SIGNATURE, 3, "day") => renvoie 15/05/2020

Ou avec une valeur négative, pour soustraire 3 ans par exemple :

date_sum(DATE_SIGNATURE, -3, "year") => renvoie 12/05/2017

Avec un calcul de jour ouvré (ajout de 4 jours ouvrés à la date de signature en tenant compte des jours fériés de l'Alsace-Moselle) :

date_sum(DATE_SIGNATURE, 4, "jour_ouvré", "Alsace-Moselle") => renvoie 18/05/2017 (car il saut le week-end)

Pour aller plus loin :

Dans les exemples précédents, la seule variable était DATE_SIGNATURE (avec pour valeur 12/05/2020). Cependant, comme dans toute SmartExpression, les valeurs statiques (nombre, chaîne…) peuvent toujours être substituées par une valeur variable. Pour l'exemple, on aurait très bien pu utiliser deux autres variables et les utiliser dans le date_sum(…). Par exemple, avec AJOUT_NUM qui vaudrait 3 (issue d'un champ numérique), et la variable AJOUT_UNITÉ qui vaudrait day (issue d'un champ de choix par exemple), :

date_sum(DATE_SIGNATURE, AJOUT_NUM, AJOUT_UNITÉ) => renvoie 15/05/2020

savoir si une date est avant une autre date
  1. Fonction : date_before
  2. Nombre de paramètres : 2
  3. Paramètres attendus : Date 1, Date 2

Renvoie VRAI si la Date 1 est antérieure à la Date 2. Renvoie FAUX sinon.

Notez que la Date 1 ou la Date 2 peuvent provenir d'une variable complétée par la valeur d'un champ "date-input" d'un SmartForm, ou correspondre à une date fixe fournie sous la forme d'une chaîne de caractère au format j-m-A (la précision peut aller jusqu'à la seconde : j-m-A h:m:s)

Par exemple :

Soit une date de signature (DATE_SIGNATURE) ayant pour valeur le 12/05/2020, et l'on veut vérifier que la signature soit antérieure à la date du 1er Janvier 2020 :

date_before(DATE_SIGNATURE,"01-01-2020") => renvoie FAUX
▷ Alors que date_before(DATE_SIGNATURE,"01-01-2021") => renvoie VRAI

calcul de la différence entre deux dates
  1. Fonction : date_diff
  2. Nombre de paramètres : 3
  3. Paramètres attendus : Date de début, Date de fin, Une chaîne de caractères parmi : year; month; day; hour; minute; second

Renvoie un nombre (valeur absolue) correspondant à la différence, entre la Date de début et la Date de fin, dans l'unité spécifiée.

Par exemple :

Soit une date de signature (DATE_SIGNATURE) ayant pour valeur le 31/05/2020, et l'on veut savoir combien d'années de différence entre les 2 dates :

date_diff(DATE_SIGNATURE,"20-09-2004","year") => renvoie 15 car 15 années se sont écoulées
date_diff("20-09-2004",DATE_SIGNATURE, "year") => renvoie aussi 15 (la valeur est absolue, peu importe l'ordre des dates)
date_diff("20-09-2004",DATE_SIGNATURE, "day") => renvoie 5732 (le nombre total de jour entre les deux dates)

renvoyer automatiquement la date du jour

Spécificité : fonction unaire, ne possède pas de paramètres

  1. Fonction : now()
  2. Nombre de paramètres : 0
  3. Paramètres attendus : N/A

Par exemple :

Now().png

trouver automatiquement l'âge d'un individu
  1. Fonction : years_old
  2. Nombre de paramètres : 1
  3. Paramètres attendus : Une date

Par exemple :

years_old(DATE_NAISSANCE)

isoler le jour, le mois, l'année d'une date
  1. Fonction : date_day date_month date_year
  2. Nombre de paramètres : 1
  3. Paramètres attendus : Une date

Par exemple : date_month(DATE_SIGNATURE)

changer le format d'une date
  1. Fonction : date_format
  2. Nombre de paramètres : 2
  3. Paramètres attendus : Une date, Un format de date

Par exemple :

Passer d'une date complète à un format jour/mois

date_format(DATE_NAISSANCE, "d/m")

Fonctions sur les Nombres

Introduction : notez bien que les traitements sur les nombres peuvent être effectués aussi bien sur des variables que sur d'autres dynvars

arrondir un nombre en choisissant le nombre de chiffres souhaités après la virgule
  1. Fonction : round
  2. Nombre de paramètres : 2
  3. Paramètres attendus : Un nombre, Un autre nombre

La fonction enregistre le premier nombre, puis l'arrondit en fonction du deuxième paramètre

La méthode utilisée est celle de l'arrondi arithmétique.

Par exemple :

Pour arrondir un prix d'achat à 3 chiffres après la virgule

round(PRIX_ACHAT, 3)

arrondir un nombre entier à l'entier inférieur
  1. Fonction : floor
  2. Nombre de paramètres : 1
  3. Paramètres attendus : Un nombre

La fonction attend un nombre et lui retire ses décimales en arrondissant à l'entier inférieur

Par exemple :

Pour arrondir un prix d'achat à l'entier inférieur

floor(PRIX_ACHAT)

arrondir un nombre entier à l'entier supérieur
  1. Fonction : ceil
  2. Nombre de paramètres : 1
  3. Paramètres attendus : Un nombre

La fonction attend un nombre et lui retire ses décimales en arrondissant à l'entier supérieur

Par exemple :

Pour arrondir un prix d'achat à l'entier supérieur

ceil(PRIX_ACHAT)

Fonctions sur les Chaînes de caractères

Trouver si une chaîne de caractères commence par une autre chaîne de caractères
  1. Fonction : begins_with
  2. Nombre de paramètres : 2
  3. Paramètres attendus : Une Chaîne de caractères (string), une autre Chaîne de caractères

La première chaîne de caractères est la chaîne dans laquelle rechercher, la deuxième chaîne de caractère est la chaîne à rechercher

La Dynvar paramétrée avec cette fonction vaudra TRUE si la chaîne du premier paramètre commence par la chaîne du second paramètre

Trouver si une chaîne de caractères se finit par une autre chaîne de caractères
  1. Fonction : ends_with
  2. Nombre de paramètres : 2
  3. Paramètres attendus : Une Chaîne de caractères (string), une autre Chaîne de caractères

La première chaîne de caractères est la chaîne dans laquelle rechercher, la deuxième chaîne de caractère est la chaîne à rechercher

La Dynvar paramétrée avec cette fonction vaudra TRUE si la chaîne du premier paramètre se finit par la chaîne du second paramètre


Un élément en contient-il un autre ?
  1. Fonction : contains
  2. Nombre de paramètres : 2
  3. Paramètres attendus :
1er paramètre : une Chaine A (string) ou une Liste (list)
Paramètre 2 : une chaîne B (string)

Si le 1er paramètre est une chaîne : renvoie VRAI si la chaîne A contient la chaîne B.

Si le 1er caractère est une liste : renvoie VRAI si la liste contient la valeur B correspondante à la chaîne B.

Exemple :

Soit une chaîne NUM_FACTURE correspondant à un numéro de facture tel que : '2020F01'.
Et soit une Liste HOBBIES correspondants à 3 choix : ["sport", "cinema", "music"] (saisis par exemple via un champ de choix multiple).

contains(NUM_FACTURE,"F") => renvoie VRAI car la chaine "2020F01" contient la chaine "F"
contains(NUM_FACTURE,"2020F") => renvoie VRAI car la chaine "2020F01" contient aussi la chaine "2020F"
contains(NUM_FACTURE,"20 Euros") => renvoie FALSE car la chaine "2020F01" ne contient pas "20 Euros"
contains(HOBBIES,"cinema") => renvoie VRAI et c'est d'ailleurs le 2ème élément
contains(HOBBIES,"cine") => renvoie FALSE car aucun élément est exactement nommé "cine" parmi ceux de la liste


Tronquer une chaîne de caractères
  1. Fonction : substring
  2. Nombre de paramètres : 3
  3. Paramètres attendus : Une Chaîne de caractères (string), le nombre à partir duquel la fonction doit tronquer, le nombre de caractères à prendre en compte après la troncation

À noter : le troisième paramètre est facultatif. S'il n'est pas présent, la fonction renverra tous les caractères situés après la troncation

Par exemple :

Pour une dynvar paramétrée de la manière suivante : substring(DENOMINATION, 2, 3);

Si la variable DENOMINATION vaut "Hercule";

La Dynvar ainsi paramétrée vaudra "rcu"


Ou encore :

Pour une dynvar paramétrée de la manière suivante : substring(DENOMINATION, 0, 4);

Si la variable DENOMINATION vaut "Hercule";

La Dynvar ainsi paramétrée vaudra "Herc"


Ou enfin :

Pour une dynvar paramétrée de la manière suivante : substring(DENOMINATION, 2);

Si la variable DENOMINATION vaut "Hercule";

La Dynvar ainsi paramétrée vaudra "rcule"

Fonctions sur les repeaters

Additionner les répétitions d'une sous-variable d'un repeater
  1. Fonction : list_sum
  2. Nombre de paramètres : 2
  3. Paramètres attendus : Une variable de type List utilisée pour un Repeater, une sous-variable du même Repeater

Contexte

Il est parfois nécessaire d'additionner les différentes répétitions d'une même sous-variable d'un repeater.

Par exemple, dans cette situation :

Une sous-variable répétée demande ici le prix d'une chemise. Comment faire pour obtenir la somme des prix de toutes les chemises ?

Paramétrage

Le paramétrage prend la forme suivante :

list_sum(VARIABLE_LISTE,"SOUS_VARIABLE")

Pour obtenir le prix de toutes les Chemises dans l'exemple ci-dessus, il faudra paramétrer une Dynvar dont la formule sera list_sum(CHEMISES,"prix")