Esempio n. 1
0
        /// <summary>
        /// Gets a <see cref="SpecificationsViewModel" /> for a given product.
        /// </summary>
        /// <param name="param">The parameter.</param>
        /// <returns>
        /// Instance of <see cref="SpecificationsViewModel" />.
        /// </returns>
        /// <exception cref="System.ArgumentNullException">param</exception>
        public virtual SpecificationsViewModel GetProductSpecificationsViewModel(GetProductSpecificationsParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }
            if (param.Product == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.Product)), nameof(param));
            }
            if (param.ProductDefinition == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.ProductDefinition)), nameof(param));
            }

            if (IsInheritedSpecification(param))
            {
                return(null);
            }

            var vm = new SpecificationsViewModel
            {
                ProductId = param.Product.Id,
                VariantId = param.VariantId,
                Groups    = GetSpecificationsGroups(param)
            };

            return(vm);
        }
Esempio n. 2
0
        protected virtual bool IsInheritedSpecification(GetProductSpecificationsParam param)
        {
            var variant = param.Product.Variants.FirstOrDefault(v => v.Id == param.VariantId);

            if (variant == null)
            {
                return(false);
            }

            var allPropertyNames = param.ProductDefinition.PropertyGroups
                                   .Where(group => @group.IsIncluded())
                                   .Aggregate(new List <string>(), (allProperties, next) =>
            {
                var properties = next.Properties
                                 .Where(property => property.IsIncluded())
                                 .Select(property => property.PropertyName);
                allProperties.AddRange(properties);
                return(allProperties);
            });

            return(!allPropertyNames.Any(propertyName => variant.PropertyBag.ContainsKey(propertyName)));
        }
Esempio n. 3
0
        protected virtual List <SpecificationsAttributeViewModel> GetSpecificationsAttributes(ProductPropertyDefinitionGroup group, GetProductSpecificationsParam param)
        {
            var specificationAttributes = group.Properties
                                          .Where(property => property.IsIncluded())
                                          .OrderBy(property => property.DisplayOrder)
                                          .Select(property => new SpecificationsAttributeViewModel
            {
                PropertyName = property.PropertyName,
                Title        = GetLocalizedTitle(property.DisplayName),
                Value        = GetSpecificationsAttributeValue(property, param)
            })
                                          .Where(attribute => !string.IsNullOrWhiteSpace(attribute.Value))
                                          .ToList();

            return(specificationAttributes);
        }
Esempio n. 4
0
        protected virtual List <SpecificationsGroupViewModel> GetSpecificationsGroups(GetProductSpecificationsParam param)
        {
            var specificationGroups = param.ProductDefinition.PropertyGroups
                                      .Where(group => @group.IsIncluded())
                                      .OrderBy(group => @group.DisplayOrder)
                                      .Select(group => new SpecificationsGroupViewModel
            {
                Title      = GetLocalizedTitle(@group.DisplayName),
                Attributes = GetSpecificationsAttributes(@group, param),
                GroupName  = group.Name
            })
                                      .Where(group => @group.Attributes.Any())
                                      .ToList();

            return(specificationGroups);
        }
Esempio n. 5
0
        protected virtual string GetSpecificationsAttributeValue(ProductPropertyDefinition property, GetProductSpecificationsParam param)
        {
            var variantProperty = param.Product.Variants.Find(v => v.Id == param.VariantId)?.PropertyBag;

            if (variantProperty?.ContainsKey(property.PropertyName) ?? false)
            {
                return(ProductFormatter.FormatValue(property, variantProperty[property.PropertyName], Context.CultureInfo));
            }

            if (param.Product.PropertyBag?.ContainsKey(property.PropertyName) ?? false)
            {
                return(ProductFormatter.FormatValue(property, param.Product.PropertyBag[property.PropertyName], Context.CultureInfo));
            }

            return(string.Empty);
        }