public async Task <AdminChartResponse> GetChartResponse() { var week = EntityExtensions.GetWeekDate(DateTime.Now); var months = EntityExtensions.GetRevenue(DateTime.Now); var roles = await _identityRoleRepository.GetListRoles(); var areaLabels = new List <string>(); var areaData = new List <double>(); var barLabels = new List <string>(); var barData = new List <double>(); var pieLabels = new List <string>(); var pieData = new List <double>(); foreach (var item in week) { var price = await GetDayEarning(item); areaLabels.Add("'" + item.Date.Day + "/" + item.Date.Month + "'"); areaData.Add(price); } foreach (var item in months) { var price = await GetMonthEarning(item); barLabels.Add("'Tháng " + item.Date.Month + "'"); barData.Add(price); } var emp = _applicationUserRepository.CountEmp(); foreach (var item in roles) { var user = await _applicationUserRepository.GetListUserByRole(item); pieLabels.Add("'" + item.Name + "'"); pieData.Add(Math.Round((double)user.Count() / emp * 100)); } return(new AdminChartResponse { AreaChart = new AreaChart { Date = areaLabels, DateEarning = areaData }, BarChart = new BarChart { Date = barLabels, DateEarning = barData }, PieChart = new PieChart { Roles = pieLabels, Percentage = pieData } }); }
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() }); }