Пример #1
0
    def getItemDatas(self):
        """Returns a dictionary of an item's properties to be used in
        templates. If the item has variations, the variation config is
        also included.
        """
        results = []
        for item in self.getItems():
            assert(IShopItem.providedBy(item))
            varConf = IVariationConfig(item)

            has_variations = varConf.hasVariations()

            image = item.getField('image')
            if image and image.get_size(item):
                hasImage = True
                tag = image.tag(item, scale='mini')
            else:
                hasImage = False
                tag = None
            if has_variations:
                skuCode = None
                price = None
            else:
                varConf = None
                skuCode = item.Schema().getField('skuCode').get(item)
                price = item.Schema().getField('price').get(item)

            results.append(
                dict(
                    item = item,
                    title = item.Title(),
                    description = item.Description(),
                    url = item.absolute_url(),
                    hasImage = hasImage,
                    imageTag = tag,
                    variants = None,
                    skuCode = skuCode,
                    price = price,
                    showPrice = item.getField('showPrice').get(item),
                    unit=item.getField('unit').get(item),
                    uid = item.UID(),
                    varConf = varConf,
                    hasVariations = has_variations,
                    selectable_dimensions = item.getSelectableDimensions()))
        return results
Пример #2
0
    def SearchableText(self):
        """ Make variations searchable. """
        data = super(ShopItem, self).SearchableText()

        var_conf = IVariationConfig(self)
        variation_details = []
        if var_conf.hasVariations():
            for variation in var_conf.getVariationDict().values():
                if not variation['active']:
                    continue
                variation_details.append(variation['description'])
                variation_details.append(variation['skuCode'])

        return ' '.join([
            data, ' '.join(self.getVariation1_values()),
            ' '.join(self.getVariation2_values()), ' '.join(variation_details),
            self.getSkuCode()
        ])
Пример #3
0
    def getItemDatas(self):
        """Returns a dictionary of an item's properties to be used in
        templates. If the item has variations, the variation config is
        also included.
        """
        results = []
        for item in self.getItems():
            varConf = IVariationConfig(item)
            has_variations = varConf.hasVariations()

            image = item.getField('image')
            if image and image.get_size(item):
                hasImage = True
                tag = image.tag(item, scale='tile')
            else:
                hasImage = False
                tag = None

            if has_variations:
                skuCode = None
                price = None
            else:
                varConf = None
                skuCode = item.Schema().getField('skuCode').get(item)
                price = item.Schema().getField('price').get(item)

            results.append(
                dict(item=item,
                     title=item.Title(),
                     description=item.Description(),
                     url=item.absolute_url(),
                     hasImage=hasImage,
                     imageTag=tag,
                     variants=None,
                     skuCode=skuCode,
                     price=price,
                     showPrice=item.getField('showPrice').get(item),
                     unit=item.getField('unit').get(item),
                     uid=item.UID(),
                     varConf=varConf,
                     hasVariations=has_variations,
                     selectable_dimensions=item.getSelectableDimensions()))
        return results
Пример #4
0
    def SearchableText(self):
        """ Make variations searchable. """
        data = super(ShopItem, self).SearchableText()

        var_conf = IVariationConfig(self)
        variation_details = []
        if var_conf.hasVariations():
            for variation in var_conf.getVariationDict().values():
                if not variation['active']:
                    continue
                variation_details.append(variation['description'])
                variation_details.append(variation['skuCode'])

        return ' '.join([
            data,
            ' '.join(self.getVariation1_values()),
            ' '.join(self.getVariation2_values()),
            ' '.join(variation_details),
            self.getSkuCode()
        ])
Пример #5
0
    def _add_item(self,
                  skuCode=None,
                  quantity=1,
                  var1choice=None,
                  var2choice=None):
        """ Add item to cart
        """
        context = aq_inner(self.context)
        varConf = IVariationConfig(self.context)

        # get current items in cart
        session = self.request.SESSION
        cart_items = session.get(CART_KEY, {})
        variation_code = varConf.variation_code(var1choice, var2choice)

        # We got no skuCode, so look it up by variation key
        if not skuCode:
            skuCode = varConf.sku_code(var1choice, var2choice)

        item_key = varConf.key(var1choice, var2choice)
        item = cart_items.get(item_key, None)

        item_title = context.Title()
        quantity = int(quantity)
        vat_rate = Decimal(context.getField('vat').get(context))

        supplier_name, supplier_email = self._get_supplier_info(context)

        has_variations = varConf.hasVariations()
        if has_variations:
            variation_dict = varConf.getVariationDict()
            if not variation_dict[variation_code]['active']:
                # Item is disabled
                return False

            variation_pretty_name = varConf.getPrettyName(variation_code)
            item_title = '%s - %s' % (context.Title(), variation_pretty_name)
            price = Decimal(variation_dict[variation_code]['price'])
            # add item to cart
            if item is None:

                item = {
                    'title': item_title,
                    'description': context.Description(),
                    'skucode': skuCode,
                    'quantity': quantity,
                    'price': str(price),
                    'show_price': context.showPrice,
                    'total': str(price * quantity),
                    'url': context.absolute_url(),
                    'supplier_name': supplier_name,
                    'supplier_email': supplier_email,
                    'variation_code': variation_code,
                    'vat_rate': vat_rate,
                    'vat_amount': str(calc_vat(vat_rate, price))
                }
            # item already in cart, update quantity
            else:
                item['quantity'] = item.get('quantity', 0) + quantity
                item['total'] = str(item['quantity'] * price)
                item['vat_amount'] = str(calc_vat(vat_rate, price, quantity))

        else:
            price = Decimal(context.Schema().getField('price').get(context))
            # add item to cart
            if item is None:

                item = {
                    'title': item_title,
                    'description': context.Description(),
                    'skucode': skuCode,
                    'quantity': quantity,
                    'price': str(price),
                    'show_price': context.showPrice,
                    'total': str(price * quantity),
                    'url': context.absolute_url(),
                    'supplier_name': supplier_name,
                    'supplier_email': supplier_email,
                    'vat_rate': vat_rate,
                    'vat_amount': str(calc_vat(vat_rate, price))
                }
            # item already in cart, update quantitiy
            else:
                item['quantity'] = item.get('quantity', 0) + quantity
                item['total'] = str(item['quantity'] * price)
                item['vat_amount'] = str(calc_vat(vat_rate, price, quantity))

        # store cart in session
        cart_items[item_key] = item
        session[CART_KEY] = cart_items
        return True
Пример #6
0
    def _add_item(self, skuCode=None, quantity=1,
                   var1choice=None, var2choice=None):
        """ Add item to cart
        """
        context = aq_inner(self.context)
        varConf = IVariationConfig(self.context)

        # get current items in cart
        session = self.request.SESSION
        cart_items = session.get(CART_KEY, {})
        variation_code = varConf.variation_code(var1choice, var2choice)

        # We got no skuCode, so look it up by variation key
        if not skuCode:
            skuCode = varConf.sku_code(var1choice, var2choice)

        item_key = varConf.key(var1choice, var2choice)
        item = cart_items.get(item_key, None)

        item_title = context.Title()
        quantity = int(quantity)
        vat_rate = Decimal(context.getField('vat').get(context))

        supplier_name, supplier_email = self._get_supplier_info(context)

        has_variations = varConf.hasVariations()
        if has_variations:
            variation_dict = varConf.getVariationDict()
            if not variation_dict[variation_code]['active']:
                # Item is disabled
                return False

            variation_pretty_name = varConf.getPrettyName(variation_code)
            item_title = '%s - %s' % (context.Title(), variation_pretty_name)
            price = Decimal(variation_dict[variation_code]['price'])
            # add item to cart
            if item is None:

                item = {'title': item_title,
                        'description': context.Description(),
                        'skucode': skuCode,
                        'quantity': quantity,
                        'price': str(price),
                        'show_price': context.showPrice,
                        'total': str(price * quantity),
                        'url': context.absolute_url(),
                        'supplier_name': supplier_name,
                        'supplier_email': supplier_email,
                        'variation_code': variation_code,
                        'vat_rate': vat_rate,
                        'vat_amount': str(calc_vat(vat_rate, price))
                }
            # item already in cart, update quantity
            else:
                item['quantity'] = item.get('quantity', 0) + quantity
                item['total'] = str(item['quantity'] * price)
                item['vat_amount'] = str(calc_vat(vat_rate, price, quantity))

        else:
            price = Decimal(context.Schema().getField('price').get(context))
            # add item to cart
            if item is None:

                item = {'title': item_title,
                        'description': context.Description(),
                        'skucode': skuCode,
                        'quantity': quantity,
                        'price': str(price),
                        'show_price': context.showPrice,
                        'total': str(price * quantity),
                        'url': context.absolute_url(),
                        'supplier_name': supplier_name,
                        'supplier_email': supplier_email,
                        'vat_rate': vat_rate,
                        'vat_amount': str(calc_vat(vat_rate, price))
                }
            # item already in cart, update quantitiy
            else:
                item['quantity'] = item.get('quantity', 0) + quantity
                item['total'] = str(item['quantity'] * price)
                item['vat_amount'] = str(calc_vat(vat_rate, price, quantity))

        # store cart in session
        cart_items[item_key] = item
        session[CART_KEY] = cart_items
        return True
Пример #7
0
    def _add_item(self, skuCode=None, quantity=1,
                   var1choice=None, var2choice=None, dimensions=None):
        """ Add item to cart
        """
        context = aq_inner(self.context)
        varConf = IVariationConfig(self.context)

        # get current items in cart
        session = self.request.SESSION
        cart_items = session.get(CART_KEY, OrderedDict())
        variation_code = varConf.variation_code(var1choice, var2choice)

        # We got no skuCode, so look it up by variation key
        if not skuCode:
            skuCode = varConf.sku_code(var1choice, var2choice)

        item_key = self.get_item_key(self.context.UID(), variation_code, dimensions)
        item = cart_items.get(item_key, None)

        item_title = context.Title()
        quantity = int(quantity)
        vat_rate = Decimal(context.getField('vat').get(context))

        supplier_name, supplier_email = self._get_supplier_info(context)

        if dimensions is None:
            dimensions = []

        price_modifier = self.context.getPriceModifier()

        has_variations = varConf.hasVariations()
        if has_variations:
            variation_dict = varConf.getVariationDict()
            if not variation_dict[variation_code]['active']:
                # Item is disabled
                return False

            variation_pretty_name = varConf.getPrettyName(variation_code)
            item_title = '%s - %s' % (context.Title(), variation_pretty_name)
            price = Decimal(variation_dict[variation_code]['price'])

            price_per_item = self.calc_price_per_item(price, dimensions, price_modifier)

            # add item to cart
            if item is None:
                total = self.calc_item_total(price, quantity, dimensions, price_modifier)

                item = {'uid': self.context.UID(),
                        'title': item_title,
                        'description': context.Description(),
                        'skucode': skuCode,
                        'quantity': quantity,
                        'price': str(price),
                        'show_price': context.showPrice,
                        'total': '{:.2f}'.format(total),
                        'price_per_item': '{:.2f}'.format(price_per_item),
                        'url': context.absolute_url(),
                        'supplier_name': supplier_name,
                        'supplier_email': supplier_email,
                        'variation_code': variation_code,
                        'vat_rate': vat_rate,
                        'vat_amount': str(self.calc_vat(vat_rate, total)),
                        'dimensions': dimensions,
                        'selectable_dimensions': context.getSelectableDimensions(),
                        'price_modifier': price_modifier
                }
            # item already in cart, update quantity
            else:
                item['quantity'] = item.get('quantity', 0) + quantity
                total = self.calc_item_total(price, item['quantity'], dimensions, price_modifier)
                item['dimensions'] = dimensions
                item['total'] = '{:.2f}'.format(total)
                item['price_per_item'] = '{:.2f}'.format(price_per_item)
                item['vat_amount'] = str(self.calc_vat(vat_rate, total))

        else:
            price = Decimal(context.Schema().getField('price').get(context))
            price_per_item = self.calc_price_per_item(price, dimensions, price_modifier)

            # add item to cart
            if item is None:
                total = self.calc_item_total(price, quantity, dimensions, price_modifier)
                item = {'uid': self.context.UID(),
                        'title': item_title,
                        'description': context.Description(),
                        'skucode': skuCode,
                        'quantity': quantity,
                        'price': str(price),
                        'show_price': context.showPrice,
                        'total': '{:.2f}'.format(total),
                        'price_per_item': '{:.2f}'.format(price_per_item),
                        'url': context.absolute_url(),
                        'supplier_name': supplier_name,
                        'supplier_email': supplier_email,
                        'vat_rate': vat_rate,
                        'vat_amount': str(self.calc_vat(vat_rate, total)),
                        'dimensions': dimensions,
                        'selectable_dimensions': context.getSelectableDimensions(),
                        'price_modifier': price_modifier
                }
            # item already in cart, update quantity
            else:
                item['quantity'] = item.get('quantity', 0) + quantity
                total = self.calc_item_total(price, item['quantity'], dimensions, price_modifier)
                item['dimensions'] = dimensions
                item['total'] = '{:.2f}'.format(total)
                item['price_per_item'] = '{:.2f}'.format(price_per_item)
                item['vat_amount'] = str(self.calc_vat(vat_rate, total))

        # store cart in session
        cart_items[item_key] = item
        session[CART_KEY] = cart_items
        return True