예제 #1
0
def brand_home(request, slug, id):
    brand = Brand.objects.get(pk=id)
    client = request.client.client
 
    if is_holii_client(request.client.client):
        products = Product.objects.filter(brand = brand, category__client = client, sellerratechart__stock_status = 'instock')
        ctxt = {'brand'    : brand,
                'products' : products
               }
        return render_to_response('brands/brand.html',
                                   ctxt,
                                   context_instance = RequestContext(request)
                                 )
    else:
        if brand.slug != slug:
            return HttpResponsePermanentRedirect(reverse('brand-home-url',None,kwargs={'slug':brand.slug,'id':id}))
        ctxt = search_browser_filter(request, **{'brand':brand})
        if request.is_ajax():
            return ctxt
        html_page = 'categories/category.html'
        if not ctxt['products']:
            html_page = 'categories/zero_result.html'
        ctxt['title'] = brand.name
        ctxt['is_brand_page'] = True
        return render_to_response(html_page,
                                  ctxt,
                                  context_instance = RequestContext(request))
예제 #2
0
def brand_home(request, slug, id):
    brand = Brand.objects.get(pk=id)
    client = request.client.client

    if is_holii_client(request.client.client):
        products = Product.objects.filter(
            brand=brand,
            category__client=client,
            sellerratechart__stock_status='instock')
        ctxt = {'brand': brand, 'products': products}
        return render_to_response('brands/brand.html',
                                  ctxt,
                                  context_instance=RequestContext(request))
    else:
        if brand.slug != slug:
            return HttpResponsePermanentRedirect(
                reverse('brand-home-url',
                        None,
                        kwargs={
                            'slug': brand.slug,
                            'id': id
                        }))
        ctxt = search_browser_filter(request, **{'brand': brand})
        if request.is_ajax():
            return ctxt
        html_page = 'categories/category.html'
        if not ctxt['products']:
            html_page = 'categories/zero_result.html'
        ctxt['title'] = brand.name
        ctxt['is_brand_page'] = True
        return render_to_response(html_page,
                                  ctxt,
                                  context_instance=RequestContext(request))
예제 #3
0
def search_tag(request, tag, tag_filter=None):
    battle = None
    if tag == "battle":
        battle = List.objects.filter(type="battle",
                                     is_featured=True,
                                     starts_on__lte=datetime.now(),
                                     ends_on__gte=datetime.now())
        if battle:
            battle = battle[0]
        else:
            battle = None
        if not battle:
            raise Http404
    if tag_filter:
        tag = '(%s AND %s)' % (tag, tag_filter)
    ctxt = search_browser_filter(request, **{'tag': tag})
    tabs = Tab.objects.filter(list__type='battle').order_by('sort_order')
    tags = ProductTags.objects.filter(type='battle')
    tag_ids = tags.values('tag').distinct()
    total_pages = range(1, ctxt['total_pages'] + 1)
    prods2 = []
    prods = ctxt['products']
    items_in_sec1 = 4
    if len(prods) > items_in_sec1:
        length1 = items_in_sec1
        for len2 in range(items_in_sec1, len(prods)):
            prods2.append(prods[len2])
    else:
        length1 = len(prods)
    prods1 = prods[:length1]
    search_url = ctxt['base_url']
    if tag_filter:
        search_url = '/search/t/battle/'
    else:
        search_url = search_url[:-1]
    tag_info = []
    for tag in tag_ids:
        tag = ProductTags.objects.get(id=tag['tag'])
        info = {}
        q = 'tags: (%s AND battle) AND currency:inr' % tag.tag.tag
        solr_result = solr_search(q, fields='id', request=request)
        ids = [int(doc['id']) for doc in solr_result.results]
        info['tag'] = tag
        info['count'] = len(ids)
        tag_info.append(info)
    return render_to_response("categories/battle.html", {
        "total_results": ctxt['total_results'],
        "total_pages": total_pages,
        "base_url": ctxt['base_url'],
        "pagination": ctxt['pagination'],
        "filters": ctxt['filters'],
        "tabs": tabs,
        "tags": tag_info,
        "prods1": prods1,
        "prods2": prods2,
        "search_url": search_url,
        "battle": battle
    },
                              context_instance=RequestContext(request))
예제 #4
0
def search_tag(request,tag,tag_filter=None):
    battle = None
    if tag == "battle":
        battle = List.objects.filter(type="battle",is_featured=True,starts_on__lte=datetime.now(),ends_on__gte=datetime.now())
        if battle:
            battle = battle[0]
        else:
           battle = None
        if not battle:
            raise Http404
    if tag_filter:
        tag = '(%s AND %s)' %(tag,tag_filter)
    ctxt = search_browser_filter(request,**{'tag':tag})
    tabs = Tab.objects.filter(list__type = 'battle').order_by('sort_order')
    tags = ProductTags.objects.filter(type='battle')
    tag_ids = tags.values('tag').distinct()
    total_pages = range(1,ctxt['total_pages']+1)
    prods2 = []
    prods = ctxt['products']
    items_in_sec1 = 4
    if len(prods)>items_in_sec1:
        length1 = items_in_sec1
        for len2 in range(items_in_sec1,len(prods)):
            prods2.append(prods[len2])
    else:
        length1 = len(prods)
    prods1 = prods[:length1]
    search_url = ctxt['base_url']
    if tag_filter:
        search_url = '/search/t/battle/'
    else:
        search_url = search_url[:-1]
    tag_info = []
    for tag in tag_ids:
        tag = ProductTags.objects.get(id=tag['tag'])
        info = {}
        q = 'tags: (%s AND battle) AND currency:inr' % tag.tag.tag
        solr_result = solr_search(q, fields='id',request=request)
        ids = [int(doc['id']) for doc in solr_result.results]
        info['tag'] = tag
        info['count'] = len(ids)
        tag_info.append(info)
    return render_to_response("categories/battle.html",
            {
                "total_results": ctxt['total_results'],
                "total_pages": total_pages,
                "base_url": ctxt['base_url'],
                "pagination": ctxt['pagination'],
                "filters": ctxt['filters'],
                "tabs":tabs,
                "tags":tag_info,
                "prods1":prods1,
                "prods2":prods2,
                "search_url":search_url,
                "battle":battle
            },
            context_instance = RequestContext(request))
예제 #5
0
def shop_by_discount(request):
    params = request.GET
    discount = {}
    discount['min'] = str(params.get('min_d','0'))
    discount['max'] = str(params.get('max_d','*'))
    discount['label'] = "discount_%s" % request.client.id
    ctxt = search_browser_filter(request, **{'discount':discount})
    if request.is_ajax():
        return ctxt
    html_page = 'categories/category.html'
    if not ctxt.get('products',[]):
        html_page = 'categories/zero_result.html'

    return render_to_response(html_page,
            ctxt,
            context_instance = RequestContext(request))
예제 #6
0
def shop_by_price(request):    
    params = request.GET
    price = {}
    price['min'] = str(params.get('min_p','0'))
    price['max'] = str(params.get('max_p','*'))
    price['label'] = "offerprice_%s" % request.client.id
    ctxt = search_browser_filter(request, **{'price':price})
    if request.is_ajax():
        return ctxt
    html_page = 'categories/category.html'
    if not ctxt.get('products',[]):
        html_page = 'categories/zero_result.html'

    return render_to_response(html_page,
            ctxt,
            context_instance = RequestContext(request))
예제 #7
0
def shop_by_discount(request):
    params = request.GET
    discount = {}
    discount['min'] = str(params.get('min_d', '0'))
    discount['max'] = str(params.get('max_d', '*'))
    discount['label'] = "discount_%s" % request.client.id
    ctxt = search_browser_filter(request, **{'discount': discount})
    if request.is_ajax():
        return ctxt
    html_page = 'categories/category.html'
    if not ctxt.get('products', []):
        html_page = 'categories/zero_result.html'

    return render_to_response(html_page,
                              ctxt,
                              context_instance=RequestContext(request))
예제 #8
0
def shop_by_price(request):
    params = request.GET
    price = {}
    price['min'] = str(params.get('min_p', '0'))
    price['max'] = str(params.get('max_p', '*'))
    price['label'] = "offerprice_%s" % request.client.id
    ctxt = search_browser_filter(request, **{'price': price})
    if request.is_ajax():
        return ctxt
    html_page = 'categories/category.html'
    if not ctxt.get('products', []):
        html_page = 'categories/zero_result.html'

    return render_to_response(html_page,
                              ctxt,
                              context_instance=RequestContext(request))
예제 #9
0
def search(request):
    ctxt = search_browser_filter(request)
    if request.is_ajax():
        return ctxt
    html_page = 'categories/category.html'
    if not ctxt.get('products', []):
        html_page = 'categories/zero_result.html'
        try:
            if not ctxt.get('spell_suggestion', []):
                html_page = 'categories/zero_result.html'
            else:
                html_page = 'categories/search_suggestion.html'
        except:
            pass
    return render_to_response(html_page,
            ctxt,
            context_instance = RequestContext(request))
예제 #10
0
def search(request):
    ctxt = search_browser_filter(request)
    if request.is_ajax():
        return ctxt
    html_page = 'categories/category.html'
    if not ctxt.get('products', []):
        html_page = 'categories/zero_result.html'
        try:
            if not ctxt.get('spell_suggestion', []):
                html_page = 'categories/zero_result.html'
            else:
                html_page = 'categories/search_suggestion.html'
        except:
            pass
    return render_to_response(html_page,
                              ctxt,
                              context_instance=RequestContext(request))
예제 #11
0
def get_sbf_context_by_products(request, products):
    product_ids = []
    for product in products:        
        prod_id = product.id
        if product.type == 'variant':
            variant = ProductVariant.objects.filter(variant=product)
            if variant:
                variant = variant[0]
                prod_id = variant.blueprint.id
        if str(prod_id) not in product_ids:
            product_ids.append(str(prod_id))
    if product_ids:
        prod_ids = " OR ".join(product_ids)
        prod_ids = "(" + str(prod_ids) + ")"
        from web.views.sbf_views import search_browser_filter
        ctxt = search_browser_filter(request,**{'product':prod_ids})
    else:
        ctxt = dict(products=None)
    return ctxt
예제 #12
0
def get_sbf_context_by_products(request, products):
    product_ids = []
    for product in products:
        prod_id = product.id
        if product.type == 'variant':
            variant = ProductVariant.objects.filter(variant=product)
            if variant:
                variant = variant[0]
                prod_id = variant.blueprint.id
        if str(prod_id) not in product_ids:
            product_ids.append(str(prod_id))
    if product_ids:
        prod_ids = " OR ".join(product_ids)
        prod_ids = "(" + str(prod_ids) + ")"
        from web.views.sbf_views import search_browser_filter
        ctxt = search_browser_filter(request, **{'product': prod_ids})
    else:
        ctxt = dict(products=None)
    return ctxt
예제 #13
0
def itz_homepage(request):
    error = ''
    itz_offer = {}
    hero_deal = {}
    mega_menu_categories = ''
    _client = request.client.client
    
    net_details = save_franc_network_in_dict(request)
    if not 'is_network' in net_details or not 'is_franchise' in net_details or net_details['is_network']:
        return HttpResponseRedirect('/accounts/login/')

    home_page_ctxt_key = 'itz_homepage#%s' % (_client.id)
    home_page_context = cache.get(home_page_ctxt_key)
    
    if not home_page_context:
        tag = Tag.objects.filter(tag='itz')
        if tag:
            tag = tag[0]
            q = 'tag_id:%s' % tag.id
            params = {}
            params['rows'] = 1000
            itz_solr_result = solr_search(q, fields='id', **params)
            #itz_categories_solr = search_browser_filter(request, **{'tag_ids' : tag.id })
        else:
            error = "No Itz tag found"
            home_page_context = {'error':error,}
        if error or itz_solr_result.numFound == 0:
            error = "No Itz products found. Add products from admin site."
            home_page_context = {'error':error,}
        else:
            itz_product_ids = [res['id'] for res in itz_solr_result.results]
            itz_seller_charts = SellerRateChart.objects.filter(product__in=itz_product_ids)
            
            mega_menu_categories = MegaDropDown.objects.select_related("category").filter(type="menu_level2_category", client=_client).order_by('sort_order')
            for cat in mega_menu_categories:
                itz_offer[cat.category.id] = {}
                temp_dict = search_browser_filter(request,**{ 'category': cat.category })
                if 'total_results' in temp_dict:
                    itz_offer[cat.category.id]['total_results'] = temp_dict['total_results']
                if 'filter_form' in temp_dict:
                    itz_offer[cat.category.id]['gmin'] = temp_dict['filter_form'].gmin
                if 'products' in temp_dict:
                    itz_offer[cat.category.id]['products'] = temp_dict['products']
            
            from dealprops.models import DailyDeal, DailyDealImage
            hero_deals = DailyDeal.objects.select_related('id', 'type').filter(status='published', starts_on__lte=datetime.now(),ends_on__gte=datetime.now(), client=_client, type = 'hero_deal').order_by('-starts_on')[:1]
            
            if hero_deals:
                hero_deal_obj = hero_deals[0]
                
                if hero_deal_obj:
                    hero_deal_rate_chart = None
                    daily_deal_products = hero_deal_obj.dailydealproduct_set.all()
                    
                    if daily_deal_products:
                        daily_deal_product = daily_deal_products[0]
                        hero_deal_rate_chart = daily_deal_product.product.primary_rate_chart()
                        
                        if hero_deal_rate_chart in itz_seller_charts:
                            hero_deal['deal'] = hero_deal_obj
                            hero_deal['url'] = hero_deal_rate_chart.product.url()
                            
                            try:
                                hero_deal_image = DailyDealImage.objects.get(daily_deal=hero_deal_obj)
                            except DailyDealImage.MultipleObjectsReturned:
                                hero_deal_image = DailyDealImage.objects.filter(daily_deal=hero_deal_obj).order_by('order')[0]
                            except DailyDealImage.DoesNotExist:
                                pass
                            if hero_deal_image:
                                hero_deal['main_banner'] = hero_deal_image.banner
            home_page_context = {
                                    'net_details':net_details,
                                    'error':error,
                                    'itz_offer':itz_offer,
                                    'mega_menu_categories':mega_menu_categories,
                                    'hero_deal':hero_deal,
                                }
            cache.set(home_page_ctxt_key, home_page_context, 1800)

    home_page_context['request'] = request
    return render_to_response('itz_homepage.html', home_page_context,
        context_instance=RequestContext(request))
예제 #14
0
def detail(request, slug, id):
    if request.method == "POST":
        log.info('params %s' % request.POST)
        #selected_variants = request.POST.getlist('selected_variants')
        variant_ids = []
        for v in request.POST:
            if v.startswith('deal_'):
                vls = v.split('_')
                variant_ids.append(vls[1])
        log.info('variants id %s' % variant_ids)
        cart = get_cart(request)
        for p in variant_ids:
            rate_chart = SellerRateChart.objects.filter(product__id=p)
            if rate_chart:
                cart.add_item(request, rate_chart[0])
        return HttpResponseRedirect('/orders/mycart')

    _client = request.client.client
    try:
        # Check for currently running daily_deal
        deal = DailyDeal.objects.get(client=request.client.client,
                                     type="hero_deal",
                                     starts_on__lte=datetime.now(),
                                     ends_on__gte=datetime.now(),
                                     status="published")
    except (DailyDeal.DoesNotExist, DailyDeal.MultipleObjectsReturned):
        raise Http404
    deal_rate_charts = []
    deal_products = []
    if deal:
        # Get all daily deal products
        deal_products = [
            deal_product.product
            for deal_product in deal.dailydealproduct_set.all()
        ]
        if not deal_products:
            raise Http404
        ids = []
        if len(deal_products) > 1:
            # Deal has multiple products,
            # render it to SRP
            from web.views.sbf_views import search_browser_filter
            for product in deal_products:
                if product.type == 'variant':
                    variant = ProductVariant.objects.filter(variant=product)
                    if variant:
                        variant = variant[0]
                        ids.append(str(variant.blueprint.id))
                else:
                    ids.append(str(product.id))
            prod_ids = " OR ".join(ids)
            prod_ids = "(" + str(prod_ids) + ")"
            ctxt = search_browser_filter(request, **{'product': prod_ids})
            ctxt['daily_deal'] = True
            if request.is_ajax():
                return ctxt
            return render_to_response('categories/category.html',
                                      ctxt,
                                      context_instance=RequestContext(request))
        else:
            # Deal has only one product
            # render it to PDP
            product = deal_products[0]
            return HttpResponseRedirect('%s' %
                                        (get_cc_url(request, product.url())))
    raise Http404

    in_box_content = ''
    if deal.in_box_accessories:
        in_box_content = deal.in_box_accessories
    else:
        feature_grp = FeatureGroup.objects.filter(
            product_type=deal_product.product_type)
        for grp in feature_grp:
            if grp.name == 'Accessories':
                feature_all = deal_product.productfeatures_set.all()
                features = feature_all.filter(
                    feature__group=grp).order_by('feature__sort_order')
                for feature in features:
                    feature_content = {}
                    try:
                        in_box_content = str(feature.data)
                    except:
                        pass
    prod_list = []
    if deal.type == "multiple":
        for deal_prod in deal_products:

            product = Product.objects.get(id=deal_prod.product.id)
            images = product.productimage_set.all().order_by('id')
            blueprint = product
            try:
                sellerRateChart = product.primary_rate_chart()
            except SellerRateChart.DoesNotExist:
                log.error('Error finding preferred ratechart for %s' %
                          product.title)
                continue
            if images:
                thumbnail = images[0].thumbnail_image.name
            else:
                thumbnail = None
            sizes = []
            product_variant = ProductVariant.objects.filter(variant=product)
            if product_variant:
                product_variant = product_variant[0].blueprint
                for pv in product_variant.variants.iterator():
                    try:
                        feature = pv.variant.productfeatures_set.get(
                            feature__id=1701)
                        sizes.append({
                            'size': feature.data,
                            'variant': pv.variant
                        })
                    except:
                        pass
            prod_list.append({
                'product': product,
                'blueprint': blueprint,
                'image': thumbnail,
                'product_images': images,
                'rateChart': sellerRateChart,
                'sizes': sizes
            })
    return render_to_response("stealoftheday/detail.html", {
        'deal': deal,
        'in_box_content': in_box_content,
        'deal_rate_chart': deal_rate_chart,
        'deal_product': deal_product,
        'prod_list': prod_list,
    },
                              context_instance=RequestContext(request))
예제 #15
0
def detail(request, slug, id):
    if request.method == "POST":
        log.info('params %s' % request.POST)
        #selected_variants = request.POST.getlist('selected_variants')
        variant_ids = []
        for v in request.POST:
            if v.startswith('deal_'):
                vls = v.split('_')
                variant_ids.append(vls[1])
        log.info('variants id %s' % variant_ids)
        cart = get_cart(request)
        for p in variant_ids:
    	    rate_chart = SellerRateChart.objects.filter(product__id=p)
            if rate_chart:
                cart.add_item(request, rate_chart[0])
        return HttpResponseRedirect('/orders/mycart')
                    
    _client = request.client.client
    try:
        # Check for currently running daily_deal
        deal = DailyDeal.objects.get(client=request.client.client, type="hero_deal",
            starts_on__lte = datetime.now(), ends_on__gte = datetime.now(), status = "published")
    except (DailyDeal.DoesNotExist, DailyDeal.MultipleObjectsReturned) :
        raise Http404
    deal_rate_charts = []
    deal_products = []
    if deal:
        # Get all daily deal products
        deal_products = [deal_product.product for deal_product in deal.dailydealproduct_set.all()]
        if not deal_products:
            raise Http404
        ids = []
        if len(deal_products) > 1:
            # Deal has multiple products,
            # render it to SRP
            from web.views.sbf_views import search_browser_filter
            for product in deal_products:
                if product.type == 'variant':
                    variant = ProductVariant.objects.filter(variant=product)
                    if variant:
                        variant = variant[0]
                        ids.append(str(variant.blueprint.id))
                else:
                    ids.append(str(product.id))
            prod_ids = " OR ".join(ids)
            prod_ids = "(" + str(prod_ids) + ")"
            ctxt = search_browser_filter(request,**{'product':prod_ids})
            ctxt['daily_deal'] = True
            if request.is_ajax():
                return ctxt
            return render_to_response('categories/category.html',ctxt,context_instance=RequestContext(request))
        else:
            # Deal has only one product
            # render it to PDP
            product = deal_products[0]
            return HttpResponseRedirect('%s' % (get_cc_url(request, product.url())))
    raise Http404
    
    in_box_content = ''
    if deal.in_box_accessories:
        in_box_content = deal.in_box_accessories
    else:
        feature_grp = FeatureGroup.objects.filter(product_type = deal_product.product_type)
        for grp in feature_grp:
            if grp.name == 'Accessories':        
                feature_all = deal_product.productfeatures_set.all()
                features = feature_all.filter(feature__group = grp).order_by('feature__sort_order')
                for feature in features:
                    feature_content = {}
                    try:
                        in_box_content = str(feature.data)
                    except:
                        pass
    prod_list = []
    if deal.type == "multiple":
        for deal_prod in deal_products:
            
            product = Product.objects.get(id=deal_prod.product.id)
            images = product.productimage_set.all().order_by('id')
            blueprint = product
            try:
                sellerRateChart = product.primary_rate_chart()
            except SellerRateChart.DoesNotExist:
                log.error('Error finding preferred ratechart for %s' % product.title)
                continue
            if images:
                thumbnail = images[0].thumbnail_image.name
            else:
                thumbnail = None
            sizes = []
            product_variant = ProductVariant.objects.filter(variant=product)
            if product_variant:
                product_variant = product_variant[0].blueprint
                for pv in product_variant.variants.iterator():
                    try:
                        feature = pv.variant.productfeatures_set.get(feature__id=1701)
                        sizes.append({'size':feature.data,'variant':pv.variant})
                    except:
                        pass
            prod_list.append({'product':product,'blueprint':blueprint, 'image':thumbnail, 'product_images':images,'rateChart':sellerRateChart,'sizes':sizes})
    return render_to_response(
            "stealoftheday/detail.html",
            {
                'deal':deal,
                'in_box_content':in_box_content,
                'deal_rate_chart':deal_rate_chart,
                'deal_product':deal_product,
                'prod_list':prod_list,
            },
            context_instance = RequestContext(request))