示例#1
0
def showList(request):
    group=request.GET.get("group")
    page=request.GET.get("page")
    data=utils.get_group_name(request)
    url=public.JAVA_HOST + "/onlinecard/api/online_cards?group="+group+"&pageNum="+page
    req = public.get_data(url)
    req_dict = json.loads(req)
    return render(request,'onlinecards_list.html',{"data":data,"group":req_dict,"group_id":long(group),"pageNum":long(page)})
示例#2
0
文件: categories.py 项目: hforge/shop
 def get_nb_products(self, only_public=False):
     root = self.get_root()
     shop = get_shop(self)
     abspath = self.get_canonical_path()
     query = [PhraseQuery('parent_paths', str(abspath)),
              PhraseQuery('format', shop.product_class.class_id)]
     if shop.get_property('hide_not_buyable_products') is True:
         context = get_context()
         group_name = get_group_name(shop, context)
         query.append(NotQuery(PhraseQuery('not_buyable_by_groups', group_name)))
     if only_public is True:
         query.append(PhraseQuery('workflow_state', 'public'))
     return len(root.search(AndQuery(*query)))
示例#3
0
def showList(request):
    group = request.GET.get("group")
    page = request.GET.get("page")
    data = utils.get_group_name(request)
    url = public.JAVA_HOST + "/onlinecard/api/online_cards?group=" + group + "&pageNum=" + page
    req = public.get_data(url)
    req_dict = json.loads(req)
    return render(
        request, 'onlinecards_list.html', {
            "data": data,
            "group": req_dict,
            "group_id": long(group),
            "pageNum": long(page)
        })
示例#4
0
 def get_nb_products(self, only_public=False):
     root = self.get_root()
     shop = get_shop(self)
     abspath = self.get_canonical_path()
     query = [
         PhraseQuery('parent_paths', str(abspath)),
         PhraseQuery('format', shop.product_class.class_id)
     ]
     if shop.get_property('hide_not_buyable_products') is True:
         context = get_context()
         group_name = get_group_name(shop, context)
         query.append(
             NotQuery(PhraseQuery('not_buyable_by_groups', group_name)))
     if only_public is True:
         query.append(PhraseQuery('workflow_state', 'public'))
     return len(root.search(AndQuery(*query)))
示例#5
0
 def get_items(self, resource, context):
     shop = get_shop(resource)
     abspath = resource.get_canonical_path()
     query = [
         PhraseQuery('parent_paths', str(abspath)),
         PhraseQuery('format', shop.product_class.class_id),
         PhraseQuery('workflow_state', 'public')]
     # Is buyable ?
     if shop.get_property('hide_not_buyable_products') is True:
         group_name = get_group_name(shop, context)
         q = PhraseQuery('not_buyable_by_groups', group_name)
         query.append(NotQuery(q))
     # Add query of filter
     for key, datatype in self.get_search_schema().items():
         value = context.query[key]
         if value and issubclass(datatype, IntegerRange):
             query.append(RangeQuery(key, value[0], value[1]))
         elif value:
             query.append(PhraseQuery(key, value))
     return context.root.search(AndQuery(*query))
示例#6
0
    def get_products(self, context, product_format, categories=[], excluded_products=[]):
        shop = get_shop(self)
        table = self
        if self.get_property("use_shop_configuration"):
            table = shop.get_resource("cross-selling")
        if table.get_property("enabled") is False:
            return

        root = context.root
        products_quantity = table.get_property("products_quantity")

        # Base query
        query = [PhraseQuery("format", product_format), PhraseQuery("workflow_state", "public")]
        # Do not show now buyable products
        group_name = get_group_name(shop, context)
        q = PhraseQuery("not_buyable_by_groups", group_name)
        query.append(NotQuery(q))
        # Excluded products query
        if excluded_products:
            exclude_query = [PhraseQuery("abspath", str(abspath)) for abspath in excluded_products]
            if len(exclude_query) > 1:
                exclude_query = OrQuery(*exclude_query)
            else:
                exclude_query = exclude_query[0]
            query.append(NotQuery(exclude_query))
        # Filter on product title
        filter_text = table.get_property("filter_text")
        if filter_text:
            query.append(PhraseQuery("title", filter_text))
        # Categories query
        mode_categories = table.get_property("categories")
        if mode_categories == "current_category":
            query_categorie = [PhraseQuery("parent_paths", str(x.get_abspath())) for x in categories]
            if len(query_categorie) > 1:
                query.append(OrQuery(*query_categorie))
            elif len(query_categorie) == 1:
                query.append(query_categorie[0])
        elif mode_categories == "one_category":
            query.append(PhraseQuery("parent_paths", table.get_property("specific_category")))
        # Show reductions ?
        promotion = table.get_property("show_product_with_promotion")
        if promotion in ("0", "1"):
            query.append(PhraseQuery("has_reduction", bool(promotion)))

        # Product model
        product_model = table.get_property("product_model")
        if product_model:
            query.append(PhraseQuery("product_model", product_model))
        # Tags
        if table.get_property("tags"):
            query.append(OrQuery(*[PhraseQuery("tags", x) for x in table.get_property("tags")]))

        # Selection in cross selling table
        handler = table.handler
        get_value = handler.get_record_value
        ids = list(handler.get_record_ids_in_order())
        names = []
        for id in ids[:products_quantity]:
            record = handler.get_record(id)
            path = get_value(record, "name")
            names.append(path)
            products_quantity -= 1
            resource = self.get_resource(path, soft=True)
            if resource is None:
                log_warning("Error cross selling, %s" % path)
            elif resource.get_property("state") == "public":
                yield resource

        if products_quantity <= 0:
            return

        if names:
            names_query = [PhraseQuery("name", name) for name in names]
            if len(names_query) > 1:
                names_query = OrQuery(*names_query)
            else:
                names_query = names_query[0]
            query.append(NotQuery(names_query))

        # Complete results
        sort = table.get_property("sort")
        if sort == "random":
            # Random selection
            results = root.search(AndQuery(*query))
            # XXX It's not relevant to make a random cross selling
            # with more than 1000 products
            brains = list(results.get_documents(size=1000))
            shuffle(brains)
            for brain in brains[:products_quantity]:
                yield root.get_resource(brain.abspath)
        elif sort == "last":
            results = root.search(AndQuery(*query))
            brains = list(results.get_documents(sort_by="ctime", reverse=True, size=products_quantity))
            for brain in brains:
                yield root.get_resource(brain.abspath)
示例#7
0
    def get_products(self,
                     context,
                     product_format,
                     categories=[],
                     excluded_products=[]):
        shop = get_shop(self)
        table = self
        if self.get_property('use_shop_configuration'):
            table = shop.get_resource('cross-selling')
        if table.get_property('enabled') is False:
            return

        root = context.root
        products_quantity = table.get_property('products_quantity')

        # Base query
        query = [
            PhraseQuery('format', product_format),
            PhraseQuery('workflow_state', 'public')
        ]
        # Do not show now buyable products
        group_name = get_group_name(shop, context)
        q = PhraseQuery('not_buyable_by_groups', group_name)
        query.append(NotQuery(q))
        # Excluded products query
        if excluded_products:
            exclude_query = [
                PhraseQuery('abspath', str(abspath))
                for abspath in excluded_products
            ]
            if len(exclude_query) > 1:
                exclude_query = OrQuery(*exclude_query)
            else:
                exclude_query = exclude_query[0]
            query.append(NotQuery(exclude_query))
        # Filter on product title
        filter_text = table.get_property('filter_text')
        if filter_text:
            query.append(PhraseQuery('title', filter_text))
        # Categories query
        mode_categories = table.get_property('categories')
        if mode_categories == 'current_category':
            query_categorie = [
                PhraseQuery('parent_paths', str(x.get_abspath()))
                for x in categories
            ]
            if len(query_categorie) > 1:
                query.append(OrQuery(*query_categorie))
            elif len(query_categorie) == 1:
                query.append(query_categorie[0])
        elif mode_categories == 'one_category':
            query.append(
                PhraseQuery('parent_paths',
                            table.get_property('specific_category')))
        # Show reductions ?
        promotion = table.get_property('show_product_with_promotion')
        if promotion in ('0', '1'):
            query.append(PhraseQuery('has_reduction', bool(promotion)))

        # Product model
        product_model = table.get_property('product_model')
        if product_model:
            query.append(PhraseQuery('product_model', product_model))
        # Tags
        if table.get_property('tags'):
            query.append(
                OrQuery(*[
                    PhraseQuery('tags', x) for x in table.get_property('tags')
                ]))

        # Selection in cross selling table
        handler = table.handler
        get_value = handler.get_record_value
        ids = list(handler.get_record_ids_in_order())
        names = []
        for id in ids[:products_quantity]:
            record = handler.get_record(id)
            path = get_value(record, 'name')
            names.append(path)
            products_quantity -= 1
            resource = self.get_resource(path, soft=True)
            if resource is None:
                log_warning('Error cross selling, %s' % path)
            elif resource.get_property('state') == 'public':
                yield resource

        if products_quantity <= 0:
            return

        if names:
            names_query = [PhraseQuery('name', name) for name in names]
            if len(names_query) > 1:
                names_query = OrQuery(*names_query)
            else:
                names_query = names_query[0]
            query.append(NotQuery(names_query))

        # Complete results
        sort = table.get_property('sort')
        if sort == 'random':
            # Random selection
            results = root.search(AndQuery(*query))
            # XXX It's not relevant to make a random cross selling
            # with more than 1000 products
            brains = list(results.get_documents(size=1000))
            shuffle(brains)
            for brain in brains[:products_quantity]:
                yield root.get_resource(brain.abspath)
        elif sort == 'last':
            results = root.search(AndQuery(*query))
            brains = list(
                results.get_documents(sort_by='ctime',
                                      reverse=True,
                                      size=products_quantity))
            for brain in brains:
                yield root.get_resource(brain.abspath)