protected Route(RouteType type, string id, Airport destination1, Airport destination2, DateTime startDate) { Type = type; Id = id; Destination1 = destination1; Destination2 = destination2; StartDate = startDate; TimeTable = new RouteTimeTable(this); Invoices = new Invoices(); Statistics = new RouteStatistics(); Banned = false; Stopovers = new List<StopoverRoute>(); Season = Weather.Season.AllYear; }
private void CreateEntries(RouteTimeTableEntry mainEntry) { List<Route> routes = mainEntry.TimeTable.Route.Stopovers.SelectMany(s => s.Legs).ToList(); TimeSpan time = mainEntry.Time; bool isInbound = mainEntry.DepartureAirport == mainEntry.TimeTable.Route.Destination2; if (isInbound) { routes.Reverse(); } foreach (Route route in routes) { var timetable = new RouteTimeTable(route); RouteTimeTableEntry entry; //inbound if (isInbound) { entry = new RouteTimeTableEntry( timetable, mainEntry.Day, time, new RouteEntryDestination(route.Destination1, mainEntry.Destination.FlightCode)); time = time.Add(entry.TimeTable.Route.GetFlightTime(mainEntry.Airliner.Airliner.Type)) .Add(FleetAirlinerHelpers.GetMinTimeBetweenFlights(mainEntry.Airliner)); entry.Airliner = mainEntry.Airliner; entry.MainEntry = mainEntry; } //outbound else { entry = new RouteTimeTableEntry( timetable, mainEntry.Day, time, new RouteEntryDestination(route.Destination2, mainEntry.Destination.FlightCode)) {Airliner = mainEntry.Airliner, MainEntry = mainEntry}; time = time.Add(entry.TimeTable.Route.GetFlightTime(mainEntry.Airliner.Airliner.Type)) .Add(FleetAirlinerHelpers.GetMinTimeBetweenFlights(mainEntry.Airliner)); } if (route.Type == Route.RouteType.Passenger || route.Type == Route.RouteType.Mixed) { var classes = new List<FlightAirlinerClass>(); foreach (AirlinerClass aClass in Airliner.Airliner.Classes) { FlightAirlinerClass faClass; if (isInbound) { faClass = new FlightAirlinerClass( ((PassengerRoute) route).GetRouteAirlinerClass(aClass.Type), PassengerHelpers.GetStopoverFlightPassengers( Airliner, aClass.Type, route.Destination2, route.Destination1, routes, true)); } else { faClass = new FlightAirlinerClass( ((PassengerRoute) route).GetRouteAirlinerClass(aClass.Type), PassengerHelpers.GetStopoverFlightPassengers( Airliner, aClass.Type, route.Destination1, route.Destination2, routes, false)); } classes.Add(faClass); } AllClasses.Add(entry, classes); } if (route.Type == Route.RouteType.Cargo || route.Type == Route.RouteType.Mixed) { if (isInbound) { AllCargo.Add( entry, PassengerHelpers.GetStopoverFlightCargo( Airliner, route.Destination2, route.Destination1, routes, true)); } else { AllCargo.Add( entry, PassengerHelpers.GetStopoverFlightCargo( Airliner, route.Destination1, route.Destination2, routes, false)); } } } }
private void EntryChanged_Event(object sender, RoutedEventArgs e) { var entries = e.OriginalSource as object[]; var oldEntry = entries[0] as TimelineEntry; var newEntry = entries[1] as TimelineEntry; var oEntry = (RouteTimeTableEntry)oldEntry.Source; var rt = new RouteTimeTable(oEntry.TimeTable.Route); var nEntry = new RouteTimeTableEntry( rt, (DayOfWeek)newEntry.StartTime.Days, newEntry.StartTime, oEntry.Destination); nEntry.Airliner = Airliner; rt.AddEntry(nEntry); var tEntries = new List<RouteTimeTableEntry>(Entries); tEntries.Remove(oEntry); if (!TimeTableHelpers.IsTimeTableValid(rt, Airliner, tEntries)) { WPFMessageBox.Show( Translator.GetInstance().GetString("MessageBox", "2706"), Translator.GetInstance().GetString("MessageBox", "2706", "message"), WPFMessageBoxButtons.Ok); } else { Entries.Remove(oEntry); Entries.Add(nEntry); } }
private void btnSaveContract_Click(Object sender, RoutedEventArgs e) { Route route = (Route)cbSpecialRoute.SelectedItem; RouteTimeTable rtt = new RouteTimeTable(route); RouteTimeTableEntry entry = new RouteTimeTableEntry(rtt, DayOfWeek.Wednesday, new TimeSpan(12, 0, 0), new RouteEntryDestination(route.Destination2, "Charter")); entry.Airliner = Airliner; rtt.AddEntry(entry); route.TimeTable = rtt; Airliner.AddRoute(route); Airliner.Status = FleetAirliner.AirlinerStatus.OnCharter; }
private void addEntries(List<DayOfWeek> days) { var route = (Route)cbHomebound.SelectedItem; var origin = (Airport)cbOutbound.SelectedItem; Airport airport = route.Destination1 == origin ? route.Destination2 : route.Destination1; var time = new TimeSpan(tpTime.Value.Value.Hour, tpTime.Value.Value.Minute, 0); string flightCode = Airliner.Airliner.Airline.Profile.IATACode + txtSchedulerFlightNumber.Text; var rt = new RouteTimeTable(route); foreach (DayOfWeek dayOfWeek in days) { var entry = new RouteTimeTableEntry( route.TimeTable, dayOfWeek, time, new RouteEntryDestination(airport, flightCode)); entry.Airliner = Airliner; rt.AddEntry(entry); } if (!TimeTableHelpers.IsRoutePlannerTimeTableValid(rt, Airliner, Entries.ToList())) { WPFMessageBox.Show( Translator.GetInstance().GetString("MessageBox", "2706"), Translator.GetInstance().GetString("MessageBox", "2706", "message"), WPFMessageBoxButtons.Ok); } else { foreach (RouteTimeTableEntry entry in rt.Entries) { Entries.Add(entry); } } setFlightNumbers(); }
//loads a route private static Route LoadRoute( XmlElement routeNode, Airline airline, Route.RouteType routetype = Route.RouteType.Passenger) { string id = routeNode.Attributes["id"].Value; Airport dest1 = Airports.GetAirport(routeNode.Attributes["destination1"].Value); Airport dest2 = Airports.GetAirport(routeNode.Attributes["destination2"].Value); Boolean isBanned = Convert.ToBoolean(routeNode.Attributes["isbanned"].Value); if (routeNode.HasAttribute("type")) { routetype = (Route.RouteType) Enum.Parse(typeof (Route.RouteType), routeNode.Attributes["type"].Value); } Route route; if (routetype == Route.RouteType.Passenger || routetype == Route.RouteType.Mixed) { route = new PassengerRoute(id, dest1, dest2, DateTime.Now, 0); } else { route = new CargoRoute(id, dest1, dest2, DateTime.Now, 0); } route.Banned = isBanned; /* foreach (StopoverRoute stopover in route.Stopovers) { XmlElement routeStopoverNode = xmlDoc.CreateElement("stopover"); routeStopoverNode.SetAttribute("airport", stopover.Stopover.Profile.ID); XmlElement stopoverLegsNode = xmlDoc.CreateElement("legs"); foreach (Route leg in stopover.Legs) { XmlElement stopoverLegNode = xmlDoc.CreateElement("leg"); stopoverLegNode.AppendChild(SaveRoute(xmlDoc, leg)); stopoverLegsNode.AppendChild(stopoverLegNode); } routeStopoverNode.AppendChild(stopoverLegsNode); routeStopoversNode.AppendChild(routeStopoverNode);*/ XmlNodeList routeStopoverList = routeNode.SelectNodes("stopovers/stopover"); if (routeStopoverList != null) foreach (XmlElement routeStopoverNode in routeStopoverList) { Airport stopoverAirport = Airports.GetAirportFromID(routeStopoverNode.Attributes["airport"].Value); var stopoverRoute = new StopoverRoute(stopoverAirport); XmlNodeList legsList = routeStopoverNode.SelectNodes("legs/leg"); if (legsList != null) foreach (XmlElement legNode in legsList) { stopoverRoute.AddLeg(LoadRoute((XmlElement) legNode.SelectSingleNode("route"), airline, routetype)); } route.AddStopover(stopoverRoute); } if (routetype == Route.RouteType.Passenger || routetype == Route.RouteType.Mixed) { ((PassengerRoute) route).Classes.Clear(); XmlNodeList routeClassList = routeNode.SelectNodes("routeclasses/routeclass"); if (routeClassList != null) foreach (XmlElement routeClassNode in routeClassList) { var airlinerClassType = (AirlinerClass.ClassType) Enum.Parse(typeof (AirlinerClass.ClassType), routeClassNode.Attributes["type"].Value); double fareprice = Convert.ToDouble( routeClassNode.Attributes["fareprice"].Value, new CultureInfo("de-DE", false)); var seatingType = (RouteAirlinerClass.SeatingType) Enum.Parse( typeof (RouteAirlinerClass.SeatingType), routeClassNode.Attributes["seating"].Value); var rClass = new RouteAirlinerClass( airlinerClassType, RouteAirlinerClass.SeatingType.ReservedSeating, fareprice) {Seating = seatingType}; foreach (RouteFacility.FacilityType ftype in Enum.GetValues(typeof (RouteFacility.FacilityType))) { if (routeClassNode.HasAttribute(ftype.ToString())) { RouteFacility facility = RouteFacilities.GetFacility(routeClassNode.Attributes[ftype.ToString()].Value); rClass.AddFacility(facility); } } ((PassengerRoute) route).AddRouteAirlinerClass(rClass); } } if (routetype == Route.RouteType.Mixed || routetype == Route.RouteType.Cargo) { var routeCargoNode = (XmlElement) routeNode.SelectSingleNode("cargo"); if (routeCargoNode != null) { double unitPrice = Convert.ToDouble( routeCargoNode.Attributes["priceperunit"].Value, new CultureInfo("de-DE", false)); ((CargoRoute) route).PricePerUnit = unitPrice; } } var timeTable = new RouteTimeTable(route); XmlNodeList timetableList = routeNode.SelectNodes("timetable/timetableentry"); if (timetableList != null) foreach (XmlElement entryNode in timetableList) { Airport entryDest = Airports.GetAirport(entryNode.Attributes["destination"].Value); string flightCode = entryNode.Attributes["flightcode"].Value; var day = (DayOfWeek) Enum.Parse(typeof (DayOfWeek), entryNode.Attributes["day"].Value); TimeSpan time = TimeSpan.Parse(entryNode.Attributes["time"].Value); FleetAirliner airliner = entryNode.Attributes["airliner"].Value == "-" ? null : airline.Fleet.Find(a => a.Airliner.ID == entryNode.Attributes["airliner"].Value); var entry = new RouteTimeTableEntry( timeTable, day, time, new RouteEntryDestination(entryDest, flightCode, null), null); if (entryNode.HasAttribute("id")) { entry.ID = entryNode.Attributes["id"].Value; } if (entryNode.HasAttribute("mainentry")) { entry.MainEntry = airline.Routes.SelectMany(r => r.TimeTable.Entries) .ToList() .Find(e => e.ID == entryNode.Attributes["mainentry"].Value); } entry.Airliner = airliner; if (airliner != null && !airliner.Routes.Contains(route)) { airliner.Routes.Add(route); } timeTable.AddEntry(entry); } route.TimeTable = timeTable; XmlNodeList routeInvoiceList = routeNode.SelectNodes("invoices/invoice"); if (routeInvoiceList != null) foreach (XmlElement routeInvoiceNode in routeInvoiceList) { var type = (Invoice.InvoiceType) Enum.Parse(typeof (Invoice.InvoiceType), routeInvoiceNode.Attributes["type"].Value); int invoiceYear = Convert.ToInt16(routeInvoiceNode.Attributes["year"].Value); int invoiceMonth = Convert.ToInt16(routeInvoiceNode.Attributes["month"].Value); double invoiceAmount = Convert.ToDouble( routeInvoiceNode.Attributes["amount"].Value, new CultureInfo("de-DE", false)); route.SetRouteInvoice(type, invoiceYear, invoiceMonth, 1, invoiceAmount); } return route; }
public static bool IsRoutePlannerTimeTableValid( RouteTimeTable timeTable, FleetAirliner airliner, List<RouteTimeTableEntry> entries, bool withSlots = true) { var tEntries = new List<RouteTimeTableEntry>(); tEntries.AddRange(entries); tEntries.AddRange(timeTable.Entries); foreach (RouteTimeTableEntry e in timeTable.Entries) { var cEntries = new List<RouteTimeTableEntry>(tEntries); cEntries.Remove(e); if (!IsRouteEntryValid(e, airliner, cEntries, withSlots)) { return false; } } return true; }
public static bool IsTimeTableValid( RouteTimeTable timeTable, FleetAirliner airliner, List<RouteTimeTableEntry> entries, bool withSlots = true) { return timeTable.Entries.All(e => IsRouteEntryValid(e, airliner, entries, withSlots)); }