/// <summary> /// Delete a product tag /// </summary> /// <param name="productTag">Product tag</param> public virtual void DeleteProductTag(ProductTag productTag) { if (productTag == null) throw new ArgumentNullException("productTag"); _productTagRepository.Delete(productTag); //event notification _eventPublisher.EntityDeleted(productTag); }
public void Can_save_and_load_productTag() { var productTag = new ProductTag { Name = "Name 1", }; var fromDb = SaveAndLoadEntity(productTag); fromDb.ShouldNotBeNull(); fromDb.Name.ShouldEqual("Name 1"); }
/// <summary> /// Delete a product tag /// </summary> /// <param name="productTag">Product tag</param> public virtual void DeleteProductTag(ProductTag productTag) { if (productTag == null) throw new ArgumentNullException("productTag"); _productTagRepository.Delete(productTag); //cache _cacheManager.RemoveByPattern(PRODUCTTAG_PATTERN_KEY); //event notification _eventPublisher.EntityDeleted(productTag); }
public void Can_save_and_load_productTag_with_products() { var productTag = new ProductTag { Name = "Name 1", ProductCount = 1, }; productTag.Products.Add(GetTestProduct()); var fromDb = SaveAndLoadEntity(productTag); fromDb.ShouldNotBeNull(); fromDb.Products.ShouldNotBeNull(); (fromDb.Products.Count == 1).ShouldBeTrue(); fromDb.Products.First().Name.ShouldEqual("Name 1"); }
/// <summary> /// Updates the product tag /// </summary> /// <param name="productTag">Product tag</param> public virtual void UpdateProductTagTotals(ProductTag productTag) { if (productTag == null) throw new ArgumentNullException("productTag"); var query = from p in _productRepository.Table where !p.Deleted && p.Published && p.ProductTags.Any(pt => pt.Id == productTag.Id) && p.ProductVariants.Any(pv => !pv.Deleted && pv.Published) select p.Id; int newTotal = query.Count(); //we do not delete product tasg with 0 product count productTag.ProductCount = newTotal; UpdateProductTag(productTag); }
protected virtual void UpdateLocales(ProductTag productTag, ProductTagModel model) { foreach (var localized in model.Locales) { _localizedEntityService.SaveLocalizedValue(productTag, x => x.Name, localized.Name, localized.LanguageId); } }
protected virtual void SaveProductTags(Product product, string[] productTags) { if (product == null) throw new ArgumentNullException("product"); //product tags var existingProductTags = product.ProductTags.ToList(); var productTagsToRemove = new List<ProductTag>(); foreach (var existingProductTag in existingProductTags) { bool found = false; foreach (string newProductTag in productTags) { if (existingProductTag.Name.Equals(newProductTag, StringComparison.InvariantCultureIgnoreCase)) { found = true; break; } } if (!found) { productTagsToRemove.Add(existingProductTag); } } foreach (var productTag in productTagsToRemove) { product.ProductTags.Remove(productTag); _productService.UpdateProduct(product); } foreach (string productTagName in productTags) { ProductTag productTag; var productTag2 = _productTagService.GetProductTagByName(productTagName); if (productTag2 == null) { //add new product tag productTag = new ProductTag { Name = productTagName }; _productTagService.InsertProductTag(productTag); } else { productTag = productTag2; } if (!product.ProductTagExists(productTag.Id)) { product.ProductTags.Add(productTag); _productService.UpdateProduct(product); } } }
private void AddProductTag(Product product, string tag) { var productTag = _productTagRepository.Table.FirstOrDefault(pt => pt.Name == tag); if (productTag == null) { productTag = new ProductTag { Name = tag, }; _productTagRepository.Insert(productTag); } productTag.Count = productTag.Count + 1; _productTagRepository.Update(productTag); productTag.ProductId = product.Id; product.ProductTags.Add(productTag); _productRepository.Update(product); }
private void SaveProductTags(Product product, string[] productTags) { if (product == null) throw new ArgumentNullException("product"); //product tags var existingProductTags = product.ProductTags.OrderByDescending(pt => pt.ProductCount).ToList(); var productTagsToRemove = new List<ProductTag>(); foreach (var existingProductTag in existingProductTags) { bool found = false; foreach (string newProductTag in productTags) { if (existingProductTag.Name.Equals(newProductTag, StringComparison.InvariantCultureIgnoreCase)) { found = true; break; } } if (!found) { productTagsToRemove.Add(existingProductTag); } } foreach (var productTag in productTagsToRemove) { product.ProductTags.Remove(productTag); //ensure product is saved before updating totals _productService.UpdateProduct(product); _productTagService.UpdateProductTagTotals(productTag); } foreach (string productTagName in productTags) { ProductTag productTag = null; var productTag2 = _productTagService.GetProductTagByName(productTagName); if (productTag2 == null) { //add new product tag productTag = new ProductTag() { Name = productTagName, ProductCount = 0 }; _productTagService.InsertProductTag(productTag); } else { productTag = productTag2; } if (!product.ProductTagExists(productTag.Id)) { product.ProductTags.Add(productTag); //ensure product is saved before updating totals _productService.UpdateProduct(product); } //update product tag totals _productTagService.UpdateProductTagTotals(productTag); } }
/// <summary> /// Updates the product tag /// </summary> /// <param name="productTag">Product tag</param> public virtual void UpdateProductTagTotals(ProductTag productTag) { if (productTag == null) throw new ArgumentNullException("productTag"); int newTotal = productTag.Products .Where(p => !p.Deleted && p.Published && p.ProductVariants.Where(pv => !pv.Deleted && pv.Published).Count() > 0) .Count(); //we do not delete product tasg with 0 product count productTag.ProductCount = newTotal; UpdateProductTag(productTag); }
private void ResolveProductTags(ProductResolveInput input, Product product) { //resolve tags //todo: prep for update, currently supports only addition string[] tags = input.ProductInputRow.ProductTags.Split('|'); foreach (string tag in tags) { ProductTag productTag = _tagService.GetProductTagByName(tag.Trim()); if (productTag == null) { productTag = new ProductTag { Name = tag.Trim() }; _tagService.InsertProductTag(productTag); } if (product.ProductTags.All(x => x.Id != productTag.Id)) { product.ProductTags.Add(productTag); _productService.UpdateProduct(product); } } }
/// <summary> /// Updates the product tag /// </summary> /// <param name="productTag">Product tag</param> public virtual void UpdateProductTag(ProductTag productTag) { if (productTag == null) throw new ArgumentNullException("productTag"); _productTagRepository.Update(productTag); var builder = Builders<Product>.Filter; var filter = builder.ElemMatch(x => x.ProductTags, y => y.Id == productTag.Id); var update = Builders<Product>.Update .Set(x => x.ProductTags.ElementAt(-1).Name, productTag.Name) .Set(x => x.ProductTags.ElementAt(-1).Locales, productTag.Locales); var result = _productRepository.Collection.UpdateManyAsync(filter, update).Result; //cache _cacheManager.RemoveByPattern(PRODUCTTAG_PATTERN_KEY); //event notification _eventPublisher.EntityUpdated(productTag); }
/// <summary> /// Delete a product tag /// </summary> /// <param name="productTag">Product tag</param> public virtual void DeleteProductTag(ProductTag productTag) { if (productTag == null) throw new ArgumentNullException("productTag"); var builder = Builders<Product>.Update; var updatefilter = builder.PullFilter(x => x.ProductTags, y => y.Id == productTag.Id); var result = _productRepository.Collection.UpdateManyAsync(new BsonDocument(), updatefilter).Result; _productTagRepository.Delete(productTag); //cache _cacheManager.RemoveByPattern(PRODUCTTAG_PATTERN_KEY); _cacheManager.RemoveByPattern(PRODUCTS_PATTERN_KEY); //event notification _eventPublisher.EntityDeleted(productTag); }
public virtual void DeleteProductTag(ProductTag productTag) { if (productTag == null) throw new ArgumentNullException("productTag"); var updatebuilder = Builders<Product>.Update; var update = updatebuilder.Pull(p => p.ProductTags, productTag); _productRepository.Collection.UpdateOneAsync(new BsonDocument("Id", productTag.ProductId), update); var builder = Builders<ProductTag>.Filter; var filter = builder.Eq(x => x.Id, productTag.Id); var updateTag = Builders<ProductTag>.Update .Inc(x => x.Count, -1); var result = _productTagRepository.Collection.UpdateManyAsync(filter, updateTag).Result; //cache _cacheManager.RemoveByPattern(string.Format(PRODUCTS_BY_ID_KEY, productTag.ProductId)); //event notification _eventPublisher.EntityDeleted(productTag); }
/// <summary> /// Updates the product tag /// </summary> /// <param name="productTag">Product tag</param> public virtual void UpdateProductTagTotals(ProductTag productTag) { if (productTag == null) throw new ArgumentNullException("productTag"); int newTotal = productTag.Products.Where(p => !p.Deleted && p.Published).Count(); if (newTotal > 0) { productTag.ProductCount = newTotal; UpdateProductTag(productTag); } else { DeleteProductTag(productTag); } }
private void AddProductTag(Product product, string tag) { var productTag = _productTagRepository.Table.FirstOrDefault(pt => pt.Name == tag); if (productTag == null) { productTag = new ProductTag() { Name = tag, }; } product.ProductTags.Add(productTag); _productRepository.Update(product); }
protected virtual List<LocalizedProperty> UpdateLocales(ProductTag productTag, ProductTagModel model) { List<LocalizedProperty> localized = new List<LocalizedProperty>(); foreach (var local in model.Locales) { if (!(String.IsNullOrEmpty(local.Name))) localized.Add(new LocalizedProperty() { LanguageId = local.LanguageId, LocaleKey = "Name", LocaleValue = local.Name, _id = ObjectId.GenerateNewId().ToString(), Id = localized.Count > 0 ? localized.Max(x => x.Id) + 1 : 1, }); } return localized; }