import os from django.conf import settings from django.contrib import admin from django.db import models from django.db.models.functions import Lower from django.utils.translation import gettext_lazy as _ class Category(models.Model): name = models.CharField(max_length=127) order = models.IntegerField(verbose_name=_("ordre")) nom_en = models.CharField(max_length=100, null=True, blank=True) def __str__(self): return self.name class Meta: verbose_name = _("Categorie") verbose_name_plural = _("Categories") ordering = ("order",) class Partition(models.Model): nom = models.CharField(max_length=100) part = models.FileField(upload_to="partitions/") morceau = models.ForeignKey("PartitionSet", on_delete=models.CASCADE) def __str__(self): return self.nom def delete(self, *args, **kwargs): os.remove(os.path.join(settings.MEDIA_ROOT, self.part.name)) super(Partition, self).delete(*args, **kwargs) class Meta: verbose_name = _("Partition") verbose_name_plural = _("Partitions") ordering = (Lower("nom"),) class PartitionSet(models.Model): nom = models.CharField(max_length=100) auteur = models.CharField(max_length=100) category = models.ForeignKey( Category, on_delete=models.PROTECT, verbose_name=_("Type de partition") ) download_unlogged = models.CharField( _("Téléchargeable non connecté ?"), default="n", choices=[("n", _("Non")), ("o", _("Oui"))], max_length=1, ) infos = models.TextField(_("Infos utiles"), null=False, blank=True, default="") infos_en = models.TextField( "Infos utiles en anglais", null=False, blank=True, default="" ) url = models.URLField( _("Url d'une video youtube"), null=True, blank=True, help_text=_( "Dans Youtube cliquer sur partager puis importer pour récuperer la bonne adresse" ), ) def __str__(self): return "%s - %s [%s]" % (self.nom, self.auteur, self.category) class Meta: verbose_name = _("Morceau") verbose_name_plural = _("Morceaux") ordering = ( "category", Lower("nom"), ) from datetime import date as ddate from datetime import timedelta class SetList(models.Model): """ Modèle qui stocke les setlists de répétition (date et morceaux) """ date = models.DateField(_("Date de la répétition")) is_current = models.CharField( verbose_name=_( "Afficher le programme de répétition (les répétition vieilles de plus d'une semaine ne sont pas affiché d'office)" ), max_length=1, choices=(("y", "Oui"), ("n", "Non")), default="y", blank=False, ) morceaux = models.ManyToManyField( "PartitionSet", verbose_name=_( "Morceaux de la répétition (ctrl ou cmd pour en selectionner plusieurs)" ), ) def __str__(self): return "%s - (%s)" % ( self.date, ", ".join(self.morceaux.all().values_list("nom", flat=True)), ) def is_visible(self): return self.is_current == "y" and self.date > ddate.today() - timedelta(days=7)