def browse_class(request, dept, num): numstr = str(num) book_list = Book.objects.filter(Q(course__dept=dept) & Q(course__num=num)) course = Course() courses = Course.objects.filter(Q(dept=dept) & Q(num=num)) if len(courses) > 0: course = courses[0] num_books = len(book_list) # Dictionary for displaying stuff on template dict = { 'course': course, 'showofferings': course.hasofferings(), 'book_list': book_list, 'showunoffered': course.hasunofferedbooks(), 'num_books': num_books } # Render to template return render_to_response(request, 'ptx/browsebooks.html', dict)
def process(request, step, ticket): # this function only processes POST requests if request.method != 'POST': raise PermissionDenied() step = int(step) if step == ChooseCourseForm.PROC: form = ChooseCourseForm(request.POST) if form.is_valid(): # break down the course input course = form.cleaned_data['course'] m = COURSE.match(course).groups() course_dept = m[0].upper() course_num = int(m[1]) # does it exist? if not, add it # TODO: MORE CHECKING HERE FOR INVALID DEPARTMENTS, ETC course_list = Course.objects.filter(dept__exact=course_dept, num__exact=course_num) if len(course_list) == 1: c = course_list[0] elif len(course_list) == 0: c = Course(dept=course_dept, num=course_num) c.save() else: # This can't really happen raise PermissionDenied # save the internal course id for later request.session['request_course_' + ticket] = c # show the list of books for the course return render_form(ChooseBookForm(c), '', ticket, request) else: return render_form(ChooseCourseForm(request.POST), '', ticket, request) elif step == ChooseBookForm.PROC: course = request.session['request_course_' + ticket] form = ChooseBookForm(course, request.POST) if form.is_valid(): isbn_from_db = form.cleaned_data['isbn_from_db'] isbn_from_user = form.cleaned_data['isbn_from_user'] if isbn_from_db != None: # book exists already, let the user list this book request.session['request_book_' + ticket] = isbn_from_db return render_form(RequestForm(), '', ticket, request) elif isbn_from_user != None: # check if book exists in DB, just not associated with that class if Book.objects.filter(isbn13=isbn_from_user).count() == 0: # book does not exist, let the user create it #form = AddBookForm() #form.fields['isbn13'].initial = isbn_from_user bookinfo = book_details(isbn_from_user) if bookinfo == None: return render_form(form, '', ticket, request) else: set_ticket_attr(request, ticket, 'bookinfo', bookinfo) return render_bookinfo(bookinfo, ticket, request) else: # book needs new class reference added. book = Book.objects.get(isbn13=isbn_from_user) book.course.add(course) book.save() request.session['request_book_' + ticket] = book return render_form(RequestForm(), '', ticket, request) else: # no book chosen, go back and make the user choose a book return render_form(form, '', ticket, request) else: return render_form(form, '', ticket, request) elif step == PROCESS_ADD_BOOK: bookinfo = get_ticket_attr(request, ticket, 'bookinfo') # TODO: MAKE SURE AGAIN THAT THE ISBN IS NOT ALREADY IN THE DATABASE book = Book(isbn13=bookinfo['isbn13'], isbn10=bookinfo['isbn10'], title=bookinfo['title'], desc='', author=bookinfo['author'], edition=bookinfo['edition'], year=bookinfo['year'], publisher=bookinfo['publisher'], list_price=0, imagename=bookinfo['img_name']) course = request.session['request_course_' + ticket] book.course.add(course) book.save() request.session['request_book_' + ticket] = book return render_form(RequestForm(), '', ticket, request) elif step == RequestForm.PROC: form = RequestForm(request.POST) if form.is_valid(): f = form.cleaned_data book = request.session['request_book_' + ticket] user, created = User.objects.get_or_create( net_id=request.user.username) maxprice = form.cleaned_data['maxprice'] the_request = Request(book=book, user=user, maxprice=maxprice) the_request.save() reset_request_session(request, ticket) # redirect to thank you page return HttpResponseRedirect('/request/thankyou?b=%s' % (book)) else: return render_form(form, '', ticket, request) return HttpResponse(step)