1. Accueil
  2. /
  3. Guide Admin
  4. /
  5. Guide Administrateur du P...

Guide Administrateur du Planificateur

Ce guide vous montre comment configurer et utiliser l’application Planificateur de Cirrus Shield pour planifier efficacement vos missions vis-à-vis de vos ressources et vos lieux.

Le mapping et les boutons à ajouter sont expliqués ici.

  1. Allez dans Configuration, puis dans l’onglet Applications connectées et assurez-vous que l’application planificateur y figure.
  2. Allez dans l’onglet Extensions et vérifiez que l’extension planificateur est présente.
  3. Si l’extension n’est pas présente, téléchargez-la en cliquant sur l’icône plus, puis en la sélectionnant dans la liste.
  4. Cliquez sur Détails de cette extension depuis la liste
  5. Une page de présentation du Planificateur s’ouvre.
  6. Cliquez sur le bouton Configurer le planificateur pour passer à l’étape suivante.
  1. Indiquez les horaires de travail de votre entreprise pour chaque jour de la semaine.
  2. Ajoutez les jours de fermeture. Ceux-ci peuvent être valables pour une seule année ou répétitifs chaque année.
  1. Cliquez ensuite sur Enregistrer.
  1. Faites correspondre les objets et les champs avec le planificateur.
  2. Si votre secteur d’activité figure dans le modèle de mappage, sélectionnez-le pour un mappage automatique, à condition que vous disposiez des objets et champs correspondants.

Le moteur de planification ne code en dur aucun nom d’objet ni de champ. Chaque rôle générique ci-dessous est mappé une fois, par organisation, dans l’étape Mapping de l’assistant /config. Ce document décrit le vocabulaire générique — jamais les noms réels d’une organisation en particulier.

Comment lire une fiche :

  • Objet Cirrus Shield — toujours choisi à la main pour chaque organisation ; aucune valeur par défaut, jamais un champ.
  • Champ fixe — nom d’API supposé identique pour toutes les organisations. N’apparaît pas dans l’assistant ; une correction se fait directement en base de données si l’organisation diffère.
  • Champ à mapper — proposé comme liste déroulante dans l’assistant ; l’administrateur choisit le champ réel de son organisation.

01 — Service (GenericRole.Service)

L’offre ou le produit auquel une Mission est rattachée — sert à filtrer quelles Ressources sont qualifiées via une Compétence.

Objet Cirrus Shield à choisir — obligatoire.

Champs fixes

Champ génériqueAPI Cirrus ShieldDescription
NomNameNom affiché du Service.
CodeProduitProduct_CodeCode interne du produit/offre, à titre d’identifiant lisible.

Champs à mapper

Champ génériqueDescription
(aucun)—

02 — Ressource (GenericRole.Resource)

La personne, la salle ou l’équipement que l’on planifie — celui qui occupe un Créneau.

Objet Cirrus Shield à choisir — obligatoire.

Champs fixes

Champ génériqueAPI Cirrus ShieldDescription
NomNameNom affiché de la Ressource dans le calendrier et les sélecteurs.

Champs à mapper

Champ génériqueDescription
(aucun)—

03 — Compétence (GenericRole.Skill) — Optionnel

Le lien N:N Ressource↔︎Service — quelles Ressources sont qualifiées pour quel Service. Si non mappé, aucune restriction de compétence n’est appliquée.

Objet Cirrus Shield à choisir — objet de jonction (ex. Competence).

Champs fixes

Champ génériqueAPI Cirrus ShieldDescription
NomNameNom du lien lui-même (rarement affiché).

Champs à mapper

Champ génériqueDescription
ResourceIdLookup vers la Ressource qui détient la compétence.
ServiceIdLookup vers le Service couvert par cette compétence.

04 — Mission (GenericRole.Mission)

L’élément sur lequel on planifie — un chantier, une session de formation, un événement… selon le métier de l’organisation. Porte ses propres bornes de dates et son iframe de planification dans Cirrus Shield.

Objet Cirrus Shield à choisir — obligatoire.

Champs fixes

Champ génériqueAPI Cirrus ShieldDescription
NomNameNom affiché de la Mission.
DateDebutDate_de_debutPremière journée de validité pour un Créneau de cette Mission.
DateFinDate_de_finDernière journée de validité — comparée au fuseau local de l’organisation, jamais à l’instant UTC brut.

Champs à mapper

Champ génériqueDescription
ServiceIdLookup vers le Service de la Mission (peut nécessiter un second saut si le Lookup ne pointe pas directement dessus).
LocationIdLieu par défaut de la Mission. Règle : au moins un des deux — Mission.LocationId ou Créneau.LocationId — doit être mappé.

05 — Créneau (GenericRole.Unit)

Le créneau horaire lui-même — une intervention planifiée d’une Ressource, sur un Lieu, dans le cadre d’une Mission. Le même objet représente aussi une Absence (voir le champ Type).

Objet Cirrus Shield à choisir — obligatoire.

Champs fixes

Champ génériqueAPI Cirrus ShieldDescription
NomNameNom du Créneau — généré automatiquement si laissé vide.
DateDateJour du Créneau. Sur certaines organisations ce champ reflète l’horodatage complet plutôt qu’un minuit normalisé — toujours re-normaliser avant comparaison.
HeureDebutDate_de_debutHorodatage UTC de début.
HeureFinDate_de_finHorodatage UTC de fin.
TypeTypeDistingue Travail / Absence — remplace l’ancien rôle générique séparé Unavailability (obsolète).
SerieIdSerie_IdChamp hérité du volet natif CS. Non lu par le code actuel — l’appartenance à une série est désormais gérée uniquement côté application (table locale SeriesUnit).
DetacheDeLaSerieDetache_de_la_serieChamp hérité, conservé uniquement pour compatibilité. Jamais lu par le code actuel, pour quelque usage que ce soit.

Champs à mapper

Champ génériqueDescription
ResourceIdLookup vers la Ressource assignée à ce Créneau.
MissionIdLookup vers la Mission de ce Créneau.
LocationId (optionnel)Lieu explicite de ce Créneau, s’il diffère du Lieu par défaut de la Mission.

Non exposé dans l’assistant :

Les champs « mode formation » — PauseDebut, PauseFin, Matin, ApresMidi (demi-journées) — existent dans le modèle générique du Créneau mais ne sont pas encore proposés dans l’étape Mapping. Pour une organisation qui en a besoin aujourd’hui, ils doivent être insérés directement dans la table FieldMapping — une limitation connue de l’assistant, pas un choix délibéré comme pour un champ fixe.

06 — Ressources de la mission (GenericRole.MissionResource) — Optionnel

Jonction Mission↔︎Ressource, pour les organisations qui possèdent déjà un objet de ce type (ex. un objet « Cours » liant Session et Formateur). Quand ce rôle est mappé, il remplace entièrement la synchronisation automatique par défaut.

Objet Cirrus Shield à choisir — laisser non mappé si l’organisation n’a pas d’objet de jonction dédié.

Champs fixes

Champ génériqueAPI Cirrus ShieldDescription
(aucun)——

Champs à mapper

Champ génériqueDescription
MissionIdLookup vers la Mission concernée.
ResourceIdLookup vers la Ressource rattachée à la Mission.

07 — Ressources autorisées sur le lieu (GenericRole.LocationResource) — Optionnel

Jonction Lieu↔︎Ressource — restreint quelles Ressources peuvent être planifiées sur quel Lieu. Si non mappé, cette restriction est simplement désactivée pour l’organisation, sans repli sur un autre mécanisme.

Objet Cirrus Shield à choisir — laisser non mappé si l’organisation ne restreint pas les Ressources par Lieu.

Champs fixes

Champ génériqueAPI Cirrus ShieldDescription
(aucun)——

Champs à mapper

Champ génériqueDescription
LocationIdLookup vers le Lieu concerné par la restriction.
ResourceIdLookup vers la Ressource autorisée sur ce Lieu.

08 — Lieu (GenericRole.Location)

L’endroit où se déroule un Créneau — une salle, un chantier, une adresse.

Objet Cirrus Shield à choisir — obligatoire.

Champs fixes

Champ génériqueAPI Cirrus ShieldDescription
NomNameNom affiché du Lieu.
AllowConflictAllow_ConflictCase à cocher : place ce Lieu hors du contrôle de planification de l’application — supprime uniquement l’alerte de double réservation du Lieu jamais les autres règles. Format de câblage CS réel non encore confirmé sur une organisation en production.

Champs à mapper

Champ génériqueDescription
DescriptionFields (optionnel)Liste de champs CS à concaténer comme description dans le sélecteur de Lieu (ex. Ville, Code postal, Adresse). Multi-sélection — stockée comme une liste de noms d’API séparés par des virgules, pas un simple Lookup.

Ressource

  1. Allez dans Configuration → Objets.
  2. Cliquez sur l’objet qui représente les ressources dans votre organisation.
  3. Cliquez sur Détails de l’objet, puis ouvrez l’onglet Boutons personnalisés.
  4. Cliquez sur le bouton de création pour ajouter un nouveau bouton.
  5. Configurez le bouton selon les paramètres suivants :

Copiez et collez le code JavaScript suivant dans la section du code :

function OpenPlan() {
  var RecordID = GetRecordGUID();
  var modelName = window.location.search.slice(1).split("&")[0].split("=")[1];
  var userinfo = GetCurrentloggedInUserInfo();
  var orgInfo = GetOrganizationIDForAllUsers();
  openPopup();
  function openPopup() {
    var popup = createPopup();
    document.body.appendChild(popup);
    var popupContent = createPopupContent();
    popup.appendChild(popupContent);
    var closeBtn = createCloseButton(popup);
    popupContent.appendChild(closeBtn);
    var loadingSpinner = createLoadingSpinner();
    popupContent.appendChild(loadingSpinner);
    var iframe = createIframe(RecordID, modelName, userinfo, loadingSpinner, orgInfo);
    popupContent.appendChild(iframe);
  }
  function createPopup() {
    var popup = document.createElement("div");
    popup.id = "myPopupPlanificateur";
    popup.style.cssText = "position: fixed; z-index: 9999999; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 100%; height: 100%; overflow: auto; background-color: rgba(0,0,0,0.4); display: flex; justify-content: center; align-items: center;";
    return popup;
  }
  function createPopupContent() {
    var popupContent = document.createElement("div");
    popupContent.id = "popupContentPlanificateur";
    popupContent.style.cssText = "background-color: white; padding: 0px; border: 1px solid #888; border-radius: 16px; width: 95%; height: 100%; position: relative; box-shadow: 0 8px 30px rgba(0,0,0,0.25); overflow: hidden;";
    return popupContent;
  }
  function createCloseButton(popup) {
    var closeBtn = document.createElement("span");
    closeBtn.innerHTML = "×";
    closeBtn.style.cssText = "position: absolute; top: 8px; right: 16px; font-size: 28px; font-weight: bold; cursor: pointer; z-index: 10;";
    closeBtn.onclick = function () {
      popup.style.display = "none";
      location.reload(true);
    };
    return closeBtn;
  }
  function createLoadingSpinner() {
    var loadingSpinner = document.createElement("div");
    loadingSpinner.id = "loadingSpinnerPlanificateur";
    loadingSpinner.style.cssText = "position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);";
    loadingSpinner.innerHTML = '';
    var style = document.createElement("style");
    style.textContent = `
    #loadingSpinnerPlanificateur .spinner {
      border: 4px solid rgba(0, 0, 0, 0.1);
      border-left: 4px solid #3498db;
      border-radius: 50%;
      width: 40px;
      height: 40px;
      animation: spin 1s linear infinite;
    }
    @keyframes spin {
      0% { transform: rotate(0deg); }
      100% { transform: rotate(360deg); }
    }
    `;
    loadingSpinner.appendChild(style);
    return loadingSpinner;
  }
  function createIframe(RecordID, modelName, userinfo, loadingSpinner, orgInfo) {
    var iframe = document.createElement("iframe");
    loadingSpinner.style.display = "block";
    iframe.addEventListener("load", function () {
      loadingSpinner.style.display = "none";
    });
    iframe.src = `https://planificateur.cirrus-shield.net/${userinfo["Language"]}/planificateur-ressource?orgId=${orgInfo}&resourceId=${RecordID}&TimeZoneSidKey=${userinfo["TimeZoneSidKey"]}&LocaleSidKey=${userinfo["LocaleSidKey"]}`;
    iframe.style.cssText = "width: 100%; height: 100%; border: none; border-radius: 0 0 12px 12px;";
    return iframe;
  }
}

N’oubliez pas de renseigner les profils qui ont accès à ce bouton : cliquez sur l’onglet Profils, puis sur le bouton de modification (crayon bleu).

Mission

Faites la même chose pour l’objet qui représente la mission dans votre environnement, avec ce code JavaScript :

function OpenPlan() {
  var RecordID = GetRecordGUID();
  var modelName = window.location.search.slice(1).split("&")[0].split("=")[1];
  var userinfo = GetCurrentloggedInUserInfo();
  var orgInfo = GetOrganizationIDForAllUsers();
  openPopup();
  function openPopup() {
    var popup = createPopup();
    document.body.appendChild(popup);
    var popupContent = createPopupContent();
    popup.appendChild(popupContent);
    var closeBtn = createCloseButton(popup);
    popupContent.appendChild(closeBtn);
    var loadingSpinner = createLoadingSpinner();
    popupContent.appendChild(loadingSpinner);
    var iframe = createIframe(RecordID, modelName, userinfo, loadingSpinner, orgInfo);
    popupContent.appendChild(iframe);
  }
  function createPopup() {
    var popup = document.createElement("div");
    popup.id = "myPopupPlanificateur";
    popup.style.cssText = "position: fixed; z-index: 9999999; left: 50%; top: 50%; transform: translate(-50%, -50%); width: 100%; height: 100%; overflow: auto; background-color: rgba(0,0,0,0.4); display: flex; justify-content: center; align-items: center;";
    return popup;
  }
  function createPopupContent() {
    var popupContent = document.createElement("div");
    popupContent.id = "popupContentPlanificateur";
    popupContent.style.cssText = "background-color: white; padding: 0px; border: 1px solid #888; border-radius: 16px; width: 95%; height: 100%; position: relative; box-shadow: 0 8px 30px rgba(0,0,0,0.25); overflow: hidden;";
    return popupContent;
  }
  function createCloseButton(popup) {
    var closeBtn = document.createElement("span");
    closeBtn.innerHTML = "×";
    closeBtn.style.cssText = "position: absolute; top: 8px; right: 16px; font-size: 28px; font-weight: bold; cursor: pointer; z-index: 10;";
    closeBtn.onclick = function () {
      popup.style.display = "none";
      location.reload(true);
    };
    return closeBtn;
  }
  function createLoadingSpinner() {
    var loadingSpinner = document.createElement("div");
    loadingSpinner.id = "loadingSpinnerPlanificateur";
    loadingSpinner.style.cssText = "position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);";
    loadingSpinner.innerHTML = '';
    var style = document.createElement("style");
    style.textContent = `
    #loadingSpinnerPlanificateur .spinner {
      border: 4px solid rgba(0, 0, 0, 0.1);
      border-left: 4px solid #3498db;
      border-radius: 50%;
      width: 40px;
      height: 40px;
      animation: spin 1s linear infinite;
    }
    @keyframes spin {
      0% { transform: rotate(0deg); }
      100% { transform: rotate(360deg); }
    }
    `;
    loadingSpinner.appendChild(style);
    return loadingSpinner;
  }
  function createIframe(RecordID, modelName, userinfo, loadingSpinner, orgInfo) {
    var iframe = document.createElement("iframe");
    loadingSpinner.style.display = "block";
    iframe.addEventListener("load", function () {
      loadingSpinner.style.display = "none";
    });
    iframe.src = `https://planificateur.cirrus-shield.net/${userinfo["Language"]}/planificateur?orgId=${orgInfo}&missionId=${RecordID}&TimeZoneSidKey=${userinfo["TimeZoneSidKey"]}&LocaleSidKey=${userinfo["LocaleSidKey"]}`;
    iframe.style.cssText = "width: 100%; height: 100%; border: none; border-radius: 0 0 12px 12px;";
    return iframe;
  }
}
Cet article vous a-t-il été utile ? Non Oui

Comment pouvons-nous aider ?