Exemplo n.º 1
0
def category(request, slug, filter):
    category = slug and get_object_or_404(Category, slug=slug)

    if 'genre' in request.GET:
        genre = request.GET.get('genre', '*')
        try:
            request.session['filter/genre'] = Genre.objects.get(pk=int(genre))
        except:
            request.session['filter/genre'] = None
        return redirect(request.META['PATH_INFO'])
    
    if 'p' in request.GET:
        try:
            page = int(request.GET['p'])
        except:
            return redirect(request.META['PATH_INFO'])
    else:
        page = 1
    genres = category.list_genres() if category else Genre.objects.all()[:]
    genre = request.session.get('filter/genre')
    if genre and (genre not in genres):
        genre = None

    # TODO: resolve me!    
    genres = genres[:15]

    auto_filter = False if filter else True
    filter = (filter, dict(CATALOG_FILTERS).get(filter)) if filter else CATALOG_FILTERS[0]
    
    featured_games = FeaturedGame.get(category, request)
#    if category:
#        featured_games = FeaturedGame.get(category)
#    else:
#        featured_games = CatalogBanner.get()
    
    if category: 
        objects = Item.list_by_category(category, genre)
    else:
        objects = Item.list_all(genre)

    q = request.GET.get('q')
    if q:
        objects = quick_game_finder(objects, q)
    else:
        def get_objects(*args, **kwargs):
            filter = kwargs.get('filter')
            if category or not request.user.is_authenticated():
                qs = objects.order_by(*args)
                if filter:
                    qs = qs.filter(filter)
                return qs
            else:
                own_consoles = request.user.get_profile().get_owned_systems()
                o1 = objects.filter(category__in=own_consoles).order_by(*args)
                if filter: o1 = o1.filter(filter)
                o2 = objects.exclude(category__in=own_consoles).order_by(*args)
                if filter: o2 = o2.filter(filter)
                return list(o1) + list(o2)
                
        
        f = filter and filter[0]
        if f == 'best-sellers':
            date_x = datetime.now() - timedelta(60)
            filter = Q(release_date__lte=datetime.now()) & Q(release_date__gte=date_x) & Q(sold_amount__gt=0)
            objects = get_objects('-sold_amount', '-release_date', 'id', filter=filter)
        elif f == 'top-rentals':
            date_x = datetime.now() - timedelta(60)
            filter = Q(rent_flag=True) & Q(release_date__lte=datetime.now()) & Q(release_date__gte=date_x) & Q(rent_amount__gt=0)
            objects = get_objects('-rent_amount', '-release_date', 'id', filter=filter)
        elif f == 'top-trades':
#            date_x = datetime.now() - timedelta(60)
#            filter = Q(trade_flag=True) & Q(release_date__lte=datetime.now()) & Q(release_date__gte=date_x) & Q(trade_amount__gt=0)
            filter = Q(trade_flag=True) & Q(release_date__lte=datetime.now()) & Q(trade_amount__gt=0)
            objects = get_objects('-trade_amount', '-release_date', 'id', filter=filter)
        elif f == 'new-releases':
            date_x = datetime.now() - timedelta(60)
            objects = objects.filter(release_date__gt=date_x, release_date__lte=datetime.now()).order_by('-release_date')
            if not category and request.user.is_authenticated():
                objects = objects.filter(release_date__gt=date_x, release_date__lte=datetime.now())
                own_consoles = request.user.get_profile().get_owned_systems()
                o1 = objects.filter(category__in=own_consoles)
                o2 = objects.exclude(category__in=own_consoles)
                objects = list(o1) + list(o2)
        else:
            seed = request.session.get('catalog-random-seed', random.random())
            if page == 1:
                seed = random.random()
            request.session['catalog-random-seed'] = seed
            request.session.save()
                
            random.seed(seed)

            if f == 'coming-soon':
#                date_x = datetime.now() + timedelta(30)
#                objects = objects.filter(Q(release_date__gt=datetime.now()) & Q(release_date__lte=date_x))
                objects = objects.filter(release_date__gt=datetime.now())

            if category or not request.user.is_authenticated():
                objects = list(objects)
            else:
                own_consoles = request.user.get_profile().get_owned_systems().order_by('-release_date', 'id')
                o1 = list(objects.filter(category__in=own_consoles))
                o2 = list(objects.exclude(category__in=own_consoles))
#                random.shuffle(o1)
#                random.shuffle(o2)
                objects = o1 + o2 

    paginator = Paginator(objects, settings.CATALOG_ITEMS_AMOUNT, 5)
    try:
        current_page = paginator.page(page)
    except Exception, e:
        debug(e)
        raise Http404()