re_path(
r'^(?P<cat_slug>[\w,-]+)/new/$', views.CreateBookingView.as_view(), name='agendas-create-booking'
),
+ re_path(r'^(?P<slug>[\w,-]+)/settings/$', views.AgendasSettingsView.as_view(), name='agendas-settings'),
+ re_path(
+ r'^(?P<cat_slug>[\w,-]+)/settings/disable-agenda/(?P<pk>[\d+])/$',
+ views.DisableAgendaLineView.as_view(),
+ name='agendas-disable-line',
+ ),
+ re_path(
+ r'^(?P<cat_slug>[\w,-]+)/settings/add-agenda/$',
+ views.CreateAgendaLineView.as_view(),
+ name='agendas-create-line',
+ ),
]
import logging
import math
+from django.contrib import messages
from django.core.exceptions import PermissionDenied
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.utils.safestring import mark_safe
+from django.utils.text import slugify
+from django.utils.translation import gettext_lazy as _
from django.views.generic.base import TemplateView
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView
day_end = day + datetime.timedelta(days=1, hours=4)
agenda_lines = []
- for agenda in category.agenda_set.all():
+ for agenda in category.agenda_set.filter(enabled=True):
bookings_dict = {}
for booking in bookings:
if booking.agenda_id != agenda.pk:
def form_valid(self, form):
logger.info('modified booking %s (%s)', form.instance, form.instance.start_datetime)
return super().form_valid(form)
+
+
+class AgendasSettingsView(UpdateView):
+ model = Category
+ fields = ['label', 'label_presets']
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context['lines'] = self.get_object().agenda_set.filter(enabled=True)
+ return context
+
+ def get_form(self, *args, **kwargs):
+ if not self.request.user.has_perm('agendas.add_booking'):
+ raise PermissionDenied()
+ return super().get_form(*args, **kwargs)
+
+ def form_valid(self, form):
+ logger.info('modified agendas settings %s', form.instance)
+ return super().form_valid(form)
+
+
+class CreateAgendaLineView(CreateView):
+ model = Agenda
+ fields = ['label']
+
+ def get_form(self, *args, **kwargs):
+ if not self.request.user.has_perm('agendas.add_booking'):
+ raise PermissionDenied()
+ return super().get_form(*args, **kwargs)
+
+ def form_valid(self, form):
+ category = Category.objects.get(slug=self.kwargs['cat_slug'])
+ existing_agenda = category.agenda_set.filter(label=form.instance.label).first()
+ if existing_agenda:
+ existing_agenda.enabled = True
+ form.instance = existing_agenda
+ logger.info('enabled agenda line %s', form.instance)
+ else:
+ form.instance.category = category
+ form.instance.slug = slugify(form.instance.label)
+ logger.info('added agenda line %s', form.instance)
+ form.instance.save()
+ return super().form_valid(form)
+
+ def get_success_url(self):
+ return reverse('agendas-view', kwargs={'slug': self.kwargs['cat_slug']})
+
+
+class DisableAgendaLineView(DetailView):
+ model = Agenda
+
+ def get(self, request, *args, **kwargs):
+ if not request.user.has_perm('agendas.add_booking'):
+ raise PermissionDenied()
+ agenda = self.get_object()
+ agenda.enabled = False
+ agenda.save()
+ logger.info('disabled agenda line %s', agenda)
+ messages.success(
+ request,
+ _(
+ 'This agenda line has been disabled. (you\'ll get it back if you add an agenda with the same name)'
+ ),
+ )
+ return HttpResponseRedirect(reverse('agendas-view', kwargs={'slug': agenda.category.slug}))