UPD: made interface for office useful.
This commit is contained in:
@@ -1,44 +1,64 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.urls import reverse
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.views import generic
|
||||
|
||||
from dav_events.models import Event
|
||||
from dav_events.models import Participant
|
||||
from dav_events.roles import has_role
|
||||
from dav_events.views.events import EventListView as _EventListView, EventRegistrationsView as _EventRegistrationsView
|
||||
|
||||
|
||||
class HomeView(generic.TemplateView):
|
||||
template_name = 'dav_event_office/home.html'
|
||||
|
||||
|
||||
class OfficePermissionMixin(object):
|
||||
def enforce_permission(self, request):
|
||||
user = request.user
|
||||
if user.is_superuser:
|
||||
return None
|
||||
elif has_role(user, 'manager_super'):
|
||||
return None
|
||||
elif has_role(user, 'event_office'):
|
||||
return None
|
||||
raise PermissionDenied('event_office')
|
||||
|
||||
|
||||
class EventListView(OfficePermissionMixin, generic.ListView):
|
||||
model = Event
|
||||
class EventListView(_EventListView):
|
||||
template_name = 'dav_event_office/event_list.html'
|
||||
|
||||
@method_decorator(login_required)
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
self.enforce_permission(request)
|
||||
if not has_role(request.user, 'office'):
|
||||
raise PermissionDenied('Zugang nur für die Geschäftsstelle')
|
||||
return super(EventListView, self).dispatch(request, *args, **kwargs)
|
||||
|
||||
|
||||
class EventDetailView(OfficePermissionMixin, generic.DetailView):
|
||||
model = Event
|
||||
class EventDetailView(_EventRegistrationsView):
|
||||
template_name = 'dav_event_office/event_detail.html'
|
||||
|
||||
@method_decorator(login_required)
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
self.enforce_permission(request)
|
||||
if not has_role(request.user, 'office'):
|
||||
raise PermissionDenied('Zugang nur für die Geschäftsstelle')
|
||||
return super(EventDetailView, self).dispatch(request, *args, **kwargs)
|
||||
|
||||
|
||||
class ParticipantListView(generic.ListView):
|
||||
model = Participant
|
||||
template_name = 'dav_event_office/participant_list.html'
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
action = request.POST.get('action')
|
||||
if action == 'confirm_payment':
|
||||
participant_id = request.POST.get('id')
|
||||
participant = get_object_or_404(Participant, pk=participant_id)
|
||||
participant.paid = True
|
||||
participant.save()
|
||||
elif action == 'revoke_payment':
|
||||
participant_id = request.POST.get('id')
|
||||
participant = get_object_or_404(Participant, pk=participant_id)
|
||||
participant.paid = False
|
||||
participant.save()
|
||||
else:
|
||||
messages.error(request, 'unsupported action: {}'.format(action))
|
||||
return HttpResponseRedirect(reverse('dav_event_office:participant-list'))
|
||||
|
||||
@method_decorator(login_required)
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
if not has_role(request.user, 'office'):
|
||||
raise PermissionDenied('Zugang nur für die Geschäftsstelle')
|
||||
return super(ParticipantListView, self).dispatch(request, *args, **kwargs)
|
||||
|
||||
Reference in New Issue
Block a user