Application complète de saisie et de suivi des trajets kilométriques avec calcul de distance routière (OpenRouteService), barème kilométrique, résumés et régularisation annuelle. Backend (ASP.NET Core .NET 8, EF Core, SQLite) : - Trajets (CRUD, réordonnancement, insertion), calcul de distance ORS avec fallback Haversine, géométrie d'itinéraire stockée par trajet, recalcul en masse. - Profil, véhicules (avec dénomination), carnet d'adresses nommées, cache d'adresses. - Barème kilométrique : tranches multiples par puissance fiscale, borne max exclusive avec 'illimité' (KmMax nullable), coefficient à 3 décimales, recopie du dernier barème connu. - Résumés mensuel/annuel, montants réglés, régularisation, export PDF. Frontend (Angular 22, zoneless + signals) : - Consultation par jour, navigation temporelle synchronisée, carte Leaflet, formulaire de trajet (adresses nommées, domicile, autocomplétion BAN). - Détection de changement zoneless (indépendante de zone.js). Hébergement : Docker Compose (nginx + backend), scripts run-dev.sh / run-docker.sh.
47 lines
2.9 KiB
TypeScript
47 lines
2.9 KiB
TypeScript
import { Routes } from '@angular/router';
|
|
|
|
import { profilConfigureGuard } from './core/guards/profil-configure.guard';
|
|
import { BaremeComponent } from './features/bareme/bareme.component';
|
|
import { CarnetAdressesComponent } from './features/carnet-adresses/carnet-adresses.component';
|
|
import { ConsultationJourComponent } from './features/consultation-jour/consultation-jour.component';
|
|
import { MontantsReglesComponent } from './features/montants-regles/montants-regles.component';
|
|
import { OnboardingComponent } from './features/onboarding/onboarding.component';
|
|
import { ProfilComponent } from './features/profil/profil.component';
|
|
import { ResumeAnnuelComponent } from './features/resume-annuel/resume-annuel.component';
|
|
import { ResumeMensuelComponent } from './features/resume-mensuel/resume-mensuel.component';
|
|
import { VehiculesComponent } from './features/vehicules/vehicules.component';
|
|
|
|
/**
|
|
* Routes de l'application (équivalent standalone de `app-routing.module.ts`).
|
|
*
|
|
* Placeholders pour le socle :
|
|
* - `/consultation` : vue principale de consultation des trajets (tâche 16.4).
|
|
* - `/onboarding` : parcours de première utilisation (tâche 21.1), accessible sans garde.
|
|
*
|
|
* La garde `profilConfigureGuard` (tâche 21.2) protège l'accès à la saisie /
|
|
* consultation des trajets et aux résumés tant que le profil n'est pas configuré.
|
|
*
|
|
* Décision de routage :
|
|
* - Routes protégées par la garde (bloquées si `estConfigure = false`, redirection
|
|
* vers `/onboarding`) : `consultation`, `carnet-adresses`, `resume-mensuel`,
|
|
* `resume-annuel`, `bareme`, `montants-regles`.
|
|
* - Routes laissées accessibles SANS garde pour permettre à l'utilisateur de terminer
|
|
* sa configuration : `onboarding` (toujours atteignable), `profil` et `vehicules`.
|
|
* Appliquer la garde à `/profil` / `/vehicules` risquerait de piéger un utilisateur
|
|
* partiellement configuré ; la garde ne vise que la saisie/consultation des trajets
|
|
* et les rapports (voir design « ProfilConfigureGuard »).
|
|
*/
|
|
export const routes: Routes = [
|
|
{ path: '', redirectTo: 'consultation', pathMatch: 'full' },
|
|
{ path: 'consultation', component: ConsultationJourComponent, canActivate: [profilConfigureGuard] },
|
|
{ path: 'carnet-adresses', component: CarnetAdressesComponent, canActivate: [profilConfigureGuard] },
|
|
{ path: 'profil', component: ProfilComponent },
|
|
{ path: 'vehicules', component: VehiculesComponent },
|
|
{ path: 'resume-mensuel', component: ResumeMensuelComponent, canActivate: [profilConfigureGuard] },
|
|
{ path: 'resume-annuel', component: ResumeAnnuelComponent, canActivate: [profilConfigureGuard] },
|
|
{ path: 'bareme', component: BaremeComponent, canActivate: [profilConfigureGuard] },
|
|
{ path: 'montants-regles', component: MontantsReglesComponent, canActivate: [profilConfigureGuard] },
|
|
{ path: 'onboarding', component: OnboardingComponent },
|
|
{ path: '**', redirectTo: 'consultation' }
|
|
];
|