gigafibre-fsm/apps/ops/src/config/nav.js
louispaulb 23f0f72731 feat(ops): « / » = accueil universel adapté au rôle (step 3/3) + consolidation Thème/Équipe→Paramètres
Step 3/3. Avant : '/' = « Tableau de bord » réservé (requires view_dashboard_kpi) → un agent de service n'avait pas
d'accueil pertinent. Maintenant '/' = « Accueil » visible par tous ; l'accueil PERSONNEL (MonAujourdhui) s'affiche pour
chacun, et les sections GESTION sont gated dans la page :
- KPI (stats) + Administration + Activité récente → can('view_dashboard_kpi')
- Charge 2 semaines (occupation) → can('view_all_jobs')
Résultat : un CSR voit un accueil épuré (sa boîte / ses tickets) ; un gestionnaire garde le tableau complet.
Embarque aussi la consolidation déjà déployée que ces fichiers portaient : Équipe + Thème → Paramètres (nav retirée +
routes redirigées vers /settings).
Vérifié en dev : nav « Accueil » (plus « Tableau de bord »), sections gestion rendues pour superuser, MonAujourdhui présent,
0 erreur console. Build OK, leak-clean, déployé.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 15:35:33 -04:00

61 lines
4.6 KiB
JavaScript

// Ops sidebar navigation + search filter options
// `requires` = capability needed to see this nav item (null = always visible)
// `section` → regroupe l'item sous une SECTION repliable (menu trop long → sous-menus). Sans `section` = épinglé en haut.
// L'ordre + le libellé des sections sont définis dans `navSections`.
export const navSections = [
{ key: 'service', label: 'Service client', icon: 'MessagesSquare' },
{ key: 'terrain', label: 'Terrain', icon: 'Truck' },
{ key: 'admin', label: 'Administration', icon: 'Settings' },
]
export const navItems = [
// ── Épinglés (haut, toujours visibles) ──
{ path: '/', icon: 'LayoutDashboard', label: 'Accueil', requires: null }, // accueil universel adapté au rôle (MonAujourdhui) ; sections gestion gated dans la page
{ path: '/rapports', icon: 'BarChart3', label: 'Rapports', requires: 'view_dashboard_kpi' },
// ── Service client ──
{ path: '/communications', icon: 'MessagesSquare', label: 'Communications', requires: 'view_clients', section: 'service' },
{ path: '/clients', icon: 'Users', label: 'Clients', requires: 'view_clients', section: 'service' },
{ path: '/tickets', icon: 'Ticket', label: 'Tickets', requires: 'view_all_tickets', section: 'service' },
{ path: '/evaluations', icon: 'Star', label: 'Évaluations', requires: 'view_clients', section: 'service' },
{ path: '/pipeline', icon: 'Filter', label: 'Pipeline (ventes)', requires: 'view_clients', section: 'service' },
// ── Terrain (effectifs / interventions) — page Dispatch retirée, tout est sur Planification ──
{ path: '/planification', icon: 'CalendarRange', label: 'Planification', requires: 'view_all_jobs', section: 'terrain' },
{ path: '/rdv', icon: 'CalendarClock', label: 'Rendez-vous', requires: 'view_all_jobs', section: 'terrain' },
{ path: '/copilote', icon: 'Sparkles', label: 'Copilote', requires: 'view_all_jobs', section: 'terrain' },
{ path: '/historique', icon: 'History', label: 'Historique', requires: 'view_all_jobs', section: 'terrain' },
{ path: '/taches-pilote', icon: 'Workflow', label: 'Orchestration (tâches)', requires: 'view_all_jobs', section: 'terrain' },
{ path: '/network', icon: 'Network', label: 'Réseau (GPON)', requires: 'view_settings', section: 'terrain' },
// ── Administration ── (« Équipe » consolidé dans Paramètres → /settings)
{ path: '/campaigns', icon: 'Gift', label: 'Campagnes', requires: 'manage_users', section: 'admin' },
{ path: '/campaigns/pool', icon: 'Award', label: 'Récompenses', requires: 'manage_users', section: 'admin' },
{ path: '/evenements', icon: 'PartyPopper', label: 'Événements', requires: 'manage_users', section: 'admin' },
{ path: '/conformite-adresses', icon: 'MapPinned', label: 'Conformité adresses', requires: 'view_settings', section: 'admin' },
{ path: '/sync-legacy', icon: 'RefreshCw', label: 'Sync F↔ERPNext', requires: 'view_settings', section: 'admin' },
{ path: '/email-queue', icon: 'Mail', label: 'File courriels', requires: 'view_settings', section: 'admin' },
{ path: '/telephony', icon: 'Phone', label: 'Téléphonie (SIP)', requires: 'view_settings', section: 'admin' },
{ path: '/agent-flows', icon: 'Bot', label: 'Flux agent IA', requires: 'view_settings', section: 'admin' },
{ path: '/factures-fournisseurs', icon: 'ReceiptText', label: 'Factures fournisseurs', requires: 'view_settings', section: 'admin' },
{ path: '/sous-traitants', icon: 'HardHat', label: 'Sous-traitants', requires: 'view_settings', section: 'admin' },
{ path: '/facturation/approbations', icon: 'ClipboardCheck', label: 'Approb. facturation', requires: 'view_all_jobs', section: 'admin' },
{ path: '/settings', icon: 'Settings', label: 'Paramètres', requires: 'view_settings', section: 'admin' },
]
export const territoryOptions = [
{ label: 'Gatineau', value: 'Gatineau' },
{ label: 'Ottawa', value: 'Ottawa' },
{ label: 'Aylmer', value: 'Aylmer' },
{ label: 'Hull', value: 'Hull' },
{ label: 'Buckingham', value: 'Buckingham' },
{ label: 'Masson-Angers', value: 'Masson-Angers' },
]
export const statusOptions = [
{ label: 'Actif', value: 'Active' },
{ label: 'Inactif', value: 'Inactive' },
{ label: 'En attente', value: 'Pending' },
]
export const customerTypeOptions = [
{ label: 'Individu', value: 'Individual' },
{ label: 'Entreprise', value: 'Company' },
]