protected virtual void AddForecastToDataSet(MaintenanceProgramDataSet destinationDataSet) { var avgUtilizationCycles = _forecastData != null ? _forecastData.AverageUtilization.Cycles : 0; var avgUtilizationHours = _forecastData != null ? _forecastData.AverageUtilization.Hours : 0; var avgUtilizationType = _forecastData != null ? _forecastData.AverageUtilization.SelectedInterval.ToString() : ""; var forecastCycles = _forecastData != null ? _forecastData.ForecastLifelength.Cycles != null ? (int)_forecastData.ForecastLifelength.Cycles : 0 : 0; var forecastHours = _forecastData != null ? _forecastData.ForecastLifelength.Hours != null ? (int)_forecastData.ForecastLifelength.Hours : 0 : 0; var forecastDays = _forecastData != null ? _forecastData.ForecastLifelength.Days != null ? (int)_forecastData.ForecastLifelength.Days : 0 : 0; var forecastDate = _forecastData != null ? _forecastData.ForecastDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString()) : ""; destinationDataSet.ForecastTable.AddForecastTableRow(avgUtilizationCycles, avgUtilizationHours, avgUtilizationType, forecastCycles, forecastHours, forecastDays, forecastDate); }
/// <summary> /// Добавление дополнительной информации /// </summary> /// <param name="destinationDateSet"></param> private void AddAdditionalDataToDataSet(MaintenanceProgramDataSet destinationDateSet) { string reportFooter = new GlobalTermsProvider()["ReportFooter"].ToString(); string reportFooterPrepared = new GlobalTermsProvider()["ReportFooterPrepared"].ToString(); string reportFooterLink = new GlobalTermsProvider()["ProductWebsite"].ToString(); destinationDateSet.AdditionalDataTAble.AddAdditionalDataTAbleRow(_reportTitle, OperatorLogotype, _filterSelection?"Schedule":"Unschedule", DateAsOf, reportFooter, reportFooterPrepared, reportFooterLink); }
/// <summary> /// Построить источник данных (DataSet) для вывода в отчет /// </summary> /// <returns></returns> public virtual MaintenanceProgramDataSet GenerateDataSet() { MaintenanceProgramDataSet dataset = new MaintenanceProgramDataSet(); AddAircraftToDataset(dataset); AddDirectivesToDataSet(dataset); AddAdditionalDataToDataSet(dataset); AddForecastToDataSet(dataset); return(dataset); }
/// <summary> /// Добавляется элемент в таблицу данных /// </summary> /// <param name="destinationDataSet">Таблица, в которую добавляется элемент</param> private void AddAircraftToDataset(MaintenanceProgramDataSet destinationDataSet) { if (_reportedAircraft == null) { return; } var reportAircraftLifeLenght = GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_reportedAircraft); var manufactureDate = _reportedAircraft.ManufactureDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString()); var serialNumber = ReportedAircraft.SerialNumber; var model = _reportedAircraft.Model.ToString(); var sinceNewHours = reportAircraftLifeLenght.Hours != null ? (int)reportAircraftLifeLenght.Hours : 0; var sinceNewCycles = reportAircraftLifeLenght.Cycles != null ? (int)reportAircraftLifeLenght.Cycles : 0; var registrationNumber = ReportedAircraft.RegistrationNumber; int averageUtilizationHours; int averageUtilizationCycles; string averageUtilizationType; if (_forecastData == null) { var aircraftFrame = GlobalObjects.ComponentCore.GetBaseComponentById(_reportedAircraft.AircraftFrameId); var averageUtilization = GlobalObjects.AverageUtilizationCore.GetAverageUtillization(aircraftFrame); averageUtilizationHours = (int)averageUtilization.Hours; averageUtilizationCycles = (int)averageUtilization.Cycles; averageUtilizationType = averageUtilization.SelectedInterval == UtilizationInterval.Dayly ? "Day" : "Month"; } else { averageUtilizationHours = (int)_forecastData.AverageUtilization.Hours; averageUtilizationCycles = (int)_forecastData.AverageUtilization.Cycles; averageUtilizationType = _forecastData.AverageUtilization.SelectedInterval == UtilizationInterval.Dayly ? "Day" : "Month"; } var lineNumber = (ReportedAircraft).LineNumber; var variableNumber = (ReportedAircraft).VariableNumber; destinationDataSet.AircraftDataTable.AddAircraftDataTableRow(serialNumber, manufactureDate, sinceNewHours, sinceNewCycles, registrationNumber, model, lineNumber, variableNumber, averageUtilizationHours, averageUtilizationCycles, averageUtilizationType); }
/// <summary> /// Добавление директив в таблицу данных /// </summary> /// <param name="dataset">Таблица, в которую добавляются данные</param> protected virtual void AddDirectivesToDataSet(MaintenanceProgramDataSet dataset) { List <MaintenanceCheck> checks = new List <MaintenanceCheck>(_reportedDirectives.ToArray()); List <MaintenanceCheckGroupByType> groups = new List <MaintenanceCheckGroupByType>(); int groupId = 0; var v = from liminationItem in checks where liminationItem.Schedule == _filterSelection group liminationItem by liminationItem.CheckType.FullName into fileGroup orderby fileGroup.Key select fileGroup; foreach (IGrouping <string, MaintenanceCheck> grouping in v) { MaintenanceCheckGroupByType g = new MaintenanceCheckGroupByType(_filterSelection); groups.Add(g); foreach (MaintenanceCheck liminationItem in grouping) { g.Checks.Add(liminationItem); liminationItem.Tag = groupId; groupId++; } } groups.OrderBy(g => g.MinInterval()); int min, max, countGroups; for (int i = 0; i < groups.Count; i++) { if (_filterSelection) { min = groups[i].MinInterval(); max = i != groups.Count - 1 ? groups[i + 1].MinInterval() : groups[i].MaxInterval(); //Вычисление количества групп выполнения для данного типа чеков (A,B or C) countGroups = max / min; //Вычисление интервала выполнения для каждой группы выполнения //если интервал, на котором должен выполнится чек равени интервалу группы //то чек посещается в даннуб группу выполнения for (int j = 0; j < countGroups; j++) { int interval = min * (j + 1); foreach (MaintenanceCheck liminationItem in groups[i].Checks) { if (interval % liminationItem.Interval.Hours == 0) { dataset.ItemsTable.AddItemsTableRow(interval, (int)liminationItem.Tag, liminationItem.Name, "X"); } } if (i <= 0) { continue; } //Если просматривается не базовая группа (groups[0]) //то в набор данных должны быть включены все предыдущие группы чеков for (int k = 0; k < i; k++) { interval = min * (j + 1); int localInterval = k != groups.Count - 1 ? groups[k + 1].MinInterval() : groups[k].MaxInterval(); foreach (MaintenanceCheck liminationItem in groups[k].Checks) { if (localInterval % liminationItem.Interval.Hours == 0) { dataset.ItemsTable.AddItemsTableRow(interval, (int)liminationItem.Tag, liminationItem.Name, "X"); } else { dataset.ItemsTable.AddItemsTableRow(interval, (int)liminationItem.Tag, liminationItem.Name, "[X]"); } } } } } else { min = groups[i].MinInterval(); max = i != groups.Count - 1 ? groups[i + 1].MinInterval() : groups[i].MaxInterval(); //Вычисление количества групп выполнения для данного типа чеков (A,B or C) countGroups = max / min; //Вычисление интервала выполнения для каждой группы выполнения //если интервал, на котором должен выполнится чек равен интервалу группы //то чек посещается в данную группу выполнения for (int j = 0; j < countGroups; j++) { int interval = min * (j + 1); foreach (MaintenanceCheck liminationItem in groups[i].Checks) { if (interval % liminationItem.Interval.Days == 0) { dataset.ItemsTable.AddItemsTableRow(interval, (int)liminationItem.Tag, liminationItem.Name, "X"); } } if (i <= 0) { continue; } //Если просматривается не базовая группа (groups[0]) //то в набор данных должны быть включены все предыдущие группы чеков for (int k = 0; k < i; k++) { interval = min * (j + 1); int localInterval = k != groups.Count - 1 ? groups[k + 1].MinInterval() : groups[k].MaxInterval(); foreach (MaintenanceCheck liminationItem in groups[k].Checks) { if (localInterval % liminationItem.Interval.Days == 0) { dataset.ItemsTable.AddItemsTableRow(interval, (int)liminationItem.Tag, liminationItem.Name, "X"); } else { dataset.ItemsTable.AddItemsTableRow(interval, (int)liminationItem.Tag, liminationItem.Name, "[X]"); } } } } } } }