/// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 6
0
        /// <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 += "&nbsp;&nbsp;&nbsp;";
                        }
                        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;
            }
        }