예제 #1
0
def wimgw(request):
    if request.is_ajax():
        if 'wimgw' in request.GET:
            return render_to_response('partials/wimgw.html', get_wimgw_context(request), RequestContext(request))
        elif 'carousel' in request.GET:
            carousel = request.GET['carousel']
            if carousel not in ['rent', 'trade', 'buy']:
                return HttpResponseBadRequest()
            if 'c' in request.GET:
                category = get_object_or_404(Category, slug=request.GET['c'])
            else:
                category = None
            carousel = {
                'trade': ('hottest_tradeins_carousel', {
                    'hot_trades': Item.list_all(category=category).filter(trade_flag=True, trade_price__gt=0).order_by('-trade_amount', 'id')[:20],}),
                'rent': ('most_rentals_carousel', {
                    'most_rentals': Item.list_all(category=category).filter(rent_flag=True).order_by('-rent_amount', 'id')[:20],}),
                'buy': ('best_sellers_carousel', {
                    'best_sellers': Item.list_hottest_selling(category=category)}),
            }[carousel]
            return render_to_response('partials/wimgw/%s.html' % carousel[0],
                                      carousel[1], RequestContext(request))

    q = None
    current_category = None
    objects = Item.list_all()
    applied_filters = 2
    if request.is_ajax():
        if 'q' in request.GET:
            q = request.GET['q']
            objects = Item.search_by_keyword(q).filter(trade_flag=True, trade_price__gt=0)

        c = request.GET.get('c', '')
        if c:
            objects = objects.filter(category__slug=c)
            current_category = Category.objects.get(slug=c)

        g = request.GET.get('g', '')
        if g:
            applied_filters += 1
            g = map(int, g.split(','))
            ff = map(lambda x: Q(genre_list__contains=Genre.objects.get(id=x).name), g)
            objects = objects.filter(reduce(operator.or_, ff))
        y = request.GET.get('y', '')
        if y:
            applied_filters += 1
            y = map(int, y.split(','))
            ff = map(lambda x: Q(release_date__year=x), y)
            objects = objects.filter(reduce(operator.or_, ff))
        r = request.GET.get('r', '')
        if r:
            applied_filters += 1
            r = map(int, r.split(','))
            ff = map(lambda x: Q(ratio__gte=x, ratio__lt=x+1), r)
            objects = objects.filter(reduce(operator.or_, ff))
        pr = request.GET.get('pr', '')
        if pr:
            applied_filters += 1
            rr = [('0.01', '20'), ('20', '50'), ('50', '10000')]
            pr = set(map(int, pr.split(',')))
            if 3 in pr:
                show_used = True
                pr.remove(3)
            else:
                show_used = False
            if pr:
                ff = map(lambda x: Q(retail_price_new__gte=rr[x][0], retail_price_new__lt=rr[x][1]) | Q(retail_price_used__gte=rr[x][0], retail_price_used__lt=rr[x][1]), pr)
                objects = objects.filter(reduce(operator.or_, ff))
            if show_used:
                objects = objects.filter(pre_owned=True)
        a = request.GET.get('a', '')
        if a:
            applied_filters += 1
            a = map(int, a.split(','))
            if 100 in a:
                ff = [Q(top_rental=True)]
            else:
                ff = []
            ff += map(lambda x: Q(rent_status=x), a)
            objects = objects.filter(reduce(operator.or_, ff))
        else:
            objects = objects.exclude(rent_status=ItemRentStatus.NotRentable)
        t = request.GET.get('t', '')
        if t:
            applied_filters += 1
            rr = [15, 25, 35]
            t = set(map(int, t.split(',')))
            if 100 in t:
                wimgw = True
                t.remove(100)
            else:
                wimgw = False
            if t:
                ff = map(lambda x: Q(trade_price__gte=rr[x], trade_flag=True, release_date__lte=datetime.now()), t)
                objects = objects.filter(reduce(operator.or_, ff))
        e = request.GET.get('e', '')
        if e:
            applied_filters += 1
            e = map(int, e.split(','))
            ff = map(lambda x: Q(rating=x), e)
            objects = objects.filter(reduce(operator.or_, ff))
        cs = request.GET.get('cs', '')
        if cs:
            applied_filters += 1
            cs = int(cs)
            today = datetime.today()
            if cs == 0:
                objects = objects.filter(release_date__gt=today)
            elif cs == 1:
                objects = objects.filter(release_date__gt=today, release_date__lte=today + timedelta(30))
            elif cs == 2:
                objects = objects.filter(release_date__gt=today + timedelta(30), release_date__lte=today + timedelta(60))
            objects = objects.order_by('release_date')


    if 'p' in request.GET:
        page = request.GET['p'].lower()
        if page != 'show all':
            try:
                page = int(page)
            except:
                return redirect(request.META['PATH_INFO'])
        elif applied_filters < 2:
            page = 1
    else:
        page = 1

    items_found = objects.count()

    if page != 'show all':
        paginator = Paginator(objects, 16, 4)
        try:
            current_page = paginator.page(page)
        except Exception, _e:
            raise Http404()
        objects = current_page.object_list
예제 #2
0
            'count': all.filter(release_date__gt=today, release_date__lte=today + timedelta(30)).count(),
        }, {
            'id': 2,
            'name': 'Next Month',
            'count': all.filter(release_date__gt=today + timedelta(30), release_date__lte=today + timedelta(60)).count(),
        }]

        """offer terms"""
        try:
            offer_msg =  OfferTerm.objects.get(type=OfferTerm.BUY).text
        except:
            offer_msg = None
        return {
            'page': current_page,
            'page_range': calc_paginator_ranges(paginator, page),
            'best_sellers': Item.list_hottest_selling(),
            'genres': genres,
            'years': years,
            'prices': prices,
            'ratings': ratings,
            'esrb': esrb,
            'coming': coming,
            'all_games_count': all_games_count,
            'offer_msg':offer_msg
        }


@simple_view('intro/rent2.html')
def rent_intro2(request):
#    if not settings.DEBUG and not request.META.get('HTTP_REFERER', None):
#        return redirect('rent_intro')