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,60 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace TrajetKmTracker.Api.Models.Entities;
|
||||
|
||||
/// <summary>Trajet kilométrique saisi par l'utilisateur.</summary>
|
||||
public class Trajet
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public DateOnly Date { get; set; }
|
||||
|
||||
[Required, MaxLength(255)]
|
||||
public string AdresseDepart { get; set; } = string.Empty;
|
||||
|
||||
[Required, MaxLength(255)]
|
||||
public string AdresseArrivee { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Distance en kilomètres, arrondie à 2 décimales, strictement positive lorsqu'elle est
|
||||
/// connue. <c>null</c> lorsque la distance n'a pas pu être calculée (aucune coordonnée
|
||||
/// résoluble via le Cache_Adresses / la BAN) : le Trajet est alors persisté avec une
|
||||
/// Distance nulle et un avertissement (Exigence 2.4). La modification ultérieure peut
|
||||
/// recalculer la Distance si de nouvelles coordonnées deviennent disponibles (Exigence 5.10).
|
||||
/// </summary>
|
||||
public decimal? Distance { get; set; }
|
||||
|
||||
/// <summary>Commentaire optionnel (0–500 caractères).</summary>
|
||||
[MaxLength(500)]
|
||||
public string? Commentaire { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Géométrie GeoJSON (LineString) de l'itinéraire routier départ→arrivée, telle que
|
||||
/// renvoyée par OpenRouteService, pour le tracé exact sur la carte. <c>null</c> lorsque
|
||||
/// l'itinéraire routier n'a pas pu être obtenu (fallback vol d'oiseau) : la carte trace
|
||||
/// alors une ligne droite. La géométrie dépend de la PAIRE départ→arrivée, c'est pourquoi
|
||||
/// elle est portée par le Trajet et non par le Cache_Adresses (indexé par adresse seule).
|
||||
/// </summary>
|
||||
public string? GeometrieJson { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Rang du trajet dans la liste de la journée. Valeur décimale (ex. 1.0, 1.5, 2.0)
|
||||
/// permettant l'insertion sans réordonnancement systématique.
|
||||
/// Trié par ordre croissant pour l'affichage.
|
||||
/// </summary>
|
||||
[Required]
|
||||
public decimal Position { get; set; }
|
||||
|
||||
/// <summary>Référence au véhicule associé au trajet (véhicule courant à la date de création par défaut).</summary>
|
||||
[Required]
|
||||
public int VehiculeId { get; set; }
|
||||
public Vehicule? Vehicule { get; set; }
|
||||
|
||||
/// <summary>Puissance fiscale (CV) du véhicule au moment de l'association ; stockée pour l'historique.</summary>
|
||||
[Required]
|
||||
public int PuissanceFiscale { get; set; }
|
||||
|
||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
Reference in New Issue
Block a user