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 questions if applicable try: reservation.question_data = extract_reservation_questions( request, ReservationItemType.TOOL, tool.id, reservation.project) except RequiredUnansweredQuestionsException as e: error_dictionary["message"] = str(e) return render(request, "kiosk/error.html", error_dictionary) 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']) # Check if we are allowed to bill to project check_billing_to_project(reservation.project, request.user, reservation.reservation_item) except ProjectChargeException as e: return render(request, 'mobile/error.html', {'message': e.msg}) 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 questions if applicable try: reservation.question_data = extract_reservation_questions( request, item_type, item.id, reservation.project) except RequiredUnansweredQuestionsException as e: return render(request, 'mobile/error.html', {'message': str(e)}) reservation.save_and_notify() return render(request, 'mobile/reservation_success.html', {'new_reservation': reservation})