X-Git-Url: https://git.0d.be/?p=django-panik-combo.git;a=blobdiff_plain;f=panikombo%2Fmodels.py;h=4a6ab480d0fa9658b2656f21000278700b7b2b5c;hp=0f74a5b3a2132f9959b6cdc4e9963f80d5ccb388;hb=67cd6d0e88e2797e38b7025f7812a4fe8b37eaa8;hpb=e960f6c41cc47f908e5e685e9f8be029cce3d8c3 diff --git a/panikombo/models.py b/panikombo/models.py index 0f74a5b..4a6ab48 100644 --- a/panikombo/models.py +++ b/panikombo/models.py @@ -1,10 +1,16 @@ +from datetime import date + from django import template from django.db import models from django.utils.translation import ugettext_lazy as _ +from taggit.managers import TaggableManager + from combo.data.models import CellBase from combo.data.library import register_cell_class +from emissions.models import Episode, NewsItem + @register_cell_class class SoundCell(CellBase): soundfile = models.ForeignKey('emissions.SoundFile', null=True) @@ -59,3 +65,75 @@ class EpisodeCell(CellBase): self.episode.emission.title, self.episode.title) return '' + + +@register_cell_class +class EpisodeAutoSelectionCell(CellBase): + title = models.CharField(_('Title'), max_length=50, blank=True) + tags = TaggableManager(_('Tags'), blank=True) + category = models.ForeignKey('emissions.Category', null=True, blank=True) + + class Meta: + verbose_name = _('Automatic Episode Selection') + + def render(self, context): + tmpl = template.loader.get_template('panikombo/episode_auto_selection.html') + context['title'] = self.title + + episodes_queryset = Episode.objects.select_related() + if self.category: + episodes_queryset = episodes_queryset.filter(emission__categories__in=[self.category.id]) + if self.tags.count(): + episodes_queryset = episodes_queryset.filter(tags__in=self.tags.all()) + + episodes_queryset = episodes_queryset.extra(select={ + 'first_diffusion': 'emissions_diffusion.datetime', + }, + select_params=(False, True), + where=['''datetime = (SELECT MIN(datetime) + FROM emissions_diffusion + WHERE episode_id = emissions_episode.id)'''], + tables=['emissions_diffusion'], + ).order_by('-first_diffusion').distinct() + context['episodes'] = episodes_queryset + return tmpl.render(context) + + def get_default_form_class(self): + from .forms import EpisodeAutoSelectionCellForm + return EpisodeAutoSelectionCellForm + + def get_additional_label(self): + if self.title: + return self.title + return '' + +@register_cell_class +class NewsItemAutoSelectionCell(CellBase): + title = models.CharField(_('Title'), max_length=50, blank=True) + tags = TaggableManager(_('Tags'), blank=True) + future = models.BooleanField(_('Future Events Only'), default=True) + + class Meta: + verbose_name = _('Automatic Newsitem Selection') + + def render(self, context): + tmpl = template.loader.get_template('panikombo/newsitem_auto_selection.html') + context['title'] = self.title + + newsitems_queryset = NewsItem.objects.select_related() + if self.tags.count(): + newsitems_queryset = newsitems_queryset.filter(tags__in=self.tags.all()) + if self.future: + newsitems_queryset = newsitems_queryset.filter(event_date__gte=date.today()) + + context['newsitems'] = newsitems_queryset + return tmpl.render(context) + + def get_default_form_class(self): + from .forms import NewsItemAutoSelectionCellForm + return NewsItemAutoSelectionCellForm + + def get_additional_label(self): + if self.title: + return self.title + return ''