def articles(self): """Returns list of dictionary of articles :rtype: list """ res = [] context = aq_inner(self.context) if not getattr(context, 'related_articles', None): context = aq_parent(context) if not getattr(context, 'related_articles', None): context = aq_parent(context) if getattr(context, 'related_articles', None): shopping_site = IShoppingSite(self.context) path = shopping_site.shop_path() for uuid in context.related_articles: obj = shopping_site.get_object(IArticle, UID=uuid, path=path, review_state='published') if obj is not None: art = IArticleAdapter(obj) res.append({ 'gross': art.gross(), 'image_url': art.image_url(size='preview'), 'title': art.title(), 'url': obj.absolute_url(), }) return res[:4]
def articles(self): """Returns list of dictionary of articles in shop :rtype: list """ res = [] for item in IShoppingSite(self.context).get_content_listing(IArticle, sort_on="sku"): obj = item.getObject() article = IArticleAdapter(obj) sbehavior = IStockBehavior(obj) stock = sbehavior.stock() stocks = sbehavior.stocks() if stocks: price = stocks[-1].price subtotal = price * stock price = getUtility(IPriceUtility, name="string")(price) subtotal = getUtility(IPriceUtility, name="string")(subtotal) else: price = subtotal = "N/A" res.append( { "price": price, "sku": item.sku, "stock": stock, "subtotal": subtotal, "title": article.title(), "url": item.getURL(), } ) return res
def articles(self): """Returns list of dictionary of articles :rtype: list """ res = [] shopping_site = IShoppingSite(self.context) articles = super(ArticlesInArticleViewlet, self).articles() if articles: for item in IContentListing(articles): obj = item.getObject() adapter = IArticleAdapter(obj) soldout = adapter.soldout() quantity_max = adapter.quantity_max() numbers = xrange(1, quantity_max + 1) quantity_size = len(str(quantity_max)) subarticles = [] if obj.use_subarticle: subarticles = adapter.subarticles() res.append({ 'description': item.Description(), 'discount_end': adapter.discount_end(), 'gross': shopping_site.format_money(adapter.gross()), 'id': item.getId(), 'image_url': adapter.image_url(size='mini'), 'klass': 'add-to-cart {}'.format(item.getId()), 'money': shopping_site.format_money(item.money), 'numbers': numbers, 'quantity_max': quantity_max, 'quantity_size': quantity_size, 'soldout': soldout, 'subarticles': subarticles, 'title': adapter.title(), 'url': item.getURL(), 'uuid': item.uuid(), 'vat_rate': IVATAdapter(self.context).percent(item.vat_rate) }) return res
def add_to_cart(self): """Add article to cart""" shopping_site = IShoppingSite(self.context) form = self.request.form add_to_cart = form.pop('form.buttons.AddToCart', None) subarticle = form.pop('subarticle', None) uuid = None quantity = '1' if subarticle is not None: uuids = subarticle parent_uuid = add_to_cart if not isinstance(uuids, list): uuids = [subarticle] for subarticle_uuid in uuids: parent = aq_parent(aq_inner(shopping_site.get_object(UID=subarticle_uuid))) if parent_uuid == IUUID(parent): uuid = subarticle_uuid quantity = form.get(parent_uuid) uuid = uuid or add_to_cart if uuid is not None: quantity = form.get('quantity') or form.get(uuid) or quantity validate = validation.validatorFor('isInt') url = self.context.restrictedTraverse('@@plone_context_state').current_base_url() message = None if quantity is not None and validate(quantity) == 1: quantity = int(quantity) obj = shopping_site.get_object(UID=uuid) if obj: item = IArticleAdapter(obj) if quantity > item.quantity_max(): quantity = item.quantity_max() if quantity > 0: size = ISize(obj) gross = item.gross() kwargs = { 'depth': size.depth, 'gross': gross, 'height': size.height, 'net': item.get_net(gross), 'quantity': quantity, 'title': item.title(), 'sku': obj.sku, 'vat': item.get_vat(gross), 'vat_rate': item.context.vat_rate, 'weight': size.weight, 'width': size.width, } item.add_to_cart(**kwargs) notify(ArticleAddedToCartEvent(item, self.request)) else: message = _(u'Input positive integer value to add to cart.') else: message = _(u"Not available to add to cart.") else: message = _(u"Input integer value to add to cart.") if message: IStatusMessage(self.request).addStatusMessage(message, type='warn') return self.request.response.redirect(url)