Règles de saisie : Différence entre versions

Aller à : navigation, rechercher
(rule)
(rule)
Ligne 95 : Ligne 95 :
 
Chaque règle définit les types d'activités, types de ressources et places qui la rendent compatible.
 
Chaque règle définit les types d'activités, types de ressources et places qui la rendent compatible.
  
L'exemple suivant définit une règle qui autorise une saisie pour le type d'activité ''Local'', les types de ressources F-001 ou F-002 et pour laquelle il faut exactement 1 utilisateur avec le profil ''Pilote'' à la place 0. De plus, La personne qui fait la réservation doit avoir le droit "bookAlone" et si elle dispose du droit "bookAnyone" alors elle verra en plus la liste des utilisateurs compatibles avec cette règle pour lui permettre d'en choisir une :  
+
L'exemple suivant définit une règle qui autorise une saisie pour le type d'activité ''Local'', les types de ressources ''F-001'' ou ''F-002'' et pour laquelle il faut exactement 1 utilisateur avec le profil ''Pilote'' à la place 0. Le statut attribué sera celui de numéro 1. De plus, La personne qui fait la réservation doit avoir le droit "bookAlone" et si elle dispose du droit "bookAnyone" alors elle verra en plus la liste des utilisateurs compatibles avec cette règle pour lui permettre d'en choisir une :  
 
<xml><rule>
 
<xml><rule>
 
         <!-- Liste des activités autorisées et requises -->
 
         <!-- Liste des activités autorisées et requises -->

Version du 10 septembre 2018 à 12:12

Présentation

Cette page décrit la structure des règles de saisie. Elles sont éditables dans Structure > Paramétrage, formulaire Gestion du planning, champ Règles de saisies XML.

Les règles de saisie sont utilisées, pour le moment, uniquement par le moteur de réservation pour construire l'affichage des champs du formulaire de réservation et pour vérifier, après la saisie d'une réservation, que les données saisies respectent bien les règles de saisie.

Elles sont écrites en XML. cf. l'exemple de règles de saisie.

Le moteur de vérification des règles s'enclenche dès qu'une réservation n'est plus "nue", c'est à dire lorsqu'au moins un élément est renseigné (activité, ressource, etc.). Alors il vérifie quelles sont les règles compatibles et en déduit les contenus possibles dans les champs de saisie de l'interface utilisateur.

La compatibilité d'une règle se détermine par restriction en vérifiant dans cet ordre les informations suivantes :

  1. Activités
  2. Ressources
  3. Profils
  4. Places

Pour chaque information, le moteur regarde si elle est renseignée. Si ce n'est pas le cas alors il passe à l'information suivante. Par exemple s'il n'y a pas encore d'activité de saisie alors il ne vérifie pas ce point-là dans la règle.

Pour les activités et les ressources, il regarde les règles qui acceptent celles renseignées. S'il y a des règles qui pose problème alors elles sont rejetées.

Pour les profils ce sont les personnes qui sont étudiées et ce de deux manières différentes selon si sur la saisie il y a une ressource de renseignée ou non.

  • Lorsqu'il y a une ressource de renseignée, le fonctionnement est similaire aux autres informations. le moteur regarde pour toutes les personnes renseignées si sur la place où elles sont, elles ont au moins un profil valide. Si une personne n'a aucun profil pour la place où il est alors la règle est rejetée.
  • Lorsqu'il n'y a pas de ressource le fonctionnement est différent. Au lieu de faire par restriction, le moteur va faire par ajout. C'est-à-dire qu'au lieu de dire "il ne faut que des pilotes", il va dire "je veux au moins un pilote". Pour ce faire il va regarder les profils de chaque personne. S'il trouve une personne avec un profil valide, il accepte la règle. Si aucune des personnes ne correspond, il va faire une seconde vérification au niveau des places. Si pour cette règle l'une des places n'est pas définie, il considère que les personnes présentes vont potentiellement aller sur cette place et il ne rejette pas la règle. Par contre, si toutes les places sont définies et qu'aucune des personnes ne correspond alors la règle est rejetée.

Pour les places, il vérifie qu'il n'y a pas trop de monde. Comme pour les profils il y a deux manières de les étudier en fonction de s'il y a une ressource ou non.

  • Lorsqu'il y a une ressource, il va regarder pour chaque place si le nombre de personnes autorisées n'est pas dépassé. Si sur l'une des places le nombre est dépassé alors la règle est rejetée. Cependant, si le nombre est atteint mais pas dépassé alors la règle n'est pas rejetée.
  • Lorsqu'il n'y a pas de ressource, il va parcourir chaque place pour compter le nombre total de personnes autorisées pour cette règle. Si le nombre est dépassé alors la règle est rejetée. Comme précédemment si le nombre est simplement atteint alors la règle n'est pas rejetée.

Si pour chaque information saisie, la règle est compatible alors elle est conservée.

Pour qu'une saisie soit valide, il faut qu'il existe au moins une règle de conservée, c'est à dire de compatible.

Exemple

<?xml version="1.0" encoding="UTF-8"?>
<ruleList restrictedVersion="false">
    <rule>
        <!-- Liste des activités autorisées et requises -->
        <activityTypeList needs="bookAlone">
            <activityType>1</activityType> <!-- Local -->
        </activityTypeList>
        <!-- Liste des ressources autorisées -->
        <resourceList minQty="1" maxQty="1">
            <resourceType>1</resourceType> <!-- F-001 -->
            <resourceType>2</resourceType> <!-- F-002 -->
        </resourceList>
        <!-- Définition des places -->
        <placeList>
            <place index="0"  minQty="1" maxQty="1" status="1" needs="bookAnyone"> <!-- Pilote -->
                <!-- Liste des profils autorisés -->
                <profile>2</profile> <!-- Pilote -->
            </place>
        </placeList>
    </rule>
    <rule>
        <!-- Liste des activités autorisées et requises -->
        <activityTypeList needs="*(bookAlone)(bookWithInstr)">
            <activityType>1</activityType> <!-- Local -->
            <activityType>2</activityType> <!-- Instruction -->
        </activityTypeList>
        <!-- Liste des ressources autorisées -->
        <resourceList minQty="1" maxQty="1">
            <resourceType>*</resourceType> <!-- F-001, F-002, F-00X -->
        </resourceList>
        <!-- Définition des places -->
        <placeList>
            <place index="0"  minQty="1" maxQty="1" status="1"> <!-- Pilote-->
                <!-- Liste des profils autorisés -->
                <profile>1</profile> <!-- Elève -->
                <profile>2</profile> <!-- Pilote -->
            </place>
            <place index="1" minQty="1" maxQty="1" status="2"> <!-- Instructeur -->
                <!-- Liste des profils autorisés -->
                <profile>4</profile> <!-- Instructeur -->
            </place>
        </placeList>
    </rule>
    <rule>...</rule>
</ruleList>

ruleList

Élément racine de la structure XML ne peut contenir comme élément enfant que des éléments "rule" qui correspondent, chacun, à une règle.

Les attributs possibles sont :

  • restrictedVersion avec comme valeur false ou true. Permet ???. Par défaut, restrictedVersion vaut ???.

rule

Définit une règle.

Les éléments possibles sont :

  • activityTypeList
  • resourceList
  • placeList

Il n'y a pas d'attribut possible.

Chaque règle définit les types d'activités, types de ressources et places qui la rendent compatible.

L'exemple suivant définit une règle qui autorise une saisie pour le type d'activité Local, les types de ressources F-001 ou F-002 et pour laquelle il faut exactement 1 utilisateur avec le profil Pilote à la place 0. Le statut attribué sera celui de numéro 1. De plus, La personne qui fait la réservation doit avoir le droit "bookAlone" et si elle dispose du droit "bookAnyone" alors elle verra en plus la liste des utilisateurs compatibles avec cette règle pour lui permettre d'en choisir une :

<rule>
        <!-- Liste des activités autorisées et requises -->
        <activityTypeList needs="bookAlone">
            <activityType>1</activityType> <!-- Local -->
        </activityTypeList>
        <!-- Liste des ressources autorisées -->
        <resourceList minQty="1" maxQty="1">
            <resourceType>1</resourceType> <!-- F-001 -->
            <resourceType>2</resourceType> <!-- F-002 -->
        </resourceList>
        <!-- Définition des places -->
        <placeList>
            <place index="0"  minQty="1" maxQty="1" status="1" needs="bookAnyone"> <!-- Pilote -->
                <!-- Liste des profils autorisés -->
                <profile>2</profile> <!-- Pilote -->
            </place>
        </placeList>
    </rule>

activityTypeList

attribut needs

activityType

resourceList

attribut maxQty
attribut minQty

placeList

place

attribut index
attribut maxQty
attribut minQty
attribut needs
attribut status

Signes de comparaison

Une ou plusieurs formules peuvent être écrite afin d'avoir un comportement particulier (par exemple, des réservations ne dépassant pas les 30mins). Il faut donc écrire une condition : pour certains symboles il faut taper leur equivalent HTML :

  • Pour >, remplacer par &gt;
  • Pour <, remplacer par &lt;
  • Pour >=, remplacer par &gt;=
  • Pour <=, remplacer par &lt;=

Wildcard

Le caractère * peut être utilisé dans les éléments resourceType. Il indique que la règle s'applique à tous les types de ressources existants de la plateforme.

Exemple avec wildcard :

<resourceTypeList minQty="1" maxQty="1">
    <resourceType>*</resourceType>
</resourceTypeList>

Exemple sans wildcard :

<resourceTypeList minQty="1" maxQty="1">
    <resourceType>1</resourceType>
    <resourceType>2</resourceType>
    <resourceType>3</resourceType>
</resourceTypeList>