def wishlist(request): if not request.user.is_authenticated(): return render_to_response(request, 'ptx/needlogin.html', { 'header_text': 'Wishlist', 'redirect_url': '/wishlist'}) # Adding a book? add_book = None add_error = '' try: add_book = process_add(request, request.GET) except Book.DoesNotExist: add_error = 'The ISBN you entered does not exist' except AlreadyInWishlist: add_error = 'This book is already in your wishlist!' # Deleting a book? process_del(request, request.GET) # Render the page req_list = Request.objects.filter(user__net_id=request.user.username, status='o') return render_to_response(request, 'ptx/wishlist.html', { 'add_form': AddForm(), 'add_error': add_error, 'book': add_book, 'req_list': req_list } )
def wishlist(request): if not request.user.is_authenticated(): return render_to_response(request, 'ptx/needlogin.html', { 'header_text': 'Wishlist', 'redirect_url': '/wishlist' }) # Adding a book? add_book = None add_error = '' try: add_book = process_add(request, request.GET) except Book.DoesNotExist: add_error = 'The ISBN you entered does not exist' except AlreadyInWishlist: add_error = 'This book is already in your wishlist!' # Deleting a book? process_del(request, request.GET) # Render the page req_list = Request.objects.filter(user__net_id=request.user.username, status='o') return render_to_response( request, 'ptx/wishlist.html', { 'add_form': AddForm(), 'add_error': add_error, 'book': add_book, 'req_list': req_list })
def render_choosecourse(form_data, ticket, request): return render_to_response( request, 'ptx/offer_choosecourse.html', { 'form': ChooseCourseForm(form_data), 'proc': PROCESS_COURSE_FORM, 'ticket': ticket })
def editoffer(request, offer_id=None): # Can't do this unless logged in if not request.user.is_authenticated(): return render_to_response(request, 'ptx/needlogin.html', {'header_text': 'Edit Your Offer', 'redirect_url': '/editoffer/' + offer_id} ) # see if the offer exists try: offer = Offer.objects.get(pk=offer_id) except Offer.DoesNotExist: raise PermissionDenied # see if the offer really belongs to the logged-in user if offer.user.net_id != request.user.username: raise PermissionDenied if request.method == 'POST': form = OfferForm(request.POST) if form.is_valid(): offer.desc = form.cleaned_data['desc'] offer.price = form.cleaned_data['price'] offer.save() return HttpResponseRedirect('/account') else: return render(request, offer, request.POST) elif request.method == 'GET': return render(request, offer) else: raise PermissionDenied
def render_bookinfo(bookinfo, ticket, request): '''a special form for confirming the book information''' return render_to_response(request, 'ptx/request_bookinfo.html', { 'bookinfo': bookinfo, 'proc': PROCESS_ADD_BOOK, 'ticket': ticket })
def render_form(form, message, ticket, request): return render_to_response(request, 'ptx/offer.html', { 'form': form, 'proc': form.PROC, 'message': message, 'ticket': ticket })
def render_offerinfo(book, form_data, ticket, request): return render_to_response( request, 'ptx/offer_offerinfo.html', { 'book': book, 'form': OfferForm(form_data), 'proc': PROCESS_OFFER_FORM, 'ticket': ticket })
def classlistings(request): course_list = Course.objects.all().order_by('dept', 'num') # Dictionary for displaying stuff on template dict = {'course_list': course_list} # Render to template return render_to_response(request, 'ptx/browsebycourse.html', dict)
def help(request): # by default, open Site Overview click1 = True click2 = False dict = {'click1': click1, 'click2': click2} # Render to template return render_to_response(request, 'ptx/help.html', dict)
def render_bookinfo(book, ticket, request): '''a special form for confirming the book information''' return render_to_response( request, 'ptx/offer_bookinfo.html', { 'book': book, 'prev_proc': PROCESS_COURSE_FORM, 'proc': PROCESS_ADD_BOOK, 'ticket': ticket })
def request(request, ticket=''): if request.user.is_authenticated(): ticket = uuid.uuid4().hex return render_form(ChooseCourseForm(), '', ticket, request) else: return render_to_response(request, 'ptx/needlogin.html', {'header_text': 'Request a book', 'redirect_url': '/request'} )
def ptxlogout(request): if logged_in(request): # Delete the entire session. request.session.flush() url = request.build_absolute_uri() return login(url, act="logout") # if they have been logged out and redirected back, show them logout page return render_to_response(request, "ptx/logout.html", {})
def request(request, ticket=''): if request.user.is_authenticated(): ticket = uuid.uuid4().hex return render_form(ChooseCourseForm(), '', ticket, request) else: return render_to_response(request, 'ptx/needlogin.html', { 'header_text': 'Request a book', 'redirect_url': '/request' })
def render(request, offer, form_data=None): if form_data == None: form = OfferForm(instance=offer) else: form = OfferForm(form_data) return render_to_response(request, 'ptx/editoffer.html', { 'message': offer.user.net_id, 'book': offer.book, 'offer_id': offer.pk, 'form': form})
def offer(request, ticket=''): # TEMPORARY HACK #ticket = uuid.uuid4().hex #return render_form(ChooseCourseForm(), '', ticket, request) if request.user.is_authenticated(): ticket = uuid.uuid4().hex return render_form(ChooseCourseForm(), '', ticket, request) else: return render_to_response(request, 'ptx/needlogin.html', {'header_text': 'Offer a book', 'redirect_url': '/offer'} )
def render(request, offer, form_data=None): if form_data == None: form = OfferForm(instance=offer) else: form = OfferForm(form_data) return render_to_response( request, 'ptx/editoffer.html', { 'message': offer.user.net_id, 'book': offer.book, 'offer_id': offer.pk, 'form': form })
def offer(request, ticket=''): # TEMPORARY HACK #ticket = uuid.uuid4().hex #return render_form(ChooseCourseForm(), '', ticket, request) if request.user.is_authenticated(): ticket = uuid.uuid4().hex return render_form(ChooseCourseForm(), '', ticket, request) else: return render_to_response(request, 'ptx/needlogin.html', { 'header_text': 'Offer a book', 'redirect_url': '/offer' })
def render_choosebook(book_list, form_data, ticket, request): extended_book_list = [] for book in book_list: form = ChooseBookForm({'isbn': book.isbn13}) extended_book_list.append((book, form)) # It's pointless to show so many books at once. if len(extended_book_list) > 20: extended_book_list = [] return render_to_response(request, 'ptx/offer_choosebook.html', { 'book_list': extended_book_list, 'default_form': InputBookForm(form_data), 'proc': PROCESS_BOOK_FORM, 'ticket':ticket} )
def homepage(request): # order by id (desc) rather than date because ids are uniquely created in ascending order, # whereas dates are non-unique new_offers = Offer.objects.filter(status='o').order_by('-id') new_books_offered = [] for offer in new_offers: book = offer.book if not book in new_books_offered: new_books_offered.append(book) if len(new_books_offered) == 5: break req_with_offers = None name = None num_pending_trans = None rating = None num_open_offers = None if request.user.is_authenticated(): user, created = User.objects.get_or_create(net_id=request.user.username) wishlist = Request.objects.filter(user=user, status='o') req_with_offers = [] for req in wishlist: if req.book.hasOfferings(): req_with_offers.append(req) name = user.first_name num_pending_trans = Request.objects.filter(user=user, status='p').count() + \ Offer.objects.filter(user=user, status='p').count() num_open_offers = Offer.objects.filter(user=user, status='o').count() rating = user.getRating() # Dictionary for displaying stuff on template dict = { 'logged_in': request.user.is_authenticated(), 'name': name, 'new_books_offered': new_books_offered, 'num_pending_trans': num_pending_trans, 'req_with_offers': req_with_offers, 'num_open_offers': num_open_offers, 'rating': rating, } # Render to template return render_to_response(request, 'ptx/homepage.html', dict)
def browse_isbn(request, isbn): offer_list = Q(book__isbn13=isbn) & Q(status='o') offer_list = Offer.objects.filter(offer_list).order_by('price') num_books = len(offer_list) book = Book() books = Book.objects.filter(isbn13=isbn) if len(books) > 0: book = books[0] dict = {'book': book, 'offer_list': offer_list, 'num_books': num_books, 'logged_in': request.user.is_authenticated()} return render_to_response(request, 'ptx/browsebyisbn.html', dict)
def offer(request): # display thank you message if request.method != 'GET': raise PermissionDenied() q = request.GET if q.__contains__("b"): book_name = q.__getitem__("b") else: book_name = "" # Dictionary for displaying stuff on template dict = {'book_name': book_name} # Render to template return render_to_response(request, 'ptx/offerthankyou.html', dict)
def offer(request, ticket=''): if not request.user.is_authenticated(): return render_to_response(request, 'ptx/needlogin.html', {'header_text': 'Offer a Book', 'redirect_url': '/offer'} ) # create a new ticket for the user so that simultaneous offerings from the same # user gets handled correctly ticket = uuid.uuid4().hex if 'course' in request.GET: # automatic course processing if /offer?course=<course> is specified in the URL return process_course_form(request.GET, request, ticket) else: # standard processing return render_choosecourse(None, ticket, request)
def render_choosebook(book_list, form_data, ticket, request): extended_book_list = [] for book in book_list: form = ChooseBookForm({'isbn': book.isbn13}) extended_book_list.append((book, form)) # It's pointless to show so many books at once. if len(extended_book_list) > 20: extended_book_list = [] return render_to_response( request, 'ptx/offer_choosebook.html', { 'book_list': extended_book_list, 'default_form': InputBookForm(form_data), 'proc': PROCESS_BOOK_FORM, 'ticket': ticket })
def offer(request): # display thank you message if request.method != "GET": raise PermissionDenied() q = request.GET if q.__contains__("b"): book_name = q.__getitem__("b") else: book_name = "" # Dictionary for displaying stuff on template dict = {"book_name": book_name} # Render to template return render_to_response(request, "ptx/offerthankyou.html", dict)
def offer(request, ticket=''): if not request.user.is_authenticated(): return render_to_response(request, 'ptx/needlogin.html', { 'header_text': 'Offer a Book', 'redirect_url': '/offer' }) # create a new ticket for the user so that simultaneous offerings from the same # user gets handled correctly ticket = uuid.uuid4().hex if 'course' in request.GET: # automatic course processing if /offer?course=<course> is specified in the URL return process_course_form(request.GET, request, ticket) else: # standard processing return render_choosecourse(None, ticket, request)
def browse_isbn(request, isbn): offer_list = Q(book__isbn13=isbn) & Q(status='o') offer_list = Offer.objects.filter(offer_list).order_by('price') num_books = len(offer_list) book = Book() books = Book.objects.filter(isbn13=isbn) if len(books) > 0: book = books[0] dict = { 'book': book, 'offer_list': offer_list, 'num_books': num_books, 'logged_in': request.user.is_authenticated() } return render_to_response(request, 'ptx/browsebyisbn.html', dict)
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 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 profile(request): if not request.user.is_authenticated(): return render_to_response(request, 'ptx/needlogin.html', { 'header_text': 'Complete User Profile', 'redirect_url': '/profile' }) if request.method == 'POST': form = CompleteUserForm(request.POST) if form.is_valid(): # break down the course input first_name = form.cleaned_data['first_name'] last_name = form.cleaned_data['last_name'] dorm_name = form.cleaned_data['dorm_name'] dorm_room = form.cleaned_data['dorm_room'] user, created = User.objects.get_or_create( net_id=request.user.username) if first_name != '': user.first_name = first_name if last_name != '': user.last_name = last_name if dorm_name != '': user.dorm_name = dorm_name if dorm_room != '': user.dorm_room = dorm_room user.save() return HttpResponseRedirect('/account') else: message = u'' if request.GET.get("n") == "true": message = u"This is your first time logging in. Please fill out this basic information that will be used to contact you. It will only be shared with people who buy your books and the people that you buy from." user, created = User.objects.get_or_create( net_id=request.user.username) form = CompleteUserForm(instance=user) return render_form(form, request, message)
def search(request): """Given a search query argument, treats each token as another filter on the set of all books. Two types of filters are recognized: ISBN and strings.""" book_list = Book.objects.all() st = request.GET.get("s") if st: # Progressively whittle down the entire book_list. for token in st.split(): clean_isbn = cleanisbn(token) if len(clean_isbn) > 0: query = Q(isbn13__icontains=clean_isbn) query = query | Q(isbn10__icontains=clean_isbn) else: query = Q(title__icontains=token) query = query | Q(author__icontains=token) query = query | Q(course__dept__icontains=token) query = query | Q(course__num__icontains=token) book_list = book_list.filter(query) book_list = book_list.distinct().order_by('title') showofferings = any(book.hasOfferings() for book in book_list) showunoffered = any(not book.hasOfferings() for book in book_list) # Dictionary for displaying stuff on template data = { 'book_list': book_list, 'showofferings': showofferings, 'showunoffered': showunoffered, 'num_books': len(book_list), 'st': st } # Render to template return render_to_response(request, 'ptx/browsebooks.html', data)
def profile(request): if not request.user.is_authenticated(): return render_to_response(request, 'ptx/needlogin.html', {'header_text': 'Complete User Profile', 'redirect_url': '/profile'} ) if request.method == 'POST': form = CompleteUserForm(request.POST) if form.is_valid(): # break down the course input first_name = form.cleaned_data['first_name'] last_name = form.cleaned_data['last_name'] dorm_name = form.cleaned_data['dorm_name'] dorm_room = form.cleaned_data['dorm_room'] user, created = User.objects.get_or_create(net_id=request.user.username) if first_name != '': user.first_name = first_name if last_name != '': user.last_name = last_name if dorm_name != '': user.dorm_name = dorm_name if dorm_room != '': user.dorm_room = dorm_room user.save() return HttpResponseRedirect('/account') else: message = u'' if request.GET.get("n") == "true": message = u"This is your first time logging in. Please fill out this basic information that will be used to contact you. It will only be shared with people who buy your books and the people that you buy from." user, created = User.objects.get_or_create(net_id=request.user.username) form = CompleteUserForm(instance=user) return render_form(form, request, message)
def search(request): """Given a search query argument, treats each token as another filter on the set of all books. Two types of filters are recognized: ISBN and strings.""" book_list = Book.objects.all() st = request.GET.get("s") if st: # Progressively whittle down the entire book_list. for token in st.split(): clean_isbn = cleanisbn(token) if len(clean_isbn) > 0: query = Q(isbn13__icontains=clean_isbn) query = query | Q(isbn10__icontains=clean_isbn) else: query = Q(title__icontains=token) query = query | Q(author__icontains=token) query = query | Q(course__dept__icontains=token) query = query | Q(course__num__icontains=token) book_list = book_list.filter(query) book_list = book_list.distinct().order_by('title') showofferings = any(book.hasOfferings() for book in book_list) showunoffered = any(not book.hasOfferings() for book in book_list) # Dictionary for displaying stuff on template data = {'book_list': book_list, 'showofferings': showofferings, 'showunoffered': showunoffered, 'num_books': len(book_list), 'st': st} # Render to template return render_to_response(request, 'ptx/browsebooks.html', data)
def editoffer(request, offer_id=None): # Can't do this unless logged in if not request.user.is_authenticated(): return render_to_response( request, 'ptx/needlogin.html', { 'header_text': 'Edit Your Offer', 'redirect_url': '/editoffer/' + offer_id }) # see if the offer exists try: offer = Offer.objects.get(pk=offer_id) except Offer.DoesNotExist: raise PermissionDenied # see if the offer really belongs to the logged-in user if offer.user.net_id != request.user.username: raise PermissionDenied if request.method == 'POST': form = OfferForm(request.POST) if form.is_valid(): offer.desc = form.cleaned_data['desc'] offer.price = form.cleaned_data['price'] offer.save() return HttpResponseRedirect('/account') else: return render(request, offer, request.POST) elif request.method == 'GET': return render(request, offer) else: raise PermissionDenied
def myaccount(request): if not request.user.is_authenticated(): return render_to_response(request, 'ptx/needlogin.html', {'header_text': 'My PTX Account', 'redirect_url': '/account'} ) # one of these must be set to true somewhere. clickid = 1 if request.method == 'GET': tabid = request.GET.get("t") if tabid == "basicinfo": clickid = 1 elif tabid == "pending": clickid = 3 today = date.today() user, created = User.objects.get_or_create(net_id=request.user.username) # has this user posted a change to his account if request.method == 'POST': q = request.POST if "delete_open" in q: # user remove an open offer offerid = q["open_offerid"] offers = Q(id=offerid) & Q(user__net_id=user.net_id) offers = Offer.objects.filter(offers) if len(offers) > 0: offer = offers[0] offer.delete() elif "edit_open" in q: # user wants to edit an offer. offerid = q["open_offerid"] return HttpResponseRedirect("/editoffer/" + offerid) elif "pending_closed" in q: # user closed a pending offer offerid = q["pending_offerid"] offers = Q(id=offerid) & Q(user__net_id=user.net_id) offers = Offer.objects.filter(offers) if len(offers) > 0: offer = offers[0] offer.status = 'c' offer.date_closed = today offer.save() # record this in the user's dollars earned. earned = user.dollars_earned user.dollars_earned = earned + offer.price user.save() clickid = 3 elif "pending_opened" in q: # user reopened a pending offer offerid = q["pending_offerid"] offers = Q(id=offerid) & Q(user__net_id=user.net_id) offers = Offer.objects.filter(offers) if len(offers) > 0: offer = offers[0] offer.status = 'o' offer.save() clickid = 3 elif "pending_req_closed" in q: # user closed a pending request requestid = q["pending_requestid"] offers = Q(id=requestid) & Q(user__net_id=user.net_id) requests = Request.objects.filter(offers) if len(requests) > 0: req = requests[0] req.status = 'c' req.date_closed = today req.save() # record this in dollars spent spent = user.dollars_spent user.dollars_spent = spent + req.maxprice user.save() clickid = 3 elif "pending_req_opened" in q: # user put request back onto wish list requestid = q["pending_requestid"] offers = Q(id=requestid) & Q(user__net_id=user.net_id) requests = Request.objects.filter(offers) if len(requests) > 0: req = requests[0] req.status = 'o' req.save() clickid = 3 elif "delete_req" in q: # user deleted a request requestid = q["request_id"] offers = Q(id=requestid) & Q(user__net_id=user.net_id) reqs = Request.objects.filter(offers) if len(reqs) > 0: req = reqs[0] req.delete() elif "rate_buyer_up" in q: # user rated buyer thumbs up clickid = 3 if "rater_pending_offer_id" in q: offerid = q["rater_pending_offer_id"] else: offerid = q["rater_offer_id"] offer = Offer.objects.get(id=offerid) if offer != None: offer.rate_buyer(1, user.net_id) elif "rate_buyer_down" in q: # user rated buyer thumbs down clickid = 3 if "rater_pending_offer_id" in q: offerid = q["rater_pending_offer_id"] else: offerid = q["rater_offer_id"] offer = Offer.objects.get(id=offerid) if offer != None: offer.rate_buyer(-1, user.net_id) elif "rate_seller_up" in q: # user rated seller thumbs up clickid = 3 if "rater_pending_request_id" in q: requestid = q["rater_pending_request_id"] else: requestid = q["rater_request_id"] req = Request.objects.get(id=requestid) if req != None: if not req.has_rated: offer = req.offer offer.rate_seller(1, user.net_id) elif "rate_seller_down" in q: # user rated seller thumbs down clickid = 3 if "rater_pending_request_id" in q: requestid = q["rater_pending_request_id"] else: requestid = q["rater_request_id"] req = Request.objects.get(id=requestid) if req != None: if not req.has_rated: offer = req.offer offer.rate_seller(-1, user.net_id) request_list = \ Request.objects.filter(Q(user__net_id=user.net_id) & Q(status='o')).order_by('date_open') pending_requests = \ Q(user__net_id=user.net_id) & \ (Q(status='p') \ | Q(offer__status='p') \ | Q(has_rated=False) \ | Q(offer__has_rated=False)) pending_requests = \ Request.objects.filter(pending_requests).order_by('date_pending') completed_requests = \ Q(user__net_id=user.net_id) & \ Q(status='c') & \ Q(offer__status='c') & \ Q(has_rated=True) & \ Q(offer__has_rated=True) completed_requests = \ Request.objects.filter(completed_requests).order_by('date_closed') open_offers = \ Offer.objects.filter(Q(status='o') & Q(user__net_id=user.net_id)).order_by('date_open') pending_offers = \ Offer.objects.filter(Q(status='p') & Q(user__net_id=user.net_id)).order_by('date_pending') completed_offers = \ Offer.objects.filter(Q(status='c') & Q(user__net_id=user.net_id)).order_by('date_closed') has_open = len(open_offers) > 0 has_pending = len(pending_offers) > 0 # Pending and completed offers are slightly more nuanced than # status="p" it seems. Consult Offer.is_pending in ptx.models # for more details. has_pending = has_pending or any(o.is_pending() for o in completed_offers) has_completed = not all(o.is_pending() for o in completed_offers) has_requests = len(request_list) > 0 has_pending_reqs = len(pending_requests) > 0 has_completed_reqs = len(completed_requests) > 0 dict = {'user_data': user, 'request_list': request_list, 'open_offers': open_offers, 'pending_offers': pending_offers, 'completed_offers': completed_offers, 'pending_requests': pending_requests, 'completed_requests': completed_requests, 'has_open_offers': has_open, 'has_pending_offers': has_pending, 'has_completed_offers': has_completed, 'has_requests': has_requests, 'has_pending_reqs': has_pending_reqs, 'has_completed_reqs': has_completed_reqs, 'clickid': clickid, } return render_to_response(request, 'ptx/myaccount.html', dict)
def render_form(form, request, message=u''): return render_to_response(request, 'ptx/profile.html', dict(form=form, message=message))
def render_bookinfo(book, ticket, request): '''a special form for confirming the book information''' return render_to_response(request, 'ptx/offer_bookinfo.html', {'book': book, 'prev_proc': PROCESS_COURSE_FORM, 'proc': PROCESS_ADD_BOOK, 'ticket':ticket} )
def render_choosecourse(form_data, ticket, request): return render_to_response(request, 'ptx/offer_choosecourse.html', { 'form': ChooseCourseForm(form_data), 'proc': PROCESS_COURSE_FORM, 'ticket':ticket} )
def process(request, step, ticket): # as a security measure, this function only processes POST requests if request.method != 'POST': raise PermissionDenied() step = int(step) if step == PROCESS_COURSE_FORM: return process_course_form(request.POST, request, ticket) elif step == PROCESS_BOOK_FORM: form = ChooseBookForm(request.POST) course = get_ticket_attr(request, ticket, 'course') book_list = Book.objects.filter(course = course) if not form.is_valid(): # no book chosen, go back and make the user choose a book return render_choosebook(book_list, request.POST, ticket, request) isbn13 = form.cleaned_data['isbn'] book = Book.objects.get(isbn13=isbn13) set_ticket_attr(request, ticket, 'book', book) return render_offerinfo(book, None, ticket, request) elif step == PROCESS_OFFER_FORM: form = OfferForm(request.POST) book = get_ticket_attr(request, ticket, 'book') course = get_ticket_attr(request, ticket, 'course') user, created = User.objects.get_or_create(net_id=request.user.username) if not form.is_valid(): return render_offerinfo(book, request.POST, ticket, request) # associate the book and the course book.course.add(course) book.save() # save the offer f = form.cleaned_data offer = Offer( book=book, user=user, status='o', type='s', # SELLING ONLY allow_bids=False, # NO BIDS price=f['price'], condition=f['condition'], desc=f['desc'], semester=f['semester'], year=f['year']) offer.save() # clean the ticket data so that user doesn't add another listing if he/she refreshes the page reset_offer_session(request, ticket) # show a little confirmation return render_to_response(request, u'ptx/offerthankyou.html', {'offer': offer, 'course': course}) else: # a fallback for posts to invalid steps raise PermissionDenied()
def render_offerinfo(book, form_data, ticket, request): return render_to_response(request, 'ptx/offer_offerinfo.html', { 'book': book, 'form': OfferForm(form_data), 'proc': PROCESS_OFFER_FORM, 'ticket': ticket} )
def process(request, step, ticket): # as a security measure, this function only processes POST requests if request.method != 'POST': raise PermissionDenied() step = int(step) if step == PROCESS_COURSE_FORM: return process_course_form(request.POST, request, ticket) elif step == PROCESS_BOOK_FORM: form = ChooseBookForm(request.POST) course = get_ticket_attr(request, ticket, 'course') book_list = Book.objects.filter(course=course) if not form.is_valid(): # no book chosen, go back and make the user choose a book return render_choosebook(book_list, request.POST, ticket, request) isbn13 = form.cleaned_data['isbn'] book = Book.objects.get(isbn13=isbn13) set_ticket_attr(request, ticket, 'book', book) return render_offerinfo(book, None, ticket, request) elif step == PROCESS_OFFER_FORM: form = OfferForm(request.POST) book = get_ticket_attr(request, ticket, 'book') course = get_ticket_attr(request, ticket, 'course') user, created = User.objects.get_or_create( net_id=request.user.username) if not form.is_valid(): return render_offerinfo(book, request.POST, ticket, request) # associate the book and the course book.course.add(course) book.save() # save the offer f = form.cleaned_data offer = Offer( book=book, user=user, status='o', type='s', # SELLING ONLY allow_bids=False, # NO BIDS price=f['price'], condition=f['condition'], desc=f['desc'], semester=f['semester'], year=f['year']) offer.save() # clean the ticket data so that user doesn't add another listing if he/she refreshes the page reset_offer_session(request, ticket) # show a little confirmation return render_to_response(request, u'ptx/offerthankyou.html', { 'offer': offer, 'course': course }) else: # a fallback for posts to invalid steps raise PermissionDenied()
def render_form(form, message, ticket, request): return render_to_response(request, 'ptx/request.html', {'form': form, 'proc': form.PROC, 'message':message, 'ticket':ticket} )
def render_bookinfo(bookinfo, ticket, request): '''a special form for confirming the book information''' return render_to_response(request, 'ptx/request_bookinfo.html', {'bookinfo': bookinfo, 'proc': PROCESS_ADD_BOOK, 'ticket':ticket} )
def myaccount(request): if not request.user.is_authenticated(): return render_to_response(request, 'ptx/needlogin.html', { 'header_text': 'My PTX Account', 'redirect_url': '/account' }) # one of these must be set to true somewhere. clickid = 1 if request.method == 'GET': tabid = request.GET.get("t") if tabid == "basicinfo": clickid = 1 elif tabid == "pending": clickid = 3 today = date.today() user, created = User.objects.get_or_create(net_id=request.user.username) # has this user posted a change to his account if request.method == 'POST': q = request.POST if "delete_open" in q: # user remove an open offer offerid = q["open_offerid"] offers = Q(id=offerid) & Q(user__net_id=user.net_id) offers = Offer.objects.filter(offers) if len(offers) > 0: offer = offers[0] offer.delete() elif "edit_open" in q: # user wants to edit an offer. offerid = q["open_offerid"] return HttpResponseRedirect("/editoffer/" + offerid) elif "pending_closed" in q: # user closed a pending offer offerid = q["pending_offerid"] offers = Q(id=offerid) & Q(user__net_id=user.net_id) offers = Offer.objects.filter(offers) if len(offers) > 0: offer = offers[0] offer.status = 'c' offer.date_closed = today offer.save() # record this in the user's dollars earned. earned = user.dollars_earned user.dollars_earned = earned + offer.price user.save() clickid = 3 elif "pending_opened" in q: # user reopened a pending offer offerid = q["pending_offerid"] offers = Q(id=offerid) & Q(user__net_id=user.net_id) offers = Offer.objects.filter(offers) if len(offers) > 0: offer = offers[0] offer.status = 'o' offer.save() clickid = 3 elif "pending_req_closed" in q: # user closed a pending request requestid = q["pending_requestid"] offers = Q(id=requestid) & Q(user__net_id=user.net_id) requests = Request.objects.filter(offers) if len(requests) > 0: req = requests[0] req.status = 'c' req.date_closed = today req.save() # record this in dollars spent spent = user.dollars_spent user.dollars_spent = spent + req.maxprice user.save() clickid = 3 elif "pending_req_opened" in q: # user put request back onto wish list requestid = q["pending_requestid"] offers = Q(id=requestid) & Q(user__net_id=user.net_id) requests = Request.objects.filter(offers) if len(requests) > 0: req = requests[0] req.status = 'o' req.save() clickid = 3 elif "delete_req" in q: # user deleted a request requestid = q["request_id"] offers = Q(id=requestid) & Q(user__net_id=user.net_id) reqs = Request.objects.filter(offers) if len(reqs) > 0: req = reqs[0] req.delete() elif "rate_buyer_up" in q: # user rated buyer thumbs up clickid = 3 if "rater_pending_offer_id" in q: offerid = q["rater_pending_offer_id"] else: offerid = q["rater_offer_id"] offer = Offer.objects.get(id=offerid) if offer != None: offer.rate_buyer(1, user.net_id) elif "rate_buyer_down" in q: # user rated buyer thumbs down clickid = 3 if "rater_pending_offer_id" in q: offerid = q["rater_pending_offer_id"] else: offerid = q["rater_offer_id"] offer = Offer.objects.get(id=offerid) if offer != None: offer.rate_buyer(-1, user.net_id) elif "rate_seller_up" in q: # user rated seller thumbs up clickid = 3 if "rater_pending_request_id" in q: requestid = q["rater_pending_request_id"] else: requestid = q["rater_request_id"] req = Request.objects.get(id=requestid) if req != None: if not req.has_rated: offer = req.offer offer.rate_seller(1, user.net_id) elif "rate_seller_down" in q: # user rated seller thumbs down clickid = 3 if "rater_pending_request_id" in q: requestid = q["rater_pending_request_id"] else: requestid = q["rater_request_id"] req = Request.objects.get(id=requestid) if req != None: if not req.has_rated: offer = req.offer offer.rate_seller(-1, user.net_id) request_list = \ Request.objects.filter(Q(user__net_id=user.net_id) & Q(status='o')).order_by('date_open') pending_requests = \ Q(user__net_id=user.net_id) & \ (Q(status='p') \ | Q(offer__status='p') \ | Q(has_rated=False) \ | Q(offer__has_rated=False)) pending_requests = \ Request.objects.filter(pending_requests).order_by('date_pending') completed_requests = \ Q(user__net_id=user.net_id) & \ Q(status='c') & \ Q(offer__status='c') & \ Q(has_rated=True) & \ Q(offer__has_rated=True) completed_requests = \ Request.objects.filter(completed_requests).order_by('date_closed') open_offers = \ Offer.objects.filter(Q(status='o') & Q(user__net_id=user.net_id)).order_by('date_open') pending_offers = \ Offer.objects.filter(Q(status='p') & Q(user__net_id=user.net_id)).order_by('date_pending') completed_offers = \ Offer.objects.filter(Q(status='c') & Q(user__net_id=user.net_id)).order_by('date_closed') has_open = len(open_offers) > 0 has_pending = len(pending_offers) > 0 # Pending and completed offers are slightly more nuanced than # status="p" it seems. Consult Offer.is_pending in ptx.models # for more details. has_pending = has_pending or any(o.is_pending() for o in completed_offers) has_completed = not all(o.is_pending() for o in completed_offers) has_requests = len(request_list) > 0 has_pending_reqs = len(pending_requests) > 0 has_completed_reqs = len(completed_requests) > 0 dict = { 'user_data': user, 'request_list': request_list, 'open_offers': open_offers, 'pending_offers': pending_offers, 'completed_offers': completed_offers, 'pending_requests': pending_requests, 'completed_requests': completed_requests, 'has_open_offers': has_open, 'has_pending_offers': has_pending, 'has_completed_offers': has_completed, 'has_requests': has_requests, 'has_pending_reqs': has_pending_reqs, 'has_completed_reqs': has_completed_reqs, 'clickid': clickid, } return render_to_response(request, 'ptx/myaccount.html', dict)