Example #1
0
        public async Task <double> GetProductPositionOffDays(int shopId, int productId, DateTime from, DateTime to)
        {
            var dict       = new Dictionary <DateTime, KeyValuePair <List <Order>, List <Bill> > >();
            var stocksDict = new Dictionary <DateTime, decimal>();


            var orders =
                await _ordersRepository.GetOrdersByShopAndProdIdsInDateRange(shopId, productId, from, DateTime.Now);

            if (!orders.Any())
            {
                return(0);
            }

            var sales = await _billsRepository.GetBillsWithSalesByProdId(shopId, productId, from, DateTime.Now);

            var stock = _stockRepository.GetStockByShopAndProdIds(shopId, productId);

            for (var i = 0; i <= (DateTime.Now.Date - from.Date).Days; i++)
            {
                var dt = DateTime.Now.AddDays(-i).Date;
                var s  = sales.Where(p => DayEquals(p.report_date.Date, dt)).ToList();
                var o  = orders.Where(p => DayEquals(p.report_date.Date, dt)).ToList();
                dict[dt] = new KeyValuePair <List <Order>, List <Bill> >(o, s);
            }

            var stockValue = stock.count.Value;

            for (var i = 0; i < (DateTime.Now.Date - from.Date).Days; i++)
            {
                var dt   = DateTime.Now.AddDays(-i).Date;
                var pair = dict[dt];
                stockValue = stockValue - pair.Value.Sum(p => p.Sales.Sum(q => q.count));
                stockValue = stockValue + pair.Key.Sum(p => p.OrderDetails.Sum(q => q.count));
            }

            for (int i = 0; i <= (to.Date - from.Date).Days; i++)
            {
                var dt   = from.AddDays(i).Date;
                var pair = dict[dt];

                stockValue = stockValue + pair.Key.Sum(p => p.OrderDetails.Sum(q => q.count));
                stocksDict.Add(dt, stockValue);
                stockValue = stockValue - pair.Value.Sum(p => p.Sales.Sum(q => q.count));
            }


            return(0);
        }