/// <summary> /// Get product variant attribute values /// </summary> /// <param name="Attributes">Attributes</param> /// <returns>Product variant attribute values</returns> public static ProductVariantAttributeValueCollection ParseProductVariantAttributeValues(string Attributes) { ProductVariantAttributeValueCollection pvaValues = new ProductVariantAttributeValueCollection(); ProductVariantAttributeCollection pvaCollection = ParseProductVariantAttributes(Attributes); foreach (ProductVariantAttribute pva in pvaCollection) { if (!pva.ShouldHaveValues) { continue; } List <string> pvaValuesStr = ParseValues(Attributes, pva.ProductVariantAttributeID); foreach (string pvaValueStr in pvaValuesStr) { if (!String.IsNullOrEmpty(pvaValueStr)) { int pvaValueID = 0; if (int.TryParse(pvaValueStr, out pvaValueID)) { ProductVariantAttributeValue pvaValue = ProductAttributeManager.GetProductVariantAttributeValueByID(pvaValueID); if (pvaValue != null) { pvaValues.Add(pvaValue); } } } } } return(pvaValues); }
/// <summary> /// Gets the shopping cart unit price (one item) /// </summary> /// <param name="shoppingCartItem">The shopping cart item</param> /// <param name="customer">The customer</param> /// <param name="includeDiscounts">A value indicating whether include discounts or not for price computation</param> /// <returns>Shopping cart unit price (one item)</returns> public static decimal GetUnitPrice(ShoppingCartItem shoppingCartItem, Customer customer, bool includeDiscounts) { decimal finalPrice = decimal.Zero; ProductVariant productVariant = shoppingCartItem.ProductVariant; if (productVariant != null) { decimal attributesTotalPrice = decimal.Zero; ProductVariantAttributeValueCollection pvaValues = ProductAttributeHelper.ParseProductVariantAttributeValues(shoppingCartItem.AttributesXML); foreach (ProductVariantAttributeValue pvaValue in pvaValues) { attributesTotalPrice += pvaValue.PriceAdjustment; } finalPrice = GetFinalPrice(productVariant, customer, attributesTotalPrice, includeDiscounts); if (productVariant.TierPrices.Count > 0) { decimal tierPrice = GetTierPrice(productVariant, shoppingCartItem.Quantity); finalPrice = Math.Min(finalPrice, tierPrice); } } finalPrice = Math.Round(finalPrice, 2); return(finalPrice); }
private static ProductVariantAttributeValueCollection DBMapping(DBProductVariantAttributeValueCollection dbCollection) { if (dbCollection == null) { return(null); } ProductVariantAttributeValueCollection collection = new ProductVariantAttributeValueCollection(); foreach (DBProductVariantAttributeValue dbItem in dbCollection) { ProductVariantAttributeValue item = DBMapping(dbItem); collection.Add(item); } return(collection); }
private void BindData() { ProductVariantAttribute productVariantAttribute = ProductAttributeManager.GetProductVariantAttributeById(this.ProductVariantAttributeId); if (productVariantAttribute != null) { if (this.HasLocalizableContent) { var languages = this.GetLocalizableLanguagesSupported(); rptrLanguageTabs.DataSource = languages; rptrLanguageTabs.DataBind(); rptrLanguageDivs.DataSource = languages; rptrLanguageDivs.DataBind(); } ProductVariant productVariant = productVariantAttribute.ProductVariant; if (productVariant == null) { Response.Redirect("Products.aspx"); } ProductAttribute productAttribute = productVariantAttribute.ProductAttribute; if (productAttribute == null) { Response.Redirect("Products.aspx"); } this.lblTitle.Text = string.Format(GetLocaleResourceString("Admin.ProductVariantAttributeValues.AddEdit"), Server.HtmlEncode(productAttribute.Name), Server.HtmlEncode(productVariant.FullProductName)); this.hlProductURL.NavigateUrl = CommonHelper.GetStoreAdminLocation() + "ProductVariantDetails.aspx?ProductVariantID=" + productVariant.ProductVariantId; ProductVariantAttributeValueCollection productVariantAttributeValues = ProductAttributeManager.GetProductVariantAttributeValues(productVariantAttribute.ProductVariantAttributeId, 0); if (productVariantAttributeValues.Count > 0) { this.gvProductVariantAttributeValues.Visible = true; this.gvProductVariantAttributeValues.DataSource = productVariantAttributeValues; this.gvProductVariantAttributeValues.DataBind(); } else { this.gvProductVariantAttributeValues.Visible = false; } } else { Response.Redirect("Products.aspx"); } }
/// <summary> /// Gets product variant attribute values by product identifier /// </summary> /// <param name="ProductVariantAttributeID">The product variant attribute mapping identifier</param> /// <returns>Product variant attribute mapping collection</returns> public static ProductVariantAttributeValueCollection GetProductVariantAttributeValues(int ProductVariantAttributeID) { string key = string.Format(PRODUCTVARIANTATTRIBUTEVALUES_ALL_KEY, ProductVariantAttributeID); object obj2 = NopCache.Get(key); if (ProductAttributeManager.CacheEnabled && (obj2 != null)) { return((ProductVariantAttributeValueCollection)obj2); } DBProductVariantAttributeValueCollection dbCollection = DBProviderManager <DBProductAttributeProvider> .Provider.GetProductVariantAttributeValues(ProductVariantAttributeID); ProductVariantAttributeValueCollection productVariantAttributeValues = DBMapping(dbCollection); if (ProductAttributeManager.CacheEnabled) { NopCache.Max(key, productVariantAttributeValues); } return(productVariantAttributeValues); }
/// <summary> /// Gets discount amount /// </summary> /// <param name="shoppingCartItem">The shopping cart item</param> /// <param name="customer">The customer</param> /// <returns>Discount amount</returns> public static decimal GetDiscountAmount(ShoppingCartItem shoppingCartItem, Customer customer) { decimal discountAmount = decimal.Zero; ProductVariant productVariant = shoppingCartItem.ProductVariant; if (productVariant != null) { decimal attributesTotalPrice = decimal.Zero; ProductVariantAttributeValueCollection pvaValues = ProductAttributeHelper.ParseProductVariantAttributeValues(shoppingCartItem.AttributesXML); foreach (ProductVariantAttributeValue pvaValue in pvaValues) { attributesTotalPrice += pvaValue.PriceAdjustment; } decimal productVariantDiscountAmount = GetDiscountAmount(productVariant, customer, attributesTotalPrice); discountAmount = productVariantDiscountAmount * shoppingCartItem.Quantity; } discountAmount = Math.Round(discountAmount, 2); return(discountAmount); }
protected void CreateAttributeControls() { ProductVariant productVariant = ProductManager.GetProductVariantByID(this.ProductVariantID); if (productVariant != null) { ProductVariantAttributeCollection productVariantAttributes = productVariant.ProductVariantAttributes; if (productVariantAttributes.Count > 0) { this.Visible = true; foreach (ProductVariantAttribute attribute in productVariantAttributes) { Panel divAttribute = new Panel(); Label attributeTitle = new Label(); if (attribute.IsRequired) { attributeTitle.Text = "<span>*</span> "; } //text prompt string textPrompt = string.Empty; if (!string.IsNullOrEmpty(attribute.TextPrompt)) { textPrompt = attribute.TextPrompt; } else { textPrompt += attribute.ProductAttribute.Name; } attributeTitle.Text += Server.HtmlEncode(textPrompt); attributeTitle.Style.Add("font-weight", "bold"); //description if (!string.IsNullOrEmpty(attribute.ProductAttribute.Description)) { attributeTitle.Text += string.Format("<div>{0}</div>", Server.HtmlEncode( attribute.ProductAttribute.Description)); } bool addBreak = true; switch (attribute.AttributeControlType) { case AttributeControlTypeEnum.TextBox: { addBreak = false; } break; default: break; } if (addBreak) { attributeTitle.Text += "<br />"; } else { attributeTitle.Text += " "; } divAttribute.Controls.Add(attributeTitle); switch (attribute.AttributeControlType) { case AttributeControlTypeEnum.DropdownList: { DropDownList ddlAttributes = new DropDownList(); ddlAttributes.ID = attribute.ProductAttribute.Name; if (!attribute.IsRequired) { ddlAttributes.Items.Add(new ListItem("---", "0")); } ProductVariantAttributeValueCollection pvaValues = attribute.ProductVariantAttributeValues; foreach (ProductVariantAttributeValue pvaValue in pvaValues) { string pvaValueName = pvaValue.Name; decimal priceAdjustmentBase = TaxManager.GetPrice(productVariant, pvaValue.PriceAdjustment); decimal priceAdjustment = CurrencyManager.ConvertCurrency(priceAdjustmentBase, CurrencyManager.PrimaryStoreCurrency, NopContext.Current.WorkingCurrency); if (priceAdjustmentBase > decimal.Zero) { pvaValueName += string.Format(" [+{0}]", PriceHelper.FormatPrice(priceAdjustment, false, false)); } ListItem pvaValueItem = new ListItem(pvaValueName, pvaValue.ProductVariantAttributeValueID.ToString()); pvaValueItem.Selected = pvaValue.IsPreSelected; ddlAttributes.Items.Add(pvaValueItem); } divAttribute.Controls.Add(ddlAttributes); } break; case AttributeControlTypeEnum.RadioList: { RadioButtonList rblAttributes = new RadioButtonList(); rblAttributes.ID = attribute.ProductAttribute.Name; ProductVariantAttributeValueCollection pvaValues = attribute.ProductVariantAttributeValues; foreach (ProductVariantAttributeValue pvaValue in pvaValues) { string pvaValueName = pvaValue.Name; decimal priceAdjustmentBase = TaxManager.GetPrice(productVariant, pvaValue.PriceAdjustment); decimal priceAdjustment = CurrencyManager.ConvertCurrency(priceAdjustmentBase, CurrencyManager.PrimaryStoreCurrency, NopContext.Current.WorkingCurrency); if (priceAdjustmentBase > decimal.Zero) { pvaValueName += string.Format(" [+{0}]", PriceHelper.FormatPrice(priceAdjustment, false, false)); } ListItem pvaValueItem = new ListItem(Server.HtmlEncode(pvaValueName), pvaValue.ProductVariantAttributeValueID.ToString()); pvaValueItem.Selected = pvaValue.IsPreSelected; rblAttributes.Items.Add(pvaValueItem); } divAttribute.Controls.Add(rblAttributes); } break; case AttributeControlTypeEnum.Checkboxes: { CheckBoxList cblAttributes = new CheckBoxList(); cblAttributes.ID = attribute.ProductAttribute.Name; ProductVariantAttributeValueCollection pvaValues = attribute.ProductVariantAttributeValues; foreach (ProductVariantAttributeValue pvaValue in pvaValues) { string pvaValueName = pvaValue.Name; decimal priceAdjustmentBase = TaxManager.GetPrice(productVariant, pvaValue.PriceAdjustment); decimal priceAdjustment = CurrencyManager.ConvertCurrency(priceAdjustmentBase, CurrencyManager.PrimaryStoreCurrency, NopContext.Current.WorkingCurrency); if (priceAdjustmentBase > decimal.Zero) { pvaValueName += string.Format(" [+{0}]", PriceHelper.FormatPrice(priceAdjustment, false, false)); } ListItem pvaValueItem = new ListItem(Server.HtmlEncode(pvaValueName), pvaValue.ProductVariantAttributeValueID.ToString()); pvaValueItem.Selected = pvaValue.IsPreSelected; cblAttributes.Items.Add(pvaValueItem); } divAttribute.Controls.Add(cblAttributes); } break; case AttributeControlTypeEnum.TextBox: { TextBox txtAttribute = new TextBox(); txtAttribute.ID = attribute.ProductAttribute.Name; divAttribute.Controls.Add(txtAttribute); } break; default: break; } phAttributes.Controls.Add(divAttribute); } } else { this.Visible = false; } } else { this.Visible = false; } }