private List <OperationLog> GetProductChanges(DateTime startDate, DateTime endDate)
        {
            var allProductChanges = _changeLogService.FindChangeHistory("Product", startDate, endDate).ToList();
            var allPriceChanges   = _changeLogService.FindChangeHistory("Price", startDate, endDate).ToList();

            var priceIds = allPriceChanges.Select(c => c.ObjectId).ToList();
            var prices   = _pricingService.GetPricesById(priceIds).ToList();

            // TODO: How to get product for deleted price?
            var productsWithChangedPrice = allPriceChanges
                                           .Select(c => new { c.ModifiedDate, Price = prices.FirstOrDefault(p => p.Id == c.ObjectId) })
                                           .Where(x => x.Price != null)
                                           .Select(x => new OperationLog {
                ObjectId = x.Price.ProductId, ModifiedDate = x.ModifiedDate, OperationType = EntryState.Modified
            })
                                           .ToList();

            allProductChanges.AddRange(productsWithChangedPrice);

            // Return latest operation type for each product
            var result = allProductChanges
                         .GroupBy(c => c.ObjectId)
                         .Select(g => new OperationLog {
                ObjectId = g.Key, OperationType = g.OrderByDescending(c => c.ModifiedDate).Select(c => c.OperationType).First()
            })
                         .ToList();

            return(result);
        }
Beispiel #2
0
        protected virtual List <OperationLog> GetProductChanges(DateTime startDate, DateTime endDate)
        {
            var allProductChanges = _changeLogService.FindChangeHistory("Item", startDate, endDate).ToList();
            var allPriceChanges   = _changeLogService.FindChangeHistory("Price", startDate, endDate).ToList();

            var priceIds = allPriceChanges.Select(c => c.ObjectId).ToArray();
            var prices   = GetPrices(priceIds);

            // TODO: How to get product for deleted price?
            var productsWithChangedPrice = allPriceChanges
                                           .Select(c => new { c.ModifiedDate, Price = prices.ContainsKey(c.ObjectId) ? prices[c.ObjectId] : null })
                                           .Where(x => x.Price != null)
                                           .Select(x => new OperationLog {
                ObjectId = x.Price.ProductId, ModifiedDate = x.ModifiedDate, OperationType = EntryState.Modified
            })
                                           .ToList();

            allProductChanges.AddRange(productsWithChangedPrice);

            // Return latest operation type for each product
            var result = allProductChanges
                         .GroupBy(c => c.ObjectId)
                         .Select(g => new OperationLog {
                ObjectId = g.Key, OperationType = g.OrderByDescending(c => c.ModifiedDate).Select(c => c.OperationType).First()
            })
                         .ToList();

            return(result);
        }
Beispiel #3
0
        public async Task <long> GetTotalChangesCountAsync(DateTime?startDate, DateTime?endDate)
        {
            long result;

            startDate = startDate ?? DateTime.MinValue;
            endDate   = endDate ?? DateTime.MaxValue;

            // Get changes count from operation log
            result = _changeLogService.FindChangeHistory(ChangeLogObjectType, startDate, endDate).Count();


            return(await Task.FromResult(result));
        }
Beispiel #4
0
        public IList <Operation> GetOperations(DateTime startDate, DateTime endDate)
        {
            var allOperations = _changeLogService.FindChangeHistory("Category", startDate, endDate);
            var result        = allOperations.GetLatestIndexOperationForEachObject();

            return(result);
        }
Beispiel #5
0
        public virtual Task <long> GetTotalChangesCountAsync(DateTime?startDate, DateTime?endDate)
        {
            long result;

            if (startDate == null && endDate == null)
            {
                // We don't know the total products count
                result = 0L;
            }
            else
            {
                // Get changes count from operation log
                result = _changeLogService.FindChangeHistory(ChangeLogObjectType, startDate, endDate).Count();
            }

            return(Task.FromResult(result));
        }
Beispiel #6
0
        public virtual Task <long> GetTotalChangesCountAsync(DateTime?startDate, DateTime?endDate)
        {
            long result;

            if (startDate == null && endDate == null)
            {
                // Get total products count
                using (var repository = _catalogRepositoryFactory())
                {
                    result = repository.Items.Count(i => i.ParentId == null);
                }
            }
            else
            {
                // Get changes count from operation log
                result = _changeLogService.FindChangeHistory(ChangeLogObjectType, startDate, endDate).Count();
            }

            return(Task.FromResult(result));
        }
        public virtual async Task <long> GetTotalChangesCountAsync(DateTime?startDate, DateTime?endDate)
        {
            long result;

            if (startDate == null && endDate == null)
            {
                // Get total categories count
                using (var repository = _catalogRepositoryFactory())
                {
                    result = await repository.Categories.CountAsync();
                }
            }
            else
            {
                // Get changes count from operation log
                result = _changeLogService.FindChangeHistory(ChangeLogObjectType, startDate, endDate).Count();
            }

            return(result);
        }
Beispiel #8
0
        private List <OperationLog> GetCategoryChanges(DateTime startDate, DateTime endDate)
        {
            var allCategoryChanges = _changeLogService.FindChangeHistory("Category", startDate, endDate).ToList();

            // Return latest operation type for each product
            var result = allCategoryChanges
                         .GroupBy(c => c.ObjectId)
                         .Select(g => new OperationLog {
                ObjectId = g.Key, OperationType = g.OrderByDescending(c => c.ModifiedDate).Select(c => c.OperationType).First()
            })
                         .ToList();

            return(result);
        }
        public IList <Operation> GetOperations(DateTime startDate, DateTime endDate)
        {
            var allOperations         = _changeLogService.FindChangeHistory("PriceEntity", startDate, endDate).ToList();
            var priceIds              = allOperations.Select(c => c.ObjectId).ToArray();
            var priceIdsAndProductIds = GetProductIds(priceIds);

            // TODO: How to get product for deleted price?
            var result = allOperations
                         .Where(o => priceIdsAndProductIds.ContainsKey(o.ObjectId))
                         .Select(o => new Operation
            {
                ObjectId      = priceIdsAndProductIds[o.ObjectId],
                Timestamp     = o.ModifiedDate ?? o.CreatedDate,
                OperationType = OperationType.Index,
            })
                         .GroupBy(o => o.ObjectId)
                         .Select(g => g.OrderByDescending(o => o.Timestamp).First())
                         .ToList();

            return(result);
        }
Beispiel #10
0
        public IHttpActionResult SearchTypeChangeHistory(string type, [FromUri] DateTime?start = null, [FromUri] DateTime?end = null)
        {
            var result = _changeLog.FindChangeHistory(type, start, end).ToArray();

            return(Ok(result));
        }