Precision configurable des distances (arrondi superieur 0/1/2 decimales)
- Nouveau parametre global Precision_Distance (sous-menu Application de la Page_Parametrage, entre Compte et Vehicules), persiste via une entite singleton ParametresApplication, expose par GET/PUT /api/parametres-application - Arrondi superieur (ceiling) applique a l'affichage et aux agregats : trajet simple, aller/retour (arrondi puis doublement), totaux jour/mois/annee, carte, export PDF et bareme kilometrique - jamais a la distance brute stockee - Refonte du Montant_Previsionnel : le montant mensuel (80%) porte desormais sur le seul mois affiche (tranche determinee par le cumul annuel) ; nouvelle ligne Montant_Previsionnel_Annuel (100%, sans minoration, sur le cumul) - Backend : PrecisionDistanceService (ArrondirDistance), integration dans ResumeService/TotauxService/RemboursementService/MontantRegleService, migration EF Core ; 7 tests de propriete (FsCheck) + tests existants, 62/62 verts - Frontend : ParametresApplicationService (signal partage), composant de parametrage, fonction miroir arrondirDistance, adaptation de la liste des trajets, du panneau des totaux, de la carte et des montants regles - Specs : nouvelle spec precision-distances-km (requirements/design/tasks) ; mise a jour de requirements.md, design.md et design-requirements.md de schotziad-km-tracker (Requirement 22, renvois croises, Montant_Previsionnel) - Suppression du fichier chromium .deb suivi par erreur dans le depot
This commit is contained in:
@@ -34,9 +34,10 @@ export interface MontantPrevisionnel {
|
||||
annee: number;
|
||||
mois: number;
|
||||
vehiculeId: number;
|
||||
totalMoisKm: number;
|
||||
totalAnnuelPartielKm: number;
|
||||
montantBaremePlein: number; // barème plein sur le total partiel
|
||||
montantPrevisionnel: number; // = 80% (indicatif uniquement)
|
||||
montantPrevisionnelMensuel: number;
|
||||
montantPrevisionnelAnnuel: number;
|
||||
}
|
||||
|
||||
/** Ligne mensuelle de la synthèse annuelle — miroir de LigneSyntheseMoisDto. */
|
||||
|
||||
@@ -9,3 +9,4 @@ export * from './bareme.model';
|
||||
export * from './adresse.model';
|
||||
export * from './auth.model';
|
||||
export * from './spec.model';
|
||||
export * from './parametres-application.model';
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
// Modèle ParametresApplication — miroir de ParametresApplicationDtos.cs.
|
||||
|
||||
/** Paramètres globaux de l'application — miroir de ParametresApplicationDto. */
|
||||
export interface ParametresApplication {
|
||||
precisionDistanceKm: number;
|
||||
}
|
||||
@@ -9,3 +9,4 @@ export * from './profil.service';
|
||||
export * from './bareme.service';
|
||||
export * from './remboursement.service';
|
||||
export * from './spec.service';
|
||||
export * from './parametres-application.service';
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { Injectable, inject, signal } from '@angular/core';
|
||||
import { Observable } from 'rxjs';
|
||||
import { tap } from 'rxjs/operators';
|
||||
|
||||
import { environment } from '../../../environments/environment';
|
||||
import { ParametresApplication } from '../models';
|
||||
|
||||
/**
|
||||
* Service HTTP des paramètres globaux de l'application.
|
||||
*
|
||||
* Porte le signal partagé `precisionDistance`, chargé une fois puis mis à jour après
|
||||
* modification — mécanisme central de propagation de la précision d'arrondi des distances
|
||||
* à toute l'application (liste des trajets, totaux, carte, PDF, barème).
|
||||
*/
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class ParametresApplicationService {
|
||||
private readonly http = inject(HttpClient);
|
||||
private readonly baseUrl = environment.apiUrl;
|
||||
|
||||
/** Précision courante (0, 1 ou 2), partagée par toute l'application. Défaut 2 avant premier chargement. */
|
||||
readonly precisionDistance = signal<0 | 1 | 2>(2);
|
||||
|
||||
/** Charge la précision courante depuis le backend et met à jour le signal partagé (GET /api/parametres-application). */
|
||||
charger(): Observable<ParametresApplication> {
|
||||
return this.http.get<ParametresApplication>(`${this.baseUrl}/parametres-application`).pipe(
|
||||
tap((p) => this.precisionDistance.set(p.precisionDistanceKm as 0 | 1 | 2))
|
||||
);
|
||||
}
|
||||
|
||||
/** Modifie la précision et met à jour le signal partagé en cas de succès (PUT /api/parametres-application). */
|
||||
definirPrecisionDistance(valeur: 0 | 1 | 2): Observable<ParametresApplication> {
|
||||
return this.http
|
||||
.put<ParametresApplication>(`${this.baseUrl}/parametres-application`, {
|
||||
precisionDistanceKm: valeur
|
||||
})
|
||||
.pipe(tap((p) => this.precisionDistance.set(p.precisionDistanceKm as 0 | 1 | 2)));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user