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,28 @@
|
||||
using FluentValidation;
|
||||
using TrajetKmTracker.Api.Models.DTOs;
|
||||
|
||||
namespace TrajetKmTracker.Api.Validators;
|
||||
|
||||
// Validation de la création d'un véhicule (Requirements 10.11, 6.3).
|
||||
public class CreateVehiculeDtoValidator : AbstractValidator<CreateVehiculeDto>
|
||||
{
|
||||
public CreateVehiculeDtoValidator()
|
||||
{
|
||||
RuleFor(x => x.Denomination)
|
||||
.NotEmpty().WithMessage("La dénomination est obligatoire.")
|
||||
.MaximumLength(100).WithMessage("La dénomination ne peut dépasser 100 caractères.");
|
||||
|
||||
RuleFor(x => x.Plaque)
|
||||
.NotEmpty().WithMessage("La plaque est obligatoire.")
|
||||
.MaximumLength(15).WithMessage("La plaque ne peut dépasser 15 caractères.");
|
||||
|
||||
RuleFor(x => x.PuissanceFiscale)
|
||||
.GreaterThan(0).WithMessage("La puissance fiscale doit être strictement positive.");
|
||||
|
||||
RuleFor(x => x.DateEffet)
|
||||
.NotEmpty().WithMessage("La date d'effet est obligatoire.")
|
||||
.Matches(DateValidation.FormatJjMmAAAA).WithMessage("Format de date invalide (JJ/MM/AAAA).")
|
||||
.Must(DateValidation.BeAValidDateNotInFuture)
|
||||
.WithMessage("La date d'effet doit être une date existante et ne peut être postérieure à aujourd'hui.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user