Tableau des demandes
Le tableau présente les demandes de la requête courante en colonnes, une par statut, et permet de changer le statut d’une demande en déplaçant sa carte. Il est fourni par le plugin compagnon : Redmine n’a pas de vue tableau.
Ouvrir le tableau
- Onglet Tableau, entre Liste et Calendrier, au-dessus de la liste des demandes d’un projet et de la liste globale des demandes ; entrée Tableau du menu, après Demandes.
- Adresses :
/projects/<identifiant>/issues/board(projet) et/issues/board(tous les projets). - L’onglet et l’entrée de menu n’apparaissent que si le thème Filonio est choisi dans Administration › Paramètres › Affichage. Sans lui, la page reste accessible par son adresse, en rendu brut. L’entrée de menu dépend du thème choisi, pas de l’état de la licence : licence terminée, elle reste visible dans l’interface d’origine et le tableau s’ouvre en rendu brut.
Ce que montre le tableau
- Même requête que la liste : les filtres, les requêtes enregistrées et la requête en cours sont partagés avec la liste, le Gantt et le calendrier. Le bloc des filtres (Appliquer, Effacer, Sauvegarder) est le même, sans le choix des colonnes ; le regroupement se choisit dans la liste Couloirs (voir plus bas).
- Colonnes : les statuts utilisés par les trackers du projet (tous les statuts sur le tableau global), dans l’ordre des statuts de Redmine, limités par le filtre « Statut » de la requête (ouverts, fermés, égal à…), plus tout statut qui porte des demandes de la requête. Chaque colonne affiche son nombre de demandes.
- 50 cartes au plus par colonne ; au-delà, le lien Voir les N autres ouvre la liste des demandes filtrée sur ce statut (autres filtres, tri et colonnes conservés).
- Carte : tracker, numéro, sujet, priorité, échéance (avec le retard en jours si elle est dépassée), version cible, personne assignée ou « Non assigné ».
- Sous 640 px de large, une colonne à la fois : la liste Statut affiché choisit la colonne.
Colonnes vides et défilement
À partir de 640 px de large :
- Colonne vide repliée : un statut sans aucune demande (dans aucun couloir) est replié en une bande étroite (pastille, nombre, nom du statut en vertical ; avec des couloirs, le nom est écrit dans la bande de chaque couloir). Le bouton à chevron de son titre la déplie ou la replie, à la souris comme au clavier (Entrée ou Espace) ; un clic sur la bande la déplie aussi. Le choix est mémorisé par projet, dans ce navigateur (pas dans les préférences du compte) et annoncé aux lecteurs d’écran (« Colonne Recette dépliée »). Seules les colonnes vides à l’ouverture du tableau ont ce bouton.
- Une colonne repliée reste une cible : y glisser une carte, ou la choisir dans Déplacer vers…, la déplie.
- Zone de défilement à la taille de la fenêtre : le tableau défile dans sa zone, dont le bas (et la barre de défilement horizontale) reste à l’écran. Molette : défilement vertical de la zone, puis de la page ; Maj + molette : défilement horizontal. Pendant un glisser-déposer, approcher la carte d’un bord fait défiler la zone.
- En-têtes collants : les titres de colonnes restent en haut de la zone ; avec des couloirs, la rangée des statuts reste en haut et le titre du couloir en cours juste dessous. Une carte atteinte au clavier n’est jamais cachée sous un en-tête.
Couloirs
Les colonnes restent les statuts. La liste Couloirs, à droite des onglets Liste / Tableau / Calendrier / Gantt, découpe le tableau en lignes horizontales :
| Choix | Couloirs |
|---|---|
| Aucun (par défaut) | tableau en colonnes seules |
| Assigné à | un couloir par personne ou groupe assigné, puis Non assigné |
| Version cible | un couloir par version (dans l’ordre des versions de Redmine), puis Aucune version |
| Priorité | un couloir par priorité, de la plus haute à la plus basse |
| Tracker | un couloir par tracker |
| Catégorie | un couloir par catégorie, puis Aucune catégorie (dans un projet seulement : les catégories sont propres à chaque projet) |
- C’est le regroupement de la requête (« Grouper par » de la liste) : il est gardé pour la session et repris par la liste, enregistré avec une requête personnalisée (Sauvegarder) et rétabli en ouvrant cette requête depuis la liste comme depuis le tableau. Effacer le remet à Aucun.
- Choisi à la souris (ou au doigt), le regroupement s’applique tout de suite (le tableau est rechargé). Au clavier, les flèches parcourent les choix sans recharger, Entrée applique ; le focus revient sur la liste Couloirs. Quitter la liste sans Entrée (Tab, clic ailleurs) la remet sur le regroupement affiché : Appliquer ou Sauvegarder n’envoient jamais un regroupement parcouru mais non choisi.
- Un regroupement choisi dans la liste que le tableau ne dessine pas en couloirs (statut, auteur, projet, date, champ personnalisé…) est conservé : la liste Couloirs l’affiche suivi de « (liste seulement) » et le tableau reste en colonnes seules.
- Chaque couloir a un titre (nom et nombre de demandes) ; une rangée d’en-têtes au-dessus des couloirs donne, pour chaque statut, le nombre total de demandes. Les cartes se placent à l’intersection du couloir et du statut.
- Replier un couloir : bouton du titre (chevron), à la souris ou au clavier. Les couloirs repliés sont mémorisés pour l’onglet du navigateur (par tableau et par regroupement), pas dans les préférences du compte.
- 50 cartes au plus par cellule ; au-delà, Voir les N autres ouvre la liste des demandes filtrée sur le statut et sur la valeur du couloir (« aucun » pour Non assigné / Aucune version).
- Sous 640 px de large, les couloirs deviennent des sections empilées (titre, puis les cartes du statut choisi dans Statut affiché).
- Lecteurs d’écran : titre de couloir en niveau 3 ; chaque cellule est un groupe nommé par le statut, le couloir et son nombre de demandes (« En cours, Karim Benali, 3 demandes »).
Déplacer une carte
Déplacer une carte vers une autre colonne change le statut de la demande, sans recharger la page :
- Glisser-déposer (640 px de large et plus) : pendant le glissement, les colonnes autorisées sont cerclées de la couleur de marque, les colonnes refusées grisées ;
- menu « Déplacer vers… » : bouton en fin de carte, au clavier comme à la souris, à toutes les largeurs (seul moyen sous 640 px). Il propose les statuts autorisés par le workflow dont la colonne est affichée.
Le statut est changé par Redmine lui-même, comme depuis la fiche de la demande : entrée dans l’historique, règles du workflow, champs obligatoires et notifications. La carte se place en tête de la colonne d’arrivée (elle reprend sa place dans le tri au rechargement), les nombres des colonnes sont mis à jour et le changement est annoncé aux lecteurs d’écran (« #4821 déplacé vers En cours »).
En cas de refus, la carte revient à sa place et un message d’erreur s’affiche : « #4821 n’a pas été déplacé : <motif> ».
Avec des couloirs, déplacer une carte ne change que son statut : elle passe dans la cellule du nouveau statut de son couloir. Pendant un glisser-déposer, les cellules des autres couloirs sont grisées et refusent la carte (changer l’assigné ou la version depuis le tableau n’est pas prévu). Les nombres de la cellule de départ, de la cellule d’arrivée et des deux en-têtes de statut suivent.
Droits
| Action | Droit Redmine requis |
|---|---|
| Voir le tableau | Voir les demandes (aucune permission nouvelle) |
| Déplacer une carte | Modifier les demandes ou Modifier ses propres demandes, avec les droits du rôle sur le tracker et une transition autorisée par le workflow |
Seules les cartes modifiables par l’utilisateur portent le bouton « Déplacer vers… » et peuvent être glissées. Un projet fermé reste lisible, sans déplacement ; un projet archivé est refusé.
Motifs de refus
Le déplacement passe par PATCH /filonio/board/issues/<numéro> (session et jeton CSRF de Redmine, réponse JSON) :
| Code | Cas | Message affiché |
|---|---|---|
| 200 | statut changé | annonce « #… déplacé vers … » |
| 401 | session expirée ou absente | « Session expirée : reconnectez-vous puis réessayez. », avec le bouton Se reconnecter (retour au tableau après la connexion) |
| 403 | pas le droit de modifier la demande, ou projet fermé | message d’accès refusé de Redmine |
| 404 | demande invisible pour l’utilisateur, projet archivé compris | message de Redmine |
| 409 | la demande a été modifiée depuis l’affichage du tableau | message de conflit de Redmine ; rechargez la page |
| 422 | transition refusée par le workflow (« Le workflow n’autorise pas le passage de « … » à « … ». », ou l’avertissement de Redmine pour une sous-tâche ouverte, une demande bloquante ou un parent fermé), demande invalide (champ obligatoire…), statut inconnu | message correspondant |
| 422 sans réponse JSON | jeton CSRF refusé (session expirée) | même message que 401 |
Une coupure réseau affiche « connexion perdue ».
Limites
- Pas de limite par colonne (WIP) ni de changement d’assigné ou de version depuis le tableau (une carte ne change pas de couloir).
- Couloirs : assigné, version cible, priorité, tracker et catégorie seulement ; les autres regroupements de la liste restent valables pour la liste.
- Performance : nombres par cellule en une requête, cartes des cellules en une requête (fonction de fenêtrage SQL ; une requête par cellule non vide sur MySQL 5.7, sans fonctions de fenêtrage).
- Les colonnes autorisées sont calculées à l’affichage du tableau et revérifiées par le serveur à chaque déplacement : un cas rare (restriction venue d’un ancêtre au-delà du parent direct) n’est refusé qu’au dépôt, avec retour de la carte et message.
- Un statut autorisé dont la colonne n’est pas affichée (statut fermé avec le filtre « ouverts », par exemple) n’est pas proposé ; changez le filtre « Statut » pour l’afficher.
- Tableau global : pas de menu « … » (Redmine n’a pas d’action sans projet).
Copie de la documentation livrée avec Filonio (dossier docs/ des archives).