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); } }
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); }
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); } }
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); } } }
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); }