from django.db import models from datetime import date class Client(models.Model): class Meta: verbose_name = 'Client' verbose_name_plural = 'Clients' name = models.CharField(max_length=255, verbose_name="Nom") address = models.CharField(max_length=255, verbose_name="Adresse") postal_code = models.IntegerField(verbose_name="Code postal") city = models.CharField(max_length=255, verbose_name="Ville") contact = models.CharField(max_length=255, verbose_name="Personne de contact") company_number = models.CharField(max_length=50, verbose_name="N° d'entreprise", blank=True, null=True) def __str__(self): return "%s" % (self.name) class Contract(models.Model): class Meta: verbose_name = 'Contrat' verbose_name_plural = 'Contrats' name = models.CharField(max_length=255, verbose_name="Nom") client = models.ForeignKey(Client, on_delete=models.CASCADE, related_name="get_contract") advance = models.DecimalField(max_digits=6, decimal_places=2, blank=True, verbose_name="Acompte", default=0) reference = models.CharField(max_length=255, verbose_name="Référence", blank=True, null=True) is_finished = models.BooleanField(default=True, blank=True) date = models.DateField(auto_now_add=True) def __str__(self): return "%s" % (self.name) # def __generate_reference(self): # """ # Génère automatiquement la référence du contract # """ # if self.id is None: # object_id = "XX" # elif self.id < 10: # object_id = "0" + str(self.id) # else: # object_id = self.id # self.reference = str(self.date.year) + "-" + object_id # def save(self, *args, **kwargs): # """ # Enregistre l'objet en DB après avoir calculé le montant total. # """ # super().save(*args, **kwargs) # self.__generate_reference() # super().save(*args, **kwargs) class Prestation(models.Model): class Meta: verbose_name = 'Prestations' verbose_name_plural = 'Prestations' ordering = ['date'] contract = models.ForeignKey(Contract, on_delete=models.CASCADE, related_name="get_prestation", blank=True, null=True) date = models.DateField() label = models.CharField(max_length=255, verbose_name='Libellé') unit = models.DecimalField(max_digits=5, decimal_places=2, verbose_name="Unité", default=1) unit_price = models.DecimalField(max_digits=5, decimal_places=2, verbose_name="Prix unitaire", default="12,5") total_amount = models.DecimalField(max_digits=6, decimal_places=2, blank=True, verbose_name="Prix", default=0) def __compute_total_amount(self): """ Calcule le montant total de la prestation. """ self.total_amount = self.unit * self.unit_price def save(self, *args, **kwargs): """ Enregistre l'objet en DB après avoir calculé le montant total. """ self.__compute_total_amount() super().save(*args, **kwargs)