def edit_reservation(request, id): """ Modify, cancel or create a reservation GET presents a form, POST updates the database If id is absent: create a new reservation If id is provided and also POST['cancel'], cancel a reservation If id is provided: modify a reservation """ if not id: reservation = Reservation() else: reservation = Reservation.objects.get(id=id) if reservation == None or reservation.user != request.user: return HtmlResponse("Nope") form = None if request.POST: if id and 'cancel' in request.POST: # Cancel the reservation reservation.delete(); return redirect(to=reverse('scheduler:reservations')) reservation.user = request.user reservation.mcu = MCU.objects.get(id=1) form = ReservationForm(request.POST, instance=reservation) try: form.save() except (ValueError, ValidationError) as e: # FIXME: Grab the error and show it to the user pass else: return redirect(to=reverse('scheduler:reservations')) if not form: form = ReservationForm(instance=reservation) context = { 'reservation': reservation, 'form': form } return render(request, 'scheduler/reservation.html', context)
def edit_reservation(request, id): """ Modify, cancel or create a reservation GET presents a form, POST updates the database If id is absent: create a new reservation If id is provided and also POST['cancel'], cancel a reservation If id is provided: modify a reservation """ if not id: reservation = Reservation() else: reservation = Reservation.objects.get(id=id) if reservation == None or reservation.user != request.user: return HtmlResponse("Nope") form = None if request.POST: if id and 'cancel' in request.POST: # Cancel the reservation reservation.delete() return redirect(to=reverse('scheduler:reservations')) reservation.user = request.user reservation.mcu = MCU.objects.get(id=1) form = ReservationForm(request.POST, instance=reservation) try: form.save() except (ValueError, ValidationError) as e: # FIXME: Grab the error and show it to the user pass else: return redirect(to=reverse('scheduler:reservations')) if not form: form = ReservationForm(instance=reservation) context = {'reservation': reservation, 'form': form} return render(request, 'scheduler/reservation.html', context)
def schedule(request, lab_id): lab = get_object_or_404(Lab, id=lab_id) # Generate the Lab's schedule for the next seven days schedule = Schedule(lab, tz=request.session.get("django_timezone")) # Determine if the current User is allowed to make a Reservation if not request.user.is_authenticated(): reservation_forbidden = "You must log in in order to reserve lab time." elif not lab.pods.count(): reservation_forbidden = "This lab does not have any pods defined yet." elif request.user in lab.admins: reservation_forbidden = False elif not lab.is_active: reservation_forbidden = "Sorry, this lab is not currently accepting new reservations." elif not lab.is_public and request.user not in lab.members: reservation_forbidden = "Sorry, only members can reserve time in this lab." elif ( lab.max_rsv_per_user and lab.reservations.filter(user=request.user, end_time__gt=timezone.now()).count() >= lab.max_rsv_per_user ): reservation_forbidden = "Sorry, you have reached the maximum number of reservations for this lab ({0}).".format( lab.max_rsv_per_user ) else: reservation_forbidden = False # Creating a new Reservation if not reservation_forbidden and request.method == "POST": reservation_form = ReservationForm(lab, schedule, request.session["django_timezone"], request.POST) if reservation_form.is_valid(): # Create a full datetime from the individual date and time fields, then make it timezone-aware start_time = parser.parse( " ".join((reservation_form.cleaned_data["date"], reservation_form.cleaned_data["time"])) ) start_time = request.session.get("django_timezone").localize(start_time) # Create the Reservation r = Reservation.objects.create( user=request.user, lab=lab, # TODO: Add awareness of X-FORWARDED-FOR header? created_ip_address=request.META.get("REMOTE_ADDR"), start_time=start_time, duration=int(reservation_form.cleaned_data["duration"]), ) # Add reserved Pod(s) to the Reservation if isinstance(reservation_form.cleaned_data["pods"], list): for pod_id in reservation_form.cleaned_data["pods"]: r.pods.add(lab.pods.get(id=pod_id)) else: r.pods.add(lab.pods.get(id=reservation_form.cleaned_data["pods"])) messages.success(request, "Your reservation has been created.") return redirect(reverse("scheduler_reservation", kwargs={"rsv_id": r.id})) elif not reservation_forbidden: reservation_form = ReservationForm(lab, schedule, request.session["django_timezone"]) else: reservation_form = None return render( request, "labs/schedule.html", { "lab": lab, "lab_open_hours": [h.hour for h in lab.get_open_hours(tz=request.session.get("django_timezone"))], "reservation_forbidden": reservation_forbidden, "reservation_form": reservation_form, "s": schedule, "now": { "day": timezone.localtime(timezone.now(), request.session.get("django_timezone")).day, "hour": timezone.localtime(timezone.now(), request.session.get("django_timezone")).hour, }, "current_time": datetime.now(), "nav_labs": "schedule", }, )