"""Modèles de l'application gestion_vehicule.""" from django.db import models from authentification.models import Profile class Vehicule(models.Model): """Modèle représentant un véhicule.""" immatriculation = models.TextField( verbose_name="Immatriculation", max_length=15 ) image = models.ImageField( verbose_name="Image de la voiture", upload_to="vehicule_image" ) disponible = models.BooleanField( verbose_name="Vehicule disponible ?", default=True) def __str__(self): """Retourne une représentation en chaîne de caractères du véhicule.""" return f"{self.immatriculation}" class DemandeVehicule(models.Model): """Modèle représentant une demande de véhicule.""" vehicule = models.ForeignKey(Vehicule, on_delete=models.CASCADE, null=True) nom_passager = models.ForeignKey( Profile, on_delete=models.SET_NULL, null=True, blank=True, related_name="passager_de_la_demande", ) chauffeur = models.ForeignKey( Profile, on_delete=models.SET_NULL, null=True, blank=True, related_name="chauffeur_affecter_course", ) lieu_depart = models.TextField(verbose_name="Lieu de départ") lieu_arrive = models.TextField(verbose_name="Lieu d'arrivée") date_heure = models.DateTimeField(verbose_name="Date et heure de départ") validation = models.BooleanField( verbose_name="Validation par le logisticien", default=None, null=True ) motif_refus = models.TextField(verbose_name="Motifs du refus", default="") def __str__(self): """Retourne une représentation en chaîne de caractères.""" return (f"DemandeVehicule {self.pk} -" f"{self.lieu_depart} à {self.lieu_arrive}" f" le {self.date_heure}" ) class CarnetBord(models.Model): """Modèle représentant le carnet de bord d'un véhicule.""" vehicule = models.ForeignKey( Vehicule, null=True, blank=True, on_delete=models.CASCADE ) course = models.ForeignKey( DemandeVehicule, on_delete=models.CASCADE, default=None, null=True, blank=True ) heure_effectif_depart = models.DateTimeField( verbose_name="Date et heure effectif de départ :", default=None, null=True, blank=True, ) km_depart = models.PositiveIntegerField( verbose_name="Kilometrage de départ :", default=None, null=True, blank=True ) heure_arrive = models.DateTimeField( verbose_name="Date et heure d'arrivee :", default=None, null=True, blank=True ) km_arrive = models.PositiveIntegerField( verbose_name="Kilometrage d'arrivé :", default=0 ) course_termine = models.BooleanField( verbose_name="Course terminée :", default=False ) def __str__(self): """Retourne une représentation en chaîne de caractères.""" return f"CarnetBord {self.pk} - Vehicule: {self.vehicule}" class CarnetCarburant(models.Model): """Modèle représentant le carnet de carburant d'un véhicule.""" date = models.DateField(verbose_name="Date") nom_station = models.TextField(verbose_name="Nom de la station-service") type_carburant = models.TextField( verbose_name="Type du carburant", choices={ "essence": "Essence", "gazoil": "Gazoil", }, ) litre = models.PositiveIntegerField(verbose_name="Litre") prix = models.PositiveIntegerField(verbose_name="Prix par litre (en GNF)") kilometrage = models.PositiveIntegerField(verbose_name="Kilometrage") observation = models.TextField(verbose_name="Observation") course = models.ForeignKey( DemandeVehicule, default=None, on_delete=models.CASCADE ) def __str__(self): """Retourne une représentation en chaîne de caractères.""" return ( f"CarnetCarburant {self.pk} - Station: {self.nom_station} - " f"Date: {self.date}" )