Added Event List Export Feature.

This commit is contained in:
2018-01-29 17:21:04 +01:00
parent d3625cf79f
commit b68949ba5f
7 changed files with 133 additions and 6 deletions

View File

@@ -6,12 +6,13 @@ from django.contrib.auth import login
from django.contrib.auth.decorators import login_required
from django.core.exceptions import PermissionDenied, SuspiciousOperation
from django.db.models import Q
from django.http import HttpResponseRedirect
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse, reverse_lazy
from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _
from django.views import generic
from .. import choices
from .. import forms
from .. import models
from ..utils import has_role
@@ -39,11 +40,60 @@ class EventListView(generic.ListView):
return qs
def get_context_data(self, **kwargs):
context = super(EventListView, self).get_context_data(**kwargs)
user = self.request.user
context['has_permission_export'] = user.is_superuser or has_role(user, 'publish')
return context
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super(EventListView, self).dispatch(request, *args, **kwargs)
class EventListExportView(generic.FormView):
form_class = forms.events.EventListExportForm
template_name = 'dav_events/event_list_export_form.html'
def form_valid(self, form):
filename = _(u'Veranstaltungen')
filter_kwargs = {
'accepted': True,
}
if form.cleaned_data['sport']:
sport = form.cleaned_data['sport']
filter_kwargs['sport'] = sport
filename += u'--%s' % choices.SPORT_CHOICES.get_label(sport)
if form.cleaned_data['begin']:
date = form.cleaned_data['begin']
filter_kwargs['first_day__gte'] = date
filename += u'--%s' % date.strftime('%Y-%m-%d')
if form.cleaned_data['end']:
date = form.cleaned_data['end']
filter_kwargs['first_day__lte'] = date
filename += u'--%s' % date.strftime('%Y-%m-%d')
txt = u''
event_qs = models.Event.objects.filter(**filter_kwargs).order_by('number')
for event in event_qs:
# txt += unicode(event)
txt += event.render_as_text()
txt += u'\n-----\n\n'
filename += u'.txt'
response = HttpResponse(txt, content_type='text/plain')
response['Content-Disposition'] = 'attachment; filename="{filename}"'.format(filename=filename)
return response
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
user = request.user
if not user.is_superuser and not has_role(user, 'publish'):
raise PermissionDenied('publish')
return super(EventListExportView, self).dispatch(request, *args, **kwargs)
class EventPermissionMixin(object):
permission = 'view'