def book(request, bookable): if not request.user.is_authenticated: return render(request, 'modals/forbidden.html') booking = Booking() bookable_obj = get_object_or_404(Bookable, id_str=bookable) context = { 'url': request.path, 'bookable': bookable_obj, 'user': request.user, } if request.method == 'GET': booking.start = dateutil.parser.parse(request.GET['st']) if 'st' in request.GET else datetime.now() booking.end = dateutil.parser.parse(request.GET['et']) if 'et' in request.GET else start + timedelta(hours=1) booking.bookable = bookable_obj booking.user = request.user form = BookingForm(instance=booking) status = 200 elif request.method == 'POST': form = BookingForm(request.POST, instance=booking) if form.is_valid(): form.save() return HttpResponse() else: status = 400 else: raise Http404 context['form'] = form return render(request, 'book.html', context=context, status=status)
def post(self, request, bookable): booking = Booking() booking.user = self.context['user'] booking.bookable = self.context['bookable'] form = get_form_class(booking.bookable.metadata_form)(request.POST, instance=booking) self.context['form'] = form if form.is_valid(): booking = form.instance booking.metadata = json.dumps(form.get_cleaned_metadata()) if request.POST.get('repeat') and _is_admin(request.user, booking.bookable): repeatdata = { 'frequency': request.POST.get('frequency'), 'repeat_until': request.POST.get('repeat_until') } repeat_form = RepeatingBookingForm(repeatdata) if repeat_form.is_valid(): # Creates repeating bookings as specified, adding all created bookings to group skipped_bookings = repeat_form.save_repeating_booking_group(booking) return JsonResponse({'skipped_bookings': skipped_bookings}) else: return render(request, self.template, context=self.context, status=400) else: form.save() else: return render(request, self.template, context=self.context, status=400) booking.bookable.notify_external_services() return HttpResponse()
def get(self, request, bookable): booking = Booking() booking.start = dateutil.parser.parse( request.GET['st']) if 'st' in request.GET else datetime.now() booking.end = dateutil.parser.parse( request.GET['et'] ) if 'et' in request.GET else booking.start + timedelta(hours=1) booking.bookable = self.context['bookable'] booking.user = request.user form = get_form_class(booking.bookable.metadata_form)(instance=booking) self.context['form'] = form if _is_admin(request.user, booking.bookable): self.context['repeatform'] = RepeatingBookingForm() return render(request, self.template, context=self.context)