Exemplo n.º 1
0
 public PartialViewResult DashBoardStation(TopStation station)
 {
     return(PartialView("_StationStatsDashboard", station));
 }
Exemplo n.º 2
0
        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);
        }