Règles de saisie

Aller à : navigation, rechercher

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.

attribut needs

L'attribut needs peut être utilisé pour les éléments :

  • activityTypeList
  • place

Il contient un ou plusieurs droits qui sont requis par l'utilisateur effectuant la saisie pour que la règle puisse s'appliquer.

Lorsqu'il n'y a qu'un droit de requis, il faut écrire needs="nomDuDroit".

Lorsqu'il y a plusieurs droits possibles, un seul étant requis, il faut commencer par le signe * puis lister chaque droit en l'entourant de parenthèses : needs="*(bookAlone)(bookWithInstr).

Exemple

<?xml version="1.0" encoding="UTF-8"?>
<ruleList>
    <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.

Il n'y pas d'attribut possible.

rule

Définit une règle.

Les éléments possibles sont :

  • formulaList
  • 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>

formulaList

Contient la liste des formules que la règle doit respecter au travers des éléments formula.

formula

Doit contenir les attributs :

  • action : indique l'action concernée pour la vérification de la formule. Si l'action effectuée par l'utilisateur n'est pas celle de la formule, alors la formule n'est pas vérifiée. Par contre, la règle peut quand être compatible. Il est possible de remplacer le nom d'une action par * pour indiquer que la formule doit être vérifiée quelque soit l'action.
  • title : pour indiquer le message d'alerte devant s'afficher lorsque la formule n'est pas respectée

Le contenu de l'élément formula est une formule qui est testée lors de la saisie.

Attention : dans la formule, pour les signes de comparaison supérieur ou inférieur, il faut saisir leur équivalent HTML :

  • > doit être remplacé par &gt;
  • < doit être remplacé par &lt;
  • >= doit être remplacé &gt;=
  • <= doit être remplacé &lt;=

Exemple :

<!-- Durée maximum : 30min -->
<formula action="update" title="Vous ne pouvez pas faire de réservation ayant une durée supérieure à 30 minutes.">(%DURATION &lt;= 300)</formula>

activityTypeList

Contient la liste des types d'activités qui sont compatibles avec la règle.

Peut contenir l'attribut needs.

activityType

Contient l'identifiant d'un type d'activité.

resourceList

Contient la liste des types de ressources qui sont compatibles avec la règle.

Peut contenir les attributs maxQty et minQty pour définir le nombre de ressources maximum et minimum.

placeList

Contient la liste définissant les places.

place

Contient la définition de chaque place.

Peut contenir des éléments profile pour indiquer un profil requis parmi plusieurs pour qu'un utilisateur puisse occuper la place.

Doit contenir l'attribut index pour numéroter la place définie.

Peut contenir les attributs maxQty, minQty, needs et status.

L'attribut needs permet de définir le droit requis pour l'utilisateur effectuant la saisie afin qu'il puisse choisir l'utilisateur dans la liste des utilisateurs compatibles. typiquement, cet attribut est utilisé ainsi : needs="bookAnyone".

L'attribut status permet de définir le statut de la personne à laquelle on attribut la place. Cette définition se fait en utilisant l'identifiant du statut. Exemple : status="1".

profile

Contient l'identifiant du profile requis.

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>