Beispiel #1
0
        public async Task <IHttpActionResult> Get(ProductConsumptionTrendDTO parameter)
        {
            //TODO: check if the product exist
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (parameter == null)
            {
                return(BadRequest("The parameter should not have been NULL"));
            }

            try
            {
                var productConsumptionTrends = await ComputeProductConsumptionTrend(parameter);

                var productDeficiencyHitTrends = await ComputeDeficiencyHits(parameter);

                var result = ComputeProductConsumptionDeficientTrend(productConsumptionTrends, productDeficiencyHitTrends, parameter.MonthsCount);
                return(Ok(result));
            }
            catch
            { throw; }
        }
Beispiel #2
0
        private async Task <IEnumerable <ProductDeficiencyHitTrend> > ComputeDeficiencyHits(ProductConsumptionTrendDTO parameter)
        {
            var startingTimeStamp = DateTime.Now.AddMonths(-(int)parameter.MonthsCount).Date;
            var xQuery            = await db.DeficientStockHits.Where(ds => ds.ProductId == parameter.ProductId &&
                                                                      ds.TimeStamp >= startingTimeStamp).ToListAsync();

            var yQuery         = xQuery.GroupBy(ds => ds.TimeStamp.DayOfWeek);
            var deficiencyHits = yQuery.Select(ds => CountDaysHitOfTheDay(ds));

            return(deficiencyHits);
        }
Beispiel #3
0
        private async Task <IEnumerable <ProductConsumptionTrend> > ComputeProductConsumptionTrend(ProductConsumptionTrendDTO parameter)
        {
            var startingOrderDate = DateTime.Now.AddMonths(-(int)parameter.MonthsCount);
            var query             = db.CustomerOrderProducts
                                    .Include(cop => cop.CustomerOrder)
                                    .Where(cop => cop.ProductId == parameter.ProductId &&
                                           cop.CustomerOrder.OrderDate >= startingOrderDate);
            var queryResult = await query.ToListAsync();

            var groupByQueryResult = queryResult
                                     .GroupBy(cop => cop.CustomerOrder.OrderDate.DayOfWeek);
            var productConsumptionTrends = groupByQueryResult.Select(c => AggregateSumQuantity(c));

            return(productConsumptionTrends);
        }