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,18 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsque le texte d'adresse d'une Adresse_Nommee est absent, vide ou dépasse
|
||||
/// 255 caractères (Exigence 15.8). Convertie en réponse HTTP 400 (Bad Request).
|
||||
/// </summary>
|
||||
public class AdresseNommeeInvalideException : Exception
|
||||
{
|
||||
public AdresseNommeeInvalideException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public AdresseNommeeInvalideException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsqu'aucune Adresse_Nommee ne correspond à l'identifiant demandé
|
||||
/// (modification, suppression). Convertie en réponse HTTP 404 (Not Found).
|
||||
/// </summary>
|
||||
public class AdresseNommeeNotFoundException : Exception
|
||||
{
|
||||
public AdresseNommeeNotFoundException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public AdresseNommeeNotFoundException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsque l'API BAN (Base Adresses Nationale) est indisponible :
|
||||
/// échec réseau, réponse HTTP non réussie ou dépassement du délai (timeout).
|
||||
/// </summary>
|
||||
public class BANIndisponibleException : Exception
|
||||
{
|
||||
public BANIndisponibleException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public BANIndisponibleException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Signale l'absence de barème configuré pour une (puissance fiscale, année) lors d'un calcul de montant.
|
||||
/// Ce n'est pas une erreur bloquante : le calcul retourne un montant zéro accompagné d'un avertissement
|
||||
/// (Exigence 13.4). Le service de calcul n'a donc pas à lever cette exception pour interrompre le calcul ;
|
||||
/// elle est fournie pour les cas où un appelant souhaite explicitement signaler la non-configuration.
|
||||
/// </summary>
|
||||
public class BaremeNonConfigureException : Exception
|
||||
{
|
||||
public BaremeNonConfigureException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public BaremeNonConfigureException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsqu'une Date_Effet fournie pour un véhicule est postérieure à la date du jour.
|
||||
/// Convertie en réponse HTTP 400 (Bad Request) — Exigence 10.11.
|
||||
/// </summary>
|
||||
public class DateEffetFutureException : Exception
|
||||
{
|
||||
public DateEffetFutureException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public DateEffetFutureException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsqu'une Dénomination d'Adresse_Nommee, après normalisation (trim + minuscules +
|
||||
/// suppression des accents), correspond à une Adresse_Nommee déjà enregistrée (Exigence 15.7).
|
||||
/// Convertie en réponse HTTP 400 (Bad Request).
|
||||
/// </summary>
|
||||
public class DenominationDupliqueeException : Exception
|
||||
{
|
||||
public DenominationDupliqueeException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public DenominationDupliqueeException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsqu'une Dénomination d'Adresse_Nommee est absente, vide ou dépasse 100 caractères
|
||||
/// (Exigence 15.6). Convertie en réponse HTTP 400 (Bad Request).
|
||||
/// </summary>
|
||||
public class DenominationInvalideException : Exception
|
||||
{
|
||||
public DenominationInvalideException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public DenominationInvalideException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsqu'un recalcul de la Distance échoue lors de la modification d'un Trajet.
|
||||
/// Le service annule (rollback) la modification et conserve les données existantes du Trajet
|
||||
/// sans modification, puis retourne cette erreur descriptive (Exigence 5.8).
|
||||
/// Convertie en réponse HTTP 502 (Bad Gateway) / erreur descriptive par le contrôleur.
|
||||
/// </summary>
|
||||
public class DistanceRecalculException : Exception
|
||||
{
|
||||
public DistanceRecalculException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public DistanceRecalculException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsqu'un Montant_Regle soumis est négatif. Convertie en réponse HTTP 400
|
||||
/// (Bad Request) — Exigence 14.4 : « Le montant réglé ne peut pas être négatif. »
|
||||
/// </summary>
|
||||
public class MontantRegleNegatifException : Exception
|
||||
{
|
||||
public MontantRegleNegatifException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public MontantRegleNegatifException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsque la génération d'un Export_PDF échoue : erreur de rendu QuestPDF
|
||||
/// ou dépassement du délai de 15 secondes (Exigence 7.5). Le controller la mappe
|
||||
/// vers une réponse <c>503 Service Unavailable</c>.
|
||||
/// </summary>
|
||||
public class PdfGenerationException : Exception
|
||||
{
|
||||
public PdfGenerationException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public PdfGenerationException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsqu'un paramètre de résumé (mois ou année) est hors des plages autorisées :
|
||||
/// mois ∈ [1, 12] et année ∈ [2000, 2100]. Convertie en réponse HTTP 400 (Bad Request)
|
||||
/// par le controller — Exigence 3.6.
|
||||
/// </summary>
|
||||
public class ResumeParametreInvalideException : Exception
|
||||
{
|
||||
public ResumeParametreInvalideException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public ResumeParametreInvalideException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsqu'une demande de modification ou de suppression cible un Trajet inexistant.
|
||||
/// Convertie en réponse HTTP 404 (Not Found) ; l'opération est bloquée et aucun Résumé_Mensuel
|
||||
/// n'est mis à jour (Exigences 5.6).
|
||||
/// </summary>
|
||||
public class TrajetNotFoundException : Exception
|
||||
{
|
||||
public TrajetNotFoundException(int id)
|
||||
: base($"Le trajet {id} n'existe pas.")
|
||||
{
|
||||
}
|
||||
|
||||
public TrajetNotFoundException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public TrajetNotFoundException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsqu'aucune tranche de barème ne correspond à l'identifiant demandé
|
||||
/// (mise à jour ou suppression). Convertie en réponse HTTP 404 (Not Found).
|
||||
/// </summary>
|
||||
public class TrancheBaremeNotFoundException : Exception
|
||||
{
|
||||
public TrancheBaremeNotFoundException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public TrancheBaremeNotFoundException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsqu'une opération sur le barème produirait des tranches dont les intervalles
|
||||
/// [KmMin, KmMax] se chevauchent pour une même (année, puissance fiscale).
|
||||
/// Convertie en réponse HTTP 400 (Bad Request) — Exigence 13.2.
|
||||
/// </summary>
|
||||
public class TranchesBaremeChevauchantesException : Exception
|
||||
{
|
||||
public TranchesBaremeChevauchantesException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public TranchesBaremeChevauchantesException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
namespace TrajetKmTracker.Api.Services.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Levée lorsqu'aucun véhicule ne correspond à l'identifiant demandé
|
||||
/// (résolution du véhicule courant, réaffectation, etc.).
|
||||
/// Convertie en réponse HTTP 404 (Not Found).
|
||||
/// </summary>
|
||||
public class VehiculeNotFoundException : Exception
|
||||
{
|
||||
public VehiculeNotFoundException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public VehiculeNotFoundException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user