mirror of
https://github.com/siop-spelev/siop2.git
synced 2026-08-08 12:41:54 +00:00
- Stock : alertes sous seuil (strie ambre), « Préparer le BC » sur la ligne ; fiche pièce où les mouvements SONT le stock (entrée / ajustement motivé) - Bons de commande : liste + panneau (envoi, annulation, réception → entrées de stock à PU figé) ; création préremplie depuis l'alerte de seuil - Fiche OT : carte « Pièces & main-d'œuvre » réelle (consommation à prix figé annoncé avant le clic, temps au taux figé) + carte Documents (upload/download) ; même carte Documents sur la fiche ascenseur - Statistiques : 4 KPI, pannes par organe (bilans codés), coûts par mois, top équipements ; le tableau de bord allume « Pannes par organe » - Tiers, bibliothèque (upload rattaché, filtre par type), taux horaire éditable dans Personnes ; nav Ressources/Pilotage activée par la matrice - Recette R3 Playwright (2 parcours autonomes) ; cleanup-e2e étendu aux entités R3 ; le formulaire BC attend la fin du refetch (stock périmé en cache) 13/13 e2e verts. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
75 lines
3.9 KiB
TypeScript
75 lines
3.9 KiB
TypeScript
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
import { BrowserRouter, Route, Routes } from 'react-router-dom';
|
|
import type { ReactNode } from 'react';
|
|
import { Coquille } from '@/layout/coquille';
|
|
import PageAchats from '@/pages/achats';
|
|
import PageActivation from '@/pages/activation';
|
|
import PageAscenseurs from '@/pages/ascenseurs';
|
|
import PageBibliotheque from '@/pages/bibliotheque';
|
|
import PageCategories from '@/pages/categories';
|
|
import PageCompteurs from '@/pages/compteurs';
|
|
import PageConnexion from '@/pages/connexion';
|
|
import PageDemandes from '@/pages/demandes';
|
|
import PageDesign from '@/pages/design';
|
|
import PageEtiquette from '@/pages/etiquette';
|
|
import PageFicheAscenseur from '@/pages/fiche-ascenseur';
|
|
import PageFicheOT from '@/pages/fiche-ot';
|
|
import PageFichePiece from '@/pages/fiche-piece';
|
|
import PageFicheSite from '@/pages/fiche-site';
|
|
import PageNouvelAchat from '@/pages/nouvel-achat';
|
|
import PageNouvelAscenseur from '@/pages/nouvel-ascenseur';
|
|
import PageNouvelOT from '@/pages/nouvel-ot';
|
|
import PageOrdresTravail from '@/pages/ordres-travail';
|
|
import PagePersonnes from '@/pages/personnes';
|
|
import PagePortail from '@/pages/portail';
|
|
import PagePreventif from '@/pages/preventif';
|
|
import PageSites from '@/pages/sites';
|
|
import PageStatistiques from '@/pages/statistiques';
|
|
import PageStock from '@/pages/stock';
|
|
import PageTableauDeBord from '@/pages/tableau-de-bord';
|
|
import PageTiers from '@/pages/tiers';
|
|
|
|
const queryClient = new QueryClient({
|
|
defaultOptions: { queries: { refetchOnWindowFocus: false } },
|
|
});
|
|
|
|
const dansCoquille = (page: ReactNode) => <Coquille>{page}</Coquille>;
|
|
|
|
export default function App() {
|
|
return (
|
|
<QueryClientProvider client={queryClient}>
|
|
<BrowserRouter>
|
|
<Routes>
|
|
<Route path="/connexion" element={<PageConnexion />} />
|
|
<Route path="/activation" element={<PageActivation />} />
|
|
{/* Portail public — cible du QR cabine, AUCUN compte */}
|
|
<Route path="/q/:reference" element={<PagePortail />} />
|
|
<Route path="/" element={dansCoquille(<PageTableauDeBord />)} />
|
|
<Route path="/design" element={dansCoquille(<PageDesign />)} />
|
|
<Route path="/sites" element={dansCoquille(<PageSites />)} />
|
|
<Route path="/sites/:id" element={dansCoquille(<PageFicheSite />)} />
|
|
<Route path="/ascenseurs" element={dansCoquille(<PageAscenseurs />)} />
|
|
<Route path="/ascenseurs/nouveau" element={dansCoquille(<PageNouvelAscenseur />)} />
|
|
<Route path="/ascenseurs/:id" element={dansCoquille(<PageFicheAscenseur />)} />
|
|
<Route path="/ascenseurs/:id/etiquette" element={dansCoquille(<PageEtiquette />)} />
|
|
<Route path="/ascenseurs/:id/compteurs" element={dansCoquille(<PageCompteurs />)} />
|
|
<Route path="/personnes" element={dansCoquille(<PagePersonnes />)} />
|
|
<Route path="/categories" element={dansCoquille(<PageCategories />)} />
|
|
<Route path="/ot" element={dansCoquille(<PageOrdresTravail />)} />
|
|
<Route path="/ot/nouveau" element={dansCoquille(<PageNouvelOT />)} />
|
|
<Route path="/ot/:id" element={dansCoquille(<PageFicheOT />)} />
|
|
<Route path="/demandes" element={dansCoquille(<PageDemandes />)} />
|
|
<Route path="/preventif" element={dansCoquille(<PagePreventif />)} />
|
|
<Route path="/stock" element={dansCoquille(<PageStock />)} />
|
|
<Route path="/stock/:id" element={dansCoquille(<PageFichePiece />)} />
|
|
<Route path="/achats" element={dansCoquille(<PageAchats />)} />
|
|
<Route path="/achats/nouveau" element={dansCoquille(<PageNouvelAchat />)} />
|
|
<Route path="/tiers" element={dansCoquille(<PageTiers />)} />
|
|
<Route path="/bibliotheque" element={dansCoquille(<PageBibliotheque />)} />
|
|
<Route path="/statistiques" element={dansCoquille(<PageStatistiques />)} />
|
|
</Routes>
|
|
</BrowserRouter>
|
|
</QueryClientProvider>
|
|
);
|
|
}
|