public PartialViewResult DashBoardStation(TopStation station) { return(PartialView("_StationStatsDashboard", station)); }
private static List <TopStation> GetTopStations(int TopSize, List <Station> stations) { List <TopStation> topStations = new List <TopStation>(); var orderedStations = stations.OrderByDescending(s => { var totalPrice = s.Appointments.Where(a => a.Status.Id == AppointmentStatusEnum.Completed) .Sum(sum => sum.Cost); return(totalPrice); }); var enumerator = orderedStations.GetEnumerator(); for (int i = 0; i < TopSize; i++) { if (!enumerator.MoveNext()) { break; } TopStation Top = new TopStation(); var Appointments = enumerator.Current.Appointments; //Station Top.Station = enumerator.Current; if (Appointments.Count <= 0) { topStations.Add(Top); continue; } //Profit Top.TotalProfit = Math.Round(Appointments.Sum(a => a.Cost), 2); Top.DailyProfit = Math.Round(Appointments .Where(a => a.Start >= DateTime.Now.AddDays(-1) && a.AppointmentStatusId == AppointmentStatusEnum.Completed) .Sum(a => a.Cost), 2); Top.WeeklyProfit = Math.Round(Appointments .Where(a => a.Start >= DateTime.Now.AddDays(-7) && a.AppointmentStatusId == AppointmentStatusEnum.Completed) .Sum(a => a.Cost), 2); Top.MonthlyProfit = Math.Round(Appointments .Where(a => a.Start >= DateTime.Now.AddMonths(-1) && a.AppointmentStatusId == AppointmentStatusEnum.Completed) .Sum(a => a.Cost), 2); //Amount of charge cycles Top.TotalSuccessfulChargings = Appointments .Where(a => a.AppointmentStatusId == AppointmentStatusEnum.Completed) .Count(); //Total number of appointments Top.TotalAppointments = Appointments.Count; //Prefered Pod types Top.NormalChargerUsage = Appointments .Where(a => a.PodId == (int?)PodTypeEnum.Normal).Count(); Top.FastChargerUsage = Top.TotalAppointments - Top.NormalChargerUsage; Top.PreferedPodType = Top.FastChargerUsage > Top.NormalChargerUsage ? PodTypeEnum.Fast : PodTypeEnum.Normal; //Average Cost of appointments Top.AverageCost = Math.Round(Appointments.Average(a => a.Cost), 2); Top.AverageChargingTime = Math.Round(Appointments .Select(a => a.End - a.Start).Average(s => s.Hours), 2); TimeSpan ts = new TimeSpan(0, 0, 0); DateTime timeStart = new DateTime(); for (int x = 0; x < 24; x++) { var quantity = Appointments.Where(a => { DateTime start = a.Start.Date.AddHours(a.Start.Hour); DateTime end = a.End.Date.AddHours(a.End.Hour); timeStart = a.Start.Date + ts; DateTime timeEnd = a.End.Date + ts; //if (start <= timeStart && end >= timeStart || // start <= timeEnd && end >= timeEnd) if (start <= timeStart && end >= timeEnd) { return(true); } else { return(false); } }).Count(); if (Top.Station.ComercialName == "Station C") { } Top.HourPlotData.Add(new DataPoint(quantity, timeStart.ToString("HH:mm"))); ts = new TimeSpan(x + 1, 0, 0); } //Get best day of the week foreach (DayOfWeek day in Enum.GetValues(typeof(DayOfWeek))) { var value = Appointments.Where(a => a.AppointmentStatusId == AppointmentStatusEnum.Completed && a.Start >= DateTime.Now.AddMonths(-1) && a.Start.DayOfWeek == day).Sum(a => a.Cost); if (!(value < 1)) { Top.InfoDaysOfWeek.Add(new DataPoint(value, Enum.GetName(typeof(DayOfWeek), day))); } } topStations.Add(Top); } return(topStations); }