def reserve_tool(request): tool = Tool.objects.get(id=request.POST["tool_id"]) customer = User.objects.get(id=request.POST["customer_id"]) project = Project.objects.get(id=request.POST["project_id"]) back = request.POST["back"] error_dictionary = { "back": back, "tool": tool, "project": project, "customer": customer } """ Create a reservation for a user. """ try: date = parse_date(request.POST["date"]) start = localize( datetime.combine(date, parse_time(request.POST["start"]))) end = localize(datetime.combine(date, parse_time(request.POST["end"]))) except: error_dictionary[ "message"] = "Please enter a valid date, start time, and end time for the reservation." return render(request, "kiosk/error.html", error_dictionary) # Create the new reservation: reservation = Reservation() reservation.project = project reservation.user = customer reservation.creator = customer reservation.reservation_item = tool reservation.start = start reservation.end = end reservation.short_notice = determine_insufficient_notice(tool, start) policy_problems, overridable = check_policy_to_save_reservation( cancelled_reservation=None, new_reservation=reservation, user_creating_reservation=customer, explicit_policy_override=False, ) # If there was a problem in saving the reservation then return the error... if policy_problems: error_dictionary["message"] = policy_problems[0] return render(request, "kiosk/error.html", error_dictionary) # All policy checks have passed. if project is None and not customer.is_staff: error_dictionary[ "message"] = "You must specify a project for your reservation" return render(request, "kiosk/error.html", error_dictionary) reservation.additional_information, reservation.self_configuration = extract_configuration( request) # Reservation can't be short notice if the user is configuring the tool themselves. if reservation.self_configuration: reservation.short_notice = False reservation.save_and_notify() return render(request, "kiosk/success.html", { "new_reservation": reservation, "customer": customer })
def make_reservation(request): """ Create a reservation for a user. """ try: date = parse_date(request.POST['date']) start = localize( datetime.combine(date, parse_time(request.POST['start']))) end = localize(datetime.combine(date, parse_time(request.POST['end']))) except: return render( request, 'mobile/error.html', { 'message': 'Please enter a valid date, start time, and end time for the reservation.' }) item_type = ReservationItemType(request.POST['item_type']) item = get_object_or_404(item_type.get_object_class(), id=request.POST.get('item_id')) # Create the new reservation: reservation = Reservation() reservation.user = request.user reservation.creator = request.user reservation.reservation_item = item reservation.start = start reservation.end = end if item_type == ReservationItemType.TOOL: reservation.short_notice = determine_insufficient_notice(item, start) else: reservation.short_notice = False policy_problems, overridable = check_policy_to_save_reservation( cancelled_reservation=None, new_reservation=reservation, user_creating_reservation=request.user, explicit_policy_override=False) # If there was a problem in saving the reservation then return the error... if policy_problems: return render(request, 'mobile/error.html', {'message': policy_problems[0]}) # All policy checks have passed. try: reservation.project = Project.objects.get( id=request.POST['project_id']) except: if not request.user.is_staff: return render( request, 'mobile/error.html', {'message': 'You must specify a project for your reservation'}) reservation.additional_information, reservation.self_configuration = extract_configuration( request) # Reservation can't be short notice if the user is configuring the tool themselves. if reservation.self_configuration: reservation.short_notice = False reservation.save_and_notify() return render(request, 'mobile/reservation_success.html', {'new_reservation': reservation})
def reserve_tool(request): tool = Tool.objects.get(id=request.POST['tool_id']) customer = User.objects.get(id=request.POST['customer_id']) project = Project.objects.get(id=request.POST['project_id']) back = request.POST['back'] error_dictionary = { 'back': back, 'tool': tool, 'project': project, 'customer': customer, } """ Create a reservation for a user. """ try: date = parse_date(request.POST['date']) start = localize( datetime.combine(date, parse_time(request.POST['start']))) end = localize(datetime.combine(date, parse_time(request.POST['end']))) except: error_dictionary[ 'message'] = 'Please enter a valid date, start time, and end time for the reservation.' return render(request, 'kiosk/error.html', error_dictionary) # Create the new reservation: reservation = Reservation() reservation.project = project reservation.user = customer reservation.creator = customer reservation.tool = tool reservation.start = start reservation.end = end reservation.short_notice = determine_insufficient_notice(tool, start) policy_problems, overridable = check_policy_to_save_reservation( None, reservation, customer, False) # If there was a problem in saving the reservation then return the error... if policy_problems: error_dictionary['message'] = policy_problems[0] return render(request, 'kiosk/error.html', error_dictionary) # All policy checks have passed. if project is None and not customer.is_staff: error_dictionary[ 'message'] = 'You must specify a project for your reservation' return render(request, 'kiosk/error.html', error_dictionary) reservation.additional_information, reservation.self_configuration = extract_configuration( request) # Reservation can't be short notice if the user is configuring the tool themselves. if reservation.self_configuration: reservation.short_notice = False reservation.save_and_notify() return render(request, 'kiosk/success.html', { 'new_reservation': reservation, 'customer': customer })
def make_reservation(request): # due to unexplained CSRF failures for users try a workaround http_origins = [ 'https://rea-demo.mri.psu.edu:8080', 'https://rea-demo.mri.psu.edu:8888', 'https://leo.psu.edu' ] if request.META.get('HTTP_ORIGIN') in http_origins: origin = request.META.get('HTTP_ORIGIN') referer = str(origin) + "/new_reservation/" + str( request.POST.get('tool_id')) + "/" + str( request.POST['date']) + "/" if referer != request.META.get('HTTP_REFERER'): return render(request, 'mobile/error.html', {'message': 'Unknown referer - request rejected'}) else: return render(request, 'mobile/error.html', {'message': 'Unknown origin - request rejected'}) # Create a reservation for a user. try: date = parse_date(request.POST['date']) start = localize( datetime.combine(date, parse_time(request.POST['start']))) end = localize(datetime.combine(date, parse_time(request.POST['end']))) except: return render( request, 'mobile/error.html', { 'message': 'Please enter a valid date, start time, and end time for the reservation.' }) tool = get_object_or_404(Tool, id=request.POST.get('tool_id')) # Create the new reservation: reservation = Reservation() reservation.user = request.user reservation.creator = request.user reservation.tool = tool reservation.start = start reservation.end = end reservation.short_notice = determine_insufficient_notice(tool, start) policy_problems, overridable = check_policy_to_save_reservation( request, None, reservation, request.user, False) # If there was a problem in saving the reservation then return the error... if policy_problems: return render(request, 'mobile/error.html', {'message': policy_problems[0]}) # All policy checks have passed. if request.user.is_staff: mode = request.POST['staff_charge'] if mode == "self": # make a reservation for the user and don't add a record to the ReservationProject table active_projects = request.user.active_projects() if len(active_projects) == 1: reservation.project = active_projects[0] else: try: reservation.project = Project.objects.get( id=request.POST['project_id']) except: msg = 'No project was selected. Please return to the <a href="/calendar/">calendar</a> to try again.' return render(request, 'mobile/error.html', {'message': msg}) else: # add ReservationProject entries for the customers submitted by the staff member reservation_projects = {} reservation.save() for key, value in request.POST.items(): if is_valid_field(key): attribute, separator, index = key.partition("__") index = int(index) if index not in reservation_projects: reservation_projects[index] = ReservationProject() reservation_projects[index].reservation = reservation reservation_projects[index].created = timezone.now() reservation_projects[index].updated = timezone.now() if attribute == "chosen_user": if value is not None and value != "": reservation_projects[ index].customer = User.objects.get(id=value) else: reservation.delete() return HttpResponseBadRequest( 'Please choose a user for whom the tool will be run.' ) if attribute == "chosen_project": if value is not None and value != "" and value != "-1": reservation_projects[ index].project = Project.objects.get(id=value) else: reservation.delete() return HttpResponseBadRequest( 'Please choose a project for charges made during this run.' ) for r in reservation_projects.values(): r.full_clean() r.save() else: try: reservation.project = Project.objects.get( id=request.POST['project_id']) except: if not request.user.is_staff: return render(request, 'mobile/error.html', { 'message': 'You must specify a project for your reservation' }) reservation.additional_information, reservation.self_configuration, res_conf = extract_configuration( request) # Reservation can't be short notice if the user is configuring the tool themselves. if reservation.self_configuration: reservation.short_notice = False policy_problems, overridable = check_policy_to_save_reservation( request, None, reservation, request.user, False) reservation.save() for rc in res_conf: rc.reservation = reservation rc.save() return render(request, 'mobile/reservation_success.html', {'new_reservation': reservation})