Coverage for api\models\evenement.py: 100%
20 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
1"""
2Module contenant le modèle Evenement pour la gestion des événements sportifs.
4Ce module définit la structure de données pour les événements qui se déroulent
5lors des Jeux Olympiques, incluant la gestion automatique des places restantes.
6"""
8from django.db import models
9from api.models.lieu import Lieu
12class Evenement(models.Model):
13 """
14 Modèle représentant un événement sportif.
16 Un événement est une session sportive qui se déroule à un lieu et à une heure précise,
17 avec un nombre de places limité pour les spectateurs.
19 :ivar description: Description de l'événement
20 :type description: str
21 :ivar lieu: Lieu où se déroule l'événement
22 :type lieu: Lieu
23 :ivar date: Date de l'événement
24 :type date: date
25 :ivar horraire: Heure de début de l'événement
26 :type horraire: time
27 :ivar nb_place_total: Nombre total de places disponibles
28 :type nb_place_total: int
29 :ivar nb_place_restante: Nombre de places encore disponibles
30 :type nb_place_restante: int or None
31 """
32 description = models.CharField(max_length=250, help_text="Description de l'événement")
33 lieu = models.ForeignKey(
34 Lieu,
35 on_delete=models.CASCADE,
36 related_name='evenements',
37 help_text="Lieu où se déroule l'événement"
38 )
39 date = models.DateField(help_text="Date de l'événement")
40 horraire = models.TimeField(help_text="Heure de début de l'événement")
41 nb_place_total = models.IntegerField(
42 default=1000,
43 help_text="Nombre total de places disponibles"
44 )
45 nb_place_restante = models.IntegerField(
46 null=True,
47 blank=True,
48 help_text="Nombre de places encore disponibles"
49 )
51 def __str__(self):
52 """
53 Représentation textuelle de l'événement.
55 :return: La description de l'événement
56 :rtype: str
57 """
58 return self.description
60 def save(self, *args, **kwargs):
61 """
62 Sauvegarde l'événement avec initialisation automatique des places restantes.
64 Lors de la création d'un nouvel événement, si le nombre de places restantes
65 n'est pas spécifié, il est automatiquement initialisé avec le nombre total de places.
67 :param args: Arguments positionnels pour la méthode save
68 :type args: tuple
69 :param kwargs: Arguments nommés pour la méthode save
70 :type kwargs: dict
71 """
72 if not self.pk: # création
73 if self.nb_place_restante is None:
74 self.nb_place_restante = self.nb_place_total
75 super().save(*args, **kwargs)
77 class Meta:
78 """
79 Métadonnées du modèle Evenement.
81 :cvar verbose_name: Nom lisible de l'événement au singulier
82 :type verbose_name: str
83 :cvar verbose_name_plural: Nom lisible de l'événement au pluriel
84 :type verbose_name_plural: str
85 :cvar ordering: Ordre par défaut pour les requêtes
86 :type ordering: list
87 """
88 verbose_name = "Événement"
89 verbose_name_plural = "Événements"
90 ordering = ['date', 'horraire']