private void UpdateSelectedCategories(FieldChange fieldChange, Product product)
        {
            var selectedSitecoreCategoryIds = fieldChange.Value.Split('|');
            var categoryRepository          = ObjectFactory.Instance.Resolve <IRepository <Category> >();

            var selectedCategories = categoryRepository.Select(
                x => selectedSitecoreCategoryIds.Select(Guid.Parse).Contains(x.Guid));

            var existingRelations = CategoryProductRelation.Find(x => x.Product.ProductId == product.ProductId)
                                    .Select(x => x.Category.CategoryId).ToList();

            // Removing not selected categories
            var categoryIdsToBeRemoved = existingRelations.Except(selectedCategories.Select(x => x.CategoryId)).ToList();
            var categoriesToBeRemoved  = Category.Find(x => categoryIdsToBeRemoved.Contains(x.CategoryId)).ToList();

            foreach (var categoryToBeRemoved in categoriesToBeRemoved)
            {
                _loggingService.Debug <ProductTemplatesBuilder>("Removing category " + categoryToBeRemoved.Name);
                product.RemoveCategory(categoryToBeRemoved);
            }

            // Adding new selected categories
            var categoriesToBeAdded = selectedCategories.Where(x => !existingRelations.Contains(x.CategoryId)).ToList();

            foreach (var categoryToBeAdded in categoriesToBeAdded)
            {
                _loggingService.Debug <ProductTemplatesBuilder>("Adding category " + categoryToBeAdded.Name);
                categoryToBeAdded.AddProduct(product, 0);
            }
        }
Esempio n. 2
0
        private void UpdateSelectedCategories(FieldChange fieldChange, Product product)
        {
            var selectedSitecoreCategoryIds = fieldChange.Value.Split('|');
            var selectedCategories          = new List <Category>();

            // Find categories from the sitecore ids
            foreach (var selectedSitecoreCategoryId in selectedSitecoreCategoryIds)
            {
                var categoryIdKeys = IDTable.GetKeys(SitecoreConstants.SitecoreIdTablePrefix, ID.Parse(selectedSitecoreCategoryId));

                foreach (var categoryIdKey in categoryIdKeys)
                {
                    var categoryId = Convert.ToInt32(categoryIdKey.Key.Split(';').Last());
                    selectedCategories.Add(Category.Get(categoryId));
                }
            }

            var existingRelations = CategoryProductRelation.Find(x => x.Product.ProductId == product.ProductId)
                                    .Select(x => x.Category.CategoryId).ToList();

            // Removing not selected categories
            var categoryIdsToBeRemoved = existingRelations.Except(selectedCategories.Select(x => x.CategoryId)).ToList();
            var categoriesToBeRemoved  = Category.Find(x => categoryIdsToBeRemoved.Contains(x.CategoryId)).ToList();

            foreach (var categoryToBeRemoved in categoriesToBeRemoved)
            {
                _loggingService.Log <ProductTemplatesBuilder>("Removing category " + categoryToBeRemoved.Name);
                product.RemoveCategory(categoryToBeRemoved);
            }

            // Adding new selected categories
            var categoriesToBeAdded = selectedCategories.Where(x => !existingRelations.Contains(x.CategoryId)).ToList();

            foreach (var categoryToBeAdded in categoriesToBeAdded)
            {
                _loggingService.Log <ProductTemplatesBuilder>("Adding category " + categoryToBeAdded.Name);
                categoryToBeAdded.AddProduct(product, 0);
            }
        }