# Planning de réservation de créneaux

Le planning de réservation est un agenda de gestion de créneaux horaires. Il permet à un utilisateur de réserver un créneau parmi une liste de créneaux disponibles.

Si vous préférez regarder plutôt que lire, une vidéo sur le sujet est disponible juste ici 👇

{% embed url="<https://youtu.be/d5FYHzPXHpg?feature=shared>" %}
Vidéo détaillée sur le planning de réservation
{% endembed %}

## ＋Créer un planning de réservation

Depuis l'onglet *Données* de la barre d'ajout d'un élément, cliquez sur **Ajouter un affichage** puis sur **Plannings de réservations de créneaux**. Vous pouvez ensuite cliquer sur le Planning de ressources placé dans votre page afin d’en modifier les paramètres.

<figure><img src="https://2063331370-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQBQ-Fk5qKATOA2R2_R%2Fuploads%2FR3fFLJPzHmGJuTxILdqa%2Fimage.png?alt=media&#x26;token=29820d5d-4ca8-426f-a8c2-255b0e2577ce" alt=""><figcaption></figcaption></figure>

### **⚙️ Éditer la table des réservations**

Le premier onglet “Paramètres” vous permet de définir comment enregistrer les créneaux sélectionnés par les utilisateurs.

1️⃣ Définissez la **table où stocker les informations** sur la réservation. C’est le workflow de cette table qui va s’ouvrir au moment de cliquer sur un créneau.

2️⃣ Choisissez dans quel champ “date et heure” de cette table la **date et l’heure du début du créneau** sera enregistrée. Ce champ sera automatiquement rempli après avoir cliqué sur le créneau.

3️⃣ De la même manière, choisissez dans quel champ “date et heure” de cette table la **date et l’heure de fin du créneau** sera également automatiquement enregistrée.

Si la réservation s'effectue depuis un enregistrement (dans une fiche, un suivi ou un workflow), il est possible d'automatiquement lier l'enregistrement en cours au créneau réservé.

En effet, si la **table où stocker les informations** sur la réservation possède un champ liaison vers la table du workflow, fiche ou suivi, alors le toggle "**Lier automatiquement l'enregistrement créé à l'enregistrement en cours**" sera disponible dans ce premier onglet des paramètres.&#x20;

Le toggle apparaîtra dans les paramètres "Spécifiques à l'emplacement".

<figure><img src="https://ksaar.gitbook.io/~gitbook/image?url=https%3A%2F%2F2063331370-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MQBQ-Fk5qKATOA2R2_R%252Fuploads%252FfJ63Ig1EBEV15S0McLWZ%252Fimage.png%3Falt%3Dmedia%26token%3Dcc716e60-cd96-44e5-bff3-725cb96ac38b&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=de9e18ae9e5ec02018b92bd0e01116e735894be9fc92491d5771d490186cb3fb" alt="" width="375"><figcaption><p>Cochez la liaison à remplir par l'enregistrement en cours</p></figcaption></figure>

### **👀** Éditer la vue par défaut

Lorsque le planning est **placé dans une page**, vous pouvez définir ces paramètres spécifiques à l'emplacement dans l'onglet Paramètres.\
Il est possible de :

* définir la première date affichée dans le planning depuis :&#x20;
  * la date du jour
  * un champ date du workflow dans lequel est placé le planning
  * la date de la prochaine disponibilité. \
    Dans ce cas, le système recherche automatiquement un créneau disponible dans les 90 prochains jours. Si aucune disponibilité n’est trouvée, le planning s’affiche à la date du jour, accompagnée du message : *« Pas de disponibilité dans les 90 prochains jours »*.
* définir la vue du planning :&#x20;

  * afficher plusieurs jours
  * afficher uniquement une journée

  <figure><img src="https://2063331370-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQBQ-Fk5qKATOA2R2_R%2Fuploads%2FIFPlQnXypGekfLFM4Oy5%2FCapture%20d%E2%80%99e%CC%81cran%202025-07-10%20a%CC%80%2011.24.52.png?alt=media&#x26;token=85e90ee9-00de-48b7-b6ab-f4204d347403" alt=""><figcaption></figcaption></figure>

### **⚙️ Éditer les ressources**

Vous pouvez ensuite dans le deuxième onglet configurer une ou plusieurs ressources.

Chaque ressource permet d’afficher un planning de réservation par enregistrement contenu dans sa table.

1️⃣ Déterminez le **nom** de votre ressource ;

2️⃣ Choisissez le **type** de votre ressource. Il en existe deux :

* Ressource “**définie ici”** : définie par le maker, elle permet de configurer rapidement votre planning de réservation en remplissant les différents champs directement via une valeur personnalisée.

{% hint style="warning" %}
Si ce type de ressource est sélectionné, une seule ressource est paramètrable. Il n’est pas possible d’en ajouter plusieurs.
{% endhint %}

* Ressource définie depuis les **“enregistrements d’une table”** : elle permet de configurer votre planning de réservation via les champs d’une table. Avec ce type de ressource, l’utilisateur finale peut avoir accès, si vous le souhaitez, aux paramètres du planning.

{% hint style="info" %}
Il est possible de définir cette ressource également comme une indisponibilité via le bouton **“Définir également comme indisponibilité”**. Dès qu’un créneau de cette ressource sera réservé, le créneau sera indisponible et ne sera plus affiché dans le planning.
{% endhint %}

3️⃣ (Ressource “enregistrement d’une table” uniquement) Sélectionnez le **champ liaison**, contenu dans votre table de réservation, qui lie un enregistrement de cette table à la table de votre ressource. Cela permet au planning de réservation de lier votre réservation à vos créneaux ;

4️⃣ Renseignez la **durée des créneaux** : c’est un nombre de minutes ;

Il existe également des paramètres avancés au planning de réservation.

5️⃣ Choisissez la période pendant laquelle **les invités peuvent réserver.** Il y a trois options :

* Indéfiniment dans le future ;
* N jours dans le futur : défini par un nombre. Chaque jour, l’utilisateur peut réserver pendant N jours après la date du jour ;
* Entre deux dates : défini par une date de début et une date de fin.

6️⃣ Choisissez l’**incrément de l’heure de début** : également un nombre de minutes, cette durée définit le temps qui sépare l’heure de début d’un créneau de son créneau suivant. Par défaut, elle est égale à la durée de votre créneau.

7️⃣ Choisissez le **préavis minimum**, c’est à dire la période minimale qu’il doit y avoir avant un créneau pour pouvoir le réserver. Il y a trois type d’unités possible :&#x20;

* En minutes,&#x20;
* En heures,
* En jours : cette unité bloque un jour au complet et recommence la disponibilité des créneaux au début du jour suivant. Pour mettre un préavis d’un jour au sens de 24h à l’avance, il faut utiliser l’unité heure.

{% hint style="info" %}
Il est possible de filtrer de manière spécifique à l’emplacement du planning les ressources définies depuis des enregistrements d’une table
{% endhint %}

## **🗓️ Paramétrer les créneaux de réservation**

### **✅ Éditer les disponibilités**

Un planning de réservation de créneaux est défini par des [**disponibilités**](https://ksaar.gitbook.io/ksaar-documentation/les-elements/les-champs#le-champ-disponibilite), c’est-à-dire des **créneaux réservables par l’utilisateur** de votre application.

Les disponibilités peuvent être définies à partir de deux types de sources : **interne** (depuis des données de Ksaar) ou **externe** (depuis un lien public iCal).

#### Depuis une source interne

Vous pouvez définir les créneaux à réserver depuis vos données Ksaar via :

* Une **valeur personnalisée** : définissez manuellement les jours et heures de la semaine où vous êtes disponible.
* Un **champ disponibilité**
* Des **enregistrements** c’est à dire deux **champs pour le début et la fin** de la disponibilité :
  * Ces champs sont récupérés depuis la table de la source ;
  * Ils peuvent être de type :
    * Date ;
    * Date et heure ;
    * Formule de Date ;
    * Formule de Date avec heure.

#### Depuis une source externe

Vous pouvez également utiliser un calendrier externe au format iCal via :

* Une **URL personnalisée** : saisissez directement un lien iCal public dans le paramétrage ;
* **Un champ URL dans la table de la ressource** contenant l’adresse du calendrier iCal ;
* Des **enregistrements** : choisissez un champ URL depuis une table sélectionnée.

Les sources externes permettent de synchroniser un planning de ressource à un calendrier **public** (Google, Microsoft…). Votre planning de ressource sera mis à jour selon la [fréquence](#frequence-de-mise-a-jour-dune-source-externe) choisie.

👉 **À noter pour les agendas Microsoft** :\
Seuls les événements dont le statut est **"Libre" (Free)** sont pris en compte pour déterminer les disponibilités.

Pour chaque disponibilité, vous pouvez aussi configurer des filtres spécifiques à l’emplacement du planning.

### **❌ Éditer les indisponibilités**

Un planning de réservation est également défini par des **indisponibilités** c’est-à-dire les créneaux qui **ne pourront pas être réservés par l’utilisateur**.&#x20;

{% hint style="warning" %}
Si un créneau est défini à la fois comme disponible et indisponible, **l’indisponibilité prévaut**, et le créneau ne sera donc **pas réservable**.
{% endhint %}

Chaque indisponibilité possède :

* **Un libellé** ;
* **Une source** : c’est la provenance des créneaux d’indisponibilité. Il existe aussi deux types de sources : des enregistrements (depuis des données de Ksaar) ou **externe** (depuis un lien public iCal).

**Depuis des enregistrements**

La source est une table de votre application Ksaar contenant des enregistrements d’indisponibilité.

1️⃣ Sélectionnez la table source contenant les données d’indisponibilité ;

2️⃣ Choisissez les champs **Début** et **Fin** de l’indisponibilité.

Ces champs peuvent être de type :

* Date ;
* Date et heure ;
* Formule de Date ;
* Formule de Date avec heure.

**Depuis une source externe**

La source est un **calendrier externe public** au format iCal.

Vous pouvez définir la source externe de trois manières :

* **Une URL personnalisée** : saisissez directement un lien iCal public dans le paramétrage ;
* **Un champ URL dans la table de la ressource** ;
* Des **enregistrements** : choisissez un champ URL depuis une table sélectionnée.

Les sources externes permettent de synchroniser un planning de ressource à un calendrier public (Google, Microsoft…). Votre planning de ressource sera mis à jour selon la [fréquence](#frequence-de-mise-a-jour-dune-source-externe) choisie.

👉 **À noter pour les agendas Microsoft** :\
Seuls les événements dont le statut est **"Occupé" (Busy)**, **"Provisoire" (Tentative)** ou **"Absent du bureau" (Out of office)** sont pris en compte pour déterminer les **indisponibilités** dans le planning synchronisé.

<figure><img src="https://2063331370-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQBQ-Fk5qKATOA2R2_R%2Fuploads%2F8wmWG1dX52x1gyWxV7gR%2Fplanning_resa_creneaux.png?alt=media&#x26;token=b5915a22-4654-4254-8fb7-7ac5cab64717" alt=""><figcaption></figcaption></figure>

Vous pouvez ajouter des **filtres** spécifiques à l’emplacement du planning pour afficher ou exclure certaines indisponibilités selon des conditions.

Il existe deux types d’indisponibilités :

* Les **indisponibilités globales** : elles impactent toutes les ressources du planning ;
* Les **indisponibilités locales** : elles impactent uniquement la ressource à laquelle elles sont associées. Dès qu’une ressource est ajoutée depuis l’onglet correspondant, le paramètre pour les indisponibilités locales associées apparaît dans l’onglet “Indisponibilités”

#### 🔁 Fréquence de mise à jour d'une source externe&#x20;

**La fréquence de mise à jour** permet de contrôler à quel rythme les données du planning de réservation de créneaux sont **actualisées** :

* Si vous définissez **0 minute**, les données sont rechargées **à chaque rafraîchissement** de la page.
* Si vous définissez une autre valeur, les données ne seront rechargées **au moment du rafraîchissement** que si le délai défini est écoulé.

💡 Cette mécanique a été pensée pour **éviter les ralentissements** liés à la gestion de plusieurs plannings affichés en parallèle.\
Chaque planning implique de charger un fichier ICS et de traiter toutes les données associées. Lorsque plusieurs plannings sont visibles, ce processus peut impacter les performances de la page.\
La fréquence de mise à jour permet donc aux utilisateurs **qui n’ont pas besoin d’une synchronisation en temps réel** de mieux maîtriser le **temps de chargement de leur page**.

## 🚀 Workflow public et planning de réservation

Il est possible d’intégrer un planning de réservation à un workflow public. Il suffit de trois étapes :

1️⃣ Dans une page d’un workflow, ajouter votre planning de réservation ;

2️⃣ Transformer ce workflow de privé à public ;

3️⃣ Rendre public le workflow de votre table de réservation.

Les créneaux de votre planning de réservation sont maintenant réservable par toute personne ayant accès au lien du workflow public, sans besoin de se connecter ou créer un compte.

👉 Plus d’informations sur les workflows publics ici :&#x20;

{% content-ref url="../les-workflows/quest-ce-quun-parcours/workflow-public" %}
[workflow-public](https://ksaar.gitbook.io/ksaar-documentation/les-workflows/quest-ce-quun-parcours/workflow-public)
{% endcontent-ref %}

## 🚧 Exemple

L’objectif de cet exemple est de concevoir un planning de réservation de créneaux avec des techniciens et des conseillers comme ressources.

Chaque ressource est concernée par :&#x20;

* une indisponibilité globale : les jours fériés de 2024 ;
* une indisponibilité locale : des jours ponctuellement indisponibles pour un technicien ou un conseiller précis.
* une disponibilité locale : les heures travaillées dans la semaine.

**Tables et Champs Requis :**

* Table **Prise de rendez-vous**, pour y mettre le planning de réservation;
* Table **Réservation** avec :
  * le champ date et heure **Début de la réservation;**
  * le champ date et heure **Fin de la réservation;**
  * le champ liaison simple **Technicien réservation;**
  * le champ liaison simple **Conseiller réservation;**
  * le champ liaison simple **Rendez-vous lié;**
* Table **Technicien** avec :
  * le champ texte **Prénom Nom du technicien;**
* Table **Conseiller** avec :
  * le champ texte **Prénom Nom conseiller;**
  * le champ disponibilité **Disponibilités conseiller;**
  * le champ nombre **Durée créneau conseiller;**
  * le champ date **Début disponibilités conseiller;**
  * le champ date **Fin disponibilités conseiller;**&#x20;
  * le champ nombre **Préavis conseiller;**
* Table **Indisponibilité** avec :
  * le champ date et heure **Début de l’indisponibilité;**
  * le champ date et heure **Fin de l’indisponibilité;**
  * le champ single select **Type d’indisponibilité :**
    * Avec deux options : Globale ou Locale;
  * le champ liaison simple **Technicien indisponible;**
  * le champ liaison simple **Conseiller indisponible;**

#### **Configuration du planning de réservation**

1️⃣ Dans le workflow de la table **Prise de rendez-vous**, ajoutez un planning de réservation.

2️⃣ Sélectionnez la table **Réservation** comme table où créer les réservations.

3️⃣ Liez le paramètre champ début du créneau au champ **Début de la réservation** et le paramètre champ fin du créneau au champ **Fin de la réservation.**

**4️⃣** Dans les paramètres spécifiques à l'emplacement, dans "Lier automatiquement l'enregistrement créé à l'enregistrement en cours", cliquez sur la liaison **Rendez-vous lié**.

#### **Configuration des ressources du planning**

1️⃣ Dans l’onglet Ressource, cliquez sur “+ Nouvelle ressource”.

2️⃣ Nommez cette première ressource “Technicien” et sélectionnez le type “**Enregistrement d’une table**”. Liez cette ressource à la table **Réservation** via le champ **Technicien réservation.**

3️⃣ Définissez la durée des créneaux depuis une valeur personnalisée de 30 minutes.

4️⃣ Il n’est pas possible de réserver un créneau avec un technicien plus de 15 jours à l’avance. Sélectionnez “Les invités peuvent réserver → N jours dans le futur” et définissez le nombre de jours depuis une valeur personnalisée de 15.

5️⃣ Les techniciens ont 15 minutes de pause entre chaque rendez-vous. Définissez un incrément de 45 minutes par rapport au début du créneau (30min de créneau + 15min de pause).

6️⃣ Pour empêcher les utilisateurs de réserver un créneau au dernier moment, définissez le préavis minimum sur 24 heures.

7️⃣ Ajoutez une nouvelle ressource, nommez-la “Conseiller” et liez-la à la table **Réservation** via le champ **Conseiller réservation**

8️⃣ Associez les différents paramètres aux différents champs de la table Conseiller :

* Définissez la durée des créneaux depuis le champ **Durée créneau conseiller**;
* Les conseillers n’ont pas forcément de pause entre les créneaux. Définissez l’incrément entre les créneaux depuis le champ **Durée créneau conseiller;**
* Les conseillers définissent leur propre période de réservation. Remplissez le paramètre “Les invités peuvent réserver → entre deux dates” :
  * Début de la période depuis le champ **Début disponibilités conseiller**;
  * Fin de la période depuis le champ **Fin disponibilités conseiller.**
* Paramètrez le préavis minimum avec le champ **Préavis conseiller** et sélectionnez "heure" dans le sélecteur des unités.

{% hint style="warning" %}
La principal différence entre ces deux ressources est que les conseillers ont été paramétré avec des champs et l'**utilisateur finale a donc un accès à ces paramètres.**

À l'inverse, les paramètres du technicien ne sont accessibles qu'au maker.
{% endhint %}

#### **Configuration des disponibilités**

Configurons les disponibilités par ressource dans l'onglet Créneaux > Disponibilités :

**1️⃣** Sous Disponibilités Technicien, cliquez sur “+ Ajouter une disponibilité” puis cliquez sur la disponibilité.

2️⃣ Une pop-up s'ouvre. Choisissez de définir les disponibilités depuis une valeur personnalisée&#x20;

3️⃣ Définissez les disponibilités du Lundi au Vendredi de 8h à 12h et de 14h à 18h.

<figure><img src="https://2063331370-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQBQ-Fk5qKATOA2R2_R%2Fuploads%2F9rN1wZsmdwXEl0PJmhEK%2FCapture%20d%E2%80%99e%CC%81cran%202025-06-17%20a%CC%80%2009.50.07.png?alt=media&#x26;token=cd46314d-47e8-4d44-85da-267ad119c89c" alt=""><figcaption><p>Disponibilités Technicien</p></figcaption></figure>

4️⃣ Sous disponibilités Conseiller, cliquez sur “+ Ajouter une disponibilité” puis cliquez sur la disponibilité.

5️⃣ Une pop-up s'ouvre. Choisissez de définir les disponibilités depuis la valeur d'un champ Disponibilités.

6️⃣ Définissez les disponibilités depuis le champ **Disponibilités conseiller**;

<figure><img src="https://2063331370-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQBQ-Fk5qKATOA2R2_R%2Fuploads%2FGCI8auzlrTkVw6SQTnhd%2FCapture%20d%E2%80%99e%CC%81cran%202025-06-17%20a%CC%80%2009.51.39.png?alt=media&#x26;token=f7e463cf-45b5-4c47-848c-785536513b51" alt=""><figcaption><p>Disponibilités Conseiller</p></figcaption></figure>

#### **Configuration des indisponibilités**

Configurons les indisponibilités pour les jours fériés :

1️⃣ Dans l’onglet Créneaux puis Indisponibilités, sous disponibilités Globales, cliquez sur “+ Ajouter une indisponibilité” puis cliquez sur l’indisponibilité.

2️⃣ Une pop-up s'ouvre. Dans Libellé, renommez l’indisponibilité en Jours Fériés.

3️⃣ Définissez l'indisponibilité depuis des enregistrements puis sélectionnez la table **Indisponibilité** comme source.

4️⃣ Ajoutez **Début de l’indisponibilité** comme champ début et **Fin de l’indisponibilité** comme champ fin.

5️⃣ Ajoutez ce filtre : Champ de la table ou du créateur -> Type d'indisponibilité -> Égale à -> Globale.

<figure><img src="https://2063331370-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MQBQ-Fk5qKATOA2R2_R%2Fuploads%2FuRJuXtb9HlZzMZJVSuuQ%2FCapture%20d%E2%80%99e%CC%81cran%202025-06-17%20a%CC%80%2009.54.31.png?alt=media&#x26;token=9bf842bf-52fd-4b9f-a4f6-918d4a2e2659" alt=""><figcaption><p>Jours fériés</p></figcaption></figure>

Configurons les indisponibilités locales pour les indisponibilités ponctuelles :&#x20;

1️⃣ Sous Indisponibilités "Technicien", cliquez sur “+ Ajouter une indisponibilité” puis cliquez sur l’indisponibilité.

2️⃣ La pop-up s'ouvre. Dans Libellé, renommez l’indisponibilité en Indisponibilité Ponctuelle Technicien.

3️⃣ Définissez l'indisponibilité depuis des enregistrements puis sélectionnez la table **Indisponibilité** comme source

4️⃣ Ajoutez **Début de l’indisponibilité** comme champ début et **Fin de l’indisponibilité** comme champ fin.

5️⃣ Ajoutez ces deux filtres :&#x20;

* Champ de la table ou du créateur -> Type d'indisponibilité -> Égale à -> Locale.
* Champ de la table ou du créateur -> Technicien indisponible -> Enregistrement sélectionné -> Égale à -> La ressource en cours.

6️⃣ Sous Indisponibilités "Conseiller", cliquez sur “+ Ajouter une indisponibilité” puis cliquez sur l’indisponibilité.

7️⃣ Renommez l’indisponibilité en Indisponibilité Ponctuelle Conseiller&#x20;

8️⃣ Définissez l'indisponibilité depuis des enregistrements puis sélectionnez la table **Indisponibilité** comme source. Ajoutez **Début de l’indisponibilité** comme champ début et **Fin de l’indisponibilité** comme champ fin.

9️⃣ Ajoutez ces deux filtres :&#x20;

* Champ de la table ou du créateur -> Type d'indisponibilité -> Égale à -> Locale.
* Champ de la table ou du créateur -> Conseiller indisponible -> Enregistrement sélectionné -> Égale à -> La ressource en cours.

**Configuration d’un workflow public**

Pour donner accès à votre planning de ressource sans besoin d'inscription à l'application :&#x20;

1️⃣ Passez le workflow **Prise de rendez-vous** de privé à public.

2️⃣ Faites de même pour le workflow **Réservation.**
