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)})
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)))
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) })
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)))
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))
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)
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)