Esempio n. 1
0
        private void DeleteOldUcommerceData()
        {
            var group = ObjectFactory.Instance.Resolve <IRepository <ProductCatalogGroup> >().SingleOrDefault(g => g.Name == "Ucommerce.dk");

            if (group != null)
            {
                // Delete products in group
                var relations = CategoryProductRelation.All()
                                .Where(x => group.ProductCatalogs.Contains(x.Category.ProductCatalog))
                                .ToList();
                foreach (var relation in relations)
                {
                    var category = relation.Category;
                    var product  = relation.Product;
                    category.RemoveProduct(product);
                    product.Delete();
                }

                // Delete catalogs
                foreach (var catalog in group.ProductCatalogs)
                {
                    catalog.Deleted = true;
                }

                // Delete group itself
                group.Deleted = true;
                group.Save();
            }
        }
        private void DeleteOldUCommerceData()
        {
            var group = ProductCatalogGroup.SingleOrDefault(g => g.Name == "uCommerce.dk");

            if (group != null)
            {
                // Delete products in group
                foreach (
                    var relation in
                    CategoryProductRelation.All()
                    .Where(x => group.ProductCatalogs.Contains(x.Category.ProductCatalog))
                    .ToList())
                {
                    var category = relation.Category;
                    var product  = relation.Product;
                    category.RemoveProduct(product);
                    product.Delete();
                }

                // Delete catalogs
                foreach (var catalog in group.ProductCatalogs)
                {
                    catalog.Deleted = true;
                }

                // Delete group itself
                group.Deleted = true;
                group.Save();
            }
        }
        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. 4
0
        private IList <Product> GetProductsFromSelectedCategoryIds(List <int> categoryIds)
        {
            List <Product> result = new List <Product>();
            var            productsFromCategories = CategoryProductRelation.All()
                                                    .Where(x => categoryIds.Contains(x.Category.CategoryId))
                                                    .ToList().GroupBy(x => x.Category);

            foreach (var productsFromCategory in productsFromCategories)
            {
                result.AddRange(productsFromCategory.Select(x => x.Product).ToList());
            }

            return(result);
        }
        public PipelineExecutionResult Execute(InitializeArgs subject)
        {
            if (ProductCatalogGroup.All().Any(x => x.Name == "avenue-clothing.com"))
            {
                return(PipelineExecutionResult.Success);
            }

            new ConfigurationInstaller().Configure();
            new CatalogueInstaller("avenue-clothing.com", "Demo Store").Configure();

            var group = ProductCatalogGroup.SingleOrDefault(g => g.Name == "uCommerce.dk");

            if (group != null)
            {
                // Delete products in group
                foreach (
                    var relation in
                    CategoryProductRelation.All()
                    .Where(x => group.ProductCatalogs.Contains(x.Category.ProductCatalog))
                    .ToList())
                {
                    var category = relation.Category;
                    var product  = relation.Product;
                    category.RemoveProduct(product);
                    product.Delete();
                }

                // Delete catalogs
                foreach (var catalog in group.ProductCatalogs)
                {
                    catalog.Deleted = true;
                }

                // Delete group itself
                group.Deleted = true;
                group.Save();
            }

            return(PipelineExecutionResult.Success);
        }
Esempio n. 6
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);
            }
        }
Esempio n. 7
0
        private void UpdateProductCategories(Product currentProduct, Product newProduct)
        {
            var newCategories = newProduct.CategoryProductRelations;

            foreach (var relation in newCategories)
            {
                var category = GetExistingCategory(relation.Category);
                if (category == null)
                {
                    throw new Exception(string.Format("Could not find category: {0}", relation.Category.Name));
                }

                if (!_session.Query <CategoryProductRelation>().Any(x => x.Category == category && x.Product.Sku == currentProduct.Sku && x.Product.VariantSku == currentProduct.VariantSku))
                {
                    var categoryRelation = new CategoryProductRelation();
                    categoryRelation.Product   = currentProduct;
                    categoryRelation.SortOrder = 0;
                    categoryRelation.Category  = category;

                    _session.Insert(categoryRelation);
                }
            }
        }
Esempio n. 8
0
        public IEnumerable <Product> Execute(DataTable @from)
        {
            var tempProducts = new List <Product>();

            var priceColumns =
                @from.Columns.Cast <DataColumn>().Where(
                    a => a.ColumnName.StartsWith(UCommerceProduct.Price.GetColumnName(""))).ToList();

            var descriptionCultureCodes = @from.Columns
                                          .Cast <DataColumn>()
                                          .Where(a => a.ColumnName.StartsWith(UCommerceProduct.Description.PREFIX) &&
                                                 a.ColumnName.EndsWith(UCommerceProduct.Description.DISPLAY_NAME))
                                          .Select(a => a.ColumnName.Split(new[] { "_" }, 3, StringSplitOptions.None)[1]).ToList();

            var categoryColumns =
                @from.Columns.Cast <DataColumn>().Where(
                    x => x.ColumnName.StartsWith(UCommerceProduct.Category.GetPrefix())).ToList();

            var fieldColumns =
                @from.Columns.Cast <DataColumn>().Where(
                    a => a.ColumnName.StartsWith(UCommerceProduct.Definition.GetName(""))).ToList();

            foreach (DataRow row in @from.Rows)
            {
                var product = new Product();
                product.Sku                   = row[UCommerceProduct.Columns.SKU].ToString();
                product.VariantSku            = row[UCommerceProduct.Columns.VARIANT_SKU].ToString();
                product.Name                  = row[UCommerceProduct.Columns.NAME].ToString();
                product.DisplayOnSite         = row[UCommerceProduct.Columns.DISPLAY_ON_SITE].ToBool();
                product.ThumbnailImageMediaId = row[UCommerceProduct.Columns.THUMBNAIL_IMAGE_MEDIA_ID].ToNullableInt().ToString();
                product.PrimaryImageMediaId   = row[UCommerceProduct.Columns.PRIMARY_IMAGE_MEDIA_ID].ToNullableInt().ToString();
                product.Weight                = row[UCommerceProduct.Columns.WEIGHT].ToDecimal(_CultureInfo);

                product.ProductDefinition = new ProductDefinition()
                {
                    Name = row[UCommerceProduct.Definition.GetDefinitionName()].ToEmptyString(),
                };

                product.AllowOrdering = row[UCommerceProduct.Columns.ALLOW_ORDERING].ToBool();
                product.Rating        = row[UCommerceProduct.Columns.RATING].ToNullableDouble(_CultureInfo);

                foreach (var column in priceColumns)
                {
                    var price = row[column.ColumnName].ToNullableDecimal(_CultureInfo);
                    if (!price.HasValue)
                    {
                        continue;
                    }

                    var priceGroupPrice = new PriceGroupPrice
                    {
                        Price = price
                    };
                    priceGroupPrice.PriceGroup      = new PriceGroup();
                    priceGroupPrice.PriceGroup.Name = column.ColumnName.Split(new[] { "_" }, 2, StringSplitOptions.RemoveEmptyEntries).Last();

                    product.PriceGroupPrices.Add(priceGroupPrice);
                }

                foreach (var cultureCode in descriptionCultureCodes)
                {
                    var displayName      = row[UCommerceProduct.Description.DisplayName(cultureCode)];
                    var shortDescription = row[UCommerceProduct.Description.Short(cultureCode)];
                    var longDescription  = row[UCommerceProduct.Description.Long(cultureCode)];

                    var desc = new ProductDescription();
                    desc.CultureCode      = cultureCode;
                    desc.DisplayName      = displayName.ToString();
                    desc.ShortDescription = shortDescription.ToString();
                    desc.LongDescription  = longDescription.ToString();

                    product.ProductDescriptions.Add(desc);
                }

                foreach (var column in fieldColumns)
                {
                    var value = row[column].ToEmptyString();
                    if (string.IsNullOrWhiteSpace(value))
                    {
                        continue;
                    }

                    // Depends on how many elements in the array its either DescriptionProperty(which is allways multilingual) or ProductProperty
                    var strings = column.ColumnName.Split(new[] { "_" }, StringSplitOptions.None);

                    switch (strings.Length)
                    {
                    case 2:
                        AddProductProperty(product, strings[1], value);
                        break;

                    case 3:
                        AddProductDescriptionProperty(product, strings[1], value, strings[2]);
                        break;

                    default:
                        throw new NotImplementedException(string.Format("Wrong format of '{0}', there should be 2 or 3 elements.", value));
                    }
                }

                foreach (var categoryColumn in categoryColumns)
                {
                    var path = row[categoryColumn.ColumnName].ToString();
                    if (string.IsNullOrWhiteSpace(path))
                    {
                        continue;
                    }

                    var parts = path.Split(new[] { CategoryPartSeperator }, StringSplitOptions.RemoveEmptyEntries);

                    Category category;

                    switch (parts.Length)
                    {
                    case 1:
                        category = new Category()
                        {
                            Name = parts.Last(),
                        };
                        break;

                    case 2:
                        category = new Category()
                        {
                            Name           = parts.Last(),
                            ProductCatalog = new ProductCatalog()
                            {
                                Name = parts.First(),
                            }
                        };
                        break;

                    case 3:
                        category = new Category()
                        {
                            Name           = parts.Last(),
                            ProductCatalog = new ProductCatalog()
                            {
                                Name = parts[1],
                                ProductCatalogGroup = new ProductCatalogGroup()
                                {
                                    Name = parts.First()
                                }
                            }
                        };
                        break;

                    default:
                        throw new Exception(
                                  string.Format("The parsed string: '{0}' contains {1} items, there should be between 1 and 3. In the format: '{{ProductCatalogGroup}}{2}{{ProductCatalog}}{2}{{Category}}'.",
                                                path, parts.Length, CategoryPartSeperator));
                    }

                    var categoryProductRelation = new CategoryProductRelation()
                    {
                        Product   = product,
                        Category  = category,
                        SortOrder = 0,
                    };

                    product.CategoryProductRelations.Add(categoryProductRelation);
                }

                tempProducts.Add(product);
            }

            var finalList = new List <Product>();

            tempProducts.Where(x => string.IsNullOrWhiteSpace(x.VariantSku)).ToList().ForEach(finalList.Add);
            foreach (var product in tempProducts.Where(a => !string.IsNullOrWhiteSpace(a.VariantSku)))
            {
                var parentProduct = tempProducts.SingleOrDefault(x => x.Sku == product.Sku && string.IsNullOrWhiteSpace(x.VariantSku));
                if (parentProduct == null)
                {
                    throw new Exception(string.Format("Could not find matching parent Sku '{0}' for VariantSku: '{1}'", product.Sku, product.VariantSku));
                }

                parentProduct.Variants.Add(product);
            }

            return(finalList);
        }