/// <summary> /// Builds up rows for a report that wants information on flights for many aircraft simultaneously. /// </summary> /// <param name="args"></param> /// <param name="parameters"></param> /// <returns></returns> private FlightReportJson CreateManyAircraftReport(RequestReceivedEventArgs args, Parameters parameters) { FlightReportJson json = new FlightReportJson(); json.FromDate = FormatReportDate(parameters.FromDate); json.ToDate = FormatReportDate(parameters.ToDate); bool hasNonDatabaseCriteria = parameters.IsMilitary || parameters.WakeTurbulenceCategory != null || parameters.Species != null; if (!hasNonDatabaseCriteria) { json.CountRows = BaseStationDatabase.GetCountOfFlights(parameters); } var dbFlights = BaseStationDatabase.GetFlights( parameters, hasNonDatabaseCriteria ? -1 : parameters.FromRow, hasNonDatabaseCriteria ? -1 : parameters.ToRow, parameters.SortField1, parameters.SortAscending1, parameters.SortField2, parameters.SortAscending2); if (hasNonDatabaseCriteria) { dbFlights = dbFlights.Where(f => { bool matches = f.Aircraft != null; if (matches) { if (parameters.IsMilitary) { var codeBlock = StandingDataManager.FindCodeBlock(f.Aircraft.ModeS); matches = matches && codeBlock != null && codeBlock.IsMilitary; } if (parameters.Species != null || parameters.WakeTurbulenceCategory != null) { var aircraftType = StandingDataManager.FindAircraftType(f.Aircraft.ICAOTypeCode); if (parameters.Species != null) { matches = matches && aircraftType != null && aircraftType.Species == parameters.Species; } if (parameters.WakeTurbulenceCategory != null) { matches = matches && aircraftType != null && aircraftType.WakeTurbulenceCategory == parameters.WakeTurbulenceCategory; } } } return(matches); }).ToList(); json.CountRows = dbFlights.Count; int limit = parameters.ToRow == -1 || parameters.ToRow < parameters.FromRow ? int.MaxValue : (parameters.ToRow - Math.Max(0, parameters.FromRow)) + 1; int offset = parameters.FromRow < 0 ? 0 : parameters.FromRow; dbFlights = dbFlights.Skip(offset).Take(limit).ToList(); } TranscribeDatabaseRecordsToJson(dbFlights, json.Flights, json.Aircraft, json.Airports, json.Routes, args, parameters); return(json); }
public void FlightReportJson_Constructor_Initialises_To_Known_State_And_Properties_Work() { var json = new FlightReportJson(); TestUtilities.TestProperty(json, "CountRows", null, 1); TestUtilities.TestProperty(json, "ErrorText", null, "Ab"); TestUtilities.TestProperty(json, "FromDate", null, "Ab"); TestUtilities.TestProperty(json, "GroupBy", null, "Ab"); TestUtilities.TestProperty(json, "ProcessingTime", null, "Ab"); TestUtilities.TestProperty(json, "ToDate", null, "Ab"); Assert.AreEqual(0, json.Aircraft.Count); Assert.AreEqual(0, json.Airports.Count); Assert.AreEqual(0, json.Flights.Count); Assert.AreEqual(0, json.Routes.Count); }
/// <summary> /// Builds up rows for a report that wants information on flights for many aircraft simultaneously. /// </summary> /// <param name="parameters"></param> /// <param name="config"></param> /// <returns></returns> private FlightReportJson CreateManyAircraftReport(ReportParameters parameters, Configuration config) { var result = new FlightReportJson() { FromDate = FormatReportDate(parameters.Date?.LowerValue), ToDate = FormatReportDate(parameters.Date?.UpperValue), }; var hasNonDatabaseCriteria = parameters.IsMilitary != null || parameters.WakeTurbulenceCategory != null || parameters.Species != null; var dbFlights = SharedState.BaseStationDatabase.GetFlights( parameters, hasNonDatabaseCriteria ? -1 : parameters.FromRow, hasNonDatabaseCriteria ? -1 : parameters.ToRow, parameters.SortField1, parameters.SortAscending1, parameters.SortField2, parameters.SortAscending2 ); if (!hasNonDatabaseCriteria) { result.CountRows = SharedState.BaseStationDatabase.GetCountOfFlights(parameters); } else { dbFlights = dbFlights.Where(f => { var matches = f.Aircraft != null; if (matches) { if (parameters.IsMilitary != null) { var codeBlock = SharedState.StandingDataManager.FindCodeBlock(f.Aircraft.ModeS); matches = matches && codeBlock != null && parameters.IsMilitary.Passes(codeBlock.IsMilitary); } if (parameters.Species != null || parameters.WakeTurbulenceCategory != null) { var aircraftType = SharedState.StandingDataManager.FindAircraftType(f.Aircraft.ICAOTypeCode); if (parameters.Species != null) { matches = matches && aircraftType != null && parameters.Species.Passes(aircraftType.Species); } if (parameters.WakeTurbulenceCategory != null) { matches = matches && aircraftType != null && parameters.WakeTurbulenceCategory.Passes(aircraftType.WakeTurbulenceCategory); } } } return(matches); }).ToList(); result.CountRows = dbFlights.Count; var limit = parameters.ToRow == -1 || parameters.ToRow < parameters.FromRow ? int.MaxValue : (parameters.ToRow - Math.Max(0, parameters.FromRow)) + 1; var offset = parameters.FromRow < 0 ? 0 : parameters.FromRow; dbFlights = dbFlights.Skip(offset).Take(limit).ToList(); } TranscribeDatabaseRecordsToJson(dbFlights, result.Flights, result.Aircraft, result.Airports, result.Routes, parameters, config); return(result); }