public List <Company> GetOrderedListOfCompaniesUsingTheHallTheMost() { SingleBookingsHandler singleBookingsHandler = new SingleBookingsHandler(); OngoingBookingsHandler ongoingBookingsHandler = new OngoingBookingsHandler(); CompanyHandler companyHandler = new CompanyHandler(); var datTimeTho = Model.OngoingBookings.Where(oB => oB.IsConfirmed == true).GroupJoin(Model.SingleBookings.Where(sB => sB.IsConfirmed == true), b => b.CompanyId, sB => sB.CompanyId, (b, sB) => new { SingleBookings = sB, OngoingBookingsTime = ongoingBookingsHandler.GetAmountOfTimeForOngoingBooking(b.Id) }); var result = datTimeTho.OrderByDescending(b => b.SingleBookings.Select(sB => singleBookingsHandler.GetTimeForSingleBooking(sB.Id) + b.OngoingBookingsTime)); var resultIds = result.Select(r => r.SingleBookings.Select(s => s.CompanyId)).ToList(); List <Company> companyListMostToLeastUsage = new List <Company>(); foreach (var id in resultIds) { companyListMostToLeastUsage.Add(Model.Companies.Find(id)); } return(companyListMostToLeastUsage); }
/// <summary> /// This is the method that extracts the hall time in use on a given day. /// </summary> /// <param name="date">This is the date that the percentage is calculated from.</param> /// <returns></returns> public double GetHallTimeUseForDay(DateTime date) { /// THIS ONLY WORKS AS LONG AS THERE IS NO MULTIPLE BOOKINGS AT THE SAME TIME SingleBookingsHandler singleBookingsHandler = new SingleBookingsHandler(); OngoingBookingsHandler ongoingBookingsHandler = new OngoingBookingsHandler(); var hallTimeUseForTimeSpanSingles = Model.SingleBookings.Where(s => s.IsConfirmed == true && s.StartTime.Date == date.Date).Select(sTime => singleBookingsHandler.GetTimeForSingleBooking(sTime.Id)).Sum(); var hallTimeUseFoTimeSpanOngoings = Model.OngoingBookings.Where(o => o.IsConfirmed == true && o.StartDay.DayOfWeek == date.DayOfWeek && o.StartDay.Day <= date.Day && o.EndDay.Day >= date.Day).Select(oTime => (oTime.EndTime - oTime.StartTime).TotalHours).Sum(); return((hallTimeUseForTimeSpanSingles + hallTimeUseFoTimeSpanOngoings) / GetAmountOfHoursOpenOnDay(date) * 100); }