summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--program/admin.py53
-rw-r--r--program/management/commands/update_hosts.py29
-rw-r--r--program/management/commands/update_programslots.py15
-rw-r--r--program/management/commands/update_shows.py15
-rw-r--r--program/migrations/0009_host_remove_is_active.py18
-rw-r--r--program/migrations/0010_show_remove_is_active.py18
-rw-r--r--program/migrations/0011_programslot_remove_is_active.py18
-rw-r--r--program/models.py12
-rw-r--r--program/templates/host_detail.html9
-rw-r--r--program/templates/show_detail.html6
-rw-r--r--program/templates/show_list.html6
-rw-r--r--program/views.py6
12 files changed, 115 insertions, 90 deletions
diff --git a/program/admin.py b/program/admin.py
index e067e9a..413531e 100644
--- a/program/admin.py
+++ b/program/admin.py
@@ -7,6 +7,47 @@ from forms import MusicFocusForm
from datetime import date, datetime, timedelta
+class ActivityFilter(admin.SimpleListFilter):
+ title = _("Activity")
+
+ def lookups(self, request, model_admin):
+ return (
+ ('yes', _("active")),
+ ('no', _("inactive"))
+ )
+
+ def queryset(self, request, queryset):
+ if self.parameter_name == 'has_timeslots': # active/inactive ProgramSlots
+ if self.value() == 'yes':
+ return queryset.filter(until__gt=datetime.now()).distinct()
+ if self.value() == 'no':
+ return queryset.filter(until__lt=datetime.now()).distinct()
+
+ if self.parameter_name == 'has_programslots_timeslots': # active/inactive Shows
+ if self.value() == 'yes':
+ return queryset.filter(programslots__until__gt=datetime.now()).distinct()
+ if self.value() == 'no':
+ return queryset.filter(programslots__until__lt=datetime.now()).distinct()
+
+ if self.parameter_name == 'has_shows_programslots_timeslots': # active/inactive Hosts
+ if self.value() == 'yes':
+ return queryset.filter(shows__programslots__until__gt=datetime.now()).distinct()
+ if self.value() == 'no':
+ return queryset.filter(shows__programslots__until__lt=datetime.now()).distinct()
+
+
+class ActiveProgramSlotsFilter(ActivityFilter):
+ parameter_name = 'has_timeslots'
+
+
+class ActiveShowsFilter(ActivityFilter):
+ parameter_name = 'has_programslots_timeslots'
+
+
+class ActiveHostsFilter(ActivityFilter):
+ parameter_name = 'has_shows_programslots_timeslots'
+
+
class BroadcastFormatAdmin(admin.ModelAdmin):
list_display = ('format', 'admin_color', 'enabled')
prepopulated_fields = {'slug': ('format',)}
@@ -29,8 +70,8 @@ class ShowTopicAdmin(admin.ModelAdmin):
class HostAdmin(admin.ModelAdmin):
- list_display = ('name', 'is_active')
- list_filter = ('is_active', 'is_always_visible')
+ list_display = ('name',)
+ list_filter = (ActiveHostsFilter, 'is_always_visible',)
class NoteAdmin(admin.ModelAdmin):
@@ -73,7 +114,7 @@ class ProgramSlotAdmin(admin.ModelAdmin):
inlines = (TimeSlotInline,)
fields = (('rrule', 'byweekday'), ('dstart', 'tstart', 'tend'), 'until', 'is_repetition', 'automation_id')
list_display = ('get_show_name', 'byweekday', 'rrule', 'tstart', 'tend', 'until')
- list_filter = ('is_active', 'byweekday', 'rrule', 'is_repetition')
+ list_filter = (ActiveProgramSlotsFilter, 'byweekday', 'rrule', 'is_repetition')
ordering = ('byweekday', 'dstart')
save_on_top = True
search_fields = ('show__name',)
@@ -85,7 +126,7 @@ class ProgramSlotAdmin(admin.ModelAdmin):
if renewed == 1:
message = _("1 program slot was renewed until %s") % until
else:
- message = _("%s program slots were renewed until %s") % until
+ message = _("%s program slots were renewed until %s") % (renewed, until)
self.message_user(request, message)
renew.short_description = _("Renew selected program slots")
@@ -103,8 +144,8 @@ class ProgramSlotInline(admin.TabularInline):
class ShowAdmin(admin.ModelAdmin):
filter_horizontal = ('hosts', 'owners', 'musicfocus', 'showinformation', 'showtopic')
inlines = (ProgramSlotInline,)
- list_display = ('name', 'short_description', 'is_active')
- list_filter = ('is_active', 'broadcastformat', 'showinformation', 'showtopic', 'musicfocus')
+ list_display = ('name', 'short_description')
+ list_filter = (ActiveShowsFilter, 'broadcastformat', 'showinformation', 'showtopic', 'musicfocus')
ordering = ('slug',)
prepopulated_fields = {'slug': ('name',)}
search_fields = ('name', 'short_description', 'description')
diff --git a/program/management/commands/update_hosts.py b/program/management/commands/update_hosts.py
deleted file mode 100644
index 3cb143b..0000000
--- a/program/management/commands/update_hosts.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from django.core.management.base import NoArgsCommand
-
-from program.models import Host
-
-
-class Command(NoArgsCommand):
- help = 'update host by setting is_active'
-
- def handle_noargs(self, **options):
- activated = 0
- deactivated = 0
-
- for host in Host.objects.all():
- active_shows = 0
- for show in host.shows.all():
- if show.is_active:
- active_shows += 1
- else:
- active_shows -= 1
-
- host.is_active = active_shows > 0
- host.save()
-
- if host.is_active:
- activated += 1
- else:
- deactivated += 1
-
- print "%s hosts activated, %s hosts de-activated " % (activated, deactivated)
diff --git a/program/management/commands/update_programslots.py b/program/management/commands/update_programslots.py
deleted file mode 100644
index 6f7ec90..0000000
--- a/program/management/commands/update_programslots.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from django.core.management.base import NoArgsCommand
-
-from program.models import ProgramSlot
-
-from datetime import datetime
-
-
-class Command(NoArgsCommand):
- help = 'update programslots by setting is_active'
-
- def handle_noargs(self, **options):
- deactivated = ProgramSlot.objects.filter(until__lt=datetime.now()).update(is_active=False)
- activated = ProgramSlot.objects.filter(until__gt=datetime.now()).update(is_active=True)
-
- print "%s program slots activated, %s program slots de-activated" % (activated, deactivated)
diff --git a/program/management/commands/update_shows.py b/program/management/commands/update_shows.py
deleted file mode 100644
index 0dafb88..0000000
--- a/program/management/commands/update_shows.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from django.core.management.base import NoArgsCommand
-
-from program.models import Show
-
-from datetime import datetime
-
-
-class Command(NoArgsCommand):
- help = 'update shows by setting is_active'
-
- def handle_noargs(self, **options):
- deactivated = Show.objects.exclude(id=1).filter(programslots__until__lt=datetime.now()).update(is_active=False)
- activated = Show.objects.exclude(id=1).filter(programslots__until__gt=datetime.now()).distinct().update(is_active=True)
-
- print "%s shows activated, %s shows de-activated" % (activated, deactivated)
diff --git a/program/migrations/0009_host_remove_is_active.py b/program/migrations/0009_host_remove_is_active.py
new file mode 100644
index 0000000..f6647f0
--- /dev/null
+++ b/program/migrations/0009_host_remove_is_active.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('program', '0008_show_remove_automation_id'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='host',
+ name='is_active',
+ ),
+ ]
diff --git a/program/migrations/0010_show_remove_is_active.py b/program/migrations/0010_show_remove_is_active.py
new file mode 100644
index 0000000..543bdc1
--- /dev/null
+++ b/program/migrations/0010_show_remove_is_active.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('program', '0009_host_remove_is_active'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='show',
+ name='is_active',
+ ),
+ ]
diff --git a/program/migrations/0011_programslot_remove_is_active.py b/program/migrations/0011_programslot_remove_is_active.py
new file mode 100644
index 0000000..f73a01e
--- /dev/null
+++ b/program/migrations/0011_programslot_remove_is_active.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('program', '0010_show_remove_is_active'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='programslot',
+ name='is_active',
+ ),
+ ]
diff --git a/program/models.py b/program/models.py
index b11d180..9945145 100644
--- a/program/models.py
+++ b/program/models.py
@@ -211,7 +211,6 @@ class MusicFocus(models.Model):
class Host(models.Model):
name = models.CharField(_("Name"), max_length=128)
is_always_visible = models.BooleanField(_("Is always visible"), default=False)
- is_active = models.BooleanField(_("Is active"), default=True, editable=False)
email = models.EmailField(_("E-Mail"), blank=True)
website = models.URLField(_("Website"), blank=True)
@@ -226,6 +225,9 @@ class Host(models.Model):
def get_absolute_url(self):
return reverse('host-detail', args=[str(self.id)])
+ def active_shows(self):
+ return self.shows.filter(programslots__until__gt=datetime.today())
+
class Show(models.Model):
predecessor = models.ForeignKey('self', blank=True, null=True, related_name='successors', verbose_name=_("Predecessor"))
@@ -243,7 +245,6 @@ class Show(models.Model):
description = tinymce_models.HTMLField(_("Description"), blank=True, null=True)
email = models.EmailField(_("E-Mail"), blank=True, null=True)
website = models.URLField(_("Website"), blank=True, null=True)
- is_active = models.BooleanField(_("Is active"), default=True, editable=False)
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)
@@ -258,6 +259,9 @@ class Show(models.Model):
def get_absolute_url(self):
return reverse('show-detail', args=[self.slug])
+ def active_programslots(self):
+ return self.programslots.filter(until__gt=date.today())
+
class RRule(models.Model):
FREQ_CHOICES = (
@@ -306,7 +310,6 @@ class ProgramSlot(models.Model):
tstart = models.TimeField(_("Start time"))
tend = models.TimeField(_("End time"))
until = models.DateField(_("Last date"))
- is_active = models.BooleanField(_("Is active"), default=True, editable=False)
is_repetition = models.BooleanField(_("Is repetition"), default=False)
automation_id = models.IntegerField(_("Automation ID"), blank=True, null=True, choices=get_automation_id_choices())
created = models.DateTimeField(auto_now_add=True, editable=False)
@@ -351,9 +354,6 @@ class ProgramSlot(models.Model):
else:
old = False
- self.is_active = self.until > date.today()
- self.show.is_active = self.until > date.today()
-
super(ProgramSlot, self).save(*args, **kwargs)
if self.rrule.freq == 0:
diff --git a/program/templates/host_detail.html b/program/templates/host_detail.html
index 73182d6..e7aad16 100644
--- a/program/templates/host_detail.html
+++ b/program/templates/host_detail.html
@@ -9,13 +9,8 @@
<div id="shows">
<div id="shows-title">Sendungen</div>
- {% for show in host.shows.all %}
- {% if show.is_active %}
- <div class="show {{ show.broadcastformat.slug }}"><a
- href="{% url "show-detail" show.slug %}">{{ show }}</a></div>
- {% else %}
- <div class="show {{ show.broadcastformat.slug }}">{{ show }}</div>
- {% endif %}
+ {% for show in host.active_shows %}
+ <div class="show {{ show.broadcastformat.slug }}"><a href="{% url "show-detail" show.slug %}"> {{ show.name }}</a></div>
{% endfor %}
</div>
diff --git a/program/templates/show_detail.html b/program/templates/show_detail.html
index 47d20a1..2e45549 100644
--- a/program/templates/show_detail.html
+++ b/program/templates/show_detail.html
@@ -13,10 +13,8 @@
<h1 id="name">{{ show.name }}</h1>
{% if show.id != 1 %}
<p id="programslots">
- {% for slot in show.programslots.all %}
- {% if slot.is_active %}
- <span class="programslot">{{ slot }}</span><br/>
- {% endif %}
+ {% for slot in show.active_programslots %}
+ <span class="programslot">{{ slot }}</span><br/>
{% endfor %}
</p>
{% endif %}
diff --git a/program/templates/show_list.html b/program/templates/show_list.html
index 62594e9..d9b9a47 100644
--- a/program/templates/show_list.html
+++ b/program/templates/show_list.html
@@ -40,10 +40,8 @@
<div class="show-detail">
<h3 class="show-title"><a href="{% url "show-detail" show.slug %}">{{ show.name }}</a></h3>
<ul class="show-programslots">
- {% for programslot in show.programslots.all %}
- {% if programslot.is_active %}
- <li class="show-programslot">{{ programslot }}</li>
- {% endif %}
+ {% for programslot in show.active_program_slots %}
+ <li class="show-programslot">{{ programslot }}</li>
{% endfor %}
</ul>
<p class="show-description">{{ show.short_description }}</p>
diff --git a/program/views.py b/program/views.py
index cfebbd1..7f9b1ce 100644
--- a/program/views.py
+++ b/program/views.py
@@ -15,24 +15,22 @@ from program.utils import tofirstdayinisoweek
class HostListView(ListView):
context_object_name = 'host_list'
- queryset = Host.objects.filter(Q(is_active=True) | Q(is_always_visible=True)).distinct()
+ queryset = Host.objects.filter(Q(is_always_visible=True) | Q(shows__programslots__until__gt=datetime.now())).distinct()
template_name = 'host_list.html'
class HostDetailView(DetailView):
context_object_name = 'host'
- queryset = Host.objects.filter(Q(is_active=True) | Q(is_always_visible=True)).distinct()
+ queryset = Host.objects.all()
template_name = 'host_detail.html'
class ShowListView(ListView):
context_object_name = 'show_list'
- queryset = Show.objects.filter(is_active=True).exclude(id=1).distinct()
template_name = 'show_list.html'
def get_queryset(self):
queryset = Show.objects.filter(programslots__until__gt=date.today()).exclude(id=1).distinct()
-
if 'broadcastformat' in self.request.GET:
broadcastformat = get_object_or_404(BroadcastFormat, slug=self.request.GET['broadcastformat'])
queryset = queryset.filter(broadcastformat=broadcastformat)