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>
61 lines
4.6 KiB
JavaScript
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' },
|
|
]
|