public static webModel.Product ToWebModel(this moduleModel.CatalogProduct product, IBlobUrlResolver blobUrlResolver, moduleModel.Property[] properties = null)
        {
            var retVal = new webModel.Product();

            retVal.InjectFrom(product);

            retVal.SeoInfos = product.SeoInfos;

            if (product.Catalog != null)
            {
                retVal.Catalog = product.Catalog.ToWebModel();
            }

            if (product.Category != null)
            {
                retVal.Category = product.Category.ToWebModel();
            }

            if (product.Assets != null)
            {
                var assetBases = product.Assets.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
                retVal.Images = assetBases.OfType <webModel.ProductImage>().ToList();
                retVal.Assets = assetBases.OfType <webModel.ProductAsset>().ToList();
            }

            if (product.Variations != null)
            {
                retVal.Variations = product.Variations.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
            }

            if (product.Links != null)
            {
                retVal.Links = product.Links.Select(x => x.ToWebModel()).ToList();
            }

            if (product.Reviews != null)
            {
                retVal.Reviews = product.Reviews.Select(x => x.ToWebModel()).ToList();
            }

            if (product.Associations != null)
            {
                retVal.Associations = product.Associations.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
            }
            retVal.TitularItemId = product.MainProductId;

            retVal.Properties = new List <webModel.Property>();
            //Need add property for each meta info
            if (properties != null)
            {
                foreach (var property in properties)
                {
                    var webModelProperty = property.ToWebModel();
                    webModelProperty.Category     = null;
                    webModelProperty.Values       = new List <webModel.PropertyValue>();
                    webModelProperty.IsManageable = true;
                    webModelProperty.IsReadOnly   = property.Type != moduleModel.PropertyType.Product && property.Type != moduleModel.PropertyType.Variation;
                    retVal.Properties.Add(webModelProperty);
                }
            }

            //Populate property values
            if (product.PropertyValues != null)
            {
                foreach (var propValue in product.PropertyValues.Select(x => x.ToWebModel()))
                {
                    var property = retVal.Properties.FirstOrDefault(x => x.IsSuitableForValue(propValue));
                    if (property == null)
                    {
                        //Need add dummy property for each value without property
                        property = new webModel.Property(propValue, product.CatalogId, product.CategoryId, moduleModel.PropertyType.Product);
                        retVal.Properties.Add(property);
                    }
                    property.Values.Add(propValue);
                }
            }

            return(retVal);
        }
Example #2
0
        public static webModel.Product ToWebModel(this moduleModel.CatalogProduct product, IBlobUrlResolver blobUrlResolver)
        {
            var retVal = new webModel.Product();

            retVal.InjectFrom(product);

            retVal.SeoInfos = product.SeoInfos;

            if (product.Catalog != null)
            {
                retVal.Catalog = product.Catalog.ToWebModel();
                //Reset catalog properties and languages for response size economy
                retVal.Catalog.Properties = null;
            }

            if (product.Category != null)
            {
                retVal.Category = product.Category.ToWebModel(blobUrlResolver);
                //Reset  category catalog, properties  for response size economy
                retVal.Category.Catalog    = null;
                retVal.Category.Properties = null;
            }

            if (product.Images != null)
            {
                retVal.Images = product.Images.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
            }

            if (product.Assets != null)
            {
                retVal.Assets = product.Assets.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
            }

            if (product.Variations != null)
            {
                retVal.Variations = product.Variations.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
            }

            if (product.Links != null)
            {
                retVal.Links = product.Links.Select(x => x.ToWebModel()).ToList();
            }

            if (product.Reviews != null)
            {
                retVal.Reviews = product.Reviews.Select(x => x.ToWebModel()).ToList();
            }

            if (product.Associations != null)
            {
                retVal.Associations = product.Associations.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
            }
            //Init parents
            if (product.Category != null)
            {
                retVal.Parents = new List <webModel.Category>();
                if (product.Category.Parents != null)
                {
                    retVal.Parents.AddRange(product.Category.Parents.Select(x => x.ToWebModel()));
                }
                retVal.Parents.Add(product.Category.ToWebModel());
                foreach (var parent in retVal.Parents)
                {
                    //Reset some props to decrease size of resulting json
                    parent.Catalog    = null;
                    parent.Properties = null;
                }
            }

            retVal.TitularItemId = product.MainProductId;

            retVal.Properties = new List <webModel.Property>();
            //Need add property for each meta info
            if (product.Properties != null)
            {
                foreach (var property in product.Properties)
                {
                    var webModelProperty = property.ToWebModel();
                    //Reset dict values to decrease response size
                    webModelProperty.DictionaryValues = null;
                    webModelProperty.Category         = null;
                    webModelProperty.Values           = new List <webModel.PropertyValue>();
                    webModelProperty.IsManageable     = true;
                    webModelProperty.IsReadOnly       = property.Type != moduleModel.PropertyType.Product && property.Type != moduleModel.PropertyType.Variation;
                    retVal.Properties.Add(webModelProperty);
                }
            }

            //Populate property values
            if (product.PropertyValues != null)
            {
                foreach (var propValue in product.PropertyValues.Select(x => x.ToWebModel()))
                {
                    var property = retVal.Properties.FirstOrDefault(x => x.Id == propValue.PropertyId);
                    if (property == null)
                    {
                        //Need add dummy property for each value without property
                        property = new webModel.Property(propValue, product.CatalogId, product.CategoryId, moduleModel.PropertyType.Product);
                        retVal.Properties.Add(property);
                    }
                    property.Values.Add(propValue);
                }
            }

            return(retVal);
        }
        public static webModel.Product ToWebModel(this moduleModel.CatalogProduct product, IBlobUrlResolver blobUrlResolver, moduleModel.Property[] properties = null)
        {
            var retVal = new webModel.Product();
            retVal.InjectFrom(product);

			retVal.SeoInfos = product.SeoInfos;

            if (product.Catalog != null)
            {
                retVal.Catalog = product.Catalog.ToWebModel();
            }

            if (product.Category != null)
            {
				retVal.Category = product.Category.ToWebModel(blobUrlResolver);
            }

            if (product.Images != null)
            {
				retVal.Images = product.Images.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
            }

			if(product.Assets != null)
			{
				retVal.Assets = product.Assets.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
			}

            if (product.Variations != null)
            {
                retVal.Variations = product.Variations.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
            }

            if (product.Links != null)
            {
                retVal.Links = product.Links.Select(x => x.ToWebModel()).ToList();
            }

            if (product.Reviews != null)
            {
                retVal.Reviews = product.Reviews.Select(x => x.ToWebModel()).ToList();
            }

            if (product.Associations != null)
            {
                retVal.Associations = product.Associations.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
            }
            retVal.TitularItemId = product.MainProductId;

            retVal.Properties = new List<webModel.Property>();
            //Need add property for each meta info
            if (properties != null)
            {
                foreach (var property in properties)
                {
                    var webModelProperty = property.ToWebModel();
                    webModelProperty.Category = null;
                    webModelProperty.Values = new List<webModel.PropertyValue>();
                    webModelProperty.IsManageable = true;
                    webModelProperty.IsReadOnly = property.Type != moduleModel.PropertyType.Product && property.Type != moduleModel.PropertyType.Variation;
                    retVal.Properties.Add(webModelProperty);
                }
            }

            //Populate property values
            if (product.PropertyValues != null)
            {
                foreach (var propValue in product.PropertyValues.Select(x=>x.ToWebModel()))
                {
					var property = retVal.Properties.FirstOrDefault(x => x.IsSuitableForValue(propValue));
                    if (property == null)
					{  
						//Need add dummy property for each value without property
						property = new webModel.Property(propValue, product.CatalogId, product.CategoryId, moduleModel.PropertyType.Product);
                        retVal.Properties.Add(property);
                    }
					property.Values.Add(propValue);
                }
            }

            return retVal;
        }
        public static webModel.Product ToWebModel(this moduleModel.CatalogProduct product, IBlobUrlResolver blobUrlResolver)
        {
            var retVal = new webModel.Product();
            retVal.InjectFrom(product);

			retVal.SeoInfos = product.SeoInfos;

            if (product.Catalog != null)
            {
                retVal.Catalog = product.Catalog.ToWebModel();
                //Reset catalog properties and languages for response size economy
                retVal.Catalog.Properties = null;
            }

            if (product.Category != null)
            {
				retVal.Category = product.Category.ToWebModel(blobUrlResolver);
                //Reset  category catalog, properties  for response size economy
                retVal.Category.Catalog = null;
                retVal.Category.Properties = null;
            }

            if (product.Images != null)
            {
				retVal.Images = product.Images.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
            }

			if(product.Assets != null)
			{
				retVal.Assets = product.Assets.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
			}

            if (product.Variations != null)
            {
                retVal.Variations = product.Variations.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
            }

            if (product.Links != null)
            {
                retVal.Links = product.Links.Select(x => x.ToWebModel()).ToList();
            }

            if (product.Reviews != null)
            {
                retVal.Reviews = product.Reviews.Select(x => x.ToWebModel()).ToList();
            }

            if (product.Associations != null)
            {
                retVal.Associations = product.Associations.Select(x => x.ToWebModel(blobUrlResolver)).ToList();
            }
            //Init parents
            if(product.Category != null)
            {
                retVal.Parents = new List<webModel.Category>();
                if(product.Category.Parents != null)
                {
                    retVal.Parents.AddRange(product.Category.Parents.Select(x => x.ToWebModel()));
                }
                retVal.Parents.Add(product.Category.ToWebModel());
                foreach(var parent in retVal.Parents)
                {
                    //Reset some props to decrease size of resulting json
                    parent.Catalog = null;
                    parent.Properties = null;
                }
            }

            retVal.TitularItemId = product.MainProductId;

            retVal.Properties = new List<webModel.Property>();
            //Need add property for each meta info
            if (product.Properties != null)
            {
                foreach (var property in product.Properties)
                {
                    var webModelProperty = property.ToWebModel();
                    //Reset dict values to decrease response size
                    webModelProperty.DictionaryValues = null;
                    webModelProperty.Category = null;
                    webModelProperty.Values = new List<webModel.PropertyValue>();
                    webModelProperty.IsManageable = true;
                    webModelProperty.IsReadOnly = property.Type != moduleModel.PropertyType.Product && property.Type != moduleModel.PropertyType.Variation;
                    retVal.Properties.Add(webModelProperty);
                }
            }

            //Populate property values
            if (product.PropertyValues != null)
            {
                foreach (var propValue in product.PropertyValues.Select(x=>x.ToWebModel()))
                {
					var property = retVal.Properties.FirstOrDefault(x => x.Id == propValue.PropertyId);
                    if (property == null)
					{  
						//Need add dummy property for each value without property
						property = new webModel.Property(propValue, product.CatalogId, product.CategoryId, moduleModel.PropertyType.Product);
                        retVal.Properties.Add(property);
                    }
                    property.Values.Add(propValue);
                }
            }

            return retVal;
        }