public async Task <AdminDashboardResponse> GetDashboardResponse() { var ranks = _mapper.Map <IEnumerable <ProductRankVM> >(await _productRankRepository.GetAllAsync()); var orders = await _orderRepository.GetDashboardListOrder(); var orderCount = orders.Count(); var waitingOrders = Math.Round((double)orders.Where(m => m.Status == OrderStatus.Waiting).Count() / orderCount * 100); var acceptedOrders = Math.Round((double)orders.Where(m => m.Status == OrderStatus.Accepted).Count() / orderCount * 100); var inProgressOrders = Math.Round((double)orders.Where(m => m.Status == OrderStatus.InProgress).Count() / orderCount * 100); var shippingOrders = Math.Round((double)orders.Where(m => m.Status == OrderStatus.Shipping).Count() / orderCount * 100); var deliveredOrders = Math.Round((double)orders.Where(m => m.Status == OrderStatus.Deliveried).Count() / orderCount * 100); var completedOrders = Math.Round((double)orders.Where(m => m.Status == OrderStatus.Completed).Count() / orderCount * 100); var months = EntityExtensions.GetRevenue(DateTime.Now); double annual = 0; foreach (var item in months) { annual += await GetMonthEarning(item); } return(new AdminDashboardResponse { Charts = await GetChartResponse(), ProductRanks = ranks.Where(m => m.Rate > 0 || m.Sold > 0).OrderBy(m => m.Sold + m.Rate).Take(10).ToList(), MonthlyEarnings = await GetMonthEarning(DateTime.Now), AnnualEarnings = annual, OrderPercentage = completedOrders, WaitingOrderPercentage = waitingOrders, InProgressOrderPercentage = inProgressOrders, ShippingOrderPercentage = shippingOrders, DeliveriedOrderPercentage = deliveredOrders, CompletedOrderPercentage = completedOrders, AcceptedOrderPercentage = acceptedOrders, WaitingOrderCount = orders.Where(m => m.Status == OrderStatus.Waiting).Count() }); }