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)