Formules de calcul and Accueil: Difference between pages

From Documentation de la solution web de gestion OpenFlyers
(Difference between pages)
Jump to navigation Jump to search
imported>Claratte
 
imported>Ltremblet
 
Line 1: Line 1:
Cette page à pour objet de présenter l'ensemble des fonctions et variables utilisables dans des formules de calculs d'OpenFlyers ainsi que les différents types de formules de calculs.
Bienvenue sur la [[Accueil|documentation]] d''''OpenFlyers4'''.
 
You can also access to our [[OF_doc-en:Main_Page|english documentation]].
 
__TOC__
__TOC__


=Présentation=
=Présentation=
==La société OpenFlyers==
==[[Introduction|La suite logicielle OpenFlyers]]==
==[[Discover OpenFlyers software|Découvrir le logiciel OpenFlyers]]==
==[[Geolocation technologies for aerospace|Les technologies de géolocalisation pour l'aéronautique]]==
==[[OpenFlyers release history|Historique des versions]]==
==[[Modèle_commercial_et_compte_client_OpenFlyers]]==


==Fonctions==
==[[OpenFlyers Trainings|Formations OpenFlyers]]==
 
==[[How to communicate with OpenFlyers|Bien communiquer avec OpenFlyers]]==
===abs(X)===
Retourne la valeur absolue de X
 
Exemple :
<pre>abs(-200) donne 200</pre>
<pre>abs(100) donne 100</pre>
 
===changeTime('date', 'année', 'mois', 'jour', 'minute')===
Retourne la date en changeant l'année, le mois, le jour et/ou les minutes
 
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, le jour ou les minutes sont :
* 0 = L'année, le mois, le jour ou les minutes reste inchangé
* +X = L'année, le mois, le jour ou les minutes est augmenté de X
* -X = L'année, le mois, le jour ou les minutes est diminué de X
* X = L'année, le mois, le jour ou les minutes est placé sur X
** Les minutes sont placés à 0 si X est négatif
** Les minutes sont placés à 59 si X est supérieur à 59
 
Exemple :
<pre>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
changeTime( '2011-05-15 01:01:00', '0', '2', '-1', '50' ) donne 2011-02-14 01:50:00</pre>
 
===formatDate('patron', 'date')===
 
Formate la date selon le patron. Pour les motifs du patron, voir le [[#Formatage-des-dates-et-des-heures|formatage des dates et des heures]].
 
Exemple :
<pre>formatDate('yyyy', '2015-03-01') donne 2015</pre>
<pre>formatDate('MM', '2015-03-01') donne 03</pre>
<pre>formatDate('d', '2015-03-01') donne 1</pre>
<pre>formatDate( 'yyyy-01-01', %NOW_DATE ) donne le 1er janvier dans l'année en cours</pre>
 
===getSex('person id')===
 
Retourne un nombre correspondant au sexe de la personne :
* 0 pour un homme
* 1 pour une femme
* 2 lorsque ce n'est pas défini
 
Exemple :
<pre>getSex(1)
getSex(%USER_ID)</pre>
 
Exemple pour savoir si un utilisateur est une femme dans une règle de facturation des produits :
<pre>(getSex(%USER_ID) == 1) ? $reductionFemme : 0</pre>
 
===getSumAccountBusinessField('business field id, 'person id', 'date')===
Retourne la somme des valeurs d'un [[Champs métiers|champ métier]] de catégorie "Ecriture comptable". Seules les valeurs du champ métier associées à des écritures comptable correspondantes à la personne et dont la date est postérieure ou égale à la date indiquée en paramètre sont prises en compte dans le calcul. La date est au format AAAA-MM-JJ.
 
Exemple :
<pre>getSumAccountBusinessField(13, %PILOT, formatDate( 'yyyy-01-01', %NOW_DATE ) ) ? 100 : 200</pre>
 
===getValidityExpiredDate('person id', 'validity type id', 'optional default date')===
 
* 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ée. La date est au format AAAA-MM-JJ.
* Dans les autres cas, Retourne "optional default date" ou "0000-00-00" si elle n'est pas renseignée
 
Exemple :
<pre>getValidityExpiredDate(%USER_ID, 1) donne 2014-12-31</pre>
<pre>getValidityExpiredDate(0, 20, '2014-01-01') donne 2014-01-01</pre>
<pre>getValidityExpiredDate(0, 20) donne 0000-00-00</pre>
 
===getValidityGrantedDate('person id', 'validity type id', 'optional default date')===
* Retourne la date d'obtention de la validité de la personne si c'est une validité avec gestion de la date d'obtention et que la date d'obtention a été renseignée. La date est au format AAAA-MM-JJ.
* Dans les autres cas, Retourne "optional default date" ou "0000-00-00" si elle n'est pas renseignée
 
Exemple :
<pre>getValidityGrantedDate(%USER_ID, 1) donne 2014-12-31 si l'utilisateur possède la validité,qu'elle est avec une date d'obtention et que la date d'obtention est renseignée</pre>
<pre>getValidityGrantedDate(0, 20, '2014-01-01') donne 2014-01-01 car il n'existe pas d'utilisateur avec un id 0</pre>
<pre>getValidityGrantedDate(0, 20) donne 0000-00-00</pre>
 
===getYearsFromDiffDate('first date', 'second date')===
 
*Retourne la différence en année entre 2 dates
*La date est au format AAAA-MM-JJ ou AAAA-MM-JJ HH:MM:SS
*Quand la 2ème date n'est pas spécifiée, c'est la date du jour qui est utilisée
 
Exemple :
<pre>getYearsFromDiffDate( '1975-01-01', '2000-03-03') retourne 25
getYearsFromDiffDate( '1975-01-01' ) retourne 37</pre>
 
===hasValidity('user id', 'validity type id', 'check only holding')===
'check only holding' est un paramètre optionnel. On ne prend en compte sa valeur que si elle est à 1. Dans les autres cas, on l'ignore.
 
*Si 'check only holding' n'est pas à 1 :
** Retourne '''1''' lorsque :
*** Si c'est une validité à formule d'expérience récente :
**** l'utilisateur a l'expérience requise
*** Si ce n'est pas une validité à formule d'expérience récente :
**** Si la validité n'est pas soumise à échéance alors l'utilisateur possède la validité
**** Si La validité est soumise à échéance alors l'utilisateur possède la validité et elle n'est pas encore expirée
** Retourne '''0''' dans les autres cas
*Si 'check only holding' est à 1 :
** Retourne '''1''' si ce n'est pas une validité à formule d'expérience récente  et que l'utilisateur possède la validité (périmée ou non)
** Retourne '''0''' dans les autres cas (y compris dans le cas d'une validité à formule d'expérience récente et que l'utilisateur possède l'expérience récente)
 
===max(X,Y)===
Retourne le maximum entre X et Y
 
===min(X,Y)===
Retourne le minimum entre X et Y
 
===roundCeil(X,Y)===
Arrondi la valeur X au nombre supérieur multiple de l'unité Y le plus proche
 
Exemples :
<pre>roundCeil(114,100) donne 200</pre>
 
<pre>roundCeil(114,10) donne 120</pre>
 
<pre>roundCeil(106,5) return 110</pre>
 
Pour arrondir une valeur positive à l'entier le plus proche avec 0.5 arrondi à 0 :
<pre>roundCeil(107.5-0.5,1) return 107</pre>
 
Pour arrondir une valeur positive, avec 2 décimales, à l'entier le plus proche avec 0.5 arrondi à 1 :
<pre>roundCeil(107.5-0.499,1) return 108</pre>
 
===sprintf('pattern', 'string')===
 
Formate la chaîne "string" avec le patron "pattern". Pour les motifs du patron, voir [[OF_doc-en::CommonFormula#sprintf_format|format de sprintf]].
 
Exemple pour formater le numéro de membre pour qu'il ait 5 caractères en ajoutant autant de zéro que possible devant :
<php>sprintf('%05s', %MEMBER_NUM) retourne 00010 si %MEMBER_NUM vaut 10 par exemple</php>
 
Exemple pour formater le numéro de membre pour qu'il ait 5 caractères en ajoutant autant de zéro que possible derrière :
<php>sprintf('%-05d', %MEMBER_NUM) retourne 10000 si %MEMBER_NUM vaut 10 par exemple</php>
 
Exemple pour formater le numéro de membre pour qu'il ait 6 caractères en ajoutant autant d'espace que possible devant :
<php>sprintf('%6s', %MEMBER_NUM) retourne "    10" si %MEMBER_NUM vaut 10 par exemple</php>
 
===substr(string,a,b)===
Retourne l'extrait de chaîne 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 chaîne.
 
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')===
 
Retourne le total des heures de vol en [[#Définition-Unité-sexacentimal|Sexacentimal]] faite par un pilote %PILOT entre la date du jour moins 'day' sur les types de ressource indiqués.
 
La position 0 correspond au premier pilote, la position 1 à la personne en seconde place.
 
Si aucun type de ressource n'est spécifié, le total est déterminé pour tous les types de ressource.
 
Exemples:
* Le total des heures de vol du premier pilote sur les 90 derniers jours sur les types de ressource 1 et 2
<pre>sumFlightHour(%PILOT, 0, 90, 1, 2)</pre>
* Le total des heures de vol du premier pilote sur les 90 derniers jours
<pre>sumFlightHour(%PILOT, 0, 90)</pre>
 
===sumFlightTime(%PILOT, 'year', 'month', 'day', 'hour', 'minute', 'position', 'flight type' )===
Retourne en [[#Définition_Unité_sexacentimal|Sexacentimal]] le total des heures de vol postérieures à la date définie par 'year' 'month' 'day' 'hour' 'minute' faite par un pilote '%PILOT' pour le type de vol 'flight type'.
 
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.
 
Exemples :
*Retourne le total des heures faites sur le type de vol 64 en tant que pilote en place gauche depuis le 2008-01-01 00:00:00 :
<pre>sumFlightTime(%PILOT, 2008, 01, 01, 00, 00, 0, 64 )</pre>
 
*Retourne le total des heures faites sur le type de vol 4 en tant que pilote en place gauche depuis 12 mois :
<pre>sumFlightTime(%PILOT, formatDate('yyyy', changeTime( %NOW_DATE, '-1', '0', '0' )), formatDate('M', changeTime( %NOW_DATE, '-1', '0', '0' )), formatDate('d', changeTime( %NOW_DATE, '-1', '0', '0' )), 00, 00, 0, 4)</pre>
 
*Retourne le total des heures faites en place gauche depuis le début de l'année :
<pre>sumFlightTime(%PILOT, formatDate('yyyy', %NOW_DATE), 1, 1, 00, 00, 0)</pre>
 
*Retourne le total des heures faites en place gauche entre le début de l'année et la date de début du vol courant :
<pre>sumFlightTime(%PILOT, formatDate('yyyy', %NOW_DATE), 1, 1, 00, 00, 0) - sumFlightTime(%PILOT, formatDate('yyyy', %START_DATE), formatDate('M', %START_DATE), formatDate('d', %START_DATE), formatDate('H', %START_DATE), formatDate('m', %START_DATE), 0)</pre>
 
*Retourne le total des heures faites en place gauche entre le début de l'année et la date de début du vol courant en ignorant les vols qui sont sur le type de vol 8 :
<pre>(sumFlightTime(%PILOT, formatDate('yyyy', %NOW_DATE), 1, 1, 00, 00, 0) - sumFlightTime(%PILOT, formatDate('yyyy', %START_DATE), formatDate('M', %START_DATE), formatDate('d', %START_DATE), formatDate('H', %START_DATE), formatDate('m', %START_DATE), 0)) - (sumFlightTime(%PILOT, formatDate('yyyy', %NOW_DATE), 1, 1, 00, 00, 0, 8) - sumFlightTime(%PILOT, formatDate('yyyy', %START_DATE), formatDate('M', %START_DATE), formatDate('d', %START_DATE), formatDate('H', %START_DATE), formatDate('m', %START_DATE), 0, 8))</pre>
 
*Retourne le total des heures faites sur l'année précédente :
<pre>sumFlightTime(%PILOT, formatDate('yyyy', changeTime( %NOW_DATE, '-1', '0', '0' )), 1, 1, 00, 00, 0) + sumFlightTime(%PILOT, formatDate('yyyy', changeTime( %NOW_DATE, '-1', '0', '0' )), 1, 1, 00, 00, 1) - sumFlightTime(%PILOT, formatDate('yyyy', %NOW_DATE), 1, 1, 00, 00, 0) - sumFlightTime(%PILOT, formatDate('yyyy', %NOW_DATE), 1, 1, 00, 00, 1)</pre>
 
===sumLandingByType(%PILOT, 'year', 'month', 'day', 'hour', 'minute', 'position', 'activity type')===
 
Retourne le total d'atterrissage fait par un pilote %PILOT sur les activités postérieures à la date définie par 'year' 'month' 'day' 'hour' 'minute' et qui ont comme type d'activité 'activity type'.
 
La position 0 correspond au premier pilote, la position 1 à la personne en seconde place.
 
Si le type d'activité n'est pas spécifié, le total est déterminé pour tous les types d'activités.
 
Exemples:
* Si le pilote a fait plus de 5 atterrissages en tant que pilote en place gauche depuis le 2008-01-01 00:00:00 sur le type d'activité 64
<pre>sumLandingByType(%PILOT, 2008, 01, 01, 00, 00, 0, 64) > 5</pre>
Exemples:
* Si le pilote a fait plus de 5 atterrissages en tant que pilote en place gauche depuis le début de l'année
<pre>sumLandingByType(%PILOT, formatDate('yyyy', %NOW_DATE), 1, 1, 00, 00, 0) > 5</pre>
 
===sumLandingNumber(%PILOT, 'position', 'day', 'aircraft type 1' , 'aircraft type 2', 'aircraft type X')===
 
Retourne le total d'atterrissage faite par un pilote %PILOT sur les X derniers jours ('day') en prenant la date du jour comme référence sur les types de ressource indiqués.
 
La position 0 correspond au premier pilote, la position 1 à la personne en seconde place.
 
Si aucun type de ressource n'est spécifié, le total est déterminé pour tous les types de ressource.
 
Exemples:
* Si le pilote a fait plus de 5 atterrissages sur les 30 derniers jours sur le type de ressource 1
<pre>sumLandingNumber(%PILOT,0,30,1) > 5</pre>
* Si la personne en seconde place a fait plus de 5 atterrissages sur les 15 derniers jours
<pre>sumLandingNumber(%PILOT,1,15) > 5</pre>
 
===sumPreviousFlightTime('pilot id', 'position', 'day', 'endingDate', 'aircraft type 1' , 'aircraft type 2', 'aircraft type X')===
 
Retourne le total des heures de vol en [[#Définition-Unité-sexacentimal|Sexacentimal]] faite par un pilote %PILOT sur les X derniers jours ('day') précédant 'endingDate' sur les types de ressource indiqués.
 
La position 0 correspond au premier pilote, la position 1 à la personne en seconde place.
 
Si aucun type de ressource n'est spécifié, le total est déterminé pour tous les types de ressource.
 
Exemple : Le total des heures de vol pour le premier pilote sur les 365 derniers jours précédant la date du vol sur les types de ressource 1 et 2
<pre>sumPreviousFlightTime(%PILOT, 0, 365, %START_FLIGHT, 1, 2)</pre>
 
===strtolower(string)===
Retourne la chaine "string" en minuscule.
 
Exemple :
<pre>strtolower('CamelBack') retourne "camelback"</pre>
 
===strtoupper(string)===
Retourne la chaine "string" en majuscule.
 
Exemple :
<pre>strtoupper('CamelBack') retourne "CAMELBACK"</pre>
 
==Formatage des dates et des heures==
To specify the format use a pattern string. In this pattern, all ASCII letters are reserved as pattern letters, which are defined as the following:
 
The count of pattern letters determine the format.
 
(Text): 4 or more pattern letters--use full form, < 4--use short or abbreviated form if one exists.
 
(Number): the minimum number of digits. Shorter numbers are zero-padded to this amount. Year is handled specially; that is, if the count of 'y' is 2, the Year will be truncated to 2 digits.
 
(Text & Number): 3 or over, use text, otherwise use number.
 
Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not embraced within single quotes.
 
A pattern containing any invalid pattern letter will result in a thrown exception during formatting or parsing.
 
Syntax available:
{| {{prettytable}}
!Symbol!!Meaning!!Presentation!!Example
|-
|G||era designator||Text||AD
|-
|y||year||Number||1996
|-
|M||month in year||"MMM": Text<br />"MM" or "M" : Number||July<br />07 or 7
|-
|d||day in month||Number||10
|-
|h||hour in am/pm (1~12)||Number||12
|-
|H||hour in day (0~23)||Number||0
|-
|m||minute in hour||Number||30
|-
|s||second in minute||Number||55
|-
|S||millisecond||Number||978
|-
|E||day in week||Text||Tuesday
|-
|e||dow (=day of week: 1 = sunday, 2 = monday, )||(Number)||2 (=monday)
|-
|D||day in year||Number||189
|-
|F||day of week in month||Number||2 (2nd Wed in July)
|-
|w||week in year||Number||27
|-
|W||week in month||Number||2
|-
|a||am/pm marker||Text||PM
|-
|k||hour in day (1~24)||Number||24
|-
|K||hour in am/pm (0~11)||Number||0
|-
|z||time zone||Text||Pacific Standard Time
|-
|'||escape for text||Delimiter||
|-
|<nowiki>''</nowiki>||single quote||(Literal)||'
|}
 
Examples Using the local unit system:
{| {{prettytable}}
!Format Pattern!!Result
|-
|<nowiki>"yyyy.MM.dd G 'at' HH:mm:ss z"</nowiki>||1996.07.10 AD at 15:08:56 PDT
|-
|<nowiki>"EEE, MMM d, 'yy"</nowiki>||Wed, July 10, '96
|-
|<nowiki>"KK:mm a, z"</nowiki>||00:08 AM, PST
|-
|<nowiki>"h:mm a"</nowiki>||12:08 PM
|-
|<nowiki>"h 'o''clock' a, zzzz"</nowiki>||12 o'clock PM, Pacific Daylight Time
|-
|<nowiki>"yyyyy.MMMMM.dd GGG h:mm aaa"</nowiki>||1996.July.10 AD 0:08 PM
|-
|<nowiki>"dd/MMM/yyyyy HH:mm"</nowiki>||10/07/1996 00:08
|}
 
==Opérateurs==
===Opérateur == ===
<pre>(getSex(%USER_ID) == 1) ? $womanReduction : 0</pre>
 
===Opérateur OR===
<pre>( test1 OR test2 ) ? true-case : false-case</pre>
 
Sur OpenFlyers 4.0 et au-dessus il est aussi possible d'utiliser :
<pre>( test1 || test2 ) ? true-case : false-case</pre>
 
===Opérateur AND===
<pre>( test1 AND test2 ) ? true-case : false-case</pre>
 
Sur OpenFlyers 4.0 et au-dessus il est aussi possible d'utiliser :
<pre>( test1 && test2 ) ? true-case : false-case</pre>
 
==Variables==
===%ACCOUNT_TYPE===
Type de compte
 
===%AIRFIELD_ARRIVAL===
 
Terrain d'arrivée du vol
 
===%AIRFIELD_DEPARTURE===
 
Terrain de départ du vol
 
===%AUTHENTICATION_LOGIN===
Identifiant utilisateur
 
===%AUTO_INCREMENT===
Valeur auto-incrémentale
 
===%BOOKING_START_DATE===
Date de début d'une réservation.
 
===%COUNTER_ARRIVAL===
Compteur arrivé saisi dans le formulaire.
 
===%COUNTER_DEPARTURE===
Compteur départ saisi dans le formulaire
 
===%DURATION===
Durée du vol
 
===%EXTRAFIELDxx===
Permet de récupérer le contenu d'un champ additionnel
 
Description :
*xx = numéro d'identifiant du champ additionnel. Exemple : %EXTRAFIELD12
*Pour les formules de facturation, seuls les champs additionnels de type de valeur suivants sont acceptés :
**Nombre entier
**Nombre entier unique
**Nombre à virgule
 
===%FIRSTNAME===
Prénom de l'utilisateur
 
===%LASTNAME===
Nom de l'utilisateur
 
===%PILOT===
Id de l'utilisateur.
 
Cette variable est utilisable dans les formules :
* d'email d'alerte de solde
* d'expérience récente
* de facturation des activités et dans ce cas, c'est l'id de l'utilisateur en première place
 
===%PILOT2===
 
Id de l'utilisateur en seconde place. Cette variable est utilisable que dans les formules de facturation des activités.
 
===%MEMBER_NUM===
Numéro de membre
 
===%NOW_DATE===
Date courante au format '''AAAA-MM-JJ hh:mm:ss'''
 
Par exemple : 2015-03-31 14:20:03
 
===%RESOURCE_ID===
Id de la ressource.
 
Cette variable est utilisable dans les formules de :
*[[#Compte-d'export|Compte d'export]]
 
===%RESOURCE_NAME===
Nom de la ressource
 
===<s>%TIME_ARRIVAL</s>===
<s>Heure de fin saisie dans le formulaire</s>
 
===<s>%TIME_DEPARTURE</s>===
<s>Heure de début saisie dans le formulaire</s>
 
===%START_DATE===
 
Date de début du vol ou date d'achat de produit au format '''AAAA-MM-JJ hh:mm:ss'''
 
Par exemple : 2015-03-31 14:20:03
 
===%USER_ID===
 
Id de l'utilisateur.
 
Cette variable est utilisable dans les formules :
* de compte d'export
* d'expérience récente
* de facturation des produits
* de renouvellement de validité
 
=Compte d'export=
 
==Fonctions autorisées pour le calcul du compte d'export==
 
*[[#sprintf('pattern',_'string')|sprintf]]
*[[#substr(string,a,b)|substr]]
*[[#strtolower(string)|strtolower]]
*[[#strtoupper(string)|strtoupper]]
 
==Variables autorisées pour le calcul du compte d'export==
*[[#.ACCOUNT_TYPE|%ACCOUNT_TYPE]]
*[[#.AUTHENTICATION_LOGIN|%AUTHENTICATION_LOGIN]]
*[[#.AUTO_INCREMENT|%AUTO_INCREMENT]]
*[[#.FIRSTNAME|%FIRSTNAME]]
*[[#.LASTNAME|%LASTNAME]]
*[[#.MEMBER_NUM|%MEMBER_NUM]]
*[[#.RESOURCE_ID|%RESOURCE_ID]]
*[[#.RESOURCE_NAME|%RESOURCE_NAME]]
*[[#.USER_ID|%USER_ID]]
 
==Exemples de formules pour le calcul du compte d'export==
{| class="wikitable sortable centre"
!Formule de calcul!!Usage!!Exemples de génération
|-
|411+%ACCOUNT_TYPE||Comptes ressources et utilisateurs||4110002, 4110005
|-
|411+%AUTHENTICATION_LOGIN||Comptes utilisateurs||411pdupont '''c'est le modèle recommandé par OpenFlyers et proposé par défaut pour les comptes utilisateurs'''
|-
|411+%AUTO_INCREMENT||Comptes ressources et utilisateurs||41100001, 41100002, ...., 4110000x
|-
|411+%LASTNAME||Comptes utilisateurs||411dupont, 411dupond
|-
|411+%LASTNAME+substr(%FIRSTNAME,0,1)||Comptes utilisateurs||411dupontp, 411dupontf
|-
|411+%MEMBER_NUM||Comptes utilisateurs||411XXXXX, l'intitulé XXXXXX est le champ Numéro de membre qui est inscrit sur la fiche personnelle de vos adhérents. Exemple : 411001. A vous de vérifier l'unicité de cette valeurs
|-
|411+sprintf('%03s', %USER_ID)||Comptes utilisateurs||411001, 411002, etc.
|-
|411+substr(%AUTHENTICATION_LOGIN,0,3)||Comptes utilisateurs||411pdu 411 suivi de l'identifiant limité à 3 caractères. Cela permet d'être compatible avec les logiciels de comptabilités paramétrés pour n'accepter que 6 caractères. Dans ce cas, il est nécessaire de modifier les comptes d'exports en doublon.
|-
|7061+sprintf('%02s', %RESOURCE_ID)||Comptes ressources||706101, 706102, etc.  '''c'est le modèle recommandé par OpenFlyers et proposé par défaut pour les comptes ressources'''
|}
 
=Date d'expiration=
==Fonctions autorisées pour le calcul de la date d'expiration==
 
* [[#changeTime('date',-'année',-'mois',-'jour',-'minute')|changeTime]]
* [[#formatDate('patron',_'date')|formatDate]]
* [[#getValidityExpiredDate('person_id',_'validity_type_id')|getValidityExpiredDate]]
* [[#hasValidity('user-id',-'validity-type-id',-'check-only-holding')|hasValidity]]
 
==Variables autorisées pour le calcul de la date d'expiration==
 
* [[#.25NOW_DATE|%NOW_DATE]]
* [[#.25USER_ID|%USER_ID]]
 
==Exemples de formules de calcul de la date d'expiration==
 
===Date fixe===
<pre>2012-12-31</pre>
 
===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é :
<pre>formatDate( 'yyyy-MM-dd', changeTime( ( hasValidity(%USER_ID, XX) ? getValidityExpiredDate(%USER_ID, XX) : %NOW_DATE ), '+1', '0', '0' ) )</pre>
 
===Fin de l'année courante===
<pre>formatDate( 'yyyy-12-31', %NOW_DATE )</pre>
 
===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.
 
<pre>formatDate( 'yyyy-12-31', (formatDate('MM', %NOW_DATE)<10) ? %NOW_DATE : changeTime(%NOW_DATE, '+1', 0, 0) )</pre>
 
=Expérience récente=
==Fonctions autorisées pour le calcul de l'expérience récente==
*[[#hasValidity('user_id',_'validity_type_id')|hasValidity]]
*[[#changeTime('date',-'année',-'mois',-'jour',-'minute')|changeTime]]
*[[#getValidityGrantedDate('person-id',-'validity-type-id',-'optional-default-date')|getValidityGrantedDate]]
*[[#sumFlightHour('pilot_id',_'position',_'day',_'aircraft_type_1'_,_'aircraft_type_2',_'aircraft_type_X')|sumFlightHour]]
*[[#sumFlightTime(.25PILOT,_'year',_'month',_'day',_'hour',_'minute',_'position',_'flight_type'_)|sumFlightTime]]
*[[#sumLandingByType(.PILOT,-'year',-'month',-'day',-'hour',-'minute',-'position',-'activity-type')|sumLandingByType]]
*[[#sumLandingNumber('pilot_id',_'position',_'day',_'aircraft_type_1'_,_'aircraft_type_2',_'aircraft_type_X')|sumLandingNumber]]
*[[#sumPreviousFlightTime('pilot_id',_'position',_'day',_'endingDate',_'aircraft_type_1'_,_'aircraft_type_2',_'aircraft_type_X')|sumPreviousFlightTime]]
 
==Variables autorisées pour le calcul de l'expérience récente==
 
* [[#.PILOT|%PILOT]]
* [[#.25NOW_DATE|%NOW_DATE]]
* [[#.USER-ID|%USER_ID]]
 
==Exemples de formules de calcul de l'expérience récente==
 
===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 :
 
<php>( (sumFlightHour(%PILOT, 0, 365)+sumFlightHour(%PILOT, 1, 365) > 17999) OR hasValidity(%PILOT, XX) )</php>
 
===Type d'activité X dans les 12 derniers mois===
L'exemple suivant vérifie si un utilisateur a effectué une activité d'un type X donné dans les 365 derniers jours.
 
Remplacer dans l'exemple suivant XX par l'identifiant du type d'activité donné :
 
<php>sumFlightTime(%PILOT, formatDate('yyyy', changeTime( %NOW_DATE, '-1', '0', '0' )), formatDate('M', changeTime( %NOW_DATE, '-1', '0', '0' )), formatDate('d', changeTime( %NOW_DATE, '-1', '0', '0' )), 00, 00, 0, XX ) > 0</php>
 
===Validités à expérience récente pour le LAPL===
Le LAPL ([[Wikipedia-en:Light_aircraft_pilot_licence|Light Aircraft Pilot Licence]]) est un brevet de pilote dont la validité dépend de l'expérience récente. Il met en œuvre une succession de règles qui sont les suivantes :
*Pendant les 24 premiers mois suivant son obtention, ce brevet est valide.
*Au-delà de 24 mois, pour rester valide, un pilote doit justifier avoir effectué, dans les 24 mois précédents de :
**12 mouvements en tant que commandant de bord
**12 heures de vols en tant que commandant de bord
**1 vol d'au moins une heure d'instruction en tant qu'élève
 
 
Voici la formule à expérience récente '''12 mouvements en tant que CDB dans les 24 mois (LAPL)''' qui permet d'afficher une alerte pour les pilotes :
*Qui ont le LAPL depuis plus de 24 mois
*ET Qui n'ont pas les '''12 mouvements dans les 730 derniers jours''' en tant que commandement de bord
*ET Qui n'ont pas une validité "Expérience récente extérieure"
<php>((getYearsFromDiffDate(getValidityGrantedDate(%PILOT, XXXXXX, formatDate( 'yyyy-MM-dd', %NOW_DATE )), %NOW_DATE)>=2) AND (( sumLandingNumber(%PILOT, 0, 730)+sumLandingNumber(%PILOT, 1, 730) - sumLandingByType(%PILOT, formatDate('yyyy', changeTime( %NOW_DATE, '-2', '0', '0' )), formatDate('M', changeTime( %NOW_DATE, '-2', '0', '0' )), formatDate('d', changeTime( %NOW_DATE, '-2', '0', '0' )), 00, 00, 0, 4 ) ) < 12) AND (hasValidity(%PILOT, YYYYYY) == 0))? 0 : 1</php>
Dans cette formule, il faut remplacer :
*XXXXXX par l'id du type de validité "LAPL"
*YYYYYY par l'id du type de validité "Expérience récente extérieure"
 
 
Voici la formule à expérience récente '''12 heures de vols comme CDB dans les 24 mois (LAPL)''' qui permet d'afficher une alerte pour les pilotes :
*Qui ont le LAPL depuis plus de 24 mois
*ET Qui n'ont pas les '''12 heures dans les 730 derniers jours''' en tant que commandement de bord
*ET Qui n'ont pas une validité "Expérience récente extérieure"
<php>((getYearsFromDiffDate(getValidityGrantedDate(%PILOT, XXXXXX, formatDate( 'yyyy-MM-dd', %NOW_DATE )), %NOW_DATE)>=2) AND (( sumFlightHour(%PILOT, 0, 730)+sumFlightHour(%PILOT, 1, 730) - sumFlightTime(%PILOT, formatDate('yyyy', changeTime( %NOW_DATE, '-2', '0', '0' )), formatDate('M', changeTime( %NOW_DATE, '-2', '0', '0' )), formatDate('d', changeTime( %NOW_DATE, '-2', '0', '0' )), 00, 00, 0, 4 ) ) < 7200) AND (hasValidity(%PILOT, YYYYYY) == 0))? 0 : 1</php>
Dans cette formule, il faut remplacer :
*XXXXXX par l'id du type de validité "LAPL"
*YYYYYY par l'id du type de validité "Expérience récente extérieure"
 
Remarque : pour être pertinente, la validité "Expérience récente extérieure" devrait être une validité à échéance qui permette ainsi d'indiquer la date jusqu'à laquelle l'utilisateur concerné peut être considéré comme remplissant les critères.


=Facturation=
==Installation==
Outre les définitions toujours valides pour le calcul du temps d'activité, voici d'autres définitions :
===[[Getting started with OpenFlyers|Bien débuter avec OpenFlyers]]===
''A rédiger''
===[[Créer une plateforme OpenFlyers pour sa structure|Créer une plateforme OpenFlyers pour sa structure]]===
===[[Browsers_compatibility|Compatibilité des navigateurs]]===


Voir [http://doc-en.openflyers.com/index.php?title=AdminDoc2.1 Formules en anglais]
==[[OF_wiki:|Documentation Webmasters et Développeurs]]==
===[[Interfaçage OpenFlyers et armoire à clé]]===


==Fonctions autorisées pour le calcul de la facturation==
==[[BTS|Rapporter des bugs]]==


*[[#abs(X)|abs(X)]]
==[[Tips-and-tricks|Trucs et astuces]]==
*[[#changeTime('date',-'année',-'mois',-'jour',-'minute')|changeTime]]
===[[Kiosk|Mettre en place un PC kiosque]]===
*[[OF_doc-en::CommonFormula#convertTimezone.28.25SOME_DATE.2C_.25SOME_TZ1.2C_.25SOME_TZ2.29|convertTimezone]]
===[[Hybrid internet network|Mettre en place un réseau internet hybride]]===
*[[#formatDate('patron',-'date')|formatDate('pattern',%SOME_DATE)]]
*[[OF_doc-en::CommonFormula#getBalance.28a.29|getBalance(a,b)]]
*[[OF_doc-en::CommonFormula#getBirthdate.28.27person_id.27.29|getBirthdate('person id')]]
*[[OF_doc-en::CommonFormula#getFlowSumBetweenAccount.28.27accound_id_1.27.2C_.27account_id_2.27.2C_.27start_date.27.2C_.27end_date.27.29|getFlowSumBetweenAccount('accound id 1', 'account id 2', 'start date', 'end date')]]
*[[#getSumAccountBusinessField('business-field-id,-'person-id',-'date')|getSumAccountBusinessField]]
*[[#getValidityExpiredDate('person-id',-'validity-type-id',-'optional-default-date')|getValidityExpiredDate('person id', 'valididty type id', 'default optional date')]]
*[[#getValidityGrantedDate('person-id',-'validity-type-id',-'optional-default-date')|getValidityGrantedDate('person id', 'valididty type id', 'default optional date')]]
*[[#getYearsFromDiffDate('first-date',-'second-date')|getYearsFromDiffDate('first date', 'second date')]]
*[[#hasValidity('user-id',-'validity-type-id',-'check-only-holding')|hasValidity('person id', 'valididty type id')]]
*[[#max(X,Y)|max(X,Y)]]
*[[#min(X,Y)|min(X,Y)]]
*[[#roundCeil(X,Y)|roundCeil(X,Y)]]
*[[#sumFlightTime(.PILOT,-'year',-'month',-'day',-'hour',-'minute',-'position',-'flight-type'-)|sumFlightTime(%PILOT, 'year', 'month', 'day', 'hour', 'minute', 'position', 'flight type')]]
*[[#sumFlightHour('pilot-id',-'position',-'day',-'aircraft-type-1'-,-'aircraft-type-2',-'aircraft-type-X')|sumFlightHour(%PILOT, 'position', 'day','aircraft type')]]
*[[#sumLandingNumber('pilot-id',-'position',-'day',-'aircraft-type-1'-,-'aircraft-type-2',-'aircraft-type-X')|sumLandingNumber(%PILOT, 'position', 'day', 'aircraft type')]]
*[[#sumPreviousFlightTime('pilot-id',-'position',-'day',-'endingDate',-'aircraft-type-1'-,-'aircraft-type-2',-'aircraft-type-X')|sumPreviousFlightTime(%PILOT, 'position', 'day', '%START_FLIGHT', 'flight type')]]


==Variables autorisées pour le calcul de la facturation==
==[[Glossary4|Glossaire]]==
*[[OF_doc-en::CommonFormula#.ACCOUNT1|%ACCOUNT1]]
*[[OF_doc-en::CommonFormula#.ACCOUNT2|%ACCOUNT2]]
*[[OF_doc-en::CommonFormula#.ACCOUNTING_START_DATE|%ACCOUNTING_START_DATE]]
*[[#.AIRFIELD-ARRIVAL|%AIRFIELD_ARRIVAL]]
*[[#.AIRFIELD-DEPARTURE|%AIRFIELD_DEPARTURE]]
*[[#.COUNTER-ARRIVAL|%COUNTER_ARRIVAL]]
*[[#.COUNTER-DEPARTURE|%COUNTER_DEPARTURE]]
*[[OF_doc-en::CommonFormula#.CURRENT_QUANTITY|%CURRENT_QUANTITY]]
*[[OF_doc-en::CommonFormula#.CURRENT_UNIT_PRICE|%CURRENT_UNIT_PRICE]]
*[[#.DURATION|%DURATION]]
*[[OF_doc-en::CommonFormula#.ENTITY_TZ|%ENTITY_TZ]]
*[[#.EXTRAFIELDxx|%EXTRAFIELDxx]]
*[[#.PILOT|%PILOT]]
*[[#.PILOT2|%PILOT2]]
*[[#.NOW-DATE|%NOW_DATE]]
*[[#.START-DATE|%START_DATE]]
*[[OF_doc-en::CommonFormula#.USER_TZ|%USER_TZ]]


==Exemples de formules pour le calcul de la facturation==
==FAQ==
===Motoplaneur : facturation à l'heure de vol ET à l'utilisation du moteur===
===[[FAQ client|FAQ clients]]===
Pour cela, on suppose que les compteurs sont utilisés et qu'ils prennent en compte le temps d'utilisation du moteur :
===[[FAQ admin4|FAQ administrateur]]===
%DURATION * $FLIGHT_HOUR_PRICE + (%COUNTER_ARRIVAL - %COUNTER_DEPARTURE) * $ENGINE_HOUR_PRICE
===[[FAQ user4|FAQ utilisateur]]===
===[[FAQ accounting4.1|FAQ comptabilité]]===
===[[FAQ export]]===
===[[FAQ AeroBox]]===
===[[FAQ_KeyPanel1|FAQ Armoire à clés 1]]===


===Aéronautique : réduction lorsque le compte pilote a un solde positif===
=Documentation Administrateurs=
$C2 concerne le tarif horaire de l'avion<br>
==[[adminDoc4|Documentation administrateur]]==
$S le solde positif qui doit être atteint pour bénéficier de la réduction<br>
==[[tutorial4|Tutoriel de configuration]]==
$R le montant horaire de la réduction obtenue dans ce cas<br>
==[[Import_module4|Module d'import]]==
==[[mailingList|Gérer une liste de diffusion sur OpenFlyers]]==
==[[Extrafield|Champs additionnels]]==
==[[Formula_pool|Formules de calcul]]==


roundCeil((((getBalance(%PILOT)>$S ? ($C2-$R) : $C2)*%DURATION/600)-0.5),1)
==Alertes==
==[[Configuration-alerts4|Alertes de configuration]]==
==[[User-alerts|Alertes d'utilisation]]==


===Aéronautique : réduction lorsque le vol se fait après une certaine heure===
==Comptabilité==
===[[account|Généralités sur la comptabilité]]===
===[[Accounting_Specic_Advise|Conseils spécifiques]]===
===[[accounting entries|Les écritures comptables]]===
===[[OF_Accounting_entries4|Les écritures comptables]]===
===[[Compte de résultats]]===
===[[OF_Configuration_Accounting4|Configuration de la comptabilité]]===
===[[OF_Use_Accounting4|Utilisation de la comptabilité]]===
===[[OF Budget Management4|Configuration des budgets]]===
===[[OF_doc-en::Accounting_export_template_list|Template de format d'export comptable]]===
===[[ODT_bill_template|Template ODT pour les factures]]===


$C2 concerne le tarif horaire de l'avion<br>
===Facturation client===
$C2R concerne le tarif horaire réduit de l'avion après une certaine heure<br>
====[[customerPricing4|Généralités sur la facturation des clients]]====
659 correspond à 06:59 en temps UTC<br>
====[[FlightHoursPricing4|Facturation des heures de vols]]====
Dans ce cas la formule considère que dès 700, la réduction s'applique.<br>
====[[admin_sale_manager4|Gestionnaire des ventes]]====
====[[Product_sale_manager4|Gestionnaire des produits et des ventes]]====


roundCeil(((((formatDate('hmm',%START_DATE)>659)?$C2R:$C2)*%DURATION/600)-0.5),1)
===Facturation fournisseur===
====[[Purchase-management4|Gestionnaire des achats]]====


===Aéronautique : réduction lorsque le vol se fait un jour de la semaine en dehors des mois de juillet et août===
===[[FAQ accounting4|FAQ comptabilité]]===


$C1R concerne le tarif de la réduction
==[[Access-Control|Contrôle d'accès]]==
===[[KeyPanel_installation1|Installation armoire à clés version 1]]===
===[[KeyPanel management1|Gestion de l'armoire à clés version 1]]===
===[[FAQ KeyPanel1|FAQ armoire à clés version 1]]===


<pre>( (formatDate('e', %START_DATE) > 1) AND (formatDate('e', %START_DATE) < 7) AND ((formatDate('MM', %START_DATE) < 7) OR (formatDate('MM', %START_DATE) > 8)) ) ? $C1R : 0</pre>
==[[log4|Logs]]==


=Temps d'activité=
==Maintenance==
Pour calculer le temps d'une activité (exemple : vol), les règles diffèrent selon les structures.
===[[MRO|Généralités sur la maintenance]]===
===[[MRO4|Suivi de la navigabilité]]===


OpenFlyers permet d'attribuer des formules de calcul de temps d'activité par type de ressource. Cf. la [[Gestion des ressources#Ajouter_un_type_de_ressource|gestion des types de ressources]].
==Montée de version==
*[[Upgrade4#Pr.C3.A9requis_pour_passer_.C3.A0_la_version_4.0alpha_d.27OpenFlyers|Prérequis]]
*[[Upgrade4#Proc.C3.A9dure_de_migration_vers_la_version_4.0alpha_d.27OpenFlyers|Procédure]]


==Définition Unité sexacentimal==
==[[OF_Manage_Report4|Rapports]]==
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.
==[[resource-management4|Ressources]]==


*1 heure = 600 sexacentièmes
==[[stock-management4|Stocks]]==
*1 minute = 10 sexacentièmes
*5 minutes = 50 sexacentièmes


*1 centième de minute = 6 sexacentièmes
==Utilisateurs==
*10 centième de minute (=1 dixième de minute) = 60 sexacentièmes
===[[user-management4|Gestion des utilisateurs]]===
===[[profile-management4|Gestion des profils]]===
===[[validity-management4|Gestion des validités]]===


Exemples de formules :
=Documentation Utilisateurs=
*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é==
==[[Activity-management4|Activités]]==
*[[#abs(X)|abs]]
*[[#max(X,Y)|max]]
*[[#min(X,Y)|min]]
*[[#roundCeil(X,Y)|roundCeil]]


==Variables autorisées pour le calcul du temps d'activité==
==Alertes==
*[[#.AIRFIELD-ARRIVAL|%AIRFIELD_ARRIVAL]]
===[[OF_Alert4|Aspect]]===
*[[#.AIRFIELD-DEPARTURE|%AIRFIELD_DEPARTURE]]
===[[Configuration-alerts4|Alertes de configuration]]===
*[[#.COUNTER_ARRIVAL|%COUNTER_ARRIVAL]]
===[[User-alerts4|Alertes d'utilisation]]===
*[[#.COUNTER_DEPARTURE|%COUNTER_DEPARTURE]]
*[[#.DURATION|%DURATION]]
*[[#.TIME_ARRIVAL|%TIME_ARRIVAL]]
*[[#.TIME_DEPARTURE|%TIME_DEPARTURE]]


==Exemples de formules de calcul du temps d'activité==
==[[OF_Personal_Page4|Fiche personnelle]]==
===Durée saisie===
<pre>%DURATION</pre>


===Différence des compteurs saisis===
==[[OF_Calendar4|Calendrier]]==
<pre>%COUNTER_ARRIVAL - %COUNTER_DEPARTURE</pre>


===Durée saisie arrondie à 5 minutes===
==[[OF_Accounting4|Comptabilité]]==
<pre>roundCeil(%DURATION, 50)</pre>


===Différence des compteurs plus 5 centièmes ===
==[[OF_Login4|Connexion]]==
<pre>%COUNTER_ARRIVAL - %COUNTER_DEPARTURE + 30</pre>


===Différence des compteurs plus 5 minutes ===
==[[OF_ModalWindow4|Fenêtres de dialogue]]==
<pre>%COUNTER_ARRIVAL - %COUNTER_DEPARTURE + 50</pre>


===Différence des compteurs plus 5 ou 10 minutes selon l'aérodrome de départ===
==[[user_sale_manager4|Gestionnaire des ventes]]==
Si l'aérodrome de départ est LFBD, on rajoute 10 minutes à la différence des compteurs, sinon on rajoute 5 minutes :
<pre>%COUNTER_ARRIVAL - %COUNTER_DEPARTURE + ( (%AIRFIELD_DEPARTURE=='LFBD')? 100 : 50 )</pre>


===Différence des compteurs arrondie au 5 minutes les plus proches plus 5 minutes===
==[[OF_Menu4|Menu de navigation]]==
<pre>roundCeil(%COUNTER_ARRIVAL - %COUNTER_DEPARTURE - 25, 50) + 50</pre>


===Différence des compteurs arrondie à 10 centièmes===
==[[Upgrade4#Nouveaut.C3.A9s_de_la_version_4_d.27OpenFlyers|Nouveautés de l'interface graphique d'OF4]]==
<pre>roundCeil(%COUNTER_ARRIVAL - %COUNTER_DEPARTURE, 60)</pre>


===Le plus grand entre la durée du vol et la différence des compteurs===
==[[OF_Planning4|Planning de réservation]]==
<pre>max(%DURATION, %COUNTER_ARRIVAL - %COUNTER_DEPARTURE)</pre>
*[[OF_Planning4_Layout|Aspect]]
*[[OF_Planning4_Use|Utilisation]]


===Le plus grand entre la durée du vol et la différence des compteurs arrondie à 5 minutes===
==[[OF_Reports4|Rapports]]==
<pre>max(%DURATION,roundCeil(%COUNTER_ARRIVAL - %COUNTER_DEPARTURE, 50))</pre>
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 du vol et la différence des compteurs moins 5 minutes===
==[[OF_Table4|Tableaux]]==
<pre>max(%DURATION, %COUNTER_ARRIVAL - %COUNTER_DEPARTURE - 50)</pre>
*[[OF_Table4_Layout|Aspect]]
*[[OF_Table4_Use|Utilisation]]


===Le plus grand entre la durée saisie, arrondie à 5 minutes, et la différence des compteurs, arrondie à 5 minutes===
==[[Validity-management4|Gestion des validités]]==
<pre>max(roundCeil(%DURATION,50),roundCeil(%COUNTER_ARRIVAL - %COUNTER_DEPARTURE, 50))</pre>
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

Revision as of 12:59, 15 October 2014

Bienvenue sur la documentation d'OpenFlyers4.

You can also access to our english documentation.

Présentation

La société OpenFlyers

La suite logicielle OpenFlyers

Découvrir le logiciel OpenFlyers

Les technologies de géolocalisation pour l'aéronautique

Historique des versions

Modèle_commercial_et_compte_client_OpenFlyers

Formations OpenFlyers

Bien communiquer avec OpenFlyers

Installation

Bien débuter avec OpenFlyers

Créer une plateforme OpenFlyers pour sa structure

Compatibilité des navigateurs

Documentation Webmasters et Développeurs

Interfaçage OpenFlyers et armoire à clé

Rapporter des bugs

Trucs et astuces

Mettre en place un PC kiosque

Mettre en place un réseau internet hybride

Glossaire

FAQ

FAQ clients

FAQ administrateur

FAQ utilisateur

FAQ comptabilité

FAQ export

FAQ AeroBox

FAQ Armoire à clés 1

Documentation Administrateurs

Documentation administrateur

Tutoriel de configuration

Module d'import

Gérer une liste de diffusion sur OpenFlyers

Champs additionnels

Formules de calcul

Alertes

Alertes de configuration

Alertes d'utilisation

Comptabilité

Généralités sur la comptabilité

Conseils spécifiques

Les écritures comptables

Les écritures comptables

Compte de résultats

Configuration de la comptabilité

Utilisation de la comptabilité

Configuration des budgets

Template de format d'export comptable

Template ODT pour les factures

Facturation client

Généralités sur la facturation des clients

Facturation des heures de vols

Gestionnaire des ventes

Gestionnaire des produits et des ventes

Facturation fournisseur

Gestionnaire des achats

FAQ comptabilité

Contrôle d'accès

Installation armoire à clés version 1

Gestion de l'armoire à clés version 1

FAQ armoire à clés version 1

Logs

Maintenance

Généralités sur la maintenance

Suivi de la navigabilité

Montée de version

Rapports

Ressources

Stocks

Utilisateurs

Gestion des utilisateurs

Gestion des profils

Gestion des validités

Documentation Utilisateurs

Activités

Alertes

Aspect

Alertes de configuration

Alertes d'utilisation

Fiche personnelle

Calendrier

Comptabilité

Connexion

Fenêtres de dialogue

Gestionnaire des ventes

Menu de navigation

Nouveautés de l'interface graphique d'OF4

Planning de réservation

Rapports

Tableaux

Gestion des validités