class User(AbstractBaseUser, PermissionsMixin): first_name = models.CharField(max_length=30, verbose_name=text("Nom")) last_name = models.CharField(max_length=30, verbose_name=text("Prenom")) username = models.CharField(max_length=30, unique=True) email = models.EmailField(max_length=255, unique=True, verbose_name=text("Adresse Email")) group = models.ForeignKey(Group, on_delete=models.CASCADE, verbose_name=text("Groupe"), related_name='user_group', null=True, blank=True) has_group = models.BooleanField(default=False) is_staff = models.BooleanField(default=False) is_active = models.BooleanField(default=True) is_manager = models.BooleanField( verbose_name="Peut-il devenir Chef de Groupe ?", default=False) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) is_superuser = models.BooleanField(default=False) profil_image = models.ImageField(upload_to=profilimage_directory_path, null=True, blank=True) objects = UserManager() USERNAME_FIELD = "email" REQUIRED_FIELDS = ["first_name", "last_name", "username"] def __str__(self): return self.last_name def clean(self): super().clean() self.email = self.__class__.objects.normalize_email(self.email)
class Discussion(models.Model): auteur = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=text("Envoyeur"), related_name="user1_discussion") receiver = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=text("Receiver"), related_name="user2_discussion") class Meta: unique_together = (('auteur', 'receiver'))
class Event(models.Model): title = models.CharField(max_length=50, verbose_name=text("Titre")) description = models.TextField(default="", verbose_name=text("Description")) priority = models.CharField(choices=PRIORITY, default="", max_length=10, verbose_name=text("Priorité")) start = models.DateTimeField(verbose_name=text("Début ")) end = models.DateTimeField(verbose_name=text("Fin ")) is_cancelled = models.BooleanField(default=False, blank=True, verbose_name=text("Annulé ? ")) def __str__(self): return self.title @property def get_html_url(self): url = reverse('calendrier:details', args=(self.id, )) ctitle = "<span class='offset-md-0 float-left'>" + str( self.start.time()) + ' a ' + str( self.end.time()) + "</span>" + "\n <br>" + self.title if self.priority == "tres haute": return f"<a href='{url}' class='btn btn-lg badge badge-danger badge-lg' style='display:inline-block; text-decoration: none; font-size:14px;'> {ctitle} </a>" elif self.priority == "haute": return f"<a href='{url}' class='btn badge badge-warning badge-lg' style='text-decoration: none; font-size:14px;'> {ctitle} </a>" elif self.priority == "normale": return f"<a href='{url}' class='btn badge badge-primary badge-lg' style='text-decoration: none; font-size:14px;'> {ctitle} </a>" elif self.priority == "peu faible": return f"<a href='{url}' class='btn badge badge-info badge-lg' style='text-decoration: none; font-size:14px;'> {ctitle} </a>" elif self.priority == "faible": return f"<a href='{url}' class='btn badge badge-secondary badge-lg' style='text-decoration: none; font-size:14px;'> {ctitle} </a>"
class Dialogs(models.Model): auteur = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=text("Envoyeur"), related_name="auteur_chat") messages = models.TextField(verbose_name=text("Message ou Chat"), blank=False, null=False) group = models.ForeignKey(Group, on_delete=models.CASCADE, verbose_name=text("Envoyé au groupe"), related_name="groupe") fichiers = models.FileField(upload_to=attachments_directory_path, storage=OverwriteStorage(), null=True, blank=True) pub_date = models.DateTimeField(verbose_name=text('Date du massage'), default=timezone.now) is_readed = models.BooleanField(verbose_name=text('Readed'), default=False) created = models.DateTimeField(auto_now_add=True) updated = models.DateField(auto_now=True) def __str__(self): return self.messages
class Chats(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=text("Sender"), related_name="sender_chat") receiver = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=text("Receiver"), related_name="recepteur_chat") message = models.TextField(verbose_name=text("Message ou Chat"), blank=False, null=False) files = models.FileField(upload_to=attachments_directory_path, storage=OverwriteStorage(), null=True, blank=True) pub_date = models.DateTimeField(verbose_name=text('Date du massage'), default=timezone.now) is_readed = models.BooleanField(verbose_name=text('Readed'), default=False) created = models.DateTimeField(auto_now_add=True) updated = models.DateField(auto_now=True) def __str__(self): return self.message
class Task(models.Model): name = models.CharField(max_length=255, verbose_name=text("Nom")) description = models.TextField(default="", max_length=255, verbose_name=text("Description"), blank=True, null=True) date_due = models.DateField(verbose_name=text("Date limite")) status = models.CharField(default="attribuée", choices=STATUS, max_length=10, verbose_name=text("Statut")) priority = models.CharField(choices=PRIORITY, max_length=10, verbose_name=text("Priorité")) category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name=text("Categorie"), related_name="task_category") group = models.ForeignKey(Group, on_delete=models.CASCADE, verbose_name=text("Attribuer au groupe"), related_name="task_group") task_file1 = models.FileField(upload_to=attachments_directory_path, storage=OverwriteStorage(), null=True, blank=True) task_file2 = models.FileField(upload_to=attachments_directory_path, storage=OverwriteStorage(), null=True, blank=True) task_file3 = models.FileField(upload_to=attachments_directory_path, storage=OverwriteStorage(), null=True, blank=True) task_file4 = models.FileField(upload_to=attachments_directory_path, storage=OverwriteStorage(), null=True, blank=True) created_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name="task_created_by") created = models.DateTimeField(auto_now_add=True) updated = models.DateField(auto_now=True) def __str__(self): return self.name