Example #1
0
        public static string ChangeAttributes(Product product, NameValueCollection form)
        {
            decimal price             = ProductHelper.GetPrice(product);
            var     productProperties = ProductProperty.GetPropertiesByProduct(product.ProductId);

            if (productProperties.Count > 0)
            {
                var customFieldIds    = productProperties.Select(x => x.CustomFieldId).Distinct().ToList();
                var productAttributes = CustomField.GetByOption(CustomField.GetActiveByFields(product.SiteId, Product.FeatureGuid, customFieldIds), CustomFieldOptions.EnableShoppingCart);
                foreach (var attribute in productAttributes)
                {
                    string controlId      = string.Format("product_attribute_{0}_{1}", product.ProductId, attribute.CustomFieldId);
                    var    ctrlAttributes = form[controlId];
                    if (!String.IsNullOrEmpty(ctrlAttributes))
                    {
                        int selectedAttributeId = int.Parse(ctrlAttributes);
                        productProperties.ForEach(x =>
                        {
                            if (x.CustomFieldOptionId == selectedAttributeId)
                            {
                                price += x.OverriddenPrice;
                            }
                        });
                    }
                }
            }

            return(Json(new
            {
                success = true,
                price = ProductHelper.FormatPrice(price, true)
            }));
        }
Example #2
0
        /// <summary>
        /// Parse product attributes on the product details page
        /// </summary>
        /// <param name="product">Product</param>
        /// <param name="form">Form</param>
        /// <returns>Parsed attributes</returns>
        public static string ParseProductAttributes(Product product, NameValueCollection postParams)
        {
            string attributesXml = "";

            #region Product attributes

            if (ProductConfiguration.EnableShoppingCartAttributes)
            {
                var productProperties = ProductProperty.GetPropertiesByProduct(product.ProductId);
                if (productProperties.Count > 0)
                {
                    var customFieldIds    = productProperties.Select(x => x.CustomFieldId).Distinct().ToList();
                    var productAttributes = CustomField.GetByOption(CustomField.GetActiveByFields(product.SiteId, Product.FeatureGuid, customFieldIds), CustomFieldOptions.EnableShoppingCart);
                    foreach (var attribute in productAttributes)
                    {
                        string controlId      = string.Format("product_attribute_{0}_{1}", product.ProductId, attribute.CustomFieldId);
                        var    ctrlAttributes = postParams[controlId];
                        if (!String.IsNullOrEmpty(ctrlAttributes))
                        {
                            int selectedAttributeId = int.Parse(ctrlAttributes);
                            if (selectedAttributeId > 0)
                            {
                                attributesXml = CustomFieldHelper.AddProductAttribute(attributesXml, attribute, selectedAttributeId.ToString());
                            }
                        }
                    }
                }
            }

            #endregion

            // Gift cards

            return(attributesXml);
        }
Example #3
0
        public void BuildProductPropertiesXml(
            XmlDocument doc,
            XmlElement root,
            int languageId)
        {
            var productProperties = ProductProperty.GetPropertiesByProduct(product.ProductId);

            if (productProperties.Count > 0)
            {
                var customFields   = new List <CustomField>();
                var customFieldIds = new List <int>();

                foreach (var property in productProperties)
                {
                    if (!customFieldIds.Contains(property.CustomFieldId))
                    {
                        customFieldIds.Add(property.CustomFieldId);
                    }
                }

                var tmp = CustomField.GetActiveByFields(basePage.SiteId, Product.FeatureGuid, customFieldIds, languageId);
                customFields = CustomField.GetByOption(tmp, CustomFieldOptions.ShowInProductDetailsPage);

                foreach (CustomField field in customFields)
                {
                    XmlElement groupXml = doc.CreateElement("ProductProperties");
                    root.AppendChild(groupXml);

                    XmlHelper.AddNode(doc, groupXml, "FieldId", field.CustomFieldId.ToString());
                    XmlHelper.AddNode(doc, groupXml, "FieldType", field.FieldType.ToString());
                    XmlHelper.AddNode(doc, groupXml, "DataType", field.DataType.ToString());
                    XmlHelper.AddNode(doc, groupXml, "FilterType", field.FilterType.ToString());
                    XmlHelper.AddNode(doc, groupXml, "Title", field.Name);

                    foreach (ProductProperty property in productProperties)
                    {
                        if (property.ProductId == product.ProductId && property.CustomFieldId == field.CustomFieldId)
                        {
                            XmlElement optionXml = doc.CreateElement("Options");
                            groupXml.AppendChild(optionXml);

                            XmlHelper.AddNode(doc, optionXml, "FieldId", field.CustomFieldId.ToString());
                            XmlHelper.AddNode(doc, optionXml, "OptionId", property.CustomFieldOptionId.ToString());

                            if (property.CustomFieldOptionId > 0)
                            {
                                XmlHelper.AddNode(doc, optionXml, "Title", property.OptionName);
                                XmlHelper.AddNode(doc, optionXml, "Color", property.OptionColor); //TODO: not yet implemented
                                XmlHelper.AddNode(doc, optionXml, "Price", ProductHelper.FormatPrice(product.Price + property.OverriddenPrice, true));
                                XmlHelper.AddNode(doc, optionXml, "PriceAdjustment", ProductHelper.FormatPrice(property.OverriddenPrice, true));
                            }
                            else
                            {
                                XmlHelper.AddNode(doc, optionXml, "Title", property.CustomValue);
                            }

                            string pageUrl = SiteUtils.GetCurrentZoneUrl();
                            XmlHelper.AddNode(doc, optionXml, "Url", ProductHelper.GetQueryStringFilter(pageUrl, field.FilterType, field.CustomFieldId,
                                                                                                        property.CustomFieldOptionId));
                        }
                    }
                }
            }
        }