Beispiel #1
0
        protected override List <CustomCell> GetListViewSubItems(AircraftFlight item)
        {
            //TODO (Evgenii Babak) : Вся логика должна быть в классе Calculator
            var subItems = new List <CustomCell>();

            var dateString = item.FlightDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString());
            var date       = item.FlightDate.Date.AddMinutes(item.OutTime);
            var atlb       = _atbs.GetItemById(item.ATLBId);
            var author     = GlobalObjects.CasEnvironment.GetCorrector(item);

            if (item.AtlbRecordType == AtlbRecordType.Flight)
            {
                var   route            = item.StationFromId.ShortName + " - " + item.StationToId.ShortName;
                var   flightTimeString = UsefulMethods.TimeToString(new TimeSpan(0, 0, item.FlightTimeTotalMinutes, 0));
                Color flightTimeColor;
                if (item.FlightTime.TotalMinutes == item.BlockTime.TotalMinutes)
                {
                    flightTimeColor = Color.Black;
                }
                else
                {
                    double persent = Math.Abs(1 - (item.FlightTime.TotalMinutes / item.BlockTime.TotalMinutes)) * 100;
                    if (persent <= 3)
                    {
                        flightTimeColor = Color.FromArgb(Highlight.Green.Color);
                    }
                    else if (persent <= 10)
                    {
                        flightTimeColor = Color.FromArgb(Highlight.Yellow.Color);
                    }
                    else
                    {
                        flightTimeColor = Color.FromArgb(Highlight.Red.Color);
                    }
                }

                var perDaysFlight = Lifelength.Zero;
                var perDaysBlock  = Lifelength.Zero;
                var flights       = _flights.Where(f =>
                                                   f.AtlbRecordType != AtlbRecordType.Maintenance && f.FlightDate.Date.AddMinutes(f.TakeOffTime) <=
                                                   item.FlightDate.Date.AddMinutes(item.TakeOffTime)).ToList();
                foreach (AircraftFlight aircraftFlight in flights)
                {
                    perDaysFlight.Add(aircraftFlight.FlightTimeLifelength);
                    perDaysBlock.Add(aircraftFlight.BlockTimeLifelenght);
                }


                subItems.Add(CreateRow(item.PageNo, item.PageNo));
                subItems.Add(CreateRow(dateString, date));
                subItems.Add(CreateRow(item.FlightNumber.ToString(), item.FlightNumber));
                subItems.Add(CreateRow(route, route));
                subItems.Add(CreateRow(flightTimeString, item.FlightTime, flightTimeColor));

                #region колонки для отображения наработок по двигателям и ВСУ

                foreach (BaseComponent baseComponent in _enginesAndAPU.Where(i =>
                                                                             i.BaseComponentType == BaseComponentType.Engine))
                {
                    bool shouldFillSubItems = false;

                    var baseComponentFlightLifeLenght = Lifelength.Null;

                    var lastKnownTransferRecBeforFlight =
                        baseComponent.TransferRecords.GetLastKnownRecord(item.FlightDate.Date);
                    if (lastKnownTransferRecBeforFlight != null &&
                        lastKnownTransferRecBeforFlight.DestinationObjectType == SmartCoreType.Aircraft &&
                        lastKnownTransferRecBeforFlight.DestinationObjectId == _parentAircraft.ItemId)
                    {
                        shouldFillSubItems = true;
                        var flightsWhichOccuredAfterInstallationOfBd = flights.Where(f =>
                                                                                     f.AtlbRecordType != AtlbRecordType.Maintenance &&
                                                                                     f.FlightDate.Date >= lastKnownTransferRecBeforFlight.RecordDate).ToList();

                        var perDaysFlightForBd = Lifelength.Zero;
                        var perDaysBlockForBd  = Lifelength.Zero;

                        foreach (var flight in flightsWhichOccuredAfterInstallationOfBd)
                        {
                            perDaysFlightForBd.Add(flight.FlightTimeLifelength);
                            perDaysBlockForBd.Add(flight.BlockTimeLifelenght);
                        }

                        baseComponentFlightLifeLenght =
                            GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthIncludingThisFlight(
                                baseComponent, item);
                    }

                    Color baseComponentTimeColor = Color.Black;
                    if (baseComponent.BaseComponentType == BaseComponentType.Engine)
                    {
                        if (!last.ContainsKey(baseComponent.ItemId))
                        {
                            last.Add(baseComponent.ItemId, new List <AircraftFlight>());
                        }

                        if (shouldFillSubItems)
                        {
                            subItems.Add(CreateListViewSubItem(baseComponentTimeColor, baseComponentFlightLifeLenght));
                            var cp = WorkParams.FirstOrDefault(i =>
                                                               i.ComponentId == baseComponent.ItemId && i.GroundAir == GroundAir.Air);
                            var cc = OilConditions.FirstOrDefault(i =>
                                                                  i.ComponentId == baseComponent.ItemId && i.FlightId == item.ItemId);

                            var oilFlowMin  = cp?.OilFlowMin ?? 0;
                            var oilFlowNorm = cp?.OilFlowRecomended ?? 0;
                            var oilFlowMax  = cp?.OilFlowMax ?? 0;
                            var oilAdded    = cc?.OilAdded ?? 0;



                            var q = _flights
                                    .Where(f => f.AtlbRecordType != AtlbRecordType.Maintenance &&
                                           f.FlightDate.Date.AddMinutes(f.TakeOffTime) <=
                                           item.FlightDate.Date.AddMinutes(item.TakeOffTime))
                                    .OrderByDescending(i => i.FlightDate).ThenByDescending(i => i.TakeOffTime)
                                    .ToList();


                            var    spent           = cc?.Spent ?? 0;
                            double consumption     = 0;
                            double consumptionMean = 0;


                            if (oilAdded > 0)
                            {
                                if (last[baseComponent.ItemId].Any())
                                {
                                    if (last[baseComponent.ItemId].Last().ItemId != item.ItemId)
                                    {
                                        var  temp = new List <AircraftFlight>();
                                        bool flag = false;
                                        foreach (var aircraftFlight in q)
                                        {
                                            if (aircraftFlight.ItemId == last[baseComponent.ItemId].Last().ItemId)
                                            {
                                                flag = true;
                                            }
                                            if (flag)
                                            {
                                                temp.Add(aircraftFlight);
                                            }
                                        }

                                        foreach (var aircraftFlight in temp)
                                        {
                                            q.Remove(aircraftFlight);
                                        }
                                    }
                                }

                                var sumTime = q.Sum(i => i.FlightTime.TotalMinutes);
                                spent       = oilAdded / sumTime;
                                consumption = spent * 60.0;

                                if (!last[baseComponent.ItemId].Any(i => i.ItemId == item.ItemId))
                                {
                                    last[baseComponent.ItemId].Add(item);
                                }
                            }


                            if (!_consumptionMeans.ContainsKey(baseComponent.ItemId))
                            {
                                _consumptionMeans.Add(baseComponent.ItemId, new List <dynamic>());
                            }

                            _consumptionMeans[baseComponent.ItemId].Add(new { UpLift = cc?.OilAdded * 60 ?? 0, FlightTime = item.FlightTime.TotalMinutes });
                            consumptionMean = _consumptionMeans[baseComponent.ItemId].Sum(i => (double)i.UpLift) /
                                              _consumptionMeans[baseComponent.ItemId].Sum(i => (double)i.FlightTime);

                            subItems.Add(CreateListViewSubItem(oilAdded.ToString()));
                            subItems.Add(CreateListViewSubItem(oilFlowMin.ToString()));
                            subItems.Add(CreateListViewSubItem(oilFlowNorm.ToString()));
                            subItems.Add(CreateListViewSubItem(oilFlowMax.ToString()));
                            subItems.Add(CreateListViewSubItem(consumption.ToString("F")));
                            subItems.Add(CreateListViewSubItem(consumptionMean.ToString("F")));
                            subItems.Add(CreateListViewSubItem(GetStatus(oilFlowMin, oilFlowNorm, oilFlowMax, consumption)
                                                               .ToString()));


                            if (item.AtlbRecordType == AtlbRecordType.Flight && oilAdded > 0)
                            {
                                if (!_graph.Limits.ContainsKey(baseComponent))
                                {
                                    _graph.Limits.Add(baseComponent, new OilLimits()
                                    {
                                        Max    = oilFlowMax,
                                        Min    = oilFlowMin,
                                        Normal = oilFlowNorm
                                    });
                                }

                                if (!_graph.Graph.ContainsKey(baseComponent))
                                {
                                    _graph.Graph.Add(baseComponent, new Dictionary <Lifelength, dynamic>());
                                }


                                if (!_graph.Graph[baseComponent].ContainsKey(baseComponentFlightLifeLenght))
                                {
                                    _graph.Graph[baseComponent].Add(baseComponentFlightLifeLenght, new { Consumption = consumption, ConsumptionMean = consumptionMean });
                                }
                                //else throw new Exception("Такая наработка уже есть!");
                            }
                        }
                        else
                        {
                            subItems.Add(CreateListViewSubItem(string.Empty));
                            subItems.Add(CreateListViewSubItem(string.Empty));
                            subItems.Add(CreateListViewSubItem(string.Empty));
                            subItems.Add(CreateListViewSubItem(string.Empty));
                            subItems.Add(CreateListViewSubItem(string.Empty));
                            subItems.Add(CreateListViewSubItem(string.Empty));
                            subItems.Add(CreateListViewSubItem(string.Empty));
                        }
                    }
                }

                #endregion

                subItems.Add(CreateRow(atlb?.ATLBNo ?? "AtlB deleted", atlb?.ATLBNo));
                subItems.Add(CreateRow(author, author));
            }
            else
            {
                subItems.Add(CreateRow(item.PageNo, item.PageNo));
                subItems.Add(CreateRow(dateString, date));
                subItems.Add(CreateRow(item.FlightNumber.ToString(), item.FlightNumber));
                subItems.Add(CreateRow(item.StationToId.ShortName, item.StationToId.ShortName));
                subItems.Add(CreateRow("", ""));

                #region колонки для отображения наработок по двигателям и ВСУ

                foreach (var baseComponent in _enginesAndAPU)
                {
                    if (baseComponent.BaseComponentType == BaseComponentType.Engine)
                    {
                        subItems.Add(CreateRow("", ""));
                        subItems.Add(CreateRow("", ""));
                        subItems.Add(CreateRow("", ""));
                        subItems.Add(CreateRow("", ""));
                        subItems.Add(CreateRow("", ""));
                        subItems.Add(CreateRow("", ""));
                        subItems.Add(CreateRow("", ""));
                        subItems.Add(CreateRow("", ""));
                    }
                }

                #endregion

                subItems.Add(CreateRow(atlb?.ATLBNo, atlb?.ATLBNo));
                subItems.Add(CreateRow(author, author));
            }


            return(subItems);
        }
Beispiel #2
0
        protected override List <CustomCell> GetListViewSubItems(AircraftFlight item)
        {
            //TODO (Evgenii Babak) : Вся логика должна быть в классе Calculator
            var subItems = new List <CustomCell>();

            var dateString = item.FlightDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString());
            var date       = item.FlightDate.Date.AddMinutes(item.OutTime);
            var atlb       = _atbs.GetItemById(item.ATLBId);
            var author     = GlobalObjects.CasEnvironment.GetCorrector(item);

            if (item.AtlbRecordType == AtlbRecordType.Flight)
            {
                var route            = item.StationFromId.ShortName + " - " + item.StationToId.ShortName;
                var flightTimeString = UsefulMethods.TimeToString(new TimeSpan(0, 0, item.FlightTimeTotalMinutes, 0)) + " (" +
                                       UsefulMethods.TimePeriodToString(new TimeSpan(0, 0, item.TakeOffTime, 0),
                                                                        new TimeSpan(0, 0, item.LDGTime, 0)) + ")";
                Color flightTimeColor;
                if (item.FlightTime.TotalMinutes == item.BlockTime.TotalMinutes)
                {
                    flightTimeColor = Color.Black;
                }
                else
                {
                    double persent = Math.Abs(1 - (item.FlightTime.TotalMinutes / item.BlockTime.TotalMinutes)) * 100;
                    if (persent <= 3)
                    {
                        flightTimeColor = Color.FromArgb(Highlight.Green.Color);
                    }
                    else if (persent <= 10)
                    {
                        flightTimeColor = Color.FromArgb(Highlight.Yellow.Color);
                    }
                    else
                    {
                        flightTimeColor = Color.FromArgb(Highlight.Red.Color);
                    }
                }
                var perDaysFlight = Lifelength.Zero;
                var perDaysBlock  = Lifelength.Zero;
                var flights       = _flights.Where(f => f.AtlbRecordType != AtlbRecordType.Maintenance && f.FlightDate.Date.AddMinutes(f.TakeOffTime) <=
                                                   item.FlightDate.Date.AddMinutes(item.TakeOffTime)).ToList();
                foreach (AircraftFlight aircraftFlight in flights)
                {
                    perDaysFlight.Add(aircraftFlight.FlightTimeLifelength);
                    perDaysBlock.Add(aircraftFlight.BlockTimeLifelenght);
                }

                var aircraftFlightLifelenght = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthIncludingThisFlight(item);
                var aircraftBlockLifelenght  = aircraftFlightLifelenght + (perDaysBlock - perDaysFlight);


                subItems.Add(CreateRow(item.PageNo, item.PageNo));
                subItems.Add(CreateRow(dateString, date));
                subItems.Add(CreateRow(item.FlightNumber.ToString(), item.FlightNumber));
                subItems.Add(CreateRow(route, route));
                subItems.Add(CreateRow(flightTimeString, item.FlightTime, flightTimeColor));
                subItems.Add(CreateRow(UsefulMethods.TimeToString(item.BlockTime), item.BlockTime, flightTimeColor));
                subItems.Add(CreateRow(perDaysFlight.ToHoursMinutesAndCyclesFormat("", ""), perDaysFlight));
                subItems.Add(CreateRow(perDaysBlock.ToHoursMinutesAndCyclesFormat("", ""), perDaysBlock));
                subItems.Add(CreateRow(aircraftFlightLifelenght.ToHoursMinutesAndCyclesFormat("", ""), aircraftFlightLifelenght));
                subItems.Add(CreateRow(aircraftBlockLifelenght.ToHoursMinutesAndCyclesFormat("", ""), aircraftFlightLifelenght));

                #region колонки для отображения наработок по двигателям и ВСУ

                foreach (BaseComponent baseComponent in _enginesAndAPU)
                {
                    bool shouldFillSubItems = false;

                    var baseComponentFlightLifeLenght = Lifelength.Null;
                    var baseComponentBlockLifeLenght  = Lifelength.Null;

                    var lastKnownTransferRecBeforFlight = baseComponent.TransferRecords.GetLastKnownRecord(item.FlightDate.Date);
                    if (lastKnownTransferRecBeforFlight != null &&
                        lastKnownTransferRecBeforFlight.DestinationObjectType == SmartCoreType.Aircraft &&
                        lastKnownTransferRecBeforFlight.DestinationObjectId == _parentAircraft.ItemId)
                    {
                        shouldFillSubItems = true;
                        var flightsWhichOccuredAfterInstallationOfBd = flights.Where(f => f.AtlbRecordType != AtlbRecordType.Maintenance && f.FlightDate.Date >= lastKnownTransferRecBeforFlight.RecordDate).ToList();

                        var perDaysFlightForBd = Lifelength.Zero;
                        var perDaysBlockForBd  = Lifelength.Zero;

                        foreach (var flight in flightsWhichOccuredAfterInstallationOfBd)
                        {
                            perDaysFlightForBd.Add(flight.FlightTimeLifelength);
                            perDaysBlockForBd.Add(flight.BlockTimeLifelenght);
                        }

                        baseComponentFlightLifeLenght = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthIncludingThisFlight(baseComponent, item);
                        baseComponentBlockLifeLenght  = baseComponentFlightLifeLenght + (perDaysBlockForBd - perDaysFlightForBd);
                    }

                    Color baseComponentTimeColor = Color.Black;

                    if (shouldFillSubItems && baseComponent.BaseComponentType != BaseComponentType.Apu)
                    {
                        var baseDetailFlightWorkTime = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelength(item, baseComponent);

                        if (item.FlightTime.TotalMinutes == Convert.ToDouble(baseDetailFlightWorkTime.TotalMinutes))
                        {
                            baseComponentTimeColor = Color.Black;
                        }
                        else
                        {
                            double persent = Math.Abs(1 - (Convert.ToDouble(baseDetailFlightWorkTime.TotalMinutes) / item.FlightTime.TotalMinutes)) * 100;
                            if (persent <= 3)
                            {
                                baseComponentTimeColor = Color.FromArgb(Highlight.Green.Color);
                            }
                            else if (persent <= 10)
                            {
                                baseComponentTimeColor = Color.FromArgb(Highlight.Yellow.Color);
                            }
                            else
                            {
                                baseComponentTimeColor = Color.FromArgb(Highlight.Red.Color);
                            }
                        }
                    }
                    var baseDetailHaveOverhaulDirective = BaseDetailHaveOverhaul(baseComponent);
                    var lastOverhaul = GetLastOverhaul(baseComponent);
                    if (baseComponent.BaseComponentType == BaseComponentType.Engine)
                    {
                        if (shouldFillSubItems)
                        {
                            subItems.Add(CreateListViewSubItem(baseComponentTimeColor, baseComponentFlightLifeLenght));
                            subItems.Add(CreateListViewSubItem(Color.Black, baseComponentBlockLifeLenght));
                            if (baseDetailHaveOverhaulDirective)
                            {
                                if (lastOverhaul != null)
                                {
                                    var sinceOverhaulFlight = baseComponentFlightLifeLenght.IsGreater(lastOverhaul.OnLifelength)
                                                                                ? baseComponentFlightLifeLenght - lastOverhaul.OnLifelength
                                                                                : Lifelength.Null;

                                    subItems.Add(CreateListViewSubItem(Color.Black, sinceOverhaulFlight));

                                    var sinceOverhaulBlock = baseComponentBlockLifeLenght.IsGreater(lastOverhaul.OnLifelength)
                                                                                ? baseComponentBlockLifeLenght - lastOverhaul.OnLifelength
                                                                                : Lifelength.Null;

                                    subItems.Add(CreateListViewSubItem(Color.Black, sinceOverhaulBlock));
                                }
                                else
                                {
                                    subItems.Add(CreateListViewSubItem("N/A"));
                                    subItems.Add(CreateListViewSubItem("N/A"));
                                }
                            }
                        }
                        else
                        {
                            subItems.Add(CreateListViewSubItem(string.Empty));
                            subItems.Add(CreateListViewSubItem(string.Empty));
                            if (baseDetailHaveOverhaulDirective)
                            {
                                subItems.Add(CreateListViewSubItem(string.Empty));
                                subItems.Add(CreateListViewSubItem(string.Empty));
                            }
                        }
                    }
                    else if (baseComponent.BaseComponentType == BaseComponentType.Apu)
                    {
                        if (shouldFillSubItems)
                        {
                            subItems.Add(CreateListViewSubItem(baseComponentTimeColor, baseComponentFlightLifeLenght));
                            if (baseDetailHaveOverhaulDirective)
                            {
                                if (lastOverhaul != null)
                                {
                                    var sinceOverhaulFlight = baseComponentFlightLifeLenght - lastOverhaul.OnLifelength;
                                    subItems.Add(CreateListViewSubItem(Color.Black, sinceOverhaulFlight));
                                }
                                else
                                {
                                    subItems.Add(CreateListViewSubItem("N/A"));
                                }
                            }
                        }
                        else
                        {
                            subItems.Add(CreateListViewSubItem(string.Empty));
                            if (baseDetailHaveOverhaulDirective)
                            {
                                subItems.Add(CreateListViewSubItem(string.Empty));
                            }
                        }
                    }
                }

                #endregion

                subItems.Add(CreateRow(atlb?.ATLBNo ?? "AtlB deleted", atlb?.ATLBNo));
                subItems.Add(CreateRow(item.ListViewChecksPerformed, item.ListViewChecksPerformed));
                subItems.Add(CreateRow(author, author));
            }
            else
            {
                subItems.Add(CreateRow(item.PageNo, item.PageNo));
                subItems.Add(CreateRow(dateString, date));
                subItems.Add(CreateRow(item.FlightNumber.ToString(), item.FlightNumber));
                subItems.Add(CreateRow(item.StationToId.ShortName, item.StationToId.ShortName));
                subItems.Add(CreateRow("", ""));
                subItems.Add(CreateRow("", ""));
                subItems.Add(CreateRow("", ""));
                subItems.Add(CreateRow("", ""));
                subItems.Add(CreateRow("", ""));
                subItems.Add(CreateRow("", ""));


                #region колонки для отображения наработок по двигателям и ВСУ

                foreach (var baseComponent in _enginesAndAPU)
                {
                    if (baseComponent.BaseComponentType == BaseComponentType.Engine)
                    {
                        subItems.Add(CreateRow("", ""));
                        subItems.Add(CreateRow("", ""));
                        if (baseComponent.ComponentDirectives.Count(dd => dd.DirectiveType == ComponentRecordType.Overhaul) > 0)
                        {
                            subItems.Add(CreateRow("", ""));
                            subItems.Add(CreateRow("", ""));
                        }
                    }
                    else if (baseComponent.BaseComponentType == BaseComponentType.Apu)
                    {
                        subItems.Add(CreateRow("", ""));
                        if (baseComponent.ComponentDirectives.Count(dd => dd.DirectiveType == ComponentRecordType.Overhaul) > 0)
                        {
                            subItems.Add(CreateRow("", ""));
                        }
                    }
                }

                #endregion

                subItems.Add(CreateRow(atlb?.ATLBNo, atlb?.ATLBNo));
                subItems.Add(CreateRow(item.ListViewChecksPerformed, item.ListViewChecksPerformed));
                subItems.Add(CreateRow(author, author));
            }


            return(subItems);
        }
Beispiel #3
0
        protected override void AnimatedThreadWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            _initialDirectiveArray.Clear();
            _resultDirectiveArray.Clear();

            AnimatedThreadWorker.ReportProgress(0, "load directives");

            try
            {
                if (_currentForecast == null)
                {
                    var aircrafts = GlobalObjects.AircraftsCore.GetAllAircrafts();
                    foreach (var aircraft in aircrafts)
                    {
                        _initialDirectiveArray.AddRange(GlobalObjects.DirectiveCore.GetDeferredItems(null, aircraft));
                    }
                }
                else
                {
                    AnimatedThreadWorker.ReportProgress(20, "calculation directives");

                    GlobalObjects.AnalystCore.GetDirectives(_currentForecast, _currentPrimaryDirectiveType);
                    DirectiveCollection dirC = _currentForecast.DirectiveCollections[_currentPrimaryDirectiveType];
                    foreach (Directive directive in dirC)
                    {
                        _initialDirectiveArray.Add(directive);
                    }
                }
            }
            catch (Exception ex)
            {
                Program.Provider.Logger.Log("Error while loading directives", ex);
            }
            AnimatedThreadWorker.ReportProgress(40, "filter directives");
            if (_adType != ADType.None)
            {
                List <Directive> forDeleting =
                    _initialDirectiveArray.Where(primaryDirective => primaryDirective.ADType != _adType).ToList();

                foreach (Directive directive in forDeleting)
                {
                    _initialDirectiveArray.Remove(_initialDirectiveArray.GetItemById(directive.ItemId));
                }
            }

            #region Калькуляция состояния директив

            AnimatedThreadWorker.ReportProgress(60, "calculation of directives");

            foreach (Directive pd in _initialDirectiveArray)
            {
                //GlobalObjects.PerformanceCalculator.GetNextPerformance(pd);
                GlobalObjects.MTOPCalculator.CalculateDirectiveNew(pd);
            }

            AnimatedThreadWorker.ReportProgress(70, "filter directives");

            FilterItems(_initialDirectiveArray, _resultDirectiveArray);

            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }


            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            #endregion

            #region Сравнение с рабочими пакетами

            AnimatedThreadWorker.ReportProgress(90, "comparison with the Work Packages");

            //загрузка рабочих пакетов для определения
            //перекрытых ими выполнений задач
            if (_openPubWorkPackages == null)
            {
                _openPubWorkPackages = new CommonCollection <WorkPackage>();
            }

            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(CurrentAircraft, WorkPackageStatus.Opened));
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(CurrentAircraft, WorkPackageStatus.Published));

            //сбор всех записей рабочих пакетов для удобства фильтрации
            List <WorkPackageRecord> openWPRecords = new List <WorkPackageRecord>();
            foreach (WorkPackage openWorkPackage in _openPubWorkPackages)
            {
                openWPRecords.AddRange(openWorkPackage.WorkPakageRecords);
            }

            foreach (Directive task in _resultDirectiveArray)
            {
                if (task == null || task.NextPerformances == null || task.NextPerformances.Count <= 0)
                {
                    continue;
                }
                //Проход по всем след. выполнениям чека и записям в рабочих пакетах
                //для поиска перекрывающихся выполнений
                List <NextPerformance> performances = task.NextPerformances;
                foreach (NextPerformance np in performances)
                {
                    //поиск записи в рабочих пакетах по данному чеку
                    //чей номер группы выполнения (по записи) совпадает с расчитанным
                    WorkPackageRecord wpr =
                        openWPRecords.Where(r => r.PerformanceNumFromStart == np.PerformanceNum &&
                                            r.WorkPackageItemType == task.SmartCoreObjectType.ItemId &&
                                            r.DirectiveId == task.ItemId).FirstOrDefault();
                    if (wpr != null)
                    {
                        np.BlockedByPackage = _openPubWorkPackages.GetItemById(wpr.WorkPakageId);
                    }
                }
            }

            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            #endregion

            #region Загрузка Котировочных ордеров

            AnimatedThreadWorker.ReportProgress(95, "Load Quotations");

            //загрузка рабочих пакетов для определения
            //перекрытых ими выполнений задач
            if (_openPubQuotations == null)
            {
                _openPubQuotations = new CommonCollection <RequestForQuotation>();
            }

            _openPubQuotations.Clear();
            _openPubQuotations.AddRange(GlobalObjects.PurchaseCore.GetRequestForQuotation(CurrentAircraft, new[] { WorkPackageStatus.Opened, WorkPackageStatus.Published }));

            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            #endregion

            AnimatedThreadWorker.ReportProgress(100, "Complete");
        }
Beispiel #4
0
 public Aircraft GetAircraftById(int aircraftId)
 {
     return(_aircrafts.GetItemById(aircraftId));
 }
Beispiel #5
0
        /// <summary>
        /// Загружает все элементы рабочего пакета
        /// </summary>
        /// <param name="package"></param>
        public void LoadDirectivePackageItems <T, TV>(T package)
            where T : AbstractDirectivePackage <TV>, new()
            where TV : BaseDirectivePackageRecord, new()
        {
            package.CanPublish         = package.CanClose = true;
            package.BlockPublishReason = "";
            package.MinClosingDate     = null;
            package.MaxClosingDate     = null;
            // Компоненты
            package.PackageRecords.Clear();
            package.PackageRecords.AddRange(_loader.GetObjectListAll <TV>(BaseDirectivePackageRecord.ParentIdProperty, package.ItemId));
            foreach (TV record in package.PackageRecords)
            {
                record.ParentPackage = package;
            }

            IEnumerable <IGrouping <SmartCoreType, TV> > groupedRecordsByTaskType =
                package.PackageRecords.GroupBy(pr => pr.PackageItemType);

            foreach (IGrouping <SmartCoreType, TV> groupedRecords in groupedRecordsByTaskType)
            {
                #region загрузка Базовых деталей
                if (groupedRecords.Key == SmartCoreType.BaseComponent)
                {
                    foreach (TV adWpr in groupedRecords)
                    {
                        IDirective d = _componentCore.GetBaseComponentById(adWpr.DirectiveId);
                        if (d != null)
                        {
                            adWpr.Task = d;
                        }
                        else
                        {
                            package.PackageRecords.RemoveById(adWpr.ItemId);
                        }
                    }
                    continue;
                }
                #endregion

                if (groupedRecords.Key.ObjectType == null)
                {
                    continue;
                }

                Type objectType = groupedRecords.Key.ObjectType;

                ICommonFilter filter =
                    new CommonFilter <int>(BaseEntityObject.ItemIdProperty,
                                           FilterType.In,
                                           groupedRecords.Select(wpr => wpr.DirectiveId).ToArray());

                ICommonCollection directiveCollection = _loader.GetObjectCollection(objectType, new[] { filter }, true, true);

                if (directiveCollection.Count > 0)
                {
                    foreach (TV adWpr in groupedRecords)
                    {
                        IDirective d = directiveCollection.GetItemById(adWpr.DirectiveId) as IDirective;
                        if (d != null)
                        {
                            adWpr.Task = d;
                        }
                        else
                        {
                            package.PackageRecords.RemoveById(adWpr.ItemId);
                        }
                    }
                }
            }
            // ставим флаг о том, что все элементы рабочего пакета считаны
            package.PackageItemsLoaded = true;
        }