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 get(self, request, bookable): booking = Booking() booking.start = dateutil.parser.parse(request.GET['st']) if 'st' in request.GET else datetime.now() # Remove the seconds and microseconds if they are present booking.start = booking.start.replace(second=0, microsecond=0) 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)
def post_render(self, request): form = BookingMetaForm(data=request.POST, owner=request.user) forms = self.repo_get(self.repo.BOOKING_FORMS, {}) forms["meta_form"] = form self.repo_put(self.repo.BOOKING_FORMS, forms) if form.is_valid(): models = self.repo_get(self.repo.BOOKING_MODELS, {}) if "booking" not in models: models['booking'] = Booking() models['collaborators'] = [] confirm = self.repo_get(self.repo.CONFIRMATION) if "booking" not in confirm: confirm['booking'] = {} models['booking'].start = timezone.now() models['booking'].end = timezone.now() + timedelta( days=int(form.cleaned_data['length'])) models['booking'].purpose = form.cleaned_data['purpose'] models['booking'].project = form.cleaned_data['project'] for key in ['length', 'project', 'purpose']: confirm['booking'][key] = form.cleaned_data[key] if form.cleaned_data["deploy_opnfv"]: self.repo_get(self.repo.SESSION_MANAGER).set_step_statuses( OPNFV_EnablePicker, desired_enabled=True) else: self.repo_get(self.repo.SESSION_MANAGER).set_step_statuses( OPNFV_EnablePicker, desired_enabled=False) userprofile_list = form.cleaned_data['users'] confirm['booking']['collaborators'] = [] for userprofile in userprofile_list: models['collaborators'].append(userprofile.user) confirm['booking']['collaborators'].append( userprofile.user.username) info_file = form.cleaned_data.get("info_file", False) if info_file: self.repo_put(self.repo.BOOKING_INFO_FILE, info_file) self.repo_put(self.repo.BOOKING_MODELS, models) self.repo_put(self.repo.CONFIRMATION, confirm) messages.add_message(request, messages.SUCCESS, 'Form Validated', fail_silently=True) self.set_valid("Step Completed") else: messages.add_message(request, messages.ERROR, "Form didn't validate", fail_silently=True) self.set_invalid( "Please complete the fields highlighted in red to continue") return self.render(request)
def test_edit(self): b1 = Booking(location=self.location, start=self.s1, end=self.e1, description=self.d1) b1.save() b2 = Booking(location=self.location, start=self.s2, end=self.e2, description=self.d2) b2.save() qNo1 = b2.queueNo #update second booking b2.start = self.s3 b2.start = self.e3 b2.save() qNo2 = b2.queueNo print("before ", qNo1) print("after", qNo2) self.assertGreater(qNo1, qNo2)