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
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() ])
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
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() ])
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
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
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