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; } }
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); }
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); }