Shifts Next — Documentation administrateur
Version : 2.9.0 | Licence : AGPL-3.0 | Auteur : CSOC
Note : Cette application est en cours de développement.
Shifts Next est une application Nextcloud permettant de gérer des plannings de créneaux (shifts) et de les synchroniser automatiquement avec l’application Calendrier de Nextcloud.
Prérequis
Compatibilité
| Composant | Version minimale |
|---|---|
| Nextcloud | 31 |
| PHP | 8.3 |
Application Calendrier
L’application Calendar doit être installée et activée sur l’instance Nextcloud.
Calendriers à créer
Deux calendriers doivent être créés par un administrateur Nextcloud avant la configuration de Shifts Next :
Calendrier commun — Shifts Next y synchronise tous les événements de shifts. Tous les utilisateurs concernés peuvent y accéder pour voir le planning global.
Calendrier d’absences — Shifts Next le consulte pour vérifier la disponibilité d’un utilisateur avant de lui assigner un shift. Pour que la vérification fonctionne, le nom de l’événement d’absence doit correspondre exactement soit à l’identifiant utilisateur (user ID), soit au nom affiché de l’utilisateur.
Exemple : pour un utilisateur dont l’identifiant est jean.dupont@example.com et le nom affiché est Jean Dupont, l’événement d’absence doit être nommé jean.dupont@example.com ou Jean Dupont.
Configuration
Accès : Paramètres d’administration → Shifts Next
La page de configuration admin regroupe trois sections.
Section « Calendar »
Common calendar — Sélectionner le calendrier commun créé précédemment. Seuls les calendriers existants sur l’instance sont proposés dans la liste déroulante.
Absence calendar — Sélectionner le calendrier d’absences. Le calendrier commun est automatiquement exclu de cette liste pour éviter de sélectionner le même calendrier pour les deux usages.
Personal calendar → Synchronize — Si activé, chaque shift assigné à un utilisateur est également synchronisé dans son calendrier personnel Nextcloud, en plus du calendrier commun.
Absence check → Ignore for weekly shifts — Si activé, la vérification d’absence est ignorée pour les shifts de type hebdomadaire (« By week »). Utile si les absences ponctuelles ne doivent pas bloquer l’assignation de shifts couvrant une semaine entière.
Section « Shift exchanges »
Required approvals — Détermine qui doit approuver un échange de shift pour qu’il soit considéré comme effectué :
| Valeur | Comportement |
|---|---|
| Users | Seuls les utilisateurs concernés par l’échange doivent approuver. |
| Admin | Seul un administrateur de shifts doit approuver. |
| All | Les utilisateurs concernés et un administrateur de shifts doivent tous approuver. |
Section « Shift admins »
Les administrateurs de shifts sont définis par groupe Nextcloud. Ce rôle est volontairement distinct du rôle d’administrateur de groupe Nextcloud classique : il ne confère aucun privilège d’administration Nextcloud.
Les fonctionnalités réservées aux shift admins sont :
- Créer et modifier des types de shifts
- Assigner des shifts aux utilisateurs
- Supprimer des shifts
- Approuver les échanges de shifts (si le mode d’approbation l’exige)
Types de shifts
Avant de pouvoir assigner des shifts, il faut créer des types de shifts via la vue « Shift types » dans la navigation de l’application.
Important : La plupart des champs ne sont plus modifiables après la création du type. Seuls Nom, Couleur, Actif, Description et les champs d’événement calendrier (description, lieu, catégories) restent éditables après coup.
Champs principaux
Groupe — Groupe Nextcloud auquel le type de shift est lié. Seuls les membres de ce groupe pourront se voir assigner un shift de ce type. La liste ne propose que les groupes pour lesquels l’utilisateur courant est shift admin. Non modifiable après création.
Nom — Nom permettant d’identifier visuellement le type de shift dans le tableau de planning.
Couleur — Couleur affichée sur les pastilles de shifts dans le tableau, pour distinguer facilement les différents types.
Actif — Le type doit être marqué comme actif pour que des shifts puissent être créés à partir de celui-ci. Désactiver un type empêche toute nouvelle création sans supprimer les shifts existants.
Description — Champ texte multiligne pour ajouter des informations complémentaires sur le type.
Champs d’événement calendrier
Ces valeurs sont insérées dans les champs correspondants de l’événement CalDAV lors de la synchronisation avec l’application Calendrier :
Description — Texte multiligne inséré dans la description de l’événement calendrier.
Location (Lieu) — Inséré dans le champ lieu de l’événement calendrier.
Categories (Catégories) — Champ à valeurs multiples séparées par des virgules. Pour inclure une virgule dans le nom d’une catégorie, la préfixer d’un antislash : \,. Exemple : Garde, Astreinte crée deux catégories, tandis que Garde\, de nuit crée une seule catégorie nommée « Garde, de nuit ».
Répétition
Les paramètres de répétition ne sont pas modifiables après la création du type.
Fréquence et intervalle
La fréquence est actuellement fixée à hebdomadaire (seule option disponible). L’intervalle détermine la périodicité : un intervalle de 2 signifie que des shifts de ce type peuvent être créés toutes les 2 semaines, relativement à la date de référence.
Type hebdomadaire
Deux modes sont disponibles :
By day (par jour) — Le shift se produit certains jours précis de la semaine, avec une heure de début et une durée définies.
By week (par semaine) — Le shift couvre une semaine ISO entière (lundi à dimanche).
Configuration « By day »
Date et heure de référence — Détermine le point de départ pour le calcul des semaines où des shifts sont créables. L’heure de cette référence sert d’heure de début pour chaque shift créé.
Fuseau horaire — Le fuseau horaire de la référence. Attention : l’affichage des shifts dans les colonnes par jour du tableau dépend du fuseau horaire du navigateur de l’utilisateur. Un shift dont la référence est mardi à 06:00 Europe/Berlin peut apparaître dans la colonne du lundi pour un utilisateur en America/Los_Angeles (car 06:00 CET = 21:00 la veille en PST).
Quantité par jour — Nombre maximum d’occurrences créables par jour de la semaine (lundi à dimanche). Par exemple, pour un shift qui a lieu une fois le lundi et une fois le vendredi : quantité = 1 pour lundi et vendredi, 0 pour les autres jours. C’est un plafond — il n’est pas obligatoire d’assigner toutes les occurrences disponibles.
Durée — Durée du shift. L’heure de fin est calculée automatiquement (heure de référence + durée).
Configuration « By week »
Année et semaine de référence — Semaine ISO de départ pour le calcul des semaines créables.
Quantité — Nombre maximum de shifts de ce type créables dans une même semaine.
Gestion des shifts
Vue tableau
La vue « Shifts » présente un tableau hebdomadaire avec :
- En-tête : sélecteur d’année et de semaine ISO, bouton « Today », filtre par groupe, et bouton « Synchronize ».
- Colonnes : « Weekly shifts » (shifts hebdomadaires) puis une colonne par jour (lundi à dimanche).
- Ligne « Open shifts » : affiche les types de shifts disponibles à la création pour la semaine sélectionnée. Tant qu’un shift n’est pas assigné, il n’existe pas — cette ligne montre des types, pas des shifts.
- Lignes utilisateurs : une ligne par membre du/des groupe(s) sélectionné(s), affichant les shifts qui leur sont assignés.
Les shifts assignés apparaissent sous forme de pastilles colorées avec le nom du type. Un bouton corbeille permet de supprimer un shift assigné.
Assigner un shift
- Dans la ligne « Open shifts », cliquer sur le badge numéroté (icône flèche 4 directions) de la pastille du type souhaité.
- Cliquer dans la cellule correspondant à l’utilisateur et au jour voulus.
L’application vérifie automatiquement les absences de l’utilisateur (sauf si la vérification est désactivée pour les shifts « By week »).
Déplacer un shift
Un shift assigné peut être déplacé vers un autre utilisateur en le glissant de sa cellule actuelle vers la cellule d’un autre utilisateur. Cette action nécessite les privilèges de shift admin.
Supprimer un shift
Cliquer sur l’icône corbeille d’un shift assigné. Cette action nécessite les privilèges de shift admin. La suppression est synchronisée avec le calendrier.
Synchronisation manuelle
Le bouton « Synchronize » en haut à droite permet de forcer une synchronisation avec le calendrier si nécessaire.
Échanges de shifts
Les échanges (vue « Shift exchanges ») permettent deux types d’opérations :
Échange (swap) — Deux utilisateurs échangent mutuellement leurs shifts.
Transfert — Un utilisateur transfère son shift à un autre utilisateur (sans contrepartie).
Créer un échange
Le formulaire est divisé en deux parties A et B :
Partie A — Sélectionner un utilisateur (en principe soi-même, sauf si un shift admin crée l’échange pour quelqu’un d’autre), une date et un shift.
Partie B — Pour un échange classique : sélectionner un second utilisateur, une date et un shift. Pour un transfert : sélectionner uniquement l’utilisateur destinataire.
Un champ commentaire permet d’ajouter des précisions sur la demande.
Processus d’approbation
Après la création de l’échange, celui-ci passe en état « en attente ». Trois approbations sont gérées indépendamment :
- Approbation utilisateur A — L’utilisateur qui initie l’échange.
- Approbation utilisateur B — L’utilisateur destinataire de l’échange/transfert.
- Approbation admin — Un administrateur de shifts du groupe concerné.
Les approbations effectivement requises dépendent de la configuration « Required approvals » (voir section Configuration). L’état combiné des approbations est affiché en haut à gauche de chaque carte d’échange.
Lorsque toutes les parties requises ont approuvé (ou si l’une d’elles a rejeté), l’échange passe à l’état « terminé » (done). Si approuvé, les shifts sont effectivement échangés/transférés et synchronisés avec le calendrier.
Synchronisation calendrier
Toute action sur un shift déclenche automatiquement une synchronisation :
- Assignation d’un shift
- Déplacement d’un shift vers un autre utilisateur
- Suppression d’un shift
- Transfert ou échange de shifts
La synchronisation concerne le calendrier commun et, si l’option est activée, le calendrier personnel de l’utilisateur concerné.
La suppression d’un type de shift entraîne la suppression de tous ses shifts associés et la synchronisation correspondante avec le calendrier (corrigé en v2.8.0).
Gestion des utilisateurs
Lorsqu’un utilisateur est supprimé ou désactivé dans Nextcloud, l’ensemble de ses shifts, échanges de shifts et relations d’administration de shifts sont automatiquement supprimés (comportement étendu aux utilisateurs désactivés depuis la v2.9.0).
Informations complémentaires
Numérotation des semaines
Shifts Next utilise systématiquement la numérotation ISO 8601 : la semaine commence le lundi et se termine le dimanche, indépendamment des paramètres régionaux de l’utilisateur.
Compatibilité navigateur
L’application s’appuie sur l’API JavaScript Temporal. Depuis janvier 2026, seuls Firefox et Chrome intègrent cette API dans leurs versions stables. Un polyfill (fullcalendar/temporal-polyfill) est utilisé pour assurer la compatibilité avec les autres navigateurs.
Modèle de données
L’application utilise 6 tables en base de données :
| Table | Rôle |
|---|---|
shifts |
Shifts assignés (utilisateur, type, début, fin) |
shift_types |
Types de shifts (groupe, nom, répétition, config CalDAV…) |
shift_exchanges |
Demandes d’échange/transfert entre utilisateurs |
shift_exchange_approvals |
Approbations individuelles des échanges |
group_shift_admin_relations |
Relations shift admin ↔ groupe (contrainte d’unicité) |
calendar_changes |
Suivi des changements pour la synchronisation calendrier |