Пример #1
0
        /// <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");
        }
Пример #3
0
        /// <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);
        }
Пример #6
0
 protected virtual void UpdateLocales(ProductTag productTag, ProductTagModel model)
 {
     foreach (var localized in model.Locales)
     {
         _localizedEntityService.SaveLocalizedValue(productTag,
                                                        x => x.Name,
                                                        localized.Name,
                                                        localized.LanguageId);
     }
 }
Пример #7
0
        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);
            }
        }
Пример #10
0
        /// <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);
        }
Пример #11
0
        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);
                }

            }
        }
Пример #12
0
        /// <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);
        }
Пример #13
0
        /// <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);
        }
Пример #14
0
        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);
        }
Пример #15
0
        /// <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);
 }
Пример #17
0
 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;
 }