public IActionResult InsertLocalizedProperty([FromBody] LocalizedProperty model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            //var entity = model.ToEntity();
            var entity = model;

            entity.Id = 0;
            _localizedEntityService.InsertLocalizedProperty(entity);

            return(NoContent());
        }
        public virtual int CopyAttributeOptions(ProductVariantAttribute productVariantAttribute, int productAttributeOptionsSetId, bool deleteExistingValues)
        {
            Guard.NotNull(productVariantAttribute, nameof(productVariantAttribute));
            Guard.NotZero(productVariantAttribute.Id, nameof(productVariantAttribute.Id));
            Guard.NotZero(productAttributeOptionsSetId, nameof(productAttributeOptionsSetId));

            if (deleteExistingValues)
            {
                var existingValues = productVariantAttribute.ProductVariantAttributeValues.ToList();
                if (!existingValues.Any())
                {
                    existingValues = GetProductVariantAttributeValues(productVariantAttribute.Id).ToList();
                }

                existingValues.Each(x => DeleteProductVariantAttributeValue(x));
            }

            var result           = 0;
            var attributeOptions = _productAttributeOptionRepository.TableUntracked
                                   .Where(x => x.ProductAttributeOptionsSetId == productAttributeOptionsSetId)
                                   .ToList();

            if (!attributeOptions.Any())
            {
                return(result);
            }

            // Do not insert already existing values (identified by name field).
            var existingValueNames = new HashSet <string>(_productVariantAttributeValueRepository.TableUntracked
                                                          .Where(x => x.ProductVariantAttributeId == productVariantAttribute.Id)
                                                          .Select(x => x.Name)
                                                          .ToList());

            Picture picture = null;
            ProductVariantAttributeValue productVariantAttributeValue = null;
            var pictureIds = attributeOptions.Where(x => x.PictureId != 0).Select(x => x.PictureId).Distinct().ToArray();
            var pictures   = _pictureService.GetPicturesByIds(pictureIds, true).ToDictionarySafe(x => x.Id);

            using (_localizedEntityService.BeginScope())
            {
                foreach (var option in attributeOptions)
                {
                    if (existingValueNames.Contains(option.Name))
                    {
                        continue;
                    }

                    productVariantAttributeValue           = option.Clone();
                    productVariantAttributeValue.PictureId = 0;
                    productVariantAttributeValue.ProductVariantAttributeId = productVariantAttribute.Id;

                    // Copy picture.
                    if (option.PictureId != 0 && pictures.TryGetValue(option.PictureId, out picture))
                    {
                        var pictureBinary = _pictureService.LoadPictureBinary(picture);

                        var newPicture = _pictureService.InsertPicture(
                            pictureBinary,
                            picture.MimeType,
                            picture.SeoFilename,
                            picture.IsNew,
                            picture.Width ?? 0,
                            picture.Height ?? 0,
                            picture.IsTransient
                            );

                        productVariantAttributeValue.PictureId = newPicture.Id;
                    }

                    // No scope commit, we need new entity id.
                    _productVariantAttributeValueRepository.Insert(productVariantAttributeValue);
                    ++result;

                    // Copy localized properties too.
                    var optionProperties = _localizedEntityService.GetLocalizedProperties(option.Id, "ProductAttributeOption");

                    foreach (var property in optionProperties)
                    {
                        _localizedEntityService.InsertLocalizedProperty(new LocalizedProperty
                        {
                            EntityId       = productVariantAttributeValue.Id,
                            LocaleKeyGroup = "ProductVariantAttributeValue",
                            LocaleKey      = property.LocaleKey,
                            LocaleValue    = property.LocaleValue,
                            LanguageId     = property.LanguageId
                        });
                    }
                }
            }

            return(result);
        }
        public virtual int CopyAttributeOptions(ProductVariantAttribute productVariantAttribute, int productAttributeOptionsSetId, bool deleteExistingValues)
        {
            Guard.NotNull(productVariantAttribute, nameof(productVariantAttribute));
            Guard.NotZero(productVariantAttribute.Id, nameof(productVariantAttribute.Id));
            Guard.NotZero(productAttributeOptionsSetId, nameof(productAttributeOptionsSetId));

            if (deleteExistingValues)
            {
                var existingValues = productVariantAttribute.ProductVariantAttributeValues.ToList();
                if (!existingValues.Any())
                {
                    existingValues = GetProductVariantAttributeValues(productVariantAttribute.Id).ToList();
                }

                existingValues.Each(x => DeleteProductVariantAttributeValue(x));
            }

            var result           = 0;
            var attributeOptions = _productAttributeOptionRepository.TableUntracked
                                   .Where(x => x.ProductAttributeOptionsSetId == productAttributeOptionsSetId)
                                   .ToList();

            if (!attributeOptions.Any())
            {
                return(result);
            }

            // Do not insert already existing values (identified by name field).
            var existingValueNames = new HashSet <string>(_productVariantAttributeValueRepository.TableUntracked
                                                          .Where(x => x.ProductVariantAttributeId == productVariantAttribute.Id)
                                                          .Select(x => x.Name)
                                                          .ToList());

            using (_localizedEntityService.BeginScope())
            {
                foreach (var option in attributeOptions)
                {
                    if (existingValueNames.Contains(option.Name))
                    {
                        continue;
                    }

                    var pvav = option.Clone();
                    pvav.ProductVariantAttributeId = productVariantAttribute.Id;

                    // No scope commit, we need new entity id.
                    _productVariantAttributeValueRepository.Insert(pvav);
                    ++result;

                    // Copy localized properties too.
                    var optionProperties = _localizedEntityService.GetLocalizedProperties(option.Id, "ProductAttributeOption");

                    foreach (var property in optionProperties)
                    {
                        _localizedEntityService.InsertLocalizedProperty(new LocalizedProperty
                        {
                            EntityId       = pvav.Id,
                            LocaleKeyGroup = "ProductVariantAttributeValue",
                            LocaleKey      = property.LocaleKey,
                            LocaleValue    = property.LocaleValue,
                            LanguageId     = property.LanguageId
                        });
                    }
                }
            }

            return(result);
        }
Exemple #4
0
 /// <summary>
 /// Inserts a localized property
 /// </summary>
 /// <param name="localizedProperty">Localized property</param>
 public void InsertLocalizedProperty(LocalizedProperty localizedProperty)
 {
     _localizedEntityService.InsertLocalizedProperty(localizedProperty);
 }