예제 #1
0
        public async Task <IActionResult> CreateProductSpecificationAttribute(
            [ModelBinder(typeof(JsonModelBinder <ProductSpecificationAttributeDto>))]
            Delta <ProductSpecificationAttributeDto> productSpecificaitonAttributeDelta)
        {
            // Here we display the errors if the validation has failed at some point.
            if (!ModelState.IsValid)
            {
                return(Error());
            }

            // Inserting the new product
            var productSpecificationAttribute = new ProductSpecificationAttribute();

            productSpecificaitonAttributeDelta.Merge(productSpecificationAttribute);

            await _specificationAttributeService.InsertProductSpecificationAttributeAsync(productSpecificationAttribute);

            await CustomerActivityService.InsertActivityAsync("AddNewProductSpecificationAttribute", productSpecificationAttribute.Id.ToString());

            // Preparing the result dto of the new product
            var productSpecificationAttributeDto = _dtoHelper.PrepareProductSpecificationAttributeDto(productSpecificationAttribute);

            var productSpecificationAttributesRootObjectDto = new ProductSpecificationAttributesRootObjectDto();

            productSpecificationAttributesRootObjectDto.ProductSpecificationAttributes.Add(productSpecificationAttributeDto);

            var json = JsonFieldsSerializer.Serialize(productSpecificationAttributesRootObjectDto, string.Empty);

            return(new RawJsonActionResult(json));
        }
예제 #2
0
        /// <summary>
        /// Copy product specifications
        /// </summary>
        /// <param name="product">Product</param>
        /// <param name="productCopy">New product</param>
        /// <returns>A task that represents the asynchronous operation</returns>
        protected virtual async Task CopyProductSpecificationsAsync(Product product, Product productCopy)
        {
            var allLanguages = await _languageService.GetAllLanguagesAsync();

            foreach (var productSpecificationAttribute in await _specificationAttributeService.GetProductSpecificationAttributesAsync(product.Id))
            {
                var psaCopy = new ProductSpecificationAttribute
                {
                    ProductId       = productCopy.Id,
                    AttributeTypeId = productSpecificationAttribute.AttributeTypeId,
                    SpecificationAttributeOptionId = productSpecificationAttribute.SpecificationAttributeOptionId,
                    CustomValue       = productSpecificationAttribute.CustomValue,
                    AllowFiltering    = productSpecificationAttribute.AllowFiltering,
                    ShowOnProductPage = productSpecificationAttribute.ShowOnProductPage,
                    DisplayOrder      = productSpecificationAttribute.DisplayOrder
                };

                await _specificationAttributeService.InsertProductSpecificationAttributeAsync(psaCopy);

                foreach (var language in allLanguages)
                {
                    var customValue = await _localizationService.GetLocalizedAsync(productSpecificationAttribute, x => x.CustomValue, language.Id, false, false);

                    if (!string.IsNullOrEmpty(customValue))
                    {
                        await _localizedEntityService.SaveLocalizedValueAsync(psaCopy, x => x.CustomValue, customValue, language.Id);
                    }
                }
            }
        }
예제 #3
0
        public async Task SetSpecificationAttributesAsync(AbcMattressModel model, Product product)
        {
            var comfortSpecAttr = (await _specificationAttributeService.GetSpecificationAttributesAsync())
                                  .Where(sa => sa.Name == "Comfort")
                                  .FirstOrDefault();

            if (comfortSpecAttr == null)
            {
                throw new NopException("Unable to find 'Comfort' specification attribute.");
            }

            var options = await _specificationAttributeService.GetSpecificationAttributeOptionsBySpecificationAttributeAsync(comfortSpecAttr.Id);

            var option = options.Where(so => so.Name == model.Comfort)
                         .FirstOrDefault();

            if (option == null)
            {
                throw new NopException($"Unable to find '{model.Comfort}' " +
                                       "specification attribute option for the 'Comfort' " +
                                       "specification attribute.");
            }

            var productSpecificationAttributes = await _specificationAttributeService.GetProductSpecificationAttributesAsync(product.Id);

            var comfortProductSpecAttr = productSpecificationAttributes.Where(psa => psa.SpecificationAttributeOptionId == option.Id)
                                         .FirstOrDefault();

            // Found the existing product spec. attribute - just skip processing
            if (comfortProductSpecAttr != null)
            {
                return;
            }

            // delete any currently existing Comfort specs
            var optionIds = options.Select(o => o.Id);
            var existingComfortProductSpecAttributes = productSpecificationAttributes.Where(psa => optionIds.Contains(psa.SpecificationAttributeOptionId));

            foreach (var psa in existingComfortProductSpecAttributes)
            {
                await _specificationAttributeService.DeleteProductSpecificationAttributeAsync(psa);
            }

            // Add new product spec attribute
            var productSpecAttr = new ProductSpecificationAttribute()
            {
                ProductId     = product.Id,
                AttributeType = SpecificationAttributeType.Option,
                SpecificationAttributeOptionId = option.Id,
                AllowFiltering = true
            };
            await _specificationAttributeService.InsertProductSpecificationAttributeAsync(
                productSpecAttr
                );
        }
 /// <summary>
 /// Copy product specifications
 /// </summary>
 /// <param name="product">Product</param>
 /// <param name="productCopy">New product</param>
 /// <returns>A task that represents the asynchronous operation</returns>
 protected virtual async Task CopyProductSpecificationsAsync(Product product, Product productCopy)
 {
     foreach (var productSpecificationAttribute in await _specificationAttributeService.GetProductSpecificationAttributesAsync(product.Id))
     {
         var psaCopy = new ProductSpecificationAttribute
         {
             ProductId       = productCopy.Id,
             AttributeTypeId = productSpecificationAttribute.AttributeTypeId,
             SpecificationAttributeOptionId = productSpecificationAttribute.SpecificationAttributeOptionId,
             CustomValue       = productSpecificationAttribute.CustomValue,
             AllowFiltering    = productSpecificationAttribute.AllowFiltering,
             ShowOnProductPage = productSpecificationAttribute.ShowOnProductPage,
             DisplayOrder      = productSpecificationAttribute.DisplayOrder
         };
         await _specificationAttributeService.InsertProductSpecificationAttributeAsync(psaCopy);
     }
 }