Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }