Added a model for event state (including data migration, signal based

notifications, etc.)
This commit is contained in:
2018-07-04 16:56:13 +02:00
parent 0e7c14ace9
commit 3c7ef05099
27 changed files with 712 additions and 355 deletions

View File

@@ -45,7 +45,7 @@ class EventListView(generic.ListView):
filter |= Q(sport__in=user_sports_list)
if has_role(user, 'publish') or has_role(user, 'publish_incremental'):
filter |= Q(accepted=True)
filter |= Q(flags__status__code='accepted')
qs = self.model.objects.filter(filter)
@@ -89,7 +89,7 @@ class EventListExportView(generic.FormView):
txt = u''
event_qs = models.Event.objects.filter(**filter_kwargs).order_by('sport', 'first_day')
for event in event_qs:
if exclude_expired and event.get_status() == 'expired':
if exclude_expired and event.is_flagged('expired'):
continue
txt += event.render_as_text(format='ka-alpin')
if event.internal_note:
@@ -120,30 +120,38 @@ class EventPermissionMixin(object):
return True
if permission == 'view':
if obj.owner == user:
if user == obj.owner:
return True
if has_role(user, 'manage_all'):
return True
if has_role(user, 'manage_{}'.format(obj.sport.lower())):
return True
if obj.accepted and (has_role(user, 'publish') or has_role(user, 'publish_incremental')):
if has_role(user, 'publish_incremental') and obj.is_flagged('accepted'):
return True
if has_role(user, 'publish') and obj.is_flagged('accepted'):
return True
elif permission == 'submit':
if user == obj.owner:
return True
elif permission == 'accept':
if has_role(user, 'manage_all'):
return True
if has_role(user, 'manage_{}'.format(obj.sport.lower())):
return True
elif permission == 'publish':
if has_role(user, 'publish') or has_role(user, 'publish_incremental'):
return True
elif permission == 'update':
if not obj.accepted and not obj.publication_confirmed:
if not obj.is_flagged('submitted'):
if user == obj.owner:
return True
elif not obj.is_flagged('accepted'):
if has_role(user, 'manage_all'):
return True
if has_role(user, 'manage_{}'.format(obj.sport.lower())):
return True
elif has_role(user, 'publish') or has_role(user, 'publish_incremental'):
return True
elif permission == 'publish':
if has_role(user, 'publish') or has_role(user, 'publish_incremental'):
return True
return False
@@ -164,9 +172,10 @@ class EventDetailView(EventPermissionMixin, generic.DetailView):
def get_context_data(self, **kwargs):
context = super(EventDetailView, self).get_context_data(**kwargs)
obj = context.get('event')
context['has_permission_submit'] = self.has_permission('submit', obj)
context['has_permission_accept'] = self.has_permission('accept', obj)
context['has_permission_update'] = self.has_permission('update', obj)
context['has_permission_publish'] = self.has_permission('publish', obj)
context['has_permission_update'] = self.has_permission('update', obj)
return context
@method_decorator(login_required)
@@ -174,26 +183,43 @@ class EventDetailView(EventPermissionMixin, generic.DetailView):
return super(EventDetailView, self).dispatch(request, *args, **kwargs)
class EventAcceptView(EventDetailView):
permission = 'accept'
class EventConfirmStatusView(EventPermissionMixin, generic.DetailView):
model = models.Event
def get(self, request, *args, **kwargs):
status = kwargs.get('status')
event = self.get_object()
event.accept(request.user)
messages.success(request, _(u'Veranstaltung freigegeben.'))
return HttpResponseRedirect(event.get_absolute_url())
if status == 'submitted':
if not self.has_permission('submit', event):
raise PermissionDenied(status)
elif status == 'accepted':
if not self.has_permission('accept', event):
raise PermissionDenied(status)
if not event.is_flagged('submitted'):
messages.error(request, _(u'Veranstaltung ist noch nicht eingereicht.'))
return HttpResponseRedirect(event.get_absolute_url())
elif status == 'publishing' or status == 'published':
if not self.has_permission('publish', event):
raise PermissionDenied(status)
if not event.is_flagged('accepted'):
messages.error(request, _(u'Veranstaltung ist noch nicht freigegeben.'))
return HttpResponseRedirect(event.get_absolute_url())
else:
if not self.has_permission('update', event):
raise PermissionDenied(status)
class EventConfirmPublicationView(EventDetailView):
permission = 'publish'
event.confirm_status(status, request.user)
def get(self, request, *args, **kwargs):
event = self.get_object()
if event.accepted:
event.confirm_publication(request.user)
if status == 'submitted':
messages.success(request, _(u'Veranstaltung eingereicht.'))
elif status == 'accepted':
messages.success(request, _(u'Veranstaltung freigegeben.'))
elif status == 'publishing' or status == 'published':
messages.success(request, _(u'Veröffentlichung registriert.'))
else:
messages.error(request, _(u'Veranstaltung ist noch nicht freigegeben.'))
messages.success(request, _(u'Veranstaltungsstatus registriert.'))
return HttpResponseRedirect(event.get_absolute_url())
@@ -273,8 +299,12 @@ class EventCreateView(EventPermissionMixin, generic.FormView):
return self.render_to_response(self.get_context_data(form=next_form, event=event))
else:
event.save()
if 'submit' in form.data:
event.confirm_status('submitted', event.owner)
messages.success(self.request, _(u'Veranstaltung eingereicht.'))
else:
messages.success(self.request, _(u'Veranstaltung angelegt.'))
form.flush_session_data()
messages.success(self.request, _(u'Veranstaltung angelegt.'))
owner = event.owner
self.clean_session_data()
if self.request.user.is_authenticated: