SchotzIAD KM Tracker : suivi des trajets kilométriques (Angular + .NET 8)
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.
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
namespace TrajetKmTracker.Api.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Génération des Export_PDF (QuestPDF). Compose les services métier existants
|
||||
/// (résumé, profil, véhicule, barème, montants réglés) pour produire les documents.
|
||||
/// La génération est enveloppée dans un délai de 15 secondes ; en cas de dépassement
|
||||
/// ou d'erreur de rendu, une <see cref="Exceptions.PdfGenerationException"/> est levée
|
||||
/// (Exigence 7.5) — le controller la mappe vers <c>503 Service Unavailable</c>.
|
||||
/// </summary>
|
||||
public interface IPdfService
|
||||
{
|
||||
/// <summary>
|
||||
/// Génère le rapport PDF mensuel d'un (année, mois) pour le véhicule indiqué (Exigences 7.1,
|
||||
/// 7.4, 7.6, 7.8, 7.10, 7.11). L'en-tête contient l'identité de l'utilisateur, le véhicule
|
||||
/// (plaque, puissance fiscale, coefficient et base de la tranche annuelle applicable), la
|
||||
/// période, l'adresse de départ du profil, le total kilométrique du mois, le total kilométrique
|
||||
/// annuel cumulé, le TOTAL IK du mois (km du mois × coefficient de la tranche annuelle) et le
|
||||
/// Montant_Regle du mois. Le corps liste les trajets (date, motif/commentaire, départ → arrivée, km).
|
||||
/// Le nom de fichier suggéré est <c>trajets_MM_AAAA.pdf</c>.
|
||||
/// </summary>
|
||||
/// <exception cref="Exceptions.PdfGenerationException">
|
||||
/// Levée en cas de dépassement du délai de 15 s ou d'échec de rendu (Exigence 7.5).
|
||||
/// </exception>
|
||||
Task<PdfResult> GenererRapportMensuelAsync(
|
||||
int annee, int mois, int vehiculeId, CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// Génère la synthèse annuelle de régularisation d'une <paramref name="annee"/> pour le véhicule
|
||||
/// indiqué (Exigences 7.2, 7.4, 7.6, 7.7, 7.8, 7.12). La page de synthèse contient le nom et le
|
||||
/// prénom de l'utilisateur, l'année, l'adresse de domicile, le barème applicable de l'année (les
|
||||
/// trois tranches coefficient/base par puissance fiscale du véhicule), le véhicule et sa puissance
|
||||
/// fiscale, la tranche annuelle applicable ; puis pour chacun des douze mois : les kilomètres
|
||||
/// parcourus, le Montant_Regle (frais payé) et le Frais_Reel_Mensuel (frais réel). Les totaux
|
||||
/// (km annuel, total réglé, Montant_Reel, Regularisation) et la « formule réelle » sont indiqués.
|
||||
/// Le nom de fichier suggéré est <c>trajets_AAAA.pdf</c>.
|
||||
/// </summary>
|
||||
/// <exception cref="Exceptions.PdfGenerationException">
|
||||
/// Levée en cas de dépassement du délai de 15 s ou d'échec de rendu (Exigence 7.5).
|
||||
/// </exception>
|
||||
Task<PdfResult> GenererRapportAnnuelAsync(
|
||||
int annee, int vehiculeId, CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// Détermine les véhicules ayant des Trajets pour l'<paramref name="annee"/> et génère un rapport
|
||||
/// annuel PDF distinct par véhicule (Exigence 7.9). Retourne un PDF par véhicule ayant des données,
|
||||
/// trié par identifiant de véhicule. Retourne une liste vide si aucun trajet n'existe pour l'année.
|
||||
/// </summary>
|
||||
/// <exception cref="Exceptions.PdfGenerationException">
|
||||
/// Levée en cas de dépassement du délai de 15 s ou d'échec de rendu (Exigence 7.5).
|
||||
/// </exception>
|
||||
Task<IReadOnlyList<PdfResult>> GenererRapportsAnnuelsParVehiculeAsync(
|
||||
int annee, CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// Détermine les véhicules ayant des Trajets pour le couple (<paramref name="annee"/>,
|
||||
/// <paramref name="mois"/>) et génère un rapport mensuel PDF distinct par véhicule (Exigence 7.9).
|
||||
/// Retourne un PDF par véhicule ayant des données, trié par identifiant de véhicule. Retourne une
|
||||
/// liste vide si aucun trajet n'existe pour la période.
|
||||
/// </summary>
|
||||
/// <exception cref="Exceptions.PdfGenerationException">
|
||||
/// Levée en cas de dépassement du délai de 15 s ou d'échec de rendu (Exigence 7.5).
|
||||
/// </exception>
|
||||
Task<IReadOnlyList<PdfResult>> GenererRapportsMensuelsParVehiculeAsync(
|
||||
int annee, int mois, CancellationToken cancellationToken = default);
|
||||
}
|
||||
Reference in New Issue
Block a user