def getVariants(self): """ """ result = [] pvm = IProductVariantsManagement(self.context) for variant in pvm.getVariants(): # Options properties = [] properties_ids = {} for property in variant.getForProperties(): property_id, option_id = property.split(":") properties_ids[property_id] = option_id titles = getTitlesByIds(variant, property_id, option_id) if titles is None: continue properties.append(titles) result.append({ "id": variant.getId(), "path": "/".join(variant.getPhysicalPath()), "article_id": variant.getArticleId(), "title": variant.Title(), "url": variant.absolute_url(), "properties": properties, "properties_ids": properties_ids, "price": variant.getPrice(), }) return result
def getVariants(self): """ """ result = [] pvm = IProductVariantsManagement(self.context) for variant in pvm.getVariants(): # Options properties = [] properties_ids = {} for property in variant.getForProperties(): property_id, option_id = property.split(":") properties_ids[property_id] = option_id titles = getTitlesByIds(variant, property_id, option_id) if titles is None: continue properties.append(titles) result.append({ "id" : variant.getId(), "path" : "/".join(variant.getPhysicalPath()), "article_id" : variant.getArticleId(), "title" : variant.Title(), "url" : variant.absolute_url(), "properties" : properties, "properties_ids" : properties_ids, "price" : variant.getPrice(), }) return result
def deleteProperty(property, event): """Removes property from all existing product variants. """ product = property.aq_inner.aq_parent pvm = IProductVariantsManagement(product) if pvm.hasVariants() == False: return to_delete_property_id = property.getId() for variant in pvm.getVariants(): new_properties = [] for variant_property in variant.getForProperties(): variant_property_id = variant_property.split(":")[0] if variant_property_id != to_delete_property_id: new_properties.append(variant_property) new_properties.sort() variant.setForProperties(new_properties)
def saveVariants(self): """Saves all variants. """ article_ids = {} prices = {} properties = {} titles = {} for id, value in self.request.form.items(): if id.startswith("price"): prices[id[6:]] = value elif id.startswith("article-id"): article_ids[id[11:]] = value elif id.startswith("title"): titles[id[6:]] = value elif id.startswith("property"): property_id, variant_id = id.split("|") property_id = property_id[9:] if properties.has_key(variant_id) == False: properties[variant_id] = [] properties[variant_id].append("%s:%s" % (property_id, value)) pvm = IProductVariantsManagement(self.context) for variant in pvm.getVariants(): # Title variant.setTitle(titles[variant.getId()]) # Article ID variant.setArticleId(article_ids[variant.getId()]) # Price variant.setPrice(prices[variant.getId()]) properties[variant.getId()].sort() variant.setForProperties(properties[variant.getId()]) variant.reindexObject() putils = getToolByName(self.context, "plone_utils") putils.addPortalMessage(MESSAGES["VARIANTS_SAVED"]) url = self.context.absolute_url() + "/manage-variants-view" self.request.response.redirect(url)