public string ExportServiceDirectionTable() { List <ServiceDirectionModel> serviceDirections = ServiceDirectionDataAccess.GetAllServiceDirectionsPerRoute(RouteId); return(WriteServiceDirectionHeader() + WriteServiceDirectionData(serviceDirections)); }
private void ImportServiceDirection(string[] fields) { var serviceDirection = new ServiceDirectionModel(); serviceDirection.Id = int.Parse(fields[1]); serviceDirection.ServiceDirectionName = fields[2]; serviceDirection.ServiceDirectionAbbreviation = fields[3]; serviceDirection.IsDescending = bool.Parse(fields[5]); serviceDirection.RouteId = newRouteId; var newServiceDirectionId = ServiceDirectionDataAccess.InsertServiceDirection(serviceDirection); ServiceDirectionKeys.Add(serviceDirection.Id, newServiceDirectionId); }
public static TimetableMatrixModel ReadTimetableMatrix(int timetableId, bool csvTarget) { // TODO wrap this all in a transaction, for better performance TimetableMatrixModel matrixModel = new TimetableMatrixModel(); // Get TimetableMode to retrieve name var timetable = TimetableDataAccess.GetTimetableById(timetableId); matrixModel.TimetableName = timetable.TimetableName; matrixModel.TimetableId = timetable.Id; matrixModel.RouteId = timetable.RouteId; var direction = ServiceDirectionDataAccess.GetServiceDirectionById(timetable.ServiceDirectionId); matrixModel.IsDescending = direction.IsDescending; // Now get a view, representing Services List <ServiceModel> serviceList = ServicesDataAccess.GetServicesPerTimetable(timetable.Id); serviceList = serviceList.OrderBy(x => x.StartTime).ToList(); var locationsList = LocationDataAccess.GetAllLocationsPerRoute(matrixModel.RouteId); if (matrixModel.IsDescending) { locationsList = locationsList.OrderByDescending(x => x.Order).ToList(); } else { locationsList = locationsList.OrderBy(x => x.Order).ToList(); } var locationsCount = locationsList.Count; matrixModel.Matrix = new string[locationsList.Count + 1][]; var columncount = serviceList.Count + 1; string[] columnheaders = new string[columncount]; columnheaders[0] = "---"; for (int i = 0; i < columncount - 1; i++) { columnheaders[i + 1] = serviceList[i].ServiceAbbreviation; } matrixModel.Matrix[0] = columnheaders; for (int i = 0; i < locationsCount; i++) { string[] row = new string[columncount]; row[0] = locationsList[i].LocationName; matrixModel.Matrix[i + 1] = row; } for (int index = 0; index < serviceList.Count; index++) { int actualTime = serviceList[index].StartTime; List <ServiceTimingModel> Timing; if (matrixModel.IsDescending) { Timing = GetServiceTiming(serviceList[index].Id, locationsList).OrderByDescending(x => x.LocationsOrder).ToList(); } else { Timing = GetServiceTiming(serviceList[index].Id, locationsList); } int j = 0; for (int i = 0; i < locationsCount;) { if (j < Timing.Count && locationsList[i].Order == Timing[j].LocationsOrder) { i++; j++; } else { var Insert = new ServiceTimingModel(); Insert.LocationId = locationsList[i].Id; Insert.LocationName = locationsList[i].LocationName; Insert.LocationAbbrev = locationsList[i].LocationAbbreviation; Insert.EventType = ""; Insert.ArrivalTime = 0; Insert.WaitTime = 0; Insert.TimeString = "--"; Insert.LocationsOrder = locationsList[i].Order; Insert.TimeEventId = -1; // TimeEvent is not valid! Timing.Insert(j, Insert); i++; j++; } } matrixModel.TimingList.Add(Timing); } for (int i = 0; i < columncount - 1; i++) // for each service { int actualTime = serviceList[i].StartTime; var timing = matrixModel.TimingList[i]; for (int j = 0; j < locationsCount; j++) // for each location { if (timing[j].TimeEventId > 0) { actualTime += timing[j].ArrivalTime; timing[j].TimeString = TimeConverters.TimeEventToString(actualTime, timing[j].WaitTime, csvTarget); actualTime += timing[j].WaitTime; } matrixModel.Matrix[j + 1][i + 1] = timing[j].TimeString; } } return(matrixModel); }
public static List <DepartureArrivalTimetableModel> GetDeparturesAndArrivals(int timetableId, int locationId) { List <DepartureArrivalTimetableModel> output = new List <DepartureArrivalTimetableModel>(); var serviceList = ServicesDataAccess.GetServicesPerTimetable(timetableId); foreach (var service in serviceList) { var departureArrival = new DepartureArrivalTimetableModel(); departureArrival.ServiceName = service.ServiceName; departureArrival.ServiceAbbrev = service.ServiceAbbreviation; departureArrival.ServiceId = service.Id; departureArrival.StartTime = service.StartTime; departureArrival.EndTime = service.EndTime; var found = false; var serviceDirection = ServiceDirectionDataAccess.GetServiceDirectionByServiceTemplateId(service.ServiceTemplateId); var timeEventList = FullTimeEventDataAccess.GetAllFullTimeEventsPerServiceTemplate(service.ServiceTemplateId); if (serviceDirection.IsDescending) { timeEventList = timeEventList.OrderByDescending(x => x.LocationOrder).ToList(); } else { timeEventList = timeEventList.OrderBy(x => x.LocationOrder).ToList(); } int arrivalTime = departureArrival.StartTime; int departureTime = departureArrival.StartTime; foreach (var timeEvent in timeEventList) { departureArrival.ArrivalTime += timeEvent.ArrivalTime; departureArrival.DepartureTime += timeEvent.ArrivalTime + timeEvent.WaitTime; if (timeEvent.LocationId == locationId) { found = true; // need to filter, if the location is not included in the service, do not show it. departureArrival.LocationName = timeEvent.LocationName; departureArrival.LocationAbbrev = timeEvent.LocationAbbreviation; departureArrival.EventType = timeEvent.EventType; departureArrival.ArrivalTime = arrivalTime; departureArrival.DepartureTime = departureTime; } if (timeEvent.EventType == "S") { departureArrival.OriginName = timeEvent.LocationName; departureArrival.OriginAbbrev = timeEvent.LocationAbbreviation; } if (timeEvent.EventType == "E") { departureArrival.DestinationName = timeEvent.LocationName; departureArrival.DestinationAbbrev = timeEvent.LocationAbbreviation; } } if (found) { output.Add(departureArrival); } } return(output); }