Formules de calcul : Différence entre versions
(→sumFlightTime(%PILOT, 'year', 'month', 'day', 'hour', 'minute', 'position', 'flight type' )) |
(→roundCeil(X,Y)) |
||
Ligne 66 : | Ligne 66 : | ||
<pre>roundCeil(114,10) donne 120</pre> | <pre>roundCeil(114,10) donne 120</pre> | ||
+ | |||
+ | ===substr(string,a,b)=== | ||
+ | Retourne l'extrait de chaine de caractères "string" à partir du caractère "a", 0 étant le 1er caractère et "b" la longueur à extraire. Lorsque b est une valeur négative, alors il détermine le nombre de caractères devant être enlevé depuis la fin de la chaine. | ||
+ | |||
+ | Exemples : | ||
+ | <pre>substr('FIRST_NAME', 0, 5) returns FIRST | ||
+ | substr('FIRST_NAME', 0, -2) returns FIRST_NA</pre> | ||
===sumFlightHour('pilot id', 'position', 'day', 'aircraft type 1' , 'aircraft type 2', 'aircraft type X')=== | ===sumFlightHour('pilot id', 'position', 'day', 'aircraft type 1' , 'aircraft type 2', 'aircraft type X')=== |
Version du 9 juin 2015 à 13:43
Sommaire
- 1 Présentation
- 1.1 Fonctions
- 1.1.1 abs(X)
- 1.1.2 changeTime('date', 'année', 'mois', 'jour')
- 1.1.3 formatDate('patron', 'date')
- 1.1.4 getValidityExpiredDate('person id', 'validity type id')
- 1.1.5 hasValidity('user id', 'validity type id')
- 1.1.6 max(X,Y)
- 1.1.7 roundCeil(X,Y)
- 1.1.8 substr(string,a,b)
- 1.1.9 sumFlightHour('pilot id', 'position', 'day', 'aircraft type 1' , 'aircraft type 2', 'aircraft type X')
- 1.1.10 sumFlightTime(%PILOT, 'year', 'month', 'day', 'hour', 'minute', 'position', 'flight type' )
- 1.1.11 sumLandingNumber('pilot id', 'position', 'day', 'aircraft type 1' , 'aircraft type 2', 'aircraft type X')
- 1.1.12 sumPreviousFlightTime('pilot id', 'position', 'day', 'endingDate', 'aircraft type 1' , 'aircraft type 2', 'aircraft type X')
- 1.2 Variables
- 1.1 Fonctions
- 2 Date d'expiration
- 2.1 Fonctions autorisées pour le calcul de la date d'expiration
- 2.2 Variables autorisées pour le calcul de la date d'expiration
- 2.3 Exemples de formules de calcul de la date d'expiration
- 2.3.1 Date fixe
- 2.3.2 Formule calculant la fin de l'année courante
- 2.3.3 Formule calculant la fin de l'année courante ou la fin de l'année suivante si la date courante est strictement supérieure au 30 septembre
- 2.3.4 Formule calculant la date dans un an ou dans un an après la date d'expiration d'une validité déjà détenue
- 3 Expérience récente
- 4 Tarification
- 5 Temps d'activité
- 5.1 Définition Unité sexacentimal
- 5.2 Fonctions autorisées pour le calcul du temps d'activité
- 5.3 Variables autorisées pour le calcul du temps d'activité
- 5.4 Exemples de formules de calcul du temps d'activité
- 5.4.1 Durée saisie
- 5.4.2 Différence des compteurs saisis
- 5.4.3 Durée saisie arrondie à 5 minutes
- 5.4.4 Différence des compteurs plus 5 centièmes
- 5.4.5 Différence des compteurs plus 5 minutes
- 5.4.6 Différence des compteurs arrondie au 5 minutes les plus proches plus 5 minutes
- 5.4.7 Différence des compteurs arrondie à 10 centièmes
- 5.4.8 Le plus grand entre la durée du vol et la différence des compteurs
- 5.4.9 Le plus grand entre la durée du vol et la différence des compteurs arrondie à 5 minutes
- 5.4.10 Le plus grand entre la durée saisie, arrondie à 5 minutes, et la différence des compteurs, arrondie à 5 minutes
Présentation
Fonctions
abs(X)
Retourne la valeur absolue de X
Exemple :
abs(-200) donne 200
abs(100) donne 100
changeTime('date', 'année', 'mois', 'jour')
Retourne la date en changeant l'année, le mois et/ou le jour
La date doit être au format AAAA-MM-JJ hh:mm:ss ou AAAA-MM-JJ
Les valeurs possibles pour l'année, le mois ou le jour sont :
- 0 = L'année, le mois ou le jour reste inchangé
- +X = L'année, le mois ou le jour est augmenté de X
- -X = L'année, le mois ou le jour est diminué de X
- X = L'année, le mois ou le jour est placé sur X
Exemple :
changeTime( '2011-05-15', '0', '0', '0' ) donne 2011-05-15
changeTime( '2011-05-15', '0', '-test', '0' ) donne 2011-05-15 car la valeur du mois n'est pas valide
changeTime( '2011-05-15', '0', '-2', '0' ) donne 2011-03-15
changeTime( '2011-05-15', '0', '+2', '0' ) donne 2011-07-15
changeTime( '2011-05-15', '0', '2', '0' ) donne 2011-02-15
changeTime( '2011-05-15', '0', '2', '-1' ) donne 2011-02-14
changeTime( %NOW_DATE, '2015', '1', '1' ) donne 2015-01-01
formatDate('patron', 'date')
Formate la date selon le patron. Pour les motifs du patron, voir format de date et d'heure
Exemple :
formatDate('yyyy', '2015-03-01) donne 2015
formatDate('MM', '2015-03-01) donne 3
getValidityExpiredDate('person id', 'validity type id')
- Retourne la date d'expiration de la validité de la personne si c'est une validité soumise à échéance et que la date d'expiration a été renseigné. La date est au format AAAA-MM-JJ.
- Retourne "0000-00-00" dans les autres cas
Exemple :
getValidityExpiredDate(%USER_ID, 1) donne 2014-12-31
getValidityExpiredDate(0, 20) donne 0000-00-00
hasValidity('user id', 'validity type id')
Vérifie si l'utilisateur possède la validité :
- Retourne 1 lorsque :
- C'est une validité à formule d'expérience récente et l'utilisateur a l'expérience requise
- La validité n'est pas soumise à échéance et que l'utilisateur possède la validité
- La validité est soumise à échéance et n'est pas encore expirée
- Retourne 0 dans les autres cas
max(X,Y)
Retourne le maximum entre X et Y
roundCeil(X,Y)
Arrondi la valeur X au nombre supérieur multiple de l'unité Y le plus proche
Exemple :
roundCeil(114,100) donne 200
roundCeil(114,10) donne 120
substr(string,a,b)
Retourne l'extrait de chaine de caractères "string" à partir du caractère "a", 0 étant le 1er caractère et "b" la longueur à extraire. Lorsque b est une valeur négative, alors il détermine le nombre de caractères devant être enlevé depuis la fin de la chaine.
Exemples :
substr('FIRST_NAME', 0, 5) returns FIRST substr('FIRST_NAME', 0, -2) returns FIRST_NA
sumFlightHour('pilot id', 'position', 'day', 'aircraft type 1' , 'aircraft type 2', 'aircraft type X')
sumFlightTime(%PILOT, 'year', 'month', 'day', 'hour', 'minute', 'position', 'flight type' )
Retourne le total des heures de vol faite par un pilote %PILOT pour le type de vol 'flight type' Depuis la date indiquée.
La position 0 correspond au 1er pilote, la position 1 au 2ème pilote.
Si le type de vol n'est pas spécifié, le total est déterminé pour tous les types de vols.
Exemple :
sumFlightTime(%PILOT, 2008, 01, 01, 00, 00, 0, 64 )
Retourne en Sexacentimal le total des heures de vol faites sur le type de vol 64 en tant que pilote en place gauche depuis le 2008-01-01 00:00:00.
sumLandingNumber('pilot id', 'position', 'day', 'aircraft type 1' , 'aircraft type 2', 'aircraft type X')
sumPreviousFlightTime('pilot id', 'position', 'day', 'endingDate', 'aircraft type 1' , 'aircraft type 2', 'aircraft type X')
Variables
%COUNTER_ARRIVAL
Compteur arrivé saisi dans le formulaire
%COUNTER_DEPARTURE
Compteur départ saisi dans le formulaire
%DURATION
Durée du vol
%NOW_DATE
Date courante au format AAAA-MM-JJ hh:mm:ss
Par exemple : 2015-03-31 14:20:03
%TIME_ARRIVAL
Heure de fin saisie dans le formulaire
%TIME_DEPARTURE
Heure de début saisie dans le formulaire
%USER_ID
Id de l'utilisateur
Date d'expiration
Fonctions autorisées pour le calcul de la date d'expiration
Variables autorisées pour le calcul de la date d'expiration
Exemples de formules de calcul de la date d'expiration
Date fixe
2012-12-31
Formule calculant la fin de l'année courante
formatDate( 'yyyy-12-31', %NOW_DATE )
Formule calculant la fin de l'année courante ou la fin de l'année suivante si la date courante est strictement supérieure au 30 septembre
Cette formule permet de vendre une validité (par exemple cotisation) dont la prise est valable jusqu'au 31 décembre de l'année en cours ou de l'année suivante si elle est souscrite à partir du 1er octobre.
formatDate( 'yyyy-12-31', (formatDate('MM', %NOW_DATE)<10) ? %NOW_DATE : changeTime(%NOW_DATE, '+1', 0, 0) )
Formule calculant la date dans un an ou dans un an après la date d'expiration d'une validité déjà détenue
Cette formule permet de vendre une validité (par exemple une carte de réduction) valable 1 an.
Remplacer dans l'exemple suivant XX par l'identifiant du type de validité concerné :
formatDate( 'yyyy-MM-dd', changeTime( ( hasValidity(%USER_ID, XX) ? getValidityExpiredDate(%USER_ID, 3XX3) : %NOW_DATE ), '+1', '0', '0' ) )
Expérience récente
Fonctions autorisées pour le calcul de l'expérience récente
Variables autorisées pour le calcul de l'expérience récente
Exemples de formules de calcul de l'expérience récente
Formule vérifiant l'expérience récente en heures ou la détention d'une validité spécifique
L'exemple suivant vérifie qu'un utilisateur a une expérience de 30 heures dans les 12 derniers mois ou qu'il possède une validité X lui permettant de s'affranchir du quota d'heures.
Remplacer dans l'exemple suivant XX par l'identifiant du type de validité spécifique :
( (sumFlightHour(%PILOT, 0, 365)+sumFlightHour(%PILOT, 1, 365) > 17999) OR hasValidity(%PILOT, XX) )
Tarification
Outre les définitions toujours valides pour le calcul du temps d'activité, voici d'autres définitions : A rédiger
Voir Formules en anglais
Fonctions autorisées pour le calcul de la tarification
Variables autorisées pour le calcul de la tarification
Exemples de formules pour le calcul de la tarification
Motoplaneur : tarification à l'heure de vol ET à l'utilisation du moteur
Pour cela, on suppose que les compteurs sont utilisés et qu'ils prennent en compte le temps d'utilisation du moteur :
%DURATION * $FLIGHT_HOUR_PRICE + (%COUNTER_ARRIVAL - %COUNTER_DEPARTURE) * $ENGINE_HOUR_PRICE
Avion : réduction lorsque le compte pilote a un solde positif
$C2 concerne le tarif horaire de l'avion
$S le solde positif qui doit être atteint pour bénéficier de la réduction
$R le montant horaire de la réduction obtenue dans ce cas
roundCeil((((getBalance(%PILOT)>$S ? ($C2-$R) : $C2)*%DURATION/600)-0.5),1)
Avion : réduction lorsque le vol se fait après une certaine heure
$C2 concerne le tarif horaire de l'avion
$C2R concerne le tarif horaire réduit de l'avion après une certaine heure
659 correspond à 06:59 en temps UTC
Dans ce cas la formule considère que dès 700, la réduction s'applique.
roundCeil(((((formatDate('hmm',%START_DATE)>659)?$C2R:$C2)*%DURATION/600)-0.5),1)
Temps d'activité
Pour calculer le temps d'une activité (exemple : vol), les règles diffèrent selon les structures.
OpenFlyers permet d'attribuer des formules de calcul de temps d'activité par type de ressource. Cf. la gestion des types de ressource sur version 3 et version 4.
Définition Unité sexacentimal
En base de données, les temps et les compteurs sont stockés selon le plus petit multiple commun au système décimal (centième) et au système sexagésimale (hh min). Nous avons appelé cela le format sexacentimal.
Cela permet de stocker les valeurs de temps sous la forme d'un entier. Cela supprime donc tout problème d'arrondi qui pourrait être problématique pour les additions.
- 1 heure = 600 sexacentièmes
- 1 minute = 10 sexacentièmes
- 5 minutes = 50 sexacentièmes
- 1 centième de minute = 6 sexacentièmes
- 10 centième de minute (=1 dixième de minute) = 60 sexacentièmes
Exemples de formules :
- pour arrondir à 5 minutes : roundCeil(X,50)
- pour arrondir à 10 centièmes : roundCeil(X,60)
Fonctions autorisées pour le calcul du temps d'activité
Variables autorisées pour le calcul du temps d'activité
Exemples de formules de calcul du temps d'activité
Durée saisie
%DURATION
Différence des compteurs saisis
%COUNTER_ARRIVAL - %COUNTER_DEPARTURE
Durée saisie arrondie à 5 minutes
roundCeil(%DURATION, 50)
Différence des compteurs plus 5 centièmes
%COUNTER_ARRIVAL - %COUNTER_DEPARTURE + 30
Différence des compteurs plus 5 minutes
%COUNTER_ARRIVAL - %COUNTER_DEPARTURE + 50
Différence des compteurs arrondie au 5 minutes les plus proches plus 5 minutes
roundCeil(%COUNTER_ARRIVAL - %COUNTER_DEPARTURE - 25, 50) + 50
Différence des compteurs arrondie à 10 centièmes
roundCeil(%COUNTER_ARRIVAL - %COUNTER_DEPARTURE, 60)
Le plus grand entre la durée du vol et la différence des compteurs
max(%DURATION, %COUNTER_ARRIVAL - %COUNTER_DEPARTURE)
Le plus grand entre la durée du vol et la différence des compteurs arrondie à 5 minutes
max(%DURATION,roundCeil(%COUNTER_ARRIVAL - %COUNTER_DEPARTURE, 50))
Cette formule calcule :
- la différence des compteurs et l'arrondi à 5 minutes
- la valeur de la durée de vol saisie par le pilote
Puis elle prend le plus grand des deux
Le plus grand entre la durée saisie, arrondie à 5 minutes, et la différence des compteurs, arrondie à 5 minutes
max(roundCeil(%DURATION,50),roundCeil(%COUNTER_ARRIVAL - %COUNTER_DEPARTURE, 50))
Cette formule calcule :
- la différence des compteurs et l'arrondi à 5 minutes
- la valeur de la durée de vol saisie par le pilote et l'arrondi à 5 minutes
Puis elle prend le plus grand des deux