Esempio n. 1
0
def all_specials(request, service_name):
    if not service_name:
        return dict(redirect=reverse('catalog:all-specials',
                                     kwargs=dict(service_name=Service.objects.all()[0].codename)))
    try:
        service = Service.objects.get(codename=service_name)
    except Service.DoesNotExist:
        service = None
    city_id = request.session.get('city', None)
    if not city_id:
        try:
            city_id = request.user.city.id
        except AttributeError:
            return dict(redirect=reverse('index'))
    specials = Special.objects.filter(is_active=True, owner__city__id=city_id)
    if service:
        specials = specials.filter(owner__service=service)
    page = request.GET.get('page', '1')
    page = int(page) if page.isdigit() else 1

    specials = paginate(specials, page,
                        pages=settings.SPECIALS_OBJECTS_ON_PAGE)
    dt = {'specials': specials, 'services': Service.objects.all(),
          'service_name': service_name}
    if settings.SAUSAGE_SCROLL_ENABLE and int(page) != 1:
        dt.update({'_template': 'catalog/include/specials.html'})
    return dt
Esempio n. 2
0
def service_partner_specials(request, pk):
    dt = get_service_data(request, pk)
    items = dt['items']
    items = items.filter(is_special_active=True)
    page = request.GET.get('page', 1)
    items = paginate(items, page, pages=settings.ITEMS_ON_PAGE)
    dt['items'] = items
    return dt
Esempio n. 3
0
def service_page(request, pk, title='', category_pk=None):
    dt = get_service_data(
        request, pk=pk, title=title, category_pk=category_pk
    )
    items = dt['items']
    items = items.order_by('container__weight', 'weight', '-id')
    page = request.GET.get('page', 1)
    items = paginate(items, page, pages=settings.ITEMS_ON_PAGE)
    dt['items'] = items
    if settings.SAUSAGE_SCROLL_ENABLE and int(page) != 1:
        dt.update({'_template': 'catalog/include/service_page_items.html'})
    return dt
Esempio n. 4
0
def index(request):
    posts = Post.objects.all()
    page = request.GET.get('page', 1)
    services = posts.values('type__service').distinct()
    posts = paginate(posts, page, pages=settings.DEFAULT_PAGES_COUNT)

    #c = posts.count()
    #_posts = []
    #_posts.append(posts[c/2:])
    #_posts.append(posts[:c/2])
    dt = {'posts': posts, 'services': services}
    if settings.SAUSAGE_SCROLL_ENABLE:
        if int(page) != 1:
            dt.update({'_template': 'blog/include/posts_index.html'})
    return dt
Esempio n. 5
0
def category(request, pk):
    category = get_object_or_404(PostType, pk=pk)
    posts = Post.objects.filter(type=category)

    services = posts.values('type__service').distinct()
    page = request.GET.get('page', 1)
    posts = paginate(posts, page, pages=settings.DEFAULT_PAGES_COUNT)

    #_posts = []
    #c = posts.count()
    #_posts.append(posts[c/2:])
    #_posts.append(posts[:c/2])
    dt = {
        'posts': posts, 'services': services,
        'category': category
    }
    if settings.SAUSAGE_SCROLL_ENABLE:
        if int(page) != 1:
            dt.update({'_template': 'blog/include/posts_index.html'})
    return dt
Esempio n. 6
0
def search(request):
    q = request.GET.get('q', '')
    if q:
        posts = (
            Post.objects.filter(title__icontains=q) |
            Post.objects.filter(announce__icontains=q) |
            Post.objects.filter(content__icontains=q)
        )
    else:
        posts = Post.objects.all()
    page = request.GET.get('page', 1)
    services = posts.values('type__service').distinct()
    posts = paginate(posts, page, pages=settings.DEFAULT_PAGES_COUNT)
    #c = posts.count()
    #_posts = []
    #_posts.append(posts[c/2:])
    #_posts.append(posts[:c/2])
    dt = {'posts': posts, 'G': request.GET, 'search': True, 'services': services}
    if settings.SAUSAGE_SCROLL_ENABLE:
        if int(page) != 1:
            dt.update({'_template': 'blog/include/posts_index.html'})
    return dt
Esempio n. 7
0
def catalog_list(request, service_pk=0, codename='', is_special=False):
    service = (
        get_object_or_None(Service, pk=service_pk)
        or get_object_or_None(Service, codename=codename)
    )
    search_type = request.GET.get('search-type', 0)
    is_special = request.GET.get('is_special', is_special)
    cardpay = request.GET.get('cardpay', False)

    # container_list = request.GET.getlist('type') or None
    categories_list = request.GET.getlist('type', [])
    categories_list = categories_list if all(categories_list) else []

    minimal_cost = request.GET.get('minimal_cost', 0)
    title = request.GET.get('title', '')
    by_rating = request.GET.get('by_rating', False)
    nlat, mlat, nlng, mlng = map(request.GET.get, ['nlat', 'mlat', 'nlng',
                                                   'mlng'])

    free_deliver = request.GET.get('free_deliver', False)
    state = request.GET.get('state', 1)

    if not service:
        raise Http404("No such service found")

    # select only that cities where user is bind to
    geoip = GeoIP()
    ip = request.GET.get('REMOTE_ADDR', '127.0.0.1')
    city = request.session.get(
        'city',
        request.user.city
        if request.user.is_authenticated() else \
            (geoip.city(ip) or {}).get('city', None)
    )

    owners_ids = [id_dict.values()[0] for id_dict in User.objects.filter(is_published=True).values('id')]
    containers = Container.objects.select_related('owner').filter(
        service=service, owner__in=owners_ids).order_by('owner') #@TODO: select_related

    state = int(state) if isinstance(state, basestring) else 1
    if state:
        now = datetime.now().replace(second=0, microsecond=0)
        week_day = now.isoweekday()
        prev_week_day = week_day - 1 if week_day > 1 else 7
        qset = (
            # since < until
            Q(until__gte=now, since__lte=now, weekday=week_day) |
            # since > until
            (Q(until__lt=F('since')) &
             Q(since__lte=now, weekday=week_day)) |
            # next day jump
            (Q(until__lt=F('since')) &
             Q(until__gte=now, weekday=prev_week_day))

        )
        td = TimeNDay.objects.filter(
            Q(is_active=True) & qset
        )
        schedules = Schedule.objects.filter(timenday_schedule_set__in=td)
        containers = containers.filter(owner__schedule_user_set__in=schedules)

    if by_rating:
        containers = containers.order_by('-mean_rating')

    if city:
        containers = containers.filter(owner__city=city)
    else:
        top_city = City.objects.all()[0]
        containers = containers.filter(owner__city=top_city)

    if free_deliver:
        containers = containers.exclude(owner__avarage_cost=None)
        # containers = containers.filter(owner__avarage_deliver_cost=0)

    unique_containers = containers.filter(
        container=None).order_by('title').distinct('title')

    if categories_list:
        categories = Category.objects.filter(pk__in=categories_list)
        categories = categories | \
                     Category.objects.filter(parent__in=categories)  # 2 lvl
        categories = categories | \
                     Category.objects.filter(parent__in=categories)  # 3 lvl
        containers = containers. \
            filter(category__in=categories)  # categories_list)
        # containers = (
        #    containers.filter(container__title__in=container_list) |
        #    containers.filter(title__in=container_list)
        # )

    if isinstance(minimal_cost, basestring):
        minimal_cost = int(minimal_cost) if minimal_cost.isdigit() else 0
    if minimal_cost:
        # owner__avarage_cost__lte=minimal_cost)
        containers = containers.filter(owner__minimal_cost__lte=minimal_cost)
    if cardpay:
        containers = containers.exclude(owner__has_online_payment=False)
    if all((nlat, mlat, nlng, mlng)):
        positions = GPos.objects.filter(
            lat__gte=nlat, lat__lte=mlat,
            lng__gte=nlng, lng__lte=mlng
        )
        containers = containers.filter(owner__gpos_user_set__in=positions)
        # containers = (
        #    containers.filter(
        #        owner__glat__gte=nlat, owner__glat__lte=mlat,
        #        owner__glng__gte=nlng, owner__glng__lte=mlng
        #    )
        # )
    has_coords = 'nlat' in request.GET
    has_coords = has_coords and 'mlat' in request.GET
    has_coords = has_coords and 'nlng' in request.GET
    has_coords = has_coords and 'mlng' in request.GET
    if has_coords and not all((nlat, mlat, nlng, mlng)):
        containers = Container.objects.filter(id=-1)
    items = Item.objects.filter(container__in=containers)

    new_ones = request.GET.get('new_ones', False)
    one_week = datetime.now() - timedelta(weeks=1)

    if search_type == '1':  # by items
        items = items.filter(
            title__icontains=title
        )
        if new_ones:
            items = items.filter(container__owner__publish_date__gte=one_week)
        if is_special:
            items = items.filter(is_special_active=True)
    else:  # by containers
        containers = containers.filter(
            owner__service_name__icontains=title).order_by(
            'owner').distinct('owner')

        if new_ones:
            containers = containers.filter(owner__publish_date__gte=one_week)

        if is_special:
            items = Item.objects.filter(is_special_active=True,
                                        container__service=service)
            pks = containers.exclude(owner__special_owner_set=None)
            containers = (
                Container.objects.filter(item_container_set__in=items) |
                Container.objects.filter(pk__in=pks)
            )
        if by_rating:
            containers = containers.order_by('-mean_rating')
            # containers = containers.filter(item_container_set__in=items)

    page = request.GET.get('page', 1)
    containers = Container.objects.filter(
        pk__in=containers).distinct().order_by('-mean_rating').distinct()

    categories = Category.objects.filter(service=service)

    # ordering
    items = Item.objects.filter(
        pk__in=items.order_by('-cost').values('pk')
    ).distinct().order_by('-cost')
    order_by = request.GET.get('order_by', '-cost')
    order_by_asc = not order_by.startswith('-')
    if not order_by_asc:
        order_by = order_by[1:]
        order_by_prefix = '-'
        order_by_prefix_future = ''
    else:
        order_by_prefix = ''
        order_by_prefix_future = '-'
    if order_by in settings.CATALOG_ORDER_BY:
        items = items.order_by(order_by_prefix + order_by)
    if by_rating:
        items = items.order_by('-container__mean_rating')
        # paging
    containers = paginate(containers, page, pages=settings.DEFAULT_PAGES_COUNT)
    items = paginate(items, page, pages=settings.DEFAULT_PAGES_COUNT)

    dt = {
        'service': service,
        'categories': categories,
        'containers': containers,
        'items': items,
        'unique_containers': unique_containers,
        'search_type': search_type,
        'types': [int(i if i.isdigit() else 0) for i in
                  request.GET.getlist('type')],
        'G': request.GET,
        # 'request': request,
        'order_by': order_by,
        'order_by_prefix': order_by_prefix,
        'order_by_prefix_future': order_by_prefix_future,
    }
    if settings.SAUSAGE_SCROLL_ENABLE:
        if int(search_type) == 1 and int(page) != 1:
            dt.update({'_template': 'catalog/include/items.html'})
        elif int(page) != 1:
            dt.update({"_template": "catalog/include/partners.html"})
    return dt