Commit cfaa8fad authored by Grégory DAVID's avatar Grégory DAVID

Implémentation de la durée dans les classes qui le méritent

Les classes concernées sont : Playlist, Episode, Piste

Fixes #25
parent 3d88fcee
Pipeline #57539 passed with stage
in 9 minutes and 35 seconds
......@@ -45,6 +45,7 @@ class PlaylistAdmin(admin.ModelAdmin):
""" Définition des attributs d'administration
de la classe Playlist """
inlines = [PlaylistInline]
list_display = ('titre', 'duree')
search_fields = ['titre', 'description']
def formfield_for_foreignkey(self, db_field, request, **kwargs):
......@@ -57,7 +58,7 @@ class DiffusableAdmin(admin.ModelAdmin):
""" Définition des attributs d'administration
de la classe Diffusable """
inlines = [DiffusableInline]
list_display = ('titre', 'nature', 'date_publication', 'licence')
list_display = ('titre', 'duree', 'nature', 'date_publication', 'licence')
list_filter = ['date_publication', 'licence']
date_hierarchy = 'date_publication'
search_fields = ['titre']
......
......@@ -78,7 +78,7 @@
},
{
"fields" : {
"_duree" : "00:00:00",
"_duree" : "00:22:37",
"date_publication" : "2018-04-08",
"editeur" : 1,
"licence" : "CC BY-SA",
......@@ -89,7 +89,7 @@
},
{
"fields" : {
"_duree" : "00:00:00",
"_duree" : "00:17:53",
"date_publication" : "2018-04-08",
"editeur" : 1,
"licence" : "CC BY-SA",
......@@ -100,7 +100,7 @@
},
{
"fields" : {
"_duree" : "00:00:00",
"_duree" : "00:05:37",
"date_publication" : "2018-04-10",
"editeur" : 1,
"licence" : "CC BY-SA",
......
......@@ -267,12 +267,25 @@ class Playlist(Diffusable):
except Playlist.DoesNotExist:
return
@property
def duree(self):
"""
Obtient et retourne la durée de la Playlist par le sommage de chacun
des Diffusables de sa liste.
"""
self.update_duree()
return super().duree
def update_duree(self):
"""
Met à jour la durée de la playlist en se basant sur les durées de chacun
de ses éléments
"""
self.duree = datetime.timedelta(0)
somme = datetime.timedelta(0)
if self.id is not None:
for diffusable in self.liste.all():
somme += diffusable.duree
self._duree = somme
def save(self, *args, **kwargs):
self.validate_unique()
......
......@@ -34,7 +34,7 @@ class EpisodeAdmin(admin.ModelAdmin):
Définition des attributs d'administration
de la classe Episode
"""
list_display = ('titre', 'emission', 'date_publication',
list_display = ('titre', 'emission', 'duree', 'date_publication',
'licence', 'fichier_disponible')
list_filter = ['date_publication', 'emission', 'licence']
date_hierarchy = 'date_publication'
......@@ -51,6 +51,7 @@ class EmissionAdmin(admin.ModelAdmin):
""" Définition des attributs d'administration
de la classe Emission """
inlines = [EpisodeInline]
list_display = ('nom', 'duree')
search_fields = ['nom']
class InterventionAdmin(admin.ModelAdmin):
......
......@@ -56,6 +56,18 @@ class Emission(models.Model):
help_text="Champ non éditable valorisé automatiquement avec " \
"la valeur de l'année scolaire courante.")
@property
def duree(self):
"""
Retourne la somme des durées des Episode associés dont les fichiers
sont disponibles sur le système de fichiers
"""
duree = datetime.timedelta(0)
for episode in self.episode_set_emission.all():
if episode.fichier_disponible() is True:
duree += episode.duree
return duree
def __str__(self):
return "%s (%s-%s)" % (self.nom,
self.annee_scolaire,
......
......@@ -21,9 +21,10 @@ class PisteInline(admin.TabularInline):
class PisteAdmin(admin.ModelAdmin):
""" Définition des attributs d'administration
de la classe Piste """
list_display = ('titre', 'position', 'album',
list_display = ('position', 'titre', 'duree', 'album',
'date_publication', 'licence',
'genre', 'fichier_disponible')
list_display_links = ('titre',)
list_filter = ['date_publication', 'album', 'licence']
date_hierarchy = 'date_publication'
search_fields = ['titre', 'album__nom']
......@@ -35,6 +36,7 @@ class AlbumAdmin(admin.ModelAdmin):
""" Définition des attributs d'administration
de la classe Album """
inlines = [PisteInline]
list_display = ('nom', 'duree')
search_fields = ['nom']
......
......@@ -3,6 +3,7 @@
Définition du modèle de données pour la gestion des musiques
"""
import logging
import datetime
from django.db import models
from gestion_de_la_diffusion.models import (Diffusable,
......@@ -51,6 +52,18 @@ class Album(models.Model):
nom = models.CharField(max_length=255,
unique=True)
@property
def duree(self):
"""
Retourne la durée totale de l'Album dont les Pistes sont disponibles
sur le système de fichiers
"""
duree = datetime.timedelta(0)
for piste in self.piste_set.all():
if piste.fichier_disponible():
duree += piste.duree
return duree
def __str__(self):
return "%s" % (self.nom)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment