예제 #1
0
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
            } )
예제 #2
0
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
        })
예제 #3
0
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
        })
예제 #4
0
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
예제 #5
0
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
    })
예제 #6
0
def render_form(form, message, ticket, request):
    return render_to_response(request, 'ptx/offer.html', {
        'form': form,
        'proc': form.PROC,
        'message': message,
        'ticket': ticket
    })
예제 #7
0
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
        })
예제 #8
0
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)
예제 #9
0
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)
예제 #10
0
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)
예제 #11
0
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
        })
예제 #12
0
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'} )
예제 #13
0
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", {})
예제 #14
0
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", {})
예제 #15
0
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'
        })
예제 #16
0
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})
예제 #17
0
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'} )
예제 #18
0
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
        })
예제 #19
0
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'
        })
예제 #20
0
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} )
예제 #21
0
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)
예제 #22
0
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)
예제 #23
0
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)
예제 #24
0
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)
예제 #25
0
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
        })
예제 #26
0
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)
예제 #27
0
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)
예제 #28
0
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)
예제 #29
0
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)
예제 #30
0
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)
예제 #31
0
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)
예제 #32
0
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)
예제 #33
0
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)
예제 #34
0
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)
예제 #35
0
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
예제 #36
0
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)
예제 #37
0
def render_form(form, request, message=u''):
    return render_to_response(request, 'ptx/profile.html',
                              dict(form=form, message=message))
예제 #38
0
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} )
예제 #39
0
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} )
예제 #40
0
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()
예제 #41
0
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} )
예제 #42
0
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()
예제 #43
0
def render_form(form, message, ticket, request):
    return render_to_response(request, 'ptx/request.html', {'form': form, 'proc': form.PROC,
                                             'message':message, 'ticket':ticket} )
예제 #44
0
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} )
예제 #45
0
def render_form(form, request, message=u''):
    return render_to_response(request, 'ptx/profile.html',
                              dict(form=form, message=message))
예제 #46
0
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)