public List <TimeTableViewModelRow> GetTimeTable(List <Port> ports) { var timetables = _timeTables.All(); var allEntries = timetables.SelectMany(x => x.Entries).OrderBy(x => x.Time).ToList(); var rows = new List <TimeTableViewModelRow>(); foreach (var timetable in allEntries) { var origin = ports.Single(x => x.Id == timetable.OriginId); var destination = ports.Single(x => x.Id == timetable.DestinationId); var destinationName = destination.Name; var originName = origin.Name; var ferry = _ferryService.NextFerryAvailableFrom(origin.Id, timetable.Time); var arrivalTime = timetable.Time.Add(timetable.JourneyTime); var row = new TimeTableViewModelRow { DestinationPort = destinationName, FerryName = ferry == null ? "" : ferry.Name, JourneyLength = timetable.JourneyTime.ToString("hh':'mm"), OriginPort = originName, StartTime = timetable.Time.ToString("hh':'mm"), ArrivalTime = arrivalTime.ToString("hh':'mm"), }; rows.Add(row); } return(rows); }
public Ferry NextFerryAvailableFrom(int portId, TimeSpan time) { var ports = _portManager.PortModels(); var allEntries = _timeTables.All().SelectMany(x => x.Entries).OrderBy(x => x.Time).ToList(); foreach (var entry in allEntries) { var ferry = FerryManager.CreateFerryJourney(ports, entry); if (ferry != null) { BoatReady(entry, ferry.Destination, ferry); } if (entry.OriginId == portId) { if (entry.Time >= time) { if (ferry != null) { return(ferry.Ferry); } } } } return(null); }
public Ferry NextFerryAvailableFrom(int portId, TimeSpan time) { var ports1 = _ports.All().Select(x => new PortModel(x)).ToList(); foreach (var ferry in _ferries.All()) { var port = ports1.Single(x => x.Id == ferry.HomePortId); port.AddFerry(new TimeSpan(0, 0, 0), ferry); } var ports = ports1; var allEntries = _timeTables.All().SelectMany(x => x.Entries).OrderBy(x => x.Time).ToList(); foreach (var entry in allEntries) { var journey = new Journey { Origin = ports.Single(x => x.Id == entry.OriginId), Destination = ports.Single(x => x.Id == entry.DestinationId) }; journey.Ferry = journey.Origin.GetNextAvailable(entry.Time); var destination = journey.Destination; var arrivalTime = entry.Time.Add(entry.JourneyTime); int turnaroundTime; switch (destination.Id) { case 3: turnaroundTime = 25; break; case 2: turnaroundTime = 20; break; default: turnaroundTime = 15; break; } var timeReady = arrivalTime.Add(TimeSpan.FromMinutes(turnaroundTime)); destination.AddFerry(timeReady, journey.Ferry); if (entry.OriginId == portId && entry.Time >= time) { return(journey.Ferry); } } return(null); }
public bool CanBook(int journeyId, int passengers) { var timetables = _timeTables.All(); var allEntries = timetables.SelectMany(x => x.Entries).OrderBy(x => x.Time).ToList(); foreach (var timetable in allEntries) { var ferry = _ferryService.NextFerryAvailableFrom(timetable.OriginId, timetable.Time); if (timetable.Id == journeyId) { var bookings = _bookings.All().Where(x => x.JourneyId == journeyId); var seatsLeft = ferry.Passengers - bookings.Sum(x => x.Passengers); return(seatsLeft >= passengers); } } return(false); }