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 order articles :rtype: list """ res = [] utility = getUtility(IUnicodeUtility) shopping_site = IShoppingSite(self.context) vat_adapter = IVATAdapter(self.context) for item in self.get_content_listing(IOrderArticle): obj = item.getObject() order_article_adapter = IOrderArticleAdapter(obj) gross_subtotal = order_article_adapter.gross_subtotal() items = { 'description': utility.safe_unicode(item.Description()), 'gross': item.gross, 'gross_subtotal': gross_subtotal, 'locale_gross_subtotal': shopping_site.format_money(gross_subtotal), 'image_url': None, 'obj': obj, 'quantity': item.quantity, 'sku': item.sku, 'title': utility.safe_unicode(item.Title()), 'url': None, 'vat_rate': vat_adapter.percent(item.vat_rate), 'id': item.getId(), } orig_article = shopping_site.get_object(IArticle, path=shopping_site.portal_path(), UID=item.getId()) if orig_article: items['url'] = orig_article.absolute_url() items['image_url'] = IArticleAdapter(orig_article).image_url(size='mini') res.append(items) 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)