Esempio n. 1
0
        //protected override void SetGroupsToItems(int columnIndex)
        //      {
        //          itemsListView.Groups.Clear();
        //          foreach (var item in ListViewItemList)
        //          {
        //              var temp = ListViewGroupHelper.GetGroupString(item.Tag);

        //		itemsListView.Groups.Add(temp, temp);
        //		item.Group = itemsListView.Groups[temp];
        //	}
        //      }
        #endregion

        #region protected override void SetItemColor(ListViewItem listViewItem, NextPerformance item)
        protected override void SetItemColor(GridViewRowInfo listViewItem, NextPerformance item)
        {
            if (item is MaintenanceNextPerformance)
            {
                MaintenanceNextPerformance mnp = item as MaintenanceNextPerformance;
                foreach (GridViewCellInfo cell in listViewItem.Cells)
                {
                    cell.Style.ForeColor = mnp == ((MaintenanceCheck)item.Parent).GetPergormanceGroupWhereCheckIsSenior()[0]
                                                ? Color.Black
                                                : Color.Gray;
                }

                if (mnp.CalcForHight)
                {
                    foreach (GridViewCellInfo cell in listViewItem.Cells)
                    {
                        cell.Style.CustomizeFill = true;
                        cell.Style.BackColor     = Color.FromArgb(Highlight.PurpleLight.Color);
                    }
                }
            }
            else
            {
                IDirective imd = item.Parent;

                foreach (GridViewCellInfo cell in listViewItem.Cells)
                {
                    cell.Style.ForeColor = imd.NextPerformances.IndexOf(item) == 0
                                                ? Color.Black
                                                : Color.Gray;
                    if (imd.Condition == ConditionState.Notify)
                    {
                        cell.Style.BackColor = Color.FromArgb(Highlight.Yellow.Color);
                    }
                    if (imd.Percents != null && imd.Percents > 0)
                    {
                        cell.Style.BackColor = Color.FromArgb(Highlight.Green.Color);
                    }
                }
            }

            if (item.BlockedByPackage != null)
            {
                foreach (GridViewCellInfo cell in listViewItem.Cells)
                {
                    cell.Style.CustomizeFill = true;
                    cell.Style.BackColor     = Color.FromArgb(Highlight.Grey.Color);
                }
            }
        }
Esempio n. 2
0
        private void AnimatedThreadWorkerDoLoad(object sender, DoWorkEventArgs e)
        {
            if (_maintenanceCheck == null || _currentAircraft == null)
            {
                e.Cancel = true;
                return;
            }

            if (_records == null)
            {
                _records = new CommonCollection <MaintenanceCheckBindTaskRecord>();
            }
            _records.Clear();

            if (_recordsTasks == null)
            {
                _recordsTasks = new CommonCollection <BaseEntityObject>();
            }
            _recordsTasks.Clear();

            if (_mpdForSelect == null)
            {
                _mpdForSelect = new CommonCollection <MaintenanceDirective>();
            }
            _mpdForSelect.Clear();

            _animatedThreadWorker.ReportProgress(0, "load binded tasks");

            var preResult = new List <MaintenanceCheckBindTaskRecord>();

            try
            {
                preResult.AddRange(GlobalObjects.WorkPackageCore.GetMaintenanceBingTasksRecords(_workPackage.ItemId));
                _records.AddRange(preResult.Where(r => r.CheckId == _maintenanceCheck.ItemId));
                _recordsTasks.AddRange(_records.Where(r => r.Task != null && r.Task is BaseEntityObject).Select(r => r.Task as BaseEntityObject));
                if (_maintenanceCheck.Grouping)
                {
                    MaintenanceNextPerformance mnp = _maintenanceCheck.GetNextPergormanceGroupWhereCheckIsSenior();
                    if (mnp != null && mnp.PerformanceGroup != null && mnp.PerformanceGroup.Checks.Count > 0)
                    {
                        _recordsTasks.AddRange(mnp.PerformanceGroup.Checks.SelectMany(mc => mc.BindMpds).ToArray());
                    }
                    else
                    {
                        _recordsTasks.AddRange(_maintenanceCheck.BindMpds.ToArray());
                    }
                }
                else
                {
                    _recordsTasks.AddRange(_maintenanceCheck.BindMpds.ToArray());
                }
            }
            catch (Exception ex)
            {
                Program.Provider.Logger.Log("Error while load Maintenance check bing tasks records", ex);
            }

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

            _animatedThreadWorker.ReportProgress(50, "calculation of Maintenance Directives");

            try
            {
                _mpdForSelect.AddRange(_workPackage.MaintenanceDirectives);
                _mpdForSelect.AddRange(_workPackage.ComponentDirectives.Where(dd => dd.MaintenanceDirective != null)
                                       .Select(dd => dd.MaintenanceDirective).Distinct());
                foreach (MaintenanceCheckBindTaskRecord record in preResult.Where(record => record.TaskType == SmartCoreType.MaintenanceDirective &&
                                                                                  _mpdForSelect.FirstOrDefault(m => m.ItemId == record.TaskId) != null))
                {
                    _mpdForSelect.RemoveById(record.TaskId);
                }
                foreach (MaintenanceDirective mpd in _allWpChecks.SelectMany(mc => mc.BindMpds))
                {
                    _mpdForSelect.RemoveById(mpd.ItemId);
                }
            }
            catch (Exception ex)
            {
                Program.Provider.Logger.Log("Error while load directives for select", ex);
            }

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

            _animatedThreadWorker.ReportProgress(75, "calculate directives for select");

            //try
            //{
            //    _mpdForSelect.AddRange(GlobalObjects.CasEnvironment.Loader.GetMaintenanceDirectives(_maintenanceCheck.ParentAircraft));
            //}
            //catch (Exception ex)
            //{
            //    Program.Provider.Logger.Log("Error while calculate directives for select", ex);
            //}

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

            _animatedThreadWorker.ReportProgress(100, "binding complete");
        }
        private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            if (_selectedWorkPackage == null)
            {
                e.Cancel = true;
                return;
            }

            _itemsArray.Clear();

            backgroundWorker.ReportProgress(0, "Load Work Package");

            if (!_selectedWorkPackage.WorkPackageItemsLoaded)
            {
                GlobalObjects.WorkPackageCore.GetWorkPackageItemsWithCalculate(_selectedWorkPackage);
            }

            if (_selectedWorkPackage.MaxClosingDate < _selectedWorkPackage.MinClosingDate)
            {
                _selectedWorkPackage.CanClose = false;
            }
            CommonCollection <BaseEntityObject> wpItems = new CommonCollection <BaseEntityObject>();

            foreach (WorkPackageRecord record in _selectedWorkPackage.WorkPakageRecords)
            {
                wpItems.Add((BaseEntityObject)record.Task);
            }

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

            double currentProc     = 20;
            int    countDirectives = wpItems.Count;

            if (countDirectives == 0)
            {
                countDirectives = 1;
            }
            double delay = (100 - currentProc) / countDirectives;

            if (_selectedWorkPackage.Status != WorkPackageStatus.Closed)
            {
                backgroundWorker.ReportProgress(10, "load related Work Packages");

                foreach (WorkPackageRecord record in _selectedWorkPackage.WorkPakageRecords)
                {
                    backgroundWorker.ReportProgress((int)(currentProc += delay), "calculation of directives");

                    if (record.Task.SmartCoreObjectType == SmartCoreType.MaintenanceCheck)
                    {
                        MaintenanceCheck           mc  = (MaintenanceCheck)record.Task;
                        MaintenanceNextPerformance mnp =
                            mc.GetPergormanceGroupWhereCheckIsSeniorByGroupNum(record.PerformanceNumFromStart);
                        if (mnp != null)
                        {
                            _itemsArray.Add(mnp);
                        }
                    }
                    else if (record.Task.SmartCoreObjectType == SmartCoreType.NonRoutineJob)
                    {
                        _itemsArray.Add((BaseEntityObject)record.Task);
                    }
                    else if (record.Task.SmartCoreObjectType == SmartCoreType.Component)
                    {
                        if (record.Task.NextPerformances.Count > 0)
                        {
                            _itemsArray.Add(record.Task.NextPerformances[0]);
                        }
                        else
                        {
                            _itemsArray.Add((BaseEntityObject)record.Task);
                        }
                    }
                    else
                    {
                        if (record.Task.NextPerformances.Count > 0)
                        {
                            _itemsArray.Add(record.Task.NextPerformances[0]);
                        }
                        else
                        {
                            _itemsArray.Add((BaseEntityObject)record.Task);
                        }
                    }
                }
            }
            else
            {
                //При закоытом Рабочем пакете, в список попадают записи о выполении
                //сделанные в рамках данного рабочего пакета
                backgroundWorker.ReportProgress(10, "load related Work Packages");

                AbstractPerformanceRecord apr;
                foreach (WorkPackageRecord record in _selectedWorkPackage.WorkPakageRecords)
                {
                    backgroundWorker.ReportProgress((int)(currentProc += delay), "check records");
                    if (record.Task.SmartCoreObjectType == SmartCoreType.MaintenanceCheck)
                    {
                        backgroundWorker.ReportProgress((int)(currentProc += delay), "calculation of Maintenance checks");
                        apr = record.Task.PerformanceRecords
                              .Cast <AbstractPerformanceRecord>()
                              .FirstOrDefault(pr => pr.DirectivePackageId == _selectedWorkPackage.ItemId);

                        if (apr != null)
                        {
                            _itemsArray.Add(apr);
                        }
                        else
                        {
                            MaintenanceCheck mc = (MaintenanceCheck)record.Task;
                            if (mc.NextPerformances.OfType <MaintenanceNextPerformance>().Any(np => np.PerformanceGroupNum == record.PerformanceNumFromStart))
                            {
                                MaintenanceNextPerformance mnp =
                                    mc.GetPergormanceGroupWhereCheckIsSeniorByGroupNum(record.PerformanceNumFromStart);
                                if (mnp != null)
                                {
                                    _itemsArray.Add(mnp);
                                }
                            }
                            else
                            {
                                _itemsArray.Add((BaseEntityObject)record.Task);
                            }
                        }
                    }
                    else if (record.Task.SmartCoreObjectType == SmartCoreType.NonRoutineJob)
                    {
                        _itemsArray.Add((BaseEntityObject)record.Task);
                    }
                    else
                    {
                        apr = record.Task.PerformanceRecords
                              .Cast <AbstractPerformanceRecord>()
                              .FirstOrDefault(pr => pr.DirectivePackageId == _selectedWorkPackage.ItemId);

                        if (apr != null)
                        {
                            _itemsArray.Add(apr);
                        }
                        else
                        {
                            if (record.Task.NextPerformances.Count > 0)
                            {
                                _itemsArray.Add(record.Task.NextPerformances[0]);
                            }
                            else
                            {
                                _itemsArray.Add((BaseEntityObject)record.Task);
                            }
                        }
                    }

                    if (_selectedWorkPackage.WorkPakageRecords.Where(wpr => wpr.Task != null && wpr.Task is Component)
                        .Select(wpr => wpr.Task as Component)
                        .Any(d => d.TransferRecords.Any(tr => tr.DirectivePackageId == _selectedWorkPackage.ItemId && tr.DODR)))
                    {
                        //Поиск записи в рабочем пакете по деталям(базовым деталям)
                        //в записях о перемещении которых есть запись сделанная в рамках данного
                        //рабочего пакета, и подтвержденная на стороне получателя
                        //Если такие записи есть, то рабочий пакет перепубликовать нельзя
                        _selectedWorkPackage.CanPublish = false;
                        if (_selectedWorkPackage.BlockPublishReason != "")
                        {
                            _selectedWorkPackage.BlockPublishReason += "\n";
                        }
                        _selectedWorkPackage.BlockPublishReason =
                            "This work package has in its task of moving component," +
                            "\nwhich was confirmed on the destination side";
                    }
                }
            }

            backgroundWorker.ReportProgress(100, "calculation over");
        }
        protected override void SetItemColor(ListViewItem listViewItem, NextPerformance item)
        {
            Color itemForeColor = Color.Black;

            if (item is MaintenanceNextPerformance)
            {
                MaintenanceNextPerformance mnp = item as MaintenanceNextPerformance;
                listViewItem.ForeColor = mnp == ((MaintenanceCheck)item.Parent).GetPergormanceGroupWhereCheckIsSenior()[0]
                                        ? Color.Black
                                        : Color.Gray;

                if (mnp.CalcForHight)
                {
                    listViewItem.ForeColor = itemForeColor;
                    listViewItem.BackColor = Color.FromArgb(Highlight.PurpleLight.Color);
                }
            }
            else
            {
                IDirective imd = item.Parent;
                listViewItem.ForeColor = imd.NextPerformances.IndexOf(item) == 0
                                        ? Color.Black
                                        : Color.Gray;
                if (imd.Condition == ConditionState.Notify)
                {
                    listViewItem.BackColor = Color.FromArgb(Highlight.Yellow.Color);
                }
                if (imd.Condition == ConditionState.Overdue)
                {
                    listViewItem.BackColor = Color.FromArgb(Highlight.Red.Color);
                }
                if (imd.Percents != null && imd.Percents > 0)
                {
                    listViewItem.BackColor = Color.FromArgb(Highlight.Green.Color);
                }

                listViewItem.ForeColor = itemForeColor;
            }

            if (item.BlockedByPackage != null)
            {
                listViewItem.ForeColor   = itemForeColor;
                listViewItem.BackColor   = Color.FromArgb(Highlight.Grey.Color);
                listViewItem.ToolTipText = "This performance is involved on Work Package:" + item.BlockedByPackage.Title;
            }


            Color itemBacBlackolor = ItemListView.BackColor;

            if (item.Parent is MaintenanceDirective)
            {
                var mpd = item.Parent as MaintenanceDirective;
                if (mpd.RecalculateTenPercent)
                {
                    itemBacBlackolor       = Color.DodgerBlue;
                    listViewItem.BackColor = itemBacBlackolor;
                }
            }


            Color listViewForeColor = ItemListView.ForeColor;
            Color listViewBackColor = ItemListView.BackColor;

            listViewItem.UseItemStyleForSubItems = true;
            foreach (ListViewItem.ListViewSubItem subItem in listViewItem.SubItems)
            {
                if (subItem.ForeColor.ToArgb() == listViewForeColor.ToArgb())
                {
                    subItem.ForeColor = itemForeColor;
                }
                if (subItem.BackColor.ToArgb() == listViewBackColor.ToArgb())
                {
                    subItem.BackColor = itemBacBlackolor;
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Добавление директив в таблицу данных
        /// </summary>
        /// <param name="dataset">Таблица, в которую добавляются данные</param>
        protected virtual void AddDirectivesToDataSet(MaintenancePlanDataSet dataset)
        {
            //группировка по родительскому самолету
            IEnumerable <IGrouping <Aircraft, BaseEntityObject> > groupByAircraft =
                _reportedDirectives.GroupBy(GlobalObjects.AircraftsCore.GetParentAircraft)
                .OrderBy(g => g.Key.ToString() + " " + g.Key.Model.ToString());

            foreach (IGrouping <Aircraft, BaseEntityObject> byAircraft in groupByAircraft)
            {
                IEnumerable <IGrouping <DateTime, BaseEntityObject> > groupedItems =
                    byAircraft.GroupBy(GetDate)
                    .OrderBy(g => g.Key);

                //сбор всех китов ВС в одну коллекцию
                List <AbstractAccessory> aircraftKits =
                    byAircraft.Select(ba => ba)
                    .Select(GetParent)
                    .Where(i => i is IKitRequired)
                    .SelectMany(i => ((IKitRequired)i).Kits)
                    .Cast <AbstractAccessory>()
                    .ToList();

                foreach (IGrouping <DateTime, BaseEntityObject> groupedItem in groupedItems)
                {
                    //Группировка элементов по датам выполнения
                    DateTime dateTime = groupedItem.Key.Date;
                    //Формирование первой части названия группы, состоящей из даты выполнения
                    string temp      = "";
                    string kitString = "";
                    double manHours  = 0;
                    //Собрание всех выполнений на данную дату в одну коллекцию
                    IEnumerable <BaseEntityObject> performances = groupedItem.Select(lvi => lvi).ToArray();
                    //Собрание всех КИТов на данную дату в одну коллекцию
                    IEnumerable <AccessoryRequired> kits =
                        performances.Select(GetParent)
                        .Where(i => i is IKitRequired)
                        .SelectMany(i => ((IKitRequired)i).Kits);
                    IEnumerable <IGrouping <string, AccessoryRequired> > groupByType = kits.GroupBy(GetAccessoryTypeString);
                    foreach (IGrouping <string, AccessoryRequired> grouping in groupByType)
                    {
                        if (!string.IsNullOrEmpty(kitString))
                        {
                            kitString += Environment.NewLine;
                        }
                        kitString += grouping.Key + Environment.NewLine;

                        kitString =
                            grouping.Select(g => g)
                            .Distinct(new AccessoryRequired())
                            .Aggregate(kitString, (current, kit) => current + (kit.ToString() + "; "));
                    }
                    //Добавление в название присутствующих на данную дату чеков программы обслуживания
                    IEnumerable <BaseEntityObject> maintenanceCheckPerformances =
                        performances.Where(np => GetParent(np) is MaintenanceCheck);

                    foreach (BaseEntityObject mcp in maintenanceCheckPerformances)
                    {
                        if (mcp is MaintenanceNextPerformance)
                        {
                            MaintenanceNextPerformance mnp = mcp as MaintenanceNextPerformance;

                            temp += mnp.PerformanceGroup.GetGroupName();
                            if (byAircraft.Key != null && byAircraft.Key.MSG < MSG.MSG3)
                            {
                                temp += "( " + mnp.PerformanceGroup.ToStringCheckNames() + ")";
                            }
                        }
                        else if (mcp is NextPerformance)
                        {
                            NextPerformance np = mcp as NextPerformance;
                            temp += ((MaintenanceCheck)np.Parent).Name;
                        }
                        else if (mcp is MaintenanceCheckRecord)
                        {
                            MaintenanceCheckRecord mcr = mcp as MaintenanceCheckRecord;
                            temp += string.IsNullOrEmpty(mcr.ComplianceCheckName)
                                ? mcr.ParentCheck.Name
                                : mcr.ComplianceCheckName;
                        }
                        else if (mcp is MaintenanceCheck)
                        {
                            MaintenanceCheck mc = (MaintenanceCheck)mcp;
                            if (mc.Grouping)
                            {
                                MaintenanceNextPerformance mnp =
                                    mc.GetNextPergormanceGroupWhereCheckIsSenior();
                                if (mnp != null)
                                {
                                    temp += mnp.PerformanceGroup.GetGroupName();
                                }
                                else
                                {
                                    temp += mc.Name;
                                }
                            }
                            else
                            {
                                temp += mc.Name;
                            }
                        }
                        temp += " ";
                    }
                    IEnumerable <IBaseEntityObject> allDirectives = performances.Select(GetParent).ToArray();
                    //Добавление в название присутствующих на данную дату директив летной годности
                    IEnumerable <Directive> directivesPerformances = allDirectives.OfType <Directive>().ToArray();
                    if (directivesPerformances.Any())
                    {
                        IEnumerable <IGrouping <DirectiveType, Directive> > groupByDirectiveType =
                            directivesPerformances.GroupBy(d => d.DirectiveType);

                        foreach (IGrouping <DirectiveType, Directive> grouping in groupByDirectiveType)
                        {
                            if (!string.IsNullOrEmpty(temp))
                            {
                                temp += Environment.NewLine;
                            }
                            temp += grouping.Key.ShortName + " " + Environment.NewLine;

                            foreach (Directive ad in grouping)
                            {
                                temp += ad.Title + " § " + ad.Paragraph + " " + ad.WorkType;
                                temp += "; ";
                            }
                        }

                        manHours += directivesPerformances.Sum(dp => dp.ManHours);
                    }

                    //Добавление в название присутствующих на данную дату компонентов или задач по ним
                    IEnumerable <IBaseEntityObject> componentPerformances =
                        allDirectives.Where(np => np is Component || np is ComponentDirective).ToArray();
                    if (componentPerformances.Any())
                    {
                        if (!string.IsNullOrEmpty(temp))
                        {
                            temp += Environment.NewLine;
                        }
                        temp += "Component" + Environment.NewLine;

                        foreach (IBaseEntityObject componentPerformance in componentPerformances)
                        {
                            Component d;
                            if (componentPerformance is ComponentDirective)
                            {
                                ComponentDirective dd = (ComponentDirective)componentPerformance;
                                d = ((ComponentDirective)componentPerformance).ParentComponent;
                                if (d != null)
                                {
                                    temp += "P/N:" + d.PartNumber + " S/N:" + d.SerialNumber + " " + dd.DirectiveType;
                                }
                                else
                                {
                                    temp += dd.DirectiveType;
                                }
                                manHours += dd.ManHours;

                                if (dd.DirectiveType == ComponentRecordType.Remove ||
                                    dd.DirectiveType == ComponentRecordType.Discard ||
                                    dd.DirectiveType == ComponentRecordType.Overhaul)
                                {
                                    //типом работ является удаление или уничтожение компонента

                                    //Добавление в коллекцию Китов ВС данного компонента,
                                    //т.к. его необходимо будет приобрести
                                    aircraftKits.Add(d);
                                }
                            }
                            else
                            {
                                d = componentPerformance as Component;
                                if (d != null)
                                {
                                    temp     += "P/N:" + d.PartNumber + " S/N:" + d.SerialNumber + " Discard";
                                    manHours += d.ManHours;
                                    //Добавление в коллекцию Китов ВС данного компонента,
                                    //т.к. его необходимо будет приобрести
                                    aircraftKits.Add(d);
                                }
                            }
                            temp += "; ";
                        }
                    }
                    //Добавление в название присутствующих на данную дату MPD
                    //Вывод только тех MPD что не привязаны к чекам
                    IEnumerable <MaintenanceDirective> mpdPerformances =
                        allDirectives.OfType <MaintenanceDirective>().ToArray();
                    if (mpdPerformances.Any())
                    {
                        if (!string.IsNullOrEmpty(temp))
                        {
                            temp += Environment.NewLine;
                        }
                        temp += "MPD " + Environment.NewLine;

                        foreach (MaintenanceDirective mpd in mpdPerformances)
                        {
                            temp     += mpd.TaskNumberCheck + " " + mpd.WorkType.ShortName + "; ";
                            manHours += mpd.ManHours;
                        }
                    }
                    dataset.ItemsTable.AddItemsTableRow("",
                                                        "",
                                                        temp,
                                                        dateTime,
                                                        manHours,
                                                        0,
                                                        kitString,
                                                        byAircraft.Key != null ? byAircraft.Key + " " + byAircraft.Key.Model : "Unk");
                }


                IEnumerable <IGrouping <Product, AbstractAccessory> > products =
                    aircraftKits.GroupBy(ak => ak.Product ??
                                         new Product {
                    GoodsClass  = ak.GoodsClass,
                    Standart    = ak.Standart,
                    PartNumber  = ak.ParentString,
                    Description = ak.Description
                }
                                         );
                foreach (IGrouping <Product, AbstractAccessory> product in products)
                {
                    string type             = GetAccessoryTypeString(product.First());
                    double quantity         = 0;
                    double totalProductCost = 0;

                    if (product.Key.GoodsClass.IsNodeOrSubNodeOf(GoodsClass.Tools) ||
                        product.Key.GoodsClass.IsNodeOrSubNodeOf(GoodsClass.ControlTestEquipment))
                    {
                        quantity         = product.Max(p => p.Quantity);
                        totalProductCost = 0;
                    }
                    else if (product.Key.GoodsClass.IsNodeOrSubNodeOf(GoodsClass.ComponentsAndParts))
                    {
                        foreach (AbstractAccessory accessoryRequired in product)
                        {
                            int qty = accessoryRequired.Quantity < 1 ? 1 : (int)accessoryRequired.Quantity;
                            quantity         += qty;
                            totalProductCost += (qty * accessoryRequired.CostNew);
                        }
                    }
                    else
                    {
                        foreach (AbstractAccessory accessoryRequired in product)
                        {
                            quantity         += accessoryRequired.Quantity;
                            totalProductCost += (accessoryRequired.Quantity * accessoryRequired.CostNew);
                        }
                    }

                    dataset.KitsTable.AddKitsTableRow(product.Key.ToString(),
                                                      quantity,
                                                      totalProductCost,
                                                      byAircraft.Key != null ? byAircraft.Key + " " + byAircraft.Key.Model : "Unk",
                                                      type);
                }
            }
        }
Esempio n. 6
0
        /// <summary>
        /// Выставляет колонки в списке чеков текущей программы обслуживания
        /// </summary>
        private void SetHeaders()
        {
            _min = Convert.ToInt32(_maintenanceCheckItems[0].Interval.GetSubresource(_subResource));

            foreach (MaintenanceCheck liminationItem in _maintenanceCheckItems)
            {
                _min = Math.Min(Convert.ToInt32(liminationItem.Interval.GetSubresource(_subResource)), _min);
                _max = Math.Max(Convert.ToInt32(liminationItem.Interval.GetSubresource(_subResource)), _max);
            }

            ColumnHeader column = new ColumnHeader {
                Text = "Name", TextAlign = HorizontalAlignment.Right, Width = 50
            };

            listViewProgramChecks.Columns.Add(column);
            column = new ColumnHeader {
                Text = "Interval", TextAlign = HorizontalAlignment.Left, Width = 130
            };
            listViewProgramChecks.Columns.Add(column);
            column = new ColumnHeader {
                Text = "Cost", TextAlign = HorizontalAlignment.Left, Width = 50
            };
            listViewProgramChecks.Columns.Add(column);
            column = new ColumnHeader {
                Text = "ManHours", TextAlign = HorizontalAlignment.Left, Width = 64
            };
            listViewProgramChecks.Columns.Add(column);

            if (_grouping)
            {
                //Определение кол-ва колонок списка
                if (_upperCheckTypeMinResource == -1)
                {
                    //Если это самая вышестоящий тип чеков
                    //то делится максимальный на минимальный интервал
                    _countColumns = _max / _min;
                }
                else
                {
                    //Если это самая НЕ вышестоящий тип чеков
                    //то делится минимальный ресурс вышестоящего типа на минимальный интервал
                    _countColumns = _upperCheckTypeMinResource / _min;
                }
                MaintenanceCheckCollection mcc = new MaintenanceCheckCollection(_maintenanceCheckItems);
                MaintenanceCheck           mc  = mcc.GetMinStepCheck(_maintenanceCheckItems[0].Schedule);
                if (mc == null)
                {
                    return;
                }
                MSG msg = mc.ParentAircraft != null && mc.ParentAircraft.MaintenanceProgramChangeRecords.Count > 0
                                  ? mc.ParentAircraft.MaintenanceProgramChangeRecords.GetLast().MSG
                                  : MSG.MSG2;
                if (msg < MSG.MSG3)
                {
                    for (int i = 1; i <= _countColumns; i++)
                    {
                        //ColumnHeader viewColumn = new ColumnHeader
                        //                              {
                        //                                  Text = i + " [" + (i*_min) + "]",
                        //                                  TextAlign = HorizontalAlignment.Center,
                        //                                  Width = 65
                        //
                        //                              };
                        //listViewProgramChecks.Columns.Add(viewColumn);
                        ColumnHeader viewColumn;
                        //выполняется проверка, достаточно ли расчитано "след.выполнений"
                        //что бы заполнить их данными названия колонок
                        if (mc.NextPerformances.Count >= i)
                        {
                            //Если кол-во расчитанных выполнений достаточно для заполнения
                            //названия тек. колонки, то название колонки берется из ресурса "след. выполнения"
                            int performanceSource =
                                Convert.ToInt32(mc.NextPerformances[i - 1].PerformanceSource.GetSubresource(mc.Resource));
                            MaintenanceNextPerformance mnp = mc.NextPerformances[i - 1] as MaintenanceNextPerformance;
                            if (mnp != null)
                            {
                                string checkName = mnp.PerformanceGroup != null?mnp.PerformanceGroup.GetGroupName() : i.ToString();

                                viewColumn = new ColumnHeader
                                {
                                    Text      = checkName + " [" + performanceSource + "]",
                                    TextAlign = HorizontalAlignment.Center,
                                    Width     = 85
                                };
                            }
                            else
                            {
                                viewColumn = new ColumnHeader
                                {
                                    Text      = i + " [" + performanceSource + "]",
                                    TextAlign = HorizontalAlignment.Center,
                                    Width     = 85
                                };
                            }
                        }
                        else
                        {
                            //Если кол-во расчитанных выполнений недостаточно
                            //то название колонки расчитывается на освоне ресурса последнего выполнения
                            //данного чека и номера тек. колонки
                            viewColumn = new ColumnHeader
                            {
                                Text      = i + " [" + (i * _min) + "]",
                                TextAlign = HorizontalAlignment.Center,
                                Width     = 85
                            };
                        }
                        listViewProgramChecks.Columns.Add(viewColumn);
                    }
                }
                else
                {
                    MaintenanceCheckComplianceGroup mccg = mcc.GetLastComplianceCheckGroup(mc.Schedule, mc.ParentAircraftId,
                                                                                           mc.Grouping, mc.Resource);
                    if (mccg == null)
                    {
                        for (int i = 1; i <= _countColumns; i++)
                        {
                            MaintenanceNextPerformance mnp = mc.NextPerformances[i - 1] as MaintenanceNextPerformance;
                            string checkName = mnp != null && mnp.PerformanceGroup != null
                                ? mnp.PerformanceGroup.GetGroupName()
                                : "";

                            ColumnHeader viewColumn = new ColumnHeader
                            {
                                Text      = checkName + " [" + (i * _min) + "]",
                                TextAlign = HorizontalAlignment.Center,
                                Width     = 65
                            };
                            listViewProgramChecks.Columns.Add(viewColumn);
                        }
                    }
                    else
                    {
                        MaintenanceCheck mic = mccg.GetMinIntervalCheck();
                        for (int i = 1; i <= _countColumns; i++)
                        {
                            ColumnHeader viewColumn;
                            //выполняется проверка, достаточно ли расчитано "след.выполнений"
                            //что бы заполнить их данными названия колонок
                            if (mic.NextPerformances.Count >= i)
                            {
                                //Если кол-во расчитанных выполнений достаточно для заполнения
                                //названия тек. колонки, то название колонки берется из ресурса "след. выполнения"
                                MaintenanceNextPerformance mnp = mc.NextPerformances[i - 1] as MaintenanceNextPerformance;
                                string checkName = mnp != null && mnp.PerformanceGroup != null
                                    ? mnp.PerformanceGroup.GetGroupName()
                                    : "";

                                int performanceSource =
                                    Convert.ToInt32(mic.NextPerformances[i - 1].PerformanceSource.GetSubresource(mic.Resource));
                                viewColumn = new ColumnHeader
                                {
                                    Text      = checkName + " [" + performanceSource + "]",
                                    TextAlign = HorizontalAlignment.Center,
                                    Width     = 85
                                };
                            }
                            else
                            {
                                //Если кол-во расчитанных выполнений недостаточно
                                //то название колонки расчитывается на освоне ресурса последнего выполнения
                                //данного чека и номера тек. колонки
                                int lastPerformaceSource =
                                    Convert.ToInt32(mic.LastPerformance.CalculatedPerformanceSource.GetSubresource(mic.Resource));
                                if (lastPerformaceSource == 0)
                                {
                                    lastPerformaceSource =
                                        Convert.ToInt32(mic.LastPerformance.OnLifelength.GetSubresource(mic.Resource));
                                }

                                viewColumn = new ColumnHeader
                                {
                                    Text      = " [" + (lastPerformaceSource + i * _min) + "]",
                                    TextAlign = HorizontalAlignment.Center,
                                    Width     = 85
                                };
                            }
                            listViewProgramChecks.Columns.Add(viewColumn);
                        }
                    }
                }
                mcc.Clear();
            }
            else
            {
                _countColumns = 2;
                //Если чеки НЕ группируются по части порогового значения
                //то выводится ресурс пред. и след. выполнения
                column = new ColumnHeader {
                    Text = "Last", TextAlign = HorizontalAlignment.Left, Width = 100
                };
                listViewProgramChecks.Columns.Add(column);
                column = new ColumnHeader {
                    Text = "Next", TextAlign = HorizontalAlignment.Left, Width = 100
                };
                listViewProgramChecks.Columns.Add(column);
            }
        }
        /// <summary>
        /// Добавление директив в таблицу данных
        /// </summary>
        /// <param name="dataset">Таблица, в которую добавляются данные</param>
        protected virtual void AddDirectivesToDataSet(MonthlyPlanDataSet dataset)
        {
            //Группировка элементов по датам выполнения
            IEnumerable <IGrouping <DateTime, NextPerformance> > groupedItems =
                _reportedDirectives.GroupBy(np => Convert.ToDateTime(np.PerformanceDate).Date)
                .OrderBy(g => g.Key);

            foreach (IGrouping <DateTime, NextPerformance> groupedItem in groupedItems)
            {
                DateTime dateTime   = groupedItem.Key.Date;
                string   dateString = groupedItem.Key.Date > DateTimeExtend.GetCASMinDateTime().Date
                    ? SmartCore.Auxiliary.Convert.GetDateFormat(groupedItem.Key.Date) + " "
                    : "";
                //группировка по родительскому самолету
                IEnumerable <IGrouping <string, NextPerformance> > groupByAircraft =
                    groupedItem.GroupBy(GetParent)
                    .OrderBy(g => g.Key.ToString());

                foreach (IGrouping <string, NextPerformance> byAircraft in groupByAircraft)
                {
                    //Формирование первой части названия группы, состоящей из даты выполнения
                    string temp = "";
                    //Собрание всех выполнений на данную дату в одну коллекцию
                    IEnumerable <NextPerformance> performances = byAircraft.Select(lvi => lvi);
                    //Добавление в название присутствующих на данную дату чеков программы обслуживания
                    IEnumerable <NextPerformance> maintenanceCheckPerformances =
                        performances.Where(np => np.Parent != null && np.Parent is MaintenanceCheck);
                    foreach (NextPerformance maintenanceCheckPerformance in maintenanceCheckPerformances)
                    {
                        if (maintenanceCheckPerformance is MaintenanceNextPerformance)
                        {
                            MaintenanceNextPerformance mnp = maintenanceCheckPerformance as MaintenanceNextPerformance;
                            temp += mnp.PerformanceGroup.GetGroupName();
                        }
                        else
                        {
                            temp += ((MaintenanceCheck)maintenanceCheckPerformance.Parent).Name;
                        }
                        temp += " ";
                    }

                    //Добавление в название присутствующих на данную дату директив летной годности
                    IEnumerable <NextPerformance> adPerformances =
                        performances.Where(np => np.Parent != null && np.Parent is Directive);
                    if (adPerformances.Count() > 0)
                    {
                        temp += "AD ";
                    }

                    //Добавление в название присутствующих на данную дату компонентов или задач по ним
                    IEnumerable <NextPerformance> componentPerformances =
                        performances.Where(np => np.Parent != null && (np.Parent is Component || np.Parent is ComponentDirective));
                    if (componentPerformances.Count() > 0)
                    {
                        temp += "Comp ";
                    }

                    //Добавление в название присутствующих на данную дату MPD
                    IEnumerable <NextPerformance> mpdPerformances =
                        performances.Where(np => np.Parent != null && np.Parent is MaintenanceDirective);
                    if (maintenanceCheckPerformances.Count() == 0 && mpdPerformances.Count() > 0)
                    {
                        temp += "MPD ";
                    }

                    string destinationString = byAircraft.Key;


                    dataset.ItemsTable.AddItemsTableRow(dateString, destinationString, temp, dateTime.Ticks, destinationString);
                }
            }
        }
Esempio n. 8
0
        protected override void AnimatedThreadWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            _itemsArray.Clear();
            _relatedWorkPackages.Clear();

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

            //GlobalObjects.CasEnvironment.Loader.LoadWorkPackageItems(_currentWorkPackage);
            GlobalObjects.AuditCore.GetAuditItemsWithCalculate(_currentDirective);
            if (_currentDirective.MaxClosingDate < _currentDirective.MinClosingDate)
            {
                _currentDirective.CanClose = false;
            }
            CommonCollection <BaseEntityObject> wpItems = new CommonCollection <BaseEntityObject>();

            foreach (AuditRecord record in _currentDirective.AuditRecords)
            {
                wpItems.Add((BaseEntityObject)record.Task);
            }

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

            double currentProc     = 20;
            int    countDirectives = wpItems.Count;

            if (countDirectives == 0)
            {
                countDirectives = 1;
            }
            double delay = (100 - currentProc) / countDirectives;

            if (_currentDirective.Status != WorkPackageStatus.Closed)
            {
                AnimatedThreadWorker.ReportProgress(10, "load related Audit");

                foreach (AuditRecord record in _currentDirective.AuditRecords)
                {
                    AnimatedThreadWorker.ReportProgress((int)(currentProc += delay), "calculation of directives");

                    if (record.Task.SmartCoreObjectType == SmartCoreType.MaintenanceCheck)
                    {
                        MaintenanceCheck           mc  = (MaintenanceCheck)record.Task;
                        MaintenanceNextPerformance mnp =
                            mc.GetPergormanceGroupWhereCheckIsSeniorByGroupNum(record.PerformanceNumFromStart);
                        if (mnp != null)
                        {
                            _itemsArray.Add(mnp);
                        }
                    }
                    else if (record.Task.SmartCoreObjectType == SmartCoreType.NonRoutineJob)
                    {
                        _itemsArray.Add((BaseEntityObject)record.Task);
                    }
                    else if (record.Task.SmartCoreObjectType == SmartCoreType.Component)
                    {
                        if (record.Task.NextPerformances.Count > 0)
                        {
                            _itemsArray.Add(record.Task.NextPerformances[0]);
                        }
                        else
                        {
                            _itemsArray.Add((BaseEntityObject)record.Task);
                        }
                    }
                    else
                    {
                        if (record.Task.NextPerformances.Count > 0)
                        {
                            _itemsArray.Add(record.Task.NextPerformances[0]);
                        }
                        else
                        {
                            _itemsArray.Add((BaseEntityObject)record.Task);
                        }
                    }
                }
            }
            else
            {
                //При закоытом Рабочем пакете, в список попадают записи о выполении
                //сделанные в рамках данного рабочего пакета
                AnimatedThreadWorker.ReportProgress(10, "load related Audits");
                _relatedWorkPackages.AddRange(GlobalObjects.AuditCore.GetAudits(CurrentOperator,
                                                                                WorkPackageStatus.Closed,
                                                                                true,
                                                                                wpItems));
                //сбор всех записей рабочих пакетов для удобства фильтрации
                AbstractPerformanceRecord apr;
                foreach (AuditRecord record in _currentDirective.AuditRecords)
                {
                    AnimatedThreadWorker.ReportProgress((int)(currentProc += delay), "check records");

                    apr = record.Task.PerformanceRecords
                          .Cast <AbstractPerformanceRecord>()
                          .FirstOrDefault(pr => pr.DirectivePackageId == _currentDirective.ItemId);
                    if (apr != null)
                    {
                        _itemsArray.Add(apr);
                    }
                    else
                    {
                        if (record.Task.NextPerformances.Count > 0)
                        {
                            _itemsArray.Add(record.Task.NextPerformances[0]);
                        }
                        else
                        {
                            _itemsArray.Add((BaseEntityObject)record.Task);
                        }
                    }
                }
            }

            AnimatedThreadWorker.ReportProgress(100, "calculation over");
        }
Esempio n. 9
0
        private void UpdateInformation()
        {
            if (_contextMenuStrip == null)
            {
                InitToolStripMenuItems();
            }

            listViewCompliance.Items.Clear();

            if (CheckItems == null)
            {
                return;
            }

            var lastRecords      = new List <MaintenanceCheckRecord>();
            var nextPerformances = new List <NextPerformance>();

            //Поиск и заполнение просроченных директив и записей о перемещении
            //Объекты для в которые будет извлекаться информация
            //из записеи о перемещении

            string[]     subs;
            ListViewItem newItem;

            var aircraftFrame = GlobalObjects.ComponentCore.GetBaseComponentById(_currentAircraft.AircraftFrameId);
            //прогнозируемый ресурс
            var forecastData = new ForecastData(DateTime.Now, aircraftFrame.AverageUtilization,
                                                GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_currentAircraft));

            //GlobalObjects.CasEnvironment.Calculator.GetNextPerformanceGroup(CheckItems, _currentAircraft.Schedule, forecastData);

            foreach (MaintenanceCheck check in CheckItems)
            {
                if (check.Grouping)
                {
                    foreach (MaintenanceNextPerformance mnp in check.GetPergormanceGroupWhereCheckIsSenior())
                    {
                        //Добавляются все выполнения, дата которых меньше нынешней
                        //плюс еще одно выполнение дата которого выше нынешней
                        nextPerformances.Add(mnp);

                        if (mnp.PerformanceDate != null && mnp.PerformanceDate > DateTime.Now)
                        {
                            break;
                        }
                    }
                }
                else
                {
                    foreach (NextPerformance mnp in check.NextPerformances)
                    {
                        //Добавляются все выполнения, дата которых меньше нынешней
                        //плюс еще одно выполнение дата которого выше нынешней
                        nextPerformances.Add(mnp);

                        if (mnp.PerformanceDate != null && mnp.PerformanceDate > DateTime.Now)
                        {
                            break;
                        }
                    }
                }

                lastRecords.AddRange(check.PerformanceRecords.ToArray());

                foreach (MaintenanceDirective mpd in check.BindMpds)
                {
                    GlobalObjects.PerformanceCalculator.GetNextPerformance(mpd, forecastData);
                }
            }
            ////////////////////////////////////////////
            //загрузка рабочих пакетов для определения
            //перекрытых ими выполнений задач
            if (_openPubWorkPackages == null)
            {
                _openPubWorkPackages = new CommonCollection <WorkPackage>();
            }
            _openPubWorkPackages.Clear();
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(_currentAircraft, WorkPackageStatus.Opened));
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(_currentAircraft, WorkPackageStatus.Published));

            var allWorkPackagesIncludedTask = new CommonCollection <WorkPackage>();
            var openPubWorkPackages         = new CommonCollection <WorkPackage>();
            var closedWorkPackages          = new CommonCollection <WorkPackage>();

            allWorkPackagesIncludedTask.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(_currentAircraft,
                                                                                                   WorkPackageStatus.All,
                                                                                                   CheckItems.Select(m => (IDirective)m).ToList()));

            #region Добавление в список просроченных выполнений
            //и сравнение их с открытыми и опубликованными рабочими пакетами
            openPubWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Opened ||
                                                                           wp.Status == WorkPackageStatus.Published));
            //сбор всех записей рабочих пакетов для удобства фильтрации
            List <WorkPackageRecord> openPubWPRecords = new List <WorkPackageRecord>();
            foreach (WorkPackage openWorkPackage in openPubWorkPackages)
            {
                openPubWPRecords.AddRange(openWorkPackage.WorkPakageRecords);
            }

            //LINQ запрос для сортировки записей по дате
            List <NextPerformance> sortNextRecords = (from record in nextPerformances
                                                      orderby record.GetPerformanceDateOrDefault() descending
                                                      select record).ToList();

            for (int i = 0; i < sortNextRecords.Count; i++)
            {
                //поиск записи в рабочих пакетах по данному чеку
                //чей номер группы выполнения (по записи) совпадает с расчитанным
                MaintenanceCheck check = (MaintenanceCheck)sortNextRecords[i].Parent;

                //if (check.Name == "5C")
                //{

                //}
                //номер выполнения
                int parentCountPerf;
                if (check.LastPerformance != null)
                {
                    parentCountPerf = check.LastPerformance.NumGroup <= 0
                        ? 1
                        : check.LastPerformance.NumGroup;
                }
                else
                {
                    parentCountPerf = 0;
                }

                if (check.Grouping)
                {
                    MaintenanceNextPerformance mnp = sortNextRecords[i] as MaintenanceNextPerformance;
                    if (mnp != null)
                    {
                        parentCountPerf = mnp.PerformanceGroupNum;
                    }
                    else
                    {
                        parentCountPerf += check.NextPerformances.IndexOf(sortNextRecords[i]);
                        parentCountPerf += 1;
                    }
                }
                else
                {
                    parentCountPerf += check.NextPerformances.IndexOf(sortNextRecords[i]);
                    parentCountPerf += 1;
                }

                WorkPackageRecord wpr =
                    openPubWPRecords.Where(r => r.PerformanceNumFromStart == parentCountPerf &&
                                           r.WorkPackageItemType == check.SmartCoreObjectType.ItemId &&
                                           r.DirectiveId == check.ItemId).FirstOrDefault();
                if (wpr != null)
                {
                    WorkPackage wp = openPubWorkPackages.GetItemById(wpr.WorkPakageId);
                    //запись о выполнении блокируется найденым пакетом
                    sortNextRecords[i].BlockedByPackage = wp;
                    //последующие записи о выполнении так же должны быть заблокированы
                    for (int j = i - 1; j >= 0; j--)
                    {
                        //блокировать нужно все рабочие записи, или до первой записи,
                        //заблокированной другим рабочим пакетом
                        if (sortNextRecords[j].BlockedByPackage != null &&
                            sortNextRecords[j].Parent == check ||
                            sortNextRecords[j].Condition != ConditionState.Overdue)
                        {
                            break;
                        }
                        if (sortNextRecords[j].Parent == check)
                        {
                            sortNextRecords[j].BlockedByPackage   = wp;
                            listViewCompliance.Items[j].BackColor = Color.FromArgb(Highlight.GrayLight.Color);
                        }
                    }
                }

                string type        = check.Schedule ? " (Schedule) " : " (Store) ";
                string resource    = check.Resource.ToString();
                string grouping    = check.Grouping ? " (Group)" : "";
                string stringNumGr = (sortNextRecords[i] is MaintenanceNextPerformance
                    ? ((MaintenanceNextPerformance)sortNextRecords[i]).PerformanceGroupNum.ToString()
                    : "N/A") + type + resource + grouping;

                subs = new[]  {
                    stringNumGr,
                    sortNextRecords[i].Title,
                    sortNextRecords[i].PerformanceDate != null
                                       ? UsefulMethods.NormalizeDate((DateTime)sortNextRecords[i].PerformanceDate)
                                       : "N/A",
                    sortNextRecords[i].PerformanceSource.ToString(),
                    "",
                };
                newItem = new ListViewItem(subs)
                {
                    Group     = listViewCompliance.Groups["next"],
                    Tag       = sortNextRecords[i],
                    BackColor = UsefulMethods.GetColor(sortNextRecords[i])
                };

                listViewCompliance.Items.Add(newItem);
            }
            #endregion

            #region Добавление в список записей о произведенных выполнениях
            //и сравнение их с закрытыми рабочими пакетами
            closedWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Closed));
            //сбор всех записей рабочих пакетов для удобства фильтрации
            List <WorkPackageRecord> closedWPRecords = new List <WorkPackageRecord>();
            foreach (WorkPackage closedWorkPackage in closedWorkPackages)
            {
                closedWPRecords.AddRange(closedWorkPackage.WorkPakageRecords);
            }

            List <MaintenanceCheckRecordGroup> maintenanceCheckRecordGroups = new List <MaintenanceCheckRecordGroup>();

            foreach (MaintenanceCheckRecord record in lastRecords)
            {
                //Поиск коллекции групп, в которую входят группы с нужными критериями
                //по плану, группировка и основному ресурсу
                if (record.ParentCheck.Grouping)
                {
                    MaintenanceCheckRecordGroup recordGroup = maintenanceCheckRecordGroups
                                                              .FirstOrDefault(g => g.Schedule == record.ParentCheck.Schedule &&
                                                                              g.Grouping == record.ParentCheck.Grouping &&
                                                                              g.Resource == record.ParentCheck.Resource &&
                                                                              g.GroupComplianceNum == record.NumGroup);
                    if (recordGroup != null)
                    {
                        //Коллекция найдена
                        //Поиск в ней группы чеков с нужным типом
                        recordGroup.Records.Add(record);
                    }
                    else
                    {
                        //Коллекции с нужными критериями нет
                        //Созадние и добавление
                        recordGroup =
                            new MaintenanceCheckRecordGroup(record.ParentCheck.Schedule, record.ParentCheck.Grouping,
                                                            record.ParentCheck.Resource, record.NumGroup);
                        recordGroup.Records.Add(record);
                        maintenanceCheckRecordGroups.Add(recordGroup);
                    }
                }
                else
                {
                    MaintenanceCheckRecordGroup recordGroup =
                        new MaintenanceCheckRecordGroup(record.ParentCheck.Schedule, record.ParentCheck.Grouping,
                                                        record.ParentCheck.Resource);
                    recordGroup.Records.Add(record);
                    maintenanceCheckRecordGroups.Add(recordGroup);
                }
            }

            List <object> tempRecords = new List <object>();
            tempRecords.AddRange(maintenanceCheckRecordGroups.ToArray());
            tempRecords.AddRange(_currentAircraft.MaintenanceProgramChangeRecords.ToArray());

            List <object> sortLastRecords =
                tempRecords.OrderByDescending(tr => (tr is MaintenanceCheckRecordGroup
                                                        ? ((MaintenanceCheckRecordGroup)tr).LastGroupComplianceDate
                                                        : tr is AbstractRecord
                                                            ? ((AbstractRecord)tr).RecordDate
                                                            : DateTimeExtend.GetCASMinDateTime()))
                .ToList();
            foreach (object t in sortLastRecords)
            {
                if (t is MaintenanceCheckRecordGroup)
                {
                    MaintenanceCheckRecordGroup mcrg            = (MaintenanceCheckRecordGroup)t;
                    MaintenanceCheckRecord      directiveRecord = mcrg.Records.First();
                    MaintenanceCheck            parentDirective = (MaintenanceCheck)directiveRecord.Parent;
                    newItem = GetListViewItem(mcrg);

                    WorkPackage workPackage =
                        closedWorkPackages.Where(wp => wp.ItemId == directiveRecord.DirectivePackageId).FirstOrDefault();
                    if (workPackage != null)
                    {
                        //запись о выполнении блокируется найденым пакетом
                        directiveRecord.DirectivePackage = workPackage;
                        newItem.BackColor   = Color.FromArgb(Highlight.Grey.Color);
                        newItem.ToolTipText =
                            "Perform of the task:" + parentDirective.Name +
                            "\nadded by Work Package:" +
                            "\n" + directiveRecord.DirectivePackage.Title +
                            "\nTo remove a performance of task, you need to exclude task from this work package," +
                            "\nor delete the work package ";
                    }
                    listViewCompliance.Items.Add(newItem);
                }
                else if (t is MaintenanceProgramChangeRecord)
                {
                    MaintenanceProgramChangeRecord mpcr = (MaintenanceProgramChangeRecord)t;
                    subs = new[]
                    {
                        "N/A",
                        "Changet to " + mpcr.MSG,
                        UsefulMethods.NormalizeDate(mpcr.RecordDate),
                        mpcr.OnLifelength.ToString(),
                        "",
                    };
                    newItem = new ListViewItem(subs)
                    {
                        Group     = listViewCompliance.Groups["last"],
                        Tag       = mpcr,
                        BackColor = Color.FromArgb(Highlight.GrayLight.Color)
                    };

                    listViewCompliance.Items.Add(newItem);
                }
            }
            #endregion

            if (_toolStripMenuItemsWorkPackages != null)
            {
                foreach (ToolStripMenuItem item in _toolStripMenuItemsWorkPackages.DropDownItems)
                {
                    item.Click -= AddToWorkPackageItemClick;
                }

                _toolStripMenuItemsWorkPackages.DropDownItems.Clear();

                foreach (WorkPackage workPackage in _openPubWorkPackages)
                {
                    ToolStripMenuItem item = new ToolStripMenuItem(workPackage.Title);
                    item.Click += AddToWorkPackageItemClick;
                    item.Tag    = workPackage;
                    _toolStripMenuItemsWorkPackages.DropDownItems.Add(item);
                }
            }

            ButtonAdd.Enabled = false;
        }
Esempio n. 10
0
        private void BackgroundWorkerRunWorkerLoadCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            dataGridViewItems.Rows.Clear();

            if (_workPackage == null)
            {
                return;
            }

            #region Чеки программы обслуживания и директивы программы обслуживания

            List <MaintenanceDirective> checkDirectives = new List <MaintenanceDirective>();

            foreach (MaintenanceCheck maintenanceCheck in _workPackage.MaintenanceChecks)
            {
                DataGridViewRow  row;
                DataGridViewCell discCell;
                DataGridViewCell taskCardCell;
                DataGridViewCell compntCell;

                if (_workPackage.Aircraft.MSG >= MSG.MSG3)
                {
                    MaintenanceCheckRecord mcr =
                        maintenanceCheck.PerformanceRecords.FirstOrDefault(pr => pr.DirectivePackageId == _workPackage.ItemId);
                    if (mcr != null)
                    {
                        row = new DataGridViewRow {
                            Tag = maintenanceCheck
                        };
                        discCell = new DataGridViewTextBoxCell
                        {
                            Value = string.IsNullOrEmpty(mcr.ComplianceCheckName)
                                     ? maintenanceCheck.Name
                                     : mcr.ComplianceCheckName
                        };
                        taskCardCell = new DataGridViewTextBoxCell {
                            Value = ""
                        };
                        compntCell = new DataGridViewCheckBoxCell {
                            Value = maintenanceCheck.PrintInWorkPackage
                        };
                    }
                    else
                    {
                        if (maintenanceCheck.Grouping)
                        {
                            MaintenanceNextPerformance mnp = maintenanceCheck.GetNextPergormanceGroupWhereCheckIsSenior();
                            if (mnp != null)
                            {
                                row = new DataGridViewRow {
                                    Tag = maintenanceCheck
                                };
                                discCell = new DataGridViewTextBoxCell {
                                    Value = mnp.PerformanceGroup.GetGroupName()
                                };
                                taskCardCell = new DataGridViewTextBoxCell {
                                    Value = ""
                                };
                                compntCell = new DataGridViewCheckBoxCell {
                                    Value = maintenanceCheck.PrintInWorkPackage
                                };
                            }
                            else
                            {
                                continue;
                            }
                        }
                        else
                        {
                            row = new DataGridViewRow {
                                Tag = maintenanceCheck
                            };
                            discCell = new DataGridViewTextBoxCell {
                                Value = maintenanceCheck.Name
                            };
                            taskCardCell = new DataGridViewTextBoxCell {
                                Value = ""
                            };
                            compntCell = new DataGridViewCheckBoxCell {
                                Value = maintenanceCheck.PrintInWorkPackage
                            };
                        }
                    }
                }
                else
                {
                    row = new DataGridViewRow {
                        Tag = maintenanceCheck
                    };
                    discCell = new DataGridViewTextBoxCell {
                        Value = maintenanceCheck.Name
                    };
                    taskCardCell = new DataGridViewTextBoxCell {
                        Value = ""
                    };
                    compntCell = new DataGridViewCheckBoxCell {
                        Value = maintenanceCheck.PrintInWorkPackage
                    };
                }

                row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell });
                discCell.ReadOnly     = true;
                taskCardCell.ReadOnly = true;

                dataGridViewItems.Rows.Add(row);

                List <MaintenanceDirective> checkMpds =
                    (from record in _workPackage.MaintenanceCheckBindTaskRecords
                     where record.TaskType == SmartCoreType.MaintenanceDirective && record.CheckId == maintenanceCheck.ItemId
                     select record.Task as MaintenanceDirective)
                    .OrderBy(cm => cm.TaskNumberCheck)
                    .ToList();

                checkMpds.AddRange(maintenanceCheck.BindMpds
                                   .Where(bmpd => _workPackage.WorkPakageRecords
                                          .FirstOrDefault(r => r.WorkPackageItemType == SmartCoreType.MaintenanceDirective.ItemId &&
                                                          r.DirectiveId == bmpd.ItemId) != null));
                checkDirectives.AddRange(checkMpds);

                foreach (MaintenanceDirective checkMpd in checkMpds)
                {
                    //TODO:(Evgenii Babak) избавиться от кода
                    if (checkMpd.ItemRelations.Count == 0)
                    {
                        checkMpd.ItemRelations
                        .AddRange(_workPackage.ComponentDirectives.Where(bdd => bdd.ItemRelations.IsAllRelationWith(checkMpd)).SelectMany(bdd => bdd.ItemRelations));
                    }
                    DataGridViewRow checkMpdRow = new DataGridViewRow {
                        Tag = checkMpd
                    };
                    DataGridViewCell checkMpdDiscCell;
                    DataGridViewCell checkMpdTaskCardCell;
                    DataGridViewCell checkMpdCompntCell;

                    string checkMpdTaskCardCellValue;
                    Color  checkMpdTaskCardCellBackColor = Color.White;

                    if (string.IsNullOrEmpty(checkMpd.TaskCardNumber) && checkMpd.TaskCardNumberFile == null)
                    {
                        checkMpdTaskCardCellValue     = "Not set Task Card file.";
                        checkMpdTaskCardCellBackColor = Color.Red;
                    }
                    else if (!string.IsNullOrEmpty(checkMpd.TaskCardNumber) && checkMpd.TaskCardNumberFile == null)
                    {
                        checkMpdTaskCardCellValue =
                            $"Not set Task Card file. (Task Card No {checkMpd.TaskCardNumber}.)";
                        checkMpdTaskCardCellBackColor = Color.Red;
                    }
                    else if (string.IsNullOrEmpty(checkMpd.TaskCardNumber) && checkMpd.TaskCardNumberFile != null)
                    {
                        checkMpdTaskCardCellValue =
                            $"Not set Task Card name. (File name {checkMpd.TaskCardNumberFile.FileName}.)";
                        checkMpdTaskCardCellBackColor = Color.Red;
                    }
                    else
                    {
                        checkMpdTaskCardCellValue = checkMpd.TaskCardNumber;
                    }

                    if (checkMpd.ItemRelations.Count > 0)
                    {
                        checkMpdDiscCell = new DataGridViewTextBoxCell {
                            Value =
                                $"{maintenanceCheck.Name}--{checkMpd.TaskNumberCheck} for {checkMpd.ItemRelations.Count} components"
                        };
                        checkMpdTaskCardCell = new DataGridViewTextBoxCell
                        {
                            Value = checkMpdTaskCardCellValue,
                            Style = { BackColor = checkMpdTaskCardCellBackColor },
                        };
                        checkMpdCompntCell = new DataGridViewCheckBoxCell {
                            Value = checkMpd.PrintInWorkPackage
                        };

                        checkMpdRow.Cells.AddRange(new[] { checkMpdDiscCell, checkMpdTaskCardCell, checkMpdCompntCell });

                        checkMpdDiscCell.ReadOnly     = true;
                        checkMpdTaskCardCell.ReadOnly = true;
                    }
                    else
                    {
                        checkMpdDiscCell = new DataGridViewTextBoxCell {
                            Value = maintenanceCheck.Name + "--" + checkMpd.TaskNumberCheck
                        };
                        checkMpdTaskCardCell = new DataGridViewTextBoxCell
                        {
                            Value = checkMpdTaskCardCellValue,
                            Style = { BackColor = checkMpdTaskCardCellBackColor },
                        };
                        checkMpdCompntCell = new DataGridViewCheckBoxCell {
                            Value = checkMpd.PrintInWorkPackage
                        };

                        checkMpdRow.Cells.AddRange(new[] { checkMpdDiscCell, checkMpdTaskCardCell, checkMpdCompntCell });

                        checkMpdDiscCell.ReadOnly     = true;
                        checkMpdTaskCardCell.ReadOnly = true;
                    }

                    dataGridViewItems.Rows.Add(checkMpdRow);
                }
            }

            List <MaintenanceDirective> nonCheckMpds =
                _workPackage.MaintenanceDirectives.Where(md => checkDirectives.FirstOrDefault(dd => dd.ItemId == md.ItemId) == null)
                .OrderBy(md => md.TaskNumberCheck)
                .ToList();

            foreach (MaintenanceDirective item in nonCheckMpds)
            {
                string taskCardCellValue;
                Color  taskCardCellBackColor = Color.White;

                if (string.IsNullOrEmpty(item.TaskCardNumber) && item.TaskCardNumberFile == null)
                {
                    taskCardCellValue     = "Not set Task Card file.";
                    taskCardCellBackColor = Color.Red;
                }
                else if (!string.IsNullOrEmpty(item.TaskCardNumber) && item.TaskCardNumberFile == null)
                {
                    taskCardCellValue     = $"Not set Task Card file. (Task Card No {item.TaskCardNumber}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else if (string.IsNullOrEmpty(item.TaskCardNumber) && item.TaskCardNumberFile != null)
                {
                    taskCardCellValue     = $"Not set Task Card name. (File name {item.TaskCardNumberFile.FileName}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else
                {
                    taskCardCellValue = item.TaskCardNumber;
                }

                DataGridViewRow row = new DataGridViewRow {
                    Tag = item
                };
                DataGridViewCell discCell = new DataGridViewTextBoxCell {
                    Value = item.TaskNumberCheck
                };
                DataGridViewCell taskCardCell = new DataGridViewTextBoxCell
                {
                    Value = taskCardCellValue,
                    Style = { BackColor = taskCardCellBackColor },
                };
                DataGridViewCell compntCell = new DataGridViewCheckBoxCell {
                    Value = item.PrintInWorkPackage
                };

                row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell });
                discCell.ReadOnly     = true;
                taskCardCell.ReadOnly = true;

                dataGridViewItems.Rows.Add(row);
            }

            #endregion

            #region Директивы летной годности

            foreach (Directive item in _workPackage.AdStatus)
            {
                string taskCardCellValue;
                Color  taskCardCellBackColor = Color.White;

                if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null)
                {
                    taskCardCellValue     = "Not set Engineering Order file.";
                    taskCardCellBackColor = Color.Red;
                }
                else if (!string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null)
                {
                    taskCardCellValue =
                        $"Not set Engineering Order File. (Engineering Order No {item.EngineeringOrders}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile != null)
                {
                    taskCardCellValue =
                        $"Not set Engineering Order name. (File name {item.EngineeringOrderFile.FileName}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else
                {
                    taskCardCellValue = item.EngineeringOrders;
                }

                DataGridViewRow row = new DataGridViewRow {
                    Tag = item
                };

                DataGridViewCell discCell     = new DataGridViewTextBoxCell();
                DataGridViewCell taskCardCell = new DataGridViewTextBoxCell
                {
                    Value = taskCardCellValue,
                    Style = { BackColor = taskCardCellBackColor },
                };
                DataGridViewCell compntCell = new DataGridViewCheckBoxCell {
                    Value = item.PrintInWorkPackage
                };
                discCell.Value = "(AD)" + item.Title + " " + item.WorkType + " §:" + item.Paragraph;

                row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell });

                discCell.ReadOnly     = true;
                taskCardCell.ReadOnly = true;

                dataGridViewItems.Rows.Add(row);
            }
            #endregion

            #region SB

            foreach (Directive item in _workPackage.SbStatus)
            {
                string taskCardCellValue;
                Color  taskCardCellBackColor = Color.White;

                if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null)
                {
                    taskCardCellValue     = "Not set Engineering Order file.";
                    taskCardCellBackColor = Color.Red;
                }
                else if (!string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null)
                {
                    taskCardCellValue =
                        $"Not set Engineering Order File. (Engineering Order No {item.EngineeringOrders}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile != null)
                {
                    taskCardCellValue =
                        $"Not set Engineering Order name. (File name {item.EngineeringOrderFile.FileName}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else
                {
                    taskCardCellValue = item.EngineeringOrders;
                }

                DataGridViewRow row = new DataGridViewRow {
                    Tag = item
                };

                DataGridViewCell discCell     = new DataGridViewTextBoxCell();
                DataGridViewCell taskCardCell = new DataGridViewTextBoxCell
                {
                    Value = taskCardCellValue,
                    Style = { BackColor = taskCardCellBackColor },
                };
                DataGridViewCell compntCell = new DataGridViewCheckBoxCell {
                    Value = item.PrintInWorkPackage
                };
                discCell.Value = "(SB)" + item.Title + " " + item.WorkType + " §:" + item.Paragraph;

                row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell });

                discCell.ReadOnly     = true;
                taskCardCell.ReadOnly = true;

                dataGridViewItems.Rows.Add(row);
            }

            #endregion

            #region EO

            foreach (Directive item in _workPackage.EoStatus)
            {
                string taskCardCellValue;
                Color  taskCardCellBackColor = Color.White;

                if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null)
                {
                    taskCardCellValue     = "Not set Engineering Order file.";
                    taskCardCellBackColor = Color.Red;
                }
                else if (!string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null)
                {
                    taskCardCellValue =
                        $"Not set Engineering Order File. (Engineering Order No {item.EngineeringOrders}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile != null)
                {
                    taskCardCellValue =
                        $"Not set Engineering Order name. (File name {item.EngineeringOrderFile.FileName}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else
                {
                    taskCardCellValue = item.EngineeringOrders;
                }

                DataGridViewRow row = new DataGridViewRow {
                    Tag = item
                };

                DataGridViewCell discCell     = new DataGridViewTextBoxCell();
                DataGridViewCell taskCardCell = new DataGridViewTextBoxCell
                {
                    Value = taskCardCellValue,
                    Style = { BackColor = taskCardCellBackColor },
                };
                DataGridViewCell compntCell = new DataGridViewCheckBoxCell {
                    Value = item.PrintInWorkPackage
                };
                discCell.Value = "(EO)" + item.Title + " " + item.WorkType + " §:" + item.Paragraph;

                row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell });

                discCell.ReadOnly     = true;
                taskCardCell.ReadOnly = true;

                dataGridViewItems.Rows.Add(row);
            }

            #endregion

            #region Повреждения

            foreach (Directive item in _workPackage.Damages)
            {
                string taskCardCellValue;
                Color  taskCardCellBackColor = Color.White;

                if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null)
                {
                    taskCardCellValue     = "Not set Engineering Order file.";
                    taskCardCellBackColor = Color.Red;
                }
                else if (!string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null)
                {
                    taskCardCellValue =
                        $"Not set Engineering Order File. (Engineering Order No {item.EngineeringOrders}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile != null)
                {
                    taskCardCellValue =
                        $"Not set Engineering Order name. (File name {item.EngineeringOrderFile.FileName}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else
                {
                    taskCardCellValue = item.EngineeringOrders;
                }

                DataGridViewRow row = new DataGridViewRow {
                    Tag = item
                };

                DataGridViewCell discCell     = new DataGridViewTextBoxCell();
                DataGridViewCell taskCardCell = new DataGridViewTextBoxCell
                {
                    Value = taskCardCellValue,
                    Style = { BackColor = taskCardCellBackColor },
                };
                DataGridViewCell compntCell = new DataGridViewCheckBoxCell {
                    Value = item.PrintInWorkPackage
                };
                discCell.Value = "(DRI)" + item.Title + " " + item.WorkType + " §:" + item.Paragraph;

                row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell });

                discCell.ReadOnly     = true;
                taskCardCell.ReadOnly = true;

                dataGridViewItems.Rows.Add(row);
            }
            #endregion

            #region OutOfPhaseItems

            foreach (Directive item in _workPackage.OutOfPhaseItems)
            {
                string taskCardCellValue;
                Color  taskCardCellBackColor = Color.White;

                if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null)
                {
                    taskCardCellValue     = "Not set Engineering Order file.";
                    taskCardCellBackColor = Color.Red;
                }
                else if (!string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null)
                {
                    taskCardCellValue =
                        $"Not set Engineering Order File. (Engineering Order No {item.EngineeringOrders}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile != null)
                {
                    taskCardCellValue =
                        $"Not set Engineering Order name. (File name {item.EngineeringOrderFile.FileName}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else
                {
                    taskCardCellValue = item.EngineeringOrders;
                }

                DataGridViewRow row = new DataGridViewRow {
                    Tag = item
                };

                DataGridViewCell discCell     = new DataGridViewTextBoxCell();
                DataGridViewCell taskCardCell = new DataGridViewTextBoxCell
                {
                    Value = taskCardCellValue,
                    Style = { BackColor = taskCardCellBackColor },
                };
                DataGridViewCell compntCell = new DataGridViewCheckBoxCell {
                    Value = item.PrintInWorkPackage
                };
                discCell.Value = "(OP)" + item.Title + " " + item.WorkType + " §:" + item.Paragraph;

                row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell });

                discCell.ReadOnly     = true;
                taskCardCell.ReadOnly = true;

                dataGridViewItems.Rows.Add(row);
            }
            #endregion

            #region Отложенные дефекты

            foreach (Directive item in _workPackage.DefferedItems)
            {
                string taskCardCellValue;
                Color  taskCardCellBackColor = Color.White;

                if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null)
                {
                    taskCardCellValue     = "Not set Engineering Order file.";
                    taskCardCellBackColor = Color.Red;
                }
                else if (!string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null)
                {
                    taskCardCellValue =
                        $"Not set Engineering Order File. (Engineering Order No {item.EngineeringOrders}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile != null)
                {
                    taskCardCellValue =
                        $"Not set Engineering Order name. (File name {item.EngineeringOrderFile.FileName}.)";
                    taskCardCellBackColor = Color.Red;
                }
                else
                {
                    taskCardCellValue = item.EngineeringOrders;
                }

                DataGridViewRow row = new DataGridViewRow {
                    Tag = item
                };

                DataGridViewCell discCell     = new DataGridViewTextBoxCell();
                DataGridViewCell taskCardCell = new DataGridViewTextBoxCell
                {
                    Value = taskCardCellValue,
                    Style = { BackColor = taskCardCellBackColor },
                };
                DataGridViewCell compntCell = new DataGridViewCheckBoxCell {
                    Value = item.PrintInWorkPackage
                };
                discCell.Value = "(DI)" + item.Title + " " + item.WorkType + " §:" + item.Paragraph;

                row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell });

                discCell.ReadOnly     = true;
                taskCardCell.ReadOnly = true;

                dataGridViewItems.Rows.Add(row);
            }
            #endregion

            #region Компоненты и задачи по компонентам

            var componentDirectives = _workPackage.ComponentDirectives.ToList();
            foreach (var item in _workPackage.Components)
            {
                List <ComponentDirective> dds =
                    componentDirectives.Where(dd => dd.ParentComponent != null &&
                                              dd.ParentComponent.ItemId == item.ItemId).ToList();

                foreach (var componentDirective in dds)
                {
                    componentDirectives.Remove(componentDirective);
                }

                DataGridViewRow row = new DataGridViewRow {
                    Tag = item
                };

                DataGridViewCell discCell     = new DataGridViewTextBoxCell();
                DataGridViewCell taskCardCell = new DataGridViewTextBoxCell();
                DataGridViewCell compntCell   = new DataGridViewCheckBoxCell {
                    Value = item.PrintInWorkPackage
                };
                discCell.Value = "CCO:" + item.Description + " " + item.PartNumber + " " + item.SerialNumber;

                row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell });

                discCell.ReadOnly     = true;
                taskCardCell.ReadOnly = true;

                dataGridViewItems.Rows.Add(row);
            }
            foreach (ComponentDirective item in componentDirectives)
            {
                Component       d   = item.ParentComponent;
                DataGridViewRow row = new DataGridViewRow {
                    Tag = item
                };

                DataGridViewCell discCell     = new DataGridViewTextBoxCell();
                DataGridViewCell taskCardCell = new DataGridViewTextBoxCell();
                DataGridViewCell compntCell   = new DataGridViewCheckBoxCell {
                    Value = item.PrintInWorkPackage
                };
                discCell.Value = "CCO:" + item.DirectiveType + " for " + d.Description + " " + d.PartNumber + " " + d.SerialNumber;

                row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell });

                discCell.ReadOnly     = true;
                taskCardCell.ReadOnly = true;

                dataGridViewItems.Rows.Add(row);
            }
            #endregion

            #region Нерутинные задачи

            foreach (NonRoutineJob item in _workPackage.NonRoutines)
            {
                DataGridViewRow row = new DataGridViewRow {
                    Tag = item
                };

                DataGridViewCell discCell = new DataGridViewTextBoxCell {
                    Value = "(Non-Routine)" + item.Title
                };
                DataGridViewCell taskCardCell = new DataGridViewTextBoxCell();
                DataGridViewCell compntCell   = new DataGridViewCheckBoxCell {
                    Value = item.PrintInWorkPackage
                };

                row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell });

                discCell.ReadOnly     = true;
                taskCardCell.ReadOnly = true;

                dataGridViewItems.Rows.Add(row);
            }
            #endregion
        }
Esempio n. 11
0
        ///<summary>
        ///</summary>
        public void Save()
        {
            foreach (CompliancePDFItem pdFitem in flowLayoutPanelContainer.Controls)
            {
                pdFitem.ApplyChanges();

                MaintenanceCheckRecord lastPerformance;

                if (_isEdit == false)
                {
                    lastPerformance = new MaintenanceCheckRecord {
                        ParentCheck = pdFitem.Check
                    };
                    if (pdFitem.Check.Grouping)
                    {
                        MaintenanceNextPerformance mnp =
                            _performances.FirstOrDefault(p => p.Parent != null && p.Parent.ItemId == pdFitem.Check.ItemId);
                        lastPerformance.PerformanceNum = mnp != null ? mnp.PerformanceNum : _numGroup;
                    }
                    else
                    {
                        lastPerformance.PerformanceNum = _numGroup;
                    }
                    lastPerformance.NumGroup = _numGroup;
                    lastPerformance.CalculatedPerformanceSource =
                        lastPerformance.ParentCheck.Interval * lastPerformance.PerformanceNum;
                }
                else
                {
                    lastPerformance = pdFitem.Record;
                }

                lastPerformance.AttachedFile        = pdFitem.AttachedFile;
                lastPerformance.ComplianceCheckName = textBoxCheckName.Text.Trim();
                lastPerformance.RecordDate          = dateTimePicker1.Value;
                lastPerformance.OnLifelength        = lifelengthViewer_LastCompliance.Lifelength;
                lastPerformance.IsControlPoint      = checkBoxControlPoint.Checked;
                lastPerformance.Remarks             = textBox_Remarks.Text.Trim();

                try
                {
                    GlobalObjects.PerformanceCore.RegisterPerformance(pdFitem.Check, lastPerformance);

                    IEnumerable <DirectiveRecord> bindedDirectivesRecord = pdFitem.BindDirectivesRecords;
                    foreach (DirectiveRecord record in bindedDirectivesRecord)
                    {
                        if (record.ItemId > 0 && record.IsDeleted)
                        {
                            GlobalObjects.PerformanceCore.Delete(record);
                        }
                        else
                        {
                            record.MaintenanceCheckRecordId = lastPerformance.ItemId;
                            record.OnLifelength             = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthOnStartOfDay(_currentAircraft, record.RecordDate);
                            record.Remarks = string.IsNullOrEmpty(lastPerformance.Remarks)
                                                 ? "This performance added by " + pdFitem.Check.Name + " on " +
                                             UsefulMethods.NormalizeDate(lastPerformance.RecordDate)
                                                 : lastPerformance.Remarks;

                            GlobalObjects.CasEnvironment.Manipulator.Save(record, false);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Program.Provider.Logger.Log("Error while save performance for maintenance check", ex);

                    break;
                }
            }
        }
Esempio n. 12
0
        /// <summary>
        /// This sample adds a consecutive number in the middle of each page.
        /// It shows how you can add graphics to an imported page.
        /// </summary>
        private void ConcatenatePdfDocuments()
        {
            List <MaintenanceCheck>     selectedChecks = new List <MaintenanceCheck>(_workPackage.MaintenanceChecks);
            List <MaintenanceDirective> selectedMpds   = new List <MaintenanceDirective>(_workPackage.MaintenanceDirectives);

            selectedMpds.AddRange((from record in _workPackage.MaintenanceCheckBindTaskRecords
                                   where record.TaskType == SmartCoreType.MaintenanceDirective
                                   select record.Task as MaintenanceDirective));
            selectedMpds = selectedMpds.Distinct().OrderBy(cm => cm.TaskNumberCheck).ToList();
            List <Directive> selectedADs = new List <Directive>(_workPackage.AdStatus);

            selectedADs.AddRange(_workPackage.SbStatus);
            selectedADs.AddRange(_workPackage.EoStatus);
            List <Directive>          selectedDamages             = new List <Directive>(_workPackage.Damages);
            List <Directive>          selectedOofs                = new List <Directive>(_workPackage.OutOfPhaseItems);
            List <Directive>          selectedDeffereds           = new List <Directive>(_workPackage.DefferedItems);
            List <ComponentDirective> selectedComponentDirectives = new List <ComponentDirective>(_workPackage.ComponentDirectives);
            List <Component>          selectedComponents          = new List <Component>(_workPackage.Components);
            List <NonRoutineJob>      selectedNrjs                = new List <NonRoutineJob>(_workPackage.NonRoutines);

            _animatedThreadWorker.ReportProgress(10, "Sample of Maintenance checks and MPD");

            #region Выборка Чеков и директив программы обслуживания

            foreach (DataGridViewRow row in dataGridViewItems.Rows)
            {
                if (!(row.Tag is MaintenanceCheck))
                {
                    continue;
                }
                if (row.Cells.Count < 3 || !(row.Cells[2] is DataGridViewCheckBoxCell))
                {
                    continue;
                }
                MaintenanceCheck         check     = row.Tag as MaintenanceCheck;
                DataGridViewCheckBoxCell printCell = (DataGridViewCheckBoxCell)row.Cells[2];
                if (!(bool)printCell.Value)
                {
                    //Если чек не выбран для распечатки,
                    //то из результирующей коллекции для распечатки нужно исключить как сам чек,
                    //так и его элементы
                    selectedChecks.Remove(check);

                    if (check.Grouping)
                    {
                        MaintenanceNextPerformance mnp = check.GetNextPergormanceGroupWhereCheckIsSenior();
                        if (mnp != null && mnp.PerformanceGroup != null && mnp.PerformanceGroup.Checks.Count > 0 &&
                            _workPackage.Aircraft != null && _workPackage.Aircraft.MSG == MSG.MSG3)
                        {
                            foreach (MaintenanceCheck mc in mnp.PerformanceGroup.Checks)
                            {
                                List <MaintenanceDirective> checkMpds =
                                    (from record in _workPackage.MaintenanceCheckBindTaskRecords
                                     where record.TaskType == SmartCoreType.MaintenanceDirective && record.CheckId == mc.ItemId
                                     select record.Task as MaintenanceDirective)
                                    .OrderBy(cm => cm.TaskNumberCheck)
                                    .ToList();

                                checkMpds.AddRange(mc.BindMpds);
                                foreach (MaintenanceDirective checkMpd in checkMpds)
                                {
                                    selectedMpds.Remove(checkMpd);
                                }
                            }
                        }
                        else
                        {
                            List <MaintenanceDirective> checkMpds =
                                (from record in _workPackage.MaintenanceCheckBindTaskRecords
                                 where record.TaskType == SmartCoreType.MaintenanceDirective && record.CheckId == check.ItemId
                                 select record.Task as MaintenanceDirective)
                                .OrderBy(cm => cm.TaskNumberCheck)
                                .ToList();

                            checkMpds.AddRange(check.BindMpds);
                            foreach (MaintenanceDirective checkMpd in checkMpds)
                            {
                                selectedMpds.Remove(checkMpd);
                            }
                        }
                    }
                    else
                    {
                        List <MaintenanceDirective> checkMpds =
                            (from record in _workPackage.MaintenanceCheckBindTaskRecords
                             where record.TaskType == SmartCoreType.MaintenanceDirective && record.CheckId == check.ItemId
                             select record.Task as MaintenanceDirective)
                            .OrderBy(cm => cm.TaskNumberCheck)
                            .ToList();

                        checkMpds.AddRange(check.BindMpds);
                        foreach (MaintenanceDirective checkMpd in checkMpds)
                        {
                            selectedMpds.Remove(checkMpd);
                        }
                    }
                }
            }

            foreach (DataGridViewRow row in dataGridViewItems.Rows)
            {
                if (!(row.Tag is MaintenanceDirective))
                {
                    continue;
                }
                if (row.Cells.Count < 3 || !(row.Cells[2] is DataGridViewCheckBoxCell))
                {
                    continue;
                }
                MaintenanceDirective     mpd       = row.Tag as MaintenanceDirective;
                DataGridViewCheckBoxCell printCell = (DataGridViewCheckBoxCell)row.Cells[2];
                if (!(bool)printCell.Value)
                {
                    //Если директива программы обслуживания не выбрана для распечатки,
                    //то ее нужно исключить из результирующей коллекции для распечатки
                    MaintenanceDirective directive = selectedMpds.FirstOrDefault(sm => sm.ItemId == mpd.ItemId);
                    if (directive != null)
                    {
                        selectedMpds.Remove(directive);
                    }
                }
                else
                {
                    if (row.Cells.Count < 4 || !(row.Cells[3] is DataGridViewComboBoxCell))
                    {
                        continue;
                    }
                    //Если директива программы обслуживания имеет связные с ней задачи по
                    //компонентам и Выбрана для распечатки,
                    //то нужно определить, сколько копий директивы надо включить в распечатку
                    //1. По одной на каждую связную задачу по компоненту
                    //2. Одну на все связные задачи по компонентам
                    MaintenanceDirective directive = selectedMpds.FirstOrDefault(sm => sm.ItemId == mpd.ItemId);
                    if (directive != null)
                    {
                        DataGridViewComboBoxCell countCell = (DataGridViewComboBoxCell)row.Cells[3];
                        if (countCell.EditedFormattedValue.ToString() == _comboBoxItemOneToOne)
                        {
                            directive.CountForPrint = directive.ItemRelations.Count;
                        }
                        else if (countCell.EditedFormattedValue.ToString() == _comboBoxItemOneForAll)
                        {
                            directive.CountForPrint = 1;
                        }
                    }
                }
            }

            #endregion

            _animatedThreadWorker.ReportProgress(15, "Sample of AD");

            #region Выборка Директив летной годности

            foreach (DataGridViewRow row in dataGridViewItems.Rows)
            {
                if (!(row.Tag is Directive))
                {
                    continue;
                }
                if (row.Cells.Count < 3 || !(row.Cells[2] is DataGridViewCheckBoxCell))
                {
                    continue;
                }
                Directive directive = row.Tag as Directive;
                DataGridViewCheckBoxCell printCell = (DataGridViewCheckBoxCell)row.Cells[2];
                if (!(bool)printCell.Value)
                {
                    if (directive.DirectiveType == DirectiveType.AirworthenessDirectives &&
                        selectedADs.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null)
                    {
                        selectedADs.Remove(directive);
                    }
                    if (directive.DirectiveType == DirectiveType.DamagesRequiring &&
                        selectedDamages.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null)
                    {
                        selectedDamages.Remove(directive);
                    }
                    if (directive.DirectiveType == DirectiveType.DeferredItems &&
                        selectedDeffereds.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null)
                    {
                        selectedDeffereds.Remove(directive);
                    }
                    if (directive.DirectiveType == DirectiveType.OutOfPhase &&
                        selectedOofs.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null)
                    {
                        selectedOofs.Remove(directive);
                    }
                    if (directive.DirectiveType == DirectiveType.SB &&
                        selectedOofs.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null)
                    {
                        selectedOofs.Remove(directive);
                    }
                    if (directive.DirectiveType == DirectiveType.EngineeringOrders &&
                        selectedOofs.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null)
                    {
                        selectedOofs.Remove(directive);
                    }
                }
            }
            #endregion

            _animatedThreadWorker.ReportProgress(20, "Sample of Component directives");

            #region Выборка Задач по компонентам

            foreach (DataGridViewRow row in dataGridViewItems.Rows)
            {
                if (!(row.Tag is ComponentDirective))
                {
                    continue;
                }
                if (row.Cells.Count < 3 || !(row.Cells[2] is DataGridViewCheckBoxCell))
                {
                    continue;
                }
                ComponentDirective       directive = row.Tag as ComponentDirective;
                DataGridViewCheckBoxCell printCell = (DataGridViewCheckBoxCell)row.Cells[2];
                if (!(bool)printCell.Value && selectedComponentDirectives.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null)
                {
                    selectedComponentDirectives.Remove(directive);
                }
            }
            #endregion

            _animatedThreadWorker.ReportProgress(25, "Sample of Components");

            #region Выборка компонентов

            foreach (DataGridViewRow row in dataGridViewItems.Rows)
            {
                if (!(row.Tag is Component))
                {
                    continue;
                }
                if (row.Cells.Count < 3 || !(row.Cells[2] is DataGridViewCheckBoxCell))
                {
                    continue;
                }
                Component directive = row.Tag as Component;
                DataGridViewCheckBoxCell printCell = (DataGridViewCheckBoxCell)row.Cells[2];
                if (!(bool)printCell.Value && selectedComponents.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null)
                {
                    selectedComponents.Remove(directive);
                }
            }
            #endregion

            _animatedThreadWorker.ReportProgress(30, "Sample of Non-routine jobs");

            #region Выборка нерутинных работ

            foreach (DataGridViewRow row in dataGridViewItems.Rows)
            {
                if (!(row.Tag is NonRoutineJob))
                {
                    continue;
                }
                if (row.Cells.Count < 3 || !(row.Cells[2] is DataGridViewCheckBoxCell))
                {
                    continue;
                }
                NonRoutineJob            directive = row.Tag as NonRoutineJob;
                DataGridViewCheckBoxCell printCell = (DataGridViewCheckBoxCell)row.Cells[2];
                if (!(bool)printCell.Value && selectedNrjs.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null)
                {
                    selectedNrjs.Remove(directive);
                }
            }
            #endregion

            _selectedItems.Clear();
            _selectedItems.AddRange(selectedChecks.ToArray());
            _selectedItems.AddRange(selectedMpds.ToArray());
            _selectedItems.AddRange(selectedADs.ToArray());
            _selectedItems.AddRange(selectedDamages.ToArray());
            _selectedItems.AddRange(selectedOofs.ToArray());
            _selectedItems.AddRange(selectedDeffereds.ToArray());
            _selectedItems.AddRange(selectedComponentDirectives.ToArray());
            _selectedItems.AddRange(selectedComponents.ToArray());
            _selectedItems.AddRange(selectedNrjs.ToArray());
        }
Esempio n. 13
0
        protected override void SetItemColor(GridViewRowInfo listViewItem, NextPerformance item)
        {
            Color itemForeColor = Color.Black;

            if (item is MaintenanceNextPerformance)
            {
                MaintenanceNextPerformance mnp = item as MaintenanceNextPerformance;
                foreach (GridViewCellInfo cell in listViewItem.Cells)
                {
                    cell.Style.CustomizeFill = true;
                    cell.Style.ForeColor     = mnp == ((MaintenanceCheck)item.Parent).GetPergormanceGroupWhereCheckIsSenior()[0]
                                                ? Color.Black
                                                : Color.Gray;
                }

                if (mnp.CalcForHight)
                {
                    foreach (GridViewCellInfo cell in listViewItem.Cells)
                    {
                        cell.Style.CustomizeFill = true;
                        cell.Style.BackColor     = Color.FromArgb(Highlight.PurpleLight.Color);
                        if (cell.Style.ForeColor != Color.MediumVioletRed)
                        {
                            cell.Style.ForeColor = itemForeColor;
                        }
                    }
                }
            }
            else
            {
                IDirective imd = item.Parent;
                foreach (GridViewCellInfo cell in listViewItem.Cells)
                {
                    cell.Style.CustomizeFill = true;
                    cell.Style.BackColor     = Color.White;
                    if (imd.Condition == ConditionState.Notify)
                    {
                        cell.Style.BackColor = Color.FromArgb(Highlight.Yellow.Color);
                    }
                    if (imd.Condition == ConditionState.Overdue)
                    {
                        cell.Style.BackColor = Color.FromArgb(Highlight.Red.Color);
                    }
                    if (imd.Percents != null && imd.Percents > 0)
                    {
                        cell.Style.BackColor = Color.FromArgb(Highlight.Green.Color);
                    }
                    if (cell.Style.ForeColor != Color.MediumVioletRed)
                    {
                        cell.Style.ForeColor = imd.NextPerformances.IndexOf(item) == 0
                                                ? Color.Black
                                                : Color.Gray;
                    }
                    ;
                }
            }


            var itemBacBlackolor = listViewItem.Cells[0].Style.BackColor;

            if (item.Parent is MaintenanceDirective)
            {
                var mpd = item.Parent as MaintenanceDirective;
                if (mpd.IsExtension)
                {
                    itemBacBlackolor = Color.DodgerBlue;
                    foreach (GridViewCellInfo cell in listViewItem.Cells)
                    {
                        cell.Style.CustomizeFill = true;
                        cell.Style.BackColor     = itemBacBlackolor;
                    }
                }
            }

            if (item.BlockedByPackage != null)
            {
                foreach (GridViewCellInfo cell in listViewItem.Cells)
                {
                    cell.Style.CustomizeFill = true;
                    cell.Style.BackColor     = Color.FromArgb(Highlight.Grey.Color);
                    if (cell.Style.ForeColor != Color.MediumVioletRed)
                    {
                        cell.Style.ForeColor = itemForeColor;
                    }
                }
            }
        }
Esempio n. 14
0
        private void GenerateRows()
        {
            listViewProgramChecks.Items.Clear();
            if (_grouping)
            {
                MaintenanceCheckCollection mcc = new MaintenanceCheckCollection(_maintenanceCheckItems);
                MaintenanceCheck           mc  = mcc.GetMinStepCheck(_maintenanceCheckItems[0].Schedule);
                if (mc == null)
                {
                    return;
                }
                MSG msg = mc.ParentAircraft != null && mc.ParentAircraft.MaintenanceProgramChangeRecords.Count > 0
                                  ? mc.ParentAircraft.MaintenanceProgramChangeRecords.GetLast().MSG
                                  : MSG.MSG2;
                if (msg < MSG.MSG3)
                {
                    MaintenanceCheckComplianceGroup mccg =
                        mcc.GetLastComplianceCheckGroup(mc.Schedule, mc.ParentAircraftId,
                                                        mc.Grouping, mc.Resource);

                    int lastPerformanceGroupNum = mccg != null
                        ? mccg.LastComplianceGroupNum
                        : 0;
                    int countMinStepInMinCheck = Convert.ToInt32(mc.Interval.GetSubresource(mc.Resource)) / _minCheckResource;
                    foreach (MaintenanceCheck t in _maintenanceCheckItems)
                    {
                        ListViewItem listViewItem = new ListViewItem {
                            Text = t.Name
                        };

                        listViewItem.SubItems.Add(t.Interval.ToRepeatIntervalsFormat());
                        listViewItem.SubItems.Add(t.Cost.ToString());
                        listViewItem.SubItems.Add(t.ManHours.ToString());

                        for (int j = 1; j <= _countColumns; j++)
                        {
                            MaintenanceNextPerformance mnp =
                                t.GetPergormanceGroupByGroupNum(lastPerformanceGroupNum + j * countMinStepInMinCheck);
                            listViewItem.SubItems.Add(mnp != null ? "X" : "");
                        }
                        listViewProgramChecks.Items.Add(listViewItem);
                    }
                }
                else
                {
                    MaintenanceCheckComplianceGroup mccg =
                        mcc.GetLastComplianceCheckGroup(mc.Schedule, mc.ParentAircraftId,
                                                        mc.Grouping, mc.Resource);

                    int lastPerformanceGroupNum = mccg != null
                        ? mccg.LastComplianceGroupNum
                        : 0;
                    int countMinStepInMinCheck = Convert.ToInt32(mc.Interval.GetSubresource(mc.Resource)) / _minCheckResource;
                    foreach (MaintenanceCheck t in _maintenanceCheckItems)
                    {
                        ListViewItem listViewItem = new ListViewItem {
                            Text = t.Name
                        };

                        listViewItem.SubItems.Add(t.Interval.ToRepeatIntervalsFormat());
                        listViewItem.SubItems.Add(t.Cost.ToString());
                        listViewItem.SubItems.Add(t.ManHours.ToString());

                        for (int j = 1; j <= _countColumns; j++)
                        {
                            MaintenanceNextPerformance mnp =
                                t.GetPergormanceGroupWhereCheckIsSeniorByGroupNum(lastPerformanceGroupNum + j * countMinStepInMinCheck);
                            listViewItem.SubItems.Add(mnp != null ? "X" : "");
                        }
                        listViewProgramChecks.Items.Add(listViewItem);
                    }
                }
                mcc.Clear();
            }
            else
            {
                foreach (MaintenanceCheck t in _maintenanceCheckItems)
                {
                    ListViewItem listViewItem = new ListViewItem {
                        Text = t.Name
                    };

                    listViewItem.SubItems.Add(t.Interval.ToRepeatIntervalsFormat());
                    listViewItem.SubItems.Add(t.Cost.ToString());
                    listViewItem.SubItems.Add(t.ManHours.ToString());

                    Lifelength lastPerformance = t.LastPerformance != null
                        ? new Lifelength(t.LastPerformance.OnLifelength)
                        : Lifelength.Null;
                    int?last = lastPerformance.GetSubresource(_subResource);

                    listViewItem.SubItems.Add(last != null ? lastPerformance.ToString(_subResource, true) : "");

                    if (t.Schedule == _schedule)
                    {
                        Lifelength nextPerformance = lastPerformance + t.Interval;
                        int?       next            = nextPerformance.GetSubresource(_subResource);
                        listViewItem.SubItems.Add(next != null ? nextPerformance.ToString(_subResource, true) : "");
                    }
                    else
                    {
                        listViewItem.SubItems.Add("N/A");
                    }
                    listViewProgramChecks.Items.Add(listViewItem);
                }
            }
        }
Esempio n. 15
0
        private void AddToWorkPackageItemClick(object sender, EventArgs e)
        {
            if (_directivesViewer.SelectedItems.Count <= 0)
            {
                return;
            }

            WorkPackage wp = (WorkPackage)((RadMenuItem)sender).Tag;

            if (MessageBox.Show("Add item to Work Package: " + wp.Title + "?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) ==
                DialogResult.Yes)
            {
                List <NextPerformance> wpItems = _directivesViewer.SelectedItems.ToList();
                List <NextPerformance> bindedDirectivesPerformances = new List <NextPerformance>();
                foreach (NextPerformance wpItem in wpItems)
                {
                    if (wpItem is MaintenanceNextPerformance)
                    {
                        MaintenanceNextPerformance mnp = wpItem as MaintenanceNextPerformance;
                        if (mnp.PerformanceGroup.Checks.Count > 0)
                        {
                            foreach (MaintenanceCheck mc in mnp.PerformanceGroup.Checks)
                            {
                                foreach (MaintenanceDirective mpd in _currentForecast.MaintenanceDirectives
                                         .Where(mpd => mpd.MaintenanceCheck != null &&
                                                mpd.MaintenanceCheck.ItemId == mc.ItemId))
                                {
                                    NextPerformance performance =
                                        mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                            p.PerformanceDate.Value.Date == wpItem.PerformanceDate.Value.Date) ??
                                        mpd.NextPerformances.LastOrDefault(p => p.PerformanceDate != null &&
                                                                           p.PerformanceDate < wpItem.PerformanceDate) ??
                                        mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                            p.PerformanceDate > wpItem.PerformanceDate);

                                    if (performance == null)
                                    {
                                        continue;
                                    }
                                    if (wpItems.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0)
                                    {
                                        bindedDirectivesPerformances.Add(performance);
                                    }
                                }
                            }
                        }
                        else if (wpItem.Parent is MaintenanceCheck)
                        {
                            MaintenanceCheck mc = wpItem.Parent as MaintenanceCheck;
                            foreach (MaintenanceDirective mpd in _currentForecast.MaintenanceDirectives
                                     .Where(mpd => mpd.MaintenanceCheck != null &&
                                            mpd.MaintenanceCheck.ItemId == mc.ItemId))
                            {
                                NextPerformance performance =
                                    mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                        p.PerformanceDate.Value.Date == wpItem.PerformanceDate.Value.Date) ??
                                    mpd.NextPerformances.LastOrDefault(p => p.PerformanceDate != null &&
                                                                       p.PerformanceDate < wpItem.PerformanceDate) ??
                                    mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                        p.PerformanceDate > wpItem.PerformanceDate);

                                if (performance == null)
                                {
                                    continue;
                                }
                                if (wpItems.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0)
                                {
                                    bindedDirectivesPerformances.Add(performance);
                                }
                            }
                        }
                    }
                    else if (wpItem.Parent is MaintenanceCheck)
                    {
                        MaintenanceCheck mc = wpItem.Parent as MaintenanceCheck;
                        foreach (MaintenanceDirective mpd in _currentForecast.MaintenanceDirectives
                                 .Where(mpd => mpd.MaintenanceCheck != null &&
                                        mpd.MaintenanceCheck.ItemId == mc.ItemId))
                        {
                            NextPerformance performance =
                                mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                    p.PerformanceDate.Value.Date == wpItem.PerformanceDate.Value.Date) ??
                                mpd.NextPerformances.LastOrDefault(p => p.PerformanceDate != null &&
                                                                   p.PerformanceDate < wpItem.PerformanceDate) ??
                                mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                    p.PerformanceDate > wpItem.PerformanceDate);

                            if (performance == null)
                            {
                                continue;
                            }
                            if (wpItems.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0)
                            {
                                bindedDirectivesPerformances.Add(performance);
                            }
                        }
                    }
                }
                wpItems.AddRange(bindedDirectivesPerformances);

                try
                {
                    string message;

                    if (!GlobalObjects.WorkPackageCore.AddToWorkPakage(wpItems, wp.ItemId, CurrentAircraft, out message))
                    {
                        MessageBox.Show(message, (string)new GlobalTermsProvider()["SystemName"],
                                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }

                    foreach (NextPerformance nextPerformance in wpItems)
                    {
                        nextPerformance.BlockedByPackage = wp;
                        _directivesViewer.UpdateItemColor();
                    }

                    if (MessageBox.Show("Items added successfully. Open work package?", (string)new GlobalTermsProvider()["SystemName"],
                                        MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2)
                        == DialogResult.Yes)
                    {
                        ReferenceEventArgs refArgs = new ReferenceEventArgs();
                        refArgs.TypeOfReflection = ReflectionTypes.DisplayInNew;
                        refArgs.DisplayerText    = CurrentAircraft != null ? CurrentAircraft.RegistrationNumber + "." + wp.Title : wp.Title;
                        refArgs.RequestedEntity  = new WorkPackageScreen(wp);
                        InvokeDisplayerRequested(refArgs);
                    }
                }
                catch (Exception ex)
                {
                    Program.Provider.Logger.Log("error while create Work Package", ex);
                }
            }
        }
Esempio n. 16
0
        private void Edit()
        {
            DialogResult dlgResult = DialogResult.None;

            if (listViewCompliance.SelectedItems[0].Group == listViewCompliance.Groups["overdue"])
            {
                MaintenanceComplainceForm complainceForm =
                    new MaintenanceComplainceForm(_currentAircraft, (MaintenanceCheckGroupByType)listViewCompliance.SelectedItems[0].Tag);
                dlgResult = complainceForm.ShowDialog(this);
            }
            else if (listViewCompliance.SelectedItems[0].Group == listViewCompliance.Groups["next"])
            {
                if (listViewCompliance.SelectedItems[0].Tag is NextPerformance)
                {
                    NextPerformance np = (NextPerformance)listViewCompliance.SelectedItems[0].Tag;
                    //if (np.Condition != ConditionState.Overdue || np.PerformanceDate > DateTime.Now)
                    //{
                    //    MessageBox.Show("You can not enter a record for not delayed performance",
                    //                    (string)new GlobalTermsProvider()["SystemName"],
                    //                    MessageBoxButtons.OK,
                    //                    MessageBoxIcon.Warning,
                    //                    MessageBoxDefaultButton.Button1);
                    //    return;
                    //}
                    if (np.BlockedByPackage != null)
                    {
                        MessageBox.Show("Perform of the task:" + listViewCompliance.SelectedItems[0].Text +
                                        "\nblocked by Work Package:" +
                                        "\n" + np.BlockedByPackage.Title,
                                        (string)new GlobalTermsProvider()["SystemName"],
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Warning,
                                        MessageBoxDefaultButton.Button1);
                        return;
                    }
                }

                if (listViewCompliance.SelectedItems[0].Tag is MaintenanceNextPerformance)
                {
                    MaintenanceNextPerformance mnp = listViewCompliance.SelectedItems[0].Tag as MaintenanceNextPerformance;
                    if (mnp.PerformanceGroup == null)
                    {
                        return;
                    }
                    MaintenanceCheckGroupByType pg             = mnp.PerformanceGroup;
                    MaintenanceComplainceForm   complainceForm = new MaintenanceComplainceForm(_currentAircraft, pg);
                    dlgResult = complainceForm.ShowDialog(this);
                }
                else if (listViewCompliance.SelectedItems[0].Tag is NextPerformance)
                {
                    NextPerformance np = listViewCompliance.SelectedItems[0].Tag as NextPerformance;
                    if (np.Parent == null)
                    {
                        return;
                    }
                    MaintenanceComplainceForm complainceForm = new MaintenanceComplainceForm(_currentAircraft, np);
                    dlgResult = complainceForm.ShowDialog(this);
                }
            }
            else if (listViewCompliance.SelectedItems[0].Group == listViewCompliance.Groups["last"])
            {
                if (listViewCompliance.SelectedItems[0].Tag is List <MaintenanceCheckRecord> )
                {
                    MaintenanceComplainceForm complainceForm =
                        new MaintenanceComplainceForm(_currentAircraft, (List <MaintenanceCheckRecord>)listViewCompliance.SelectedItems[0].Tag);
                    dlgResult = complainceForm.ShowDialog(this);
                }
                else if (listViewCompliance.SelectedItems[0].Tag is MaintenanceProgramChangeRecord)
                {
                    List <MaintenanceCheckRecord> records =
                        CheckItems.Where(c => c.Grouping)
                        .SelectMany(c => c.PerformanceRecords)
                        .ToList();
                    List <MaintenanceCheckRecordGroup> maintenanceCheckRecordGroups = new List <MaintenanceCheckRecordGroup>();

                    foreach (MaintenanceCheckRecord record in records)
                    {
                        MaintenanceCheckRecordGroup recordGroup = maintenanceCheckRecordGroups
                                                                  .FirstOrDefault(g => g.Schedule == record.ParentCheck.Schedule &&
                                                                                  g.Grouping == record.ParentCheck.Grouping &&
                                                                                  g.Resource == record.ParentCheck.Resource &&
                                                                                  g.GroupComplianceNum == record.NumGroup);
                        if (recordGroup != null)
                        {
                            //Коллекция найдена
                            //Поиск в ней группы чеков с нужным типом
                            recordGroup.Records.Add(record);
                        }
                        else
                        {
                            //Коллекции с нужными критериями нет
                            //Созадние и добавление
                            recordGroup =
                                new MaintenanceCheckRecordGroup(record.ParentCheck.Schedule, record.ParentCheck.Grouping,
                                                                record.ParentCheck.Resource, record.NumGroup);
                            recordGroup.Records.Add(record);
                            maintenanceCheckRecordGroups.Add(recordGroup);
                        }
                    }
                    MaintenanceProgramChangeDialog complainceForm =
                        new MaintenanceProgramChangeDialog((MaintenanceProgramChangeRecord)listViewCompliance.SelectedItems[0].Tag,
                                                           maintenanceCheckRecordGroups);
                    dlgResult = complainceForm.ShowDialog(this);
                }
                //MaintenanceComplainceForm complainceForm = new MaintenanceComplainceForm
                //{
                //    PerformanceRecords = ((List<MaintenanceCheckRecord>)
                //                     listViewCompliance.SelectedItems[0].Tag),
                //    CurrentAircraft = this.CurentAircraft,
                //    NumGroup = ((List<MaintenanceCheckRecord>)
                //        listViewCompliance.SelectedItems[0].Tag)[0].NumGroup
                //};
                // dlgResult = complainceForm.ShowDialog(this);
            }
            if (dlgResult == DialogResult.OK)
            {
                InvokeComplianceAdded(null);
            }
        }
Esempio n. 17
0
        private void ButtonCreateWorkPakageClick(object sender, EventArgs e)
        {
            if (_directivesViewer.SelectedItems.Count <= 0)
            {
                return;
            }

            if (MessageBox.Show("Create and save a Work Package?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                List <NextPerformance> wpItems = _directivesViewer.SelectedItems.ToList();
                List <NextPerformance> bindedDirectivesPerformances = new List <NextPerformance>();
                foreach (NextPerformance wpItem in wpItems)
                {
                    if (wpItem is MaintenanceNextPerformance)
                    {
                        MaintenanceNextPerformance mnp = wpItem as MaintenanceNextPerformance;
                        if (mnp.PerformanceGroup.Checks.Count > 0)
                        {
                            foreach (MaintenanceCheck mc in mnp.PerformanceGroup.Checks)
                            {
                                foreach (MaintenanceDirective mpd in _currentForecast.MaintenanceDirectives
                                         .Where(mpd => mpd.MaintenanceCheck != null &&
                                                mpd.MaintenanceCheck.ItemId == mc.ItemId))
                                {
                                    NextPerformance performance =
                                        mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                            p.PerformanceDate.Value.Date == wpItem.PerformanceDate.Value.Date) ??
                                        mpd.NextPerformances.LastOrDefault(p => p.PerformanceDate != null &&
                                                                           p.PerformanceDate < wpItem.PerformanceDate) ??
                                        mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                            p.PerformanceDate > wpItem.PerformanceDate);

                                    if (performance == null)
                                    {
                                        continue;
                                    }
                                    if (wpItems.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0)
                                    {
                                        bindedDirectivesPerformances.Add(performance);
                                    }
                                }
                            }
                        }
                        else if (wpItem.Parent is MaintenanceCheck)
                        {
                            MaintenanceCheck mc = wpItem.Parent as MaintenanceCheck;
                            foreach (MaintenanceDirective mpd in _currentForecast.MaintenanceDirectives
                                     .Where(mpd => mpd.MaintenanceCheck != null &&
                                            mpd.MaintenanceCheck.ItemId == mc.ItemId))
                            {
                                NextPerformance performance =
                                    mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                        p.PerformanceDate.Value.Date == wpItem.PerformanceDate.Value.Date) ??
                                    mpd.NextPerformances.LastOrDefault(p => p.PerformanceDate != null &&
                                                                       p.PerformanceDate < wpItem.PerformanceDate) ??
                                    mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                        p.PerformanceDate > wpItem.PerformanceDate);

                                if (performance == null)
                                {
                                    continue;
                                }
                                if (wpItems.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0)
                                {
                                    bindedDirectivesPerformances.Add(performance);
                                }
                            }
                        }
                    }
                    else if (wpItem.Parent is MaintenanceCheck)
                    {
                        MaintenanceCheck mc = wpItem.Parent as MaintenanceCheck;
                        foreach (MaintenanceDirective mpd in _currentForecast.MaintenanceDirectives
                                 .Where(mpd => mpd.MaintenanceCheck != null &&
                                        mpd.MaintenanceCheck.ItemId == mc.ItemId))
                        {
                            NextPerformance performance =
                                mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                    p.PerformanceDate.Value.Date == wpItem.PerformanceDate.Value.Date) ??
                                mpd.NextPerformances.LastOrDefault(p => p.PerformanceDate != null &&
                                                                   p.PerformanceDate < wpItem.PerformanceDate) ??
                                mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                    p.PerformanceDate > wpItem.PerformanceDate);

                            if (performance == null)
                            {
                                continue;
                            }
                            if (wpItems.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0)
                            {
                                bindedDirectivesPerformances.Add(performance);
                            }
                        }
                    }
                }
                wpItems.AddRange(bindedDirectivesPerformances);

                try
                {
                    string      message;
                    WorkPackage wp =
                        GlobalObjects.WorkPackageCore.AddWorkPakage(wpItems, _currentAircraft, out message);
                    if (wp == null)
                    {
                        MessageBox.Show(message, (string)new GlobalTermsProvider()["SystemName"],
                                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    //Добавление нового рабочего пакета в коллекцию открытых рабочих пакетов
                    _openPubWorkPackages.Add(wp);
                    //Создание пункта в меню открытых рабочих пакетов
                    var item = new RadMenuItem(wp.Title);
                    item.Click += AddToWorkPackageItemClick;
                    item.Tag    = wp;
                    _toolStripMenuItemsWorkPackages.Items.Add(item);

                    foreach (NextPerformance nextPerformance in wpItems)
                    {
                        nextPerformance.BlockedByPackage = wp;
                        _directivesViewer.UpdateItemColor();
                    }
                    ReferenceEventArgs refArgs = new ReferenceEventArgs();
                    refArgs.TypeOfReflection = ReflectionTypes.DisplayInNew;
                    refArgs.DisplayerText    = CurrentAircraft != null ? CurrentAircraft.RegistrationNumber + "." + wp.Title : wp.Title;
                    refArgs.RequestedEntity  = new WorkPackageScreen(wp);
                    InvokeDisplayerRequested(refArgs);
                }
                catch (Exception ex)
                {
                    Program.Provider.Logger.Log("error while create Work Package", ex);
                }
            }
        }
Esempio n. 18
0
        private ListViewItem GetListViewItem(MaintenanceCheck check)
        {
            ListViewItem listViewItem = new ListViewItem {
                Tag = check, Text = check.Name
            };

            if (check.Grouping)
            {
                MaintenanceNextPerformance     np   = check.NextPerformances.FirstOrDefault() as MaintenanceNextPerformance;
                MaintenanceProgramChangeRecord mpcr = np != null && np.PerformanceDate != null
                                                          ? _currentAircraft.MaintenanceProgramChangeRecords.
                                                      GetLastKnownRecord(Convert.ToDateTime(np.PerformanceDate))
                                                          : null;

                if (mpcr != null && mpcr.MSG >= MSG.MSG3)
                {
                    string lastPerformanceDate   = "N/A";
                    string lastPerformanceSource = "N/A";
                    string lastPerformaceGroup   = "N/A";
                    string lastCheckName         = "N/A";
                    string nextPerformanceDate   = "N/A";
                    string nextPerformanceSource = "N/A";
                    string nextPerformaceGroup   = "N/A";
                    string nextCheckName         = "N/A";
                    string remains = "N/A";

                    MaintenanceNextPerformance mnp = check.GetNextPergormanceGroupWhereCheckIsSenior();
                    if (mnp != null)
                    {
                        nextPerformanceDate   = UsefulMethods.NormalizeDate(Convert.ToDateTime(mnp.PerformanceDate));
                        nextPerformanceSource = mnp.PerformanceSource.ToString();
                        nextPerformaceGroup   = mnp.PerformanceGroupNum + "/" + mnp.PerformanceNum;
                        nextCheckName         = mnp.PerformanceGroup.GetGroupName();
                        remains = mnp.Remains.ToString();
                    }
                    if (check.LastPerformance != null)
                    {
                        MaintenanceCheckRecord mcr = _checkItems.GetLastCheckRecordWhereCheckIsSenior(check);
                        if (mcr != null)
                        {
                            lastPerformanceDate   = UsefulMethods.NormalizeDate(mcr.RecordDate);
                            lastPerformanceSource = mcr.OnLifelength.ToString();
                            lastPerformaceGroup   = mcr.NumGroup + "/" + mcr.PerformanceNum;
                            lastCheckName         =
                                _currentAircraft != null && _currentAircraft.MaintenanceProgramCheckNaming
                                        ? (!string.IsNullOrEmpty(mcr.ComplianceCheckName)
                                               ? mcr.ComplianceCheckName
                                               : check.Name)
                                        : check.Name;
                        }
                    }

                    listViewItem.SubItems.Add(lastPerformanceDate);
                    listViewItem.SubItems.Add(lastPerformanceSource);
                    listViewItem.SubItems.Add(lastPerformaceGroup);
                    listViewItem.SubItems.Add(lastCheckName);
                    listViewItem.SubItems.Add(nextPerformanceDate);
                    listViewItem.SubItems.Add(nextPerformanceSource);
                    listViewItem.SubItems.Add(nextPerformaceGroup);
                    listViewItem.SubItems.Add(nextCheckName);
                    listViewItem.SubItems.Add(remains);
                }
                else
                {
                    if (check.LastPerformance == null)
                    {
                        listViewItem.SubItems.Add("N/A");
                        listViewItem.SubItems.Add("N/A");
                        listViewItem.SubItems.Add("N/A");
                        listViewItem.SubItems.Add("N/A");
                        listViewItem.SubItems.Add(np != null && np.PerformanceDate != null ? UsefulMethods.NormalizeDate((DateTime)np.PerformanceDate) : "N/A");
                        listViewItem.SubItems.Add(np != null ? np.PerformanceSource.ToString() : "N/A");
                        listViewItem.SubItems.Add(np != null ? np.PerformanceGroupNum + "/" + np.PerformanceNum : "N/A");
                        listViewItem.SubItems.Add(np != null ? np.PerformanceGroup.GetGroupName() : "N/A");
                        listViewItem.SubItems.Add(np != null ? np.Remains.ToString() : "N/A");
                    }
                    else
                    {
                        string lastCheckName =
                            _currentAircraft != null && _currentAircraft.MaintenanceProgramCheckNaming
                                    ? (!string.IsNullOrEmpty(check.LastPerformance.ComplianceCheckName)
                                           ? check.LastPerformance.ComplianceCheckName
                                           : check.Name)
                                    : check.Name;
                        listViewItem.SubItems.Add(UsefulMethods.NormalizeDate(check.LastPerformance.RecordDate));
                        listViewItem.SubItems.Add(check.LastPerformance.OnLifelength.ToString());
                        listViewItem.SubItems.Add(check.LastPerformance.NumGroup + "/" + check.LastPerformance.PerformanceNum);
                        listViewItem.SubItems.Add(lastCheckName);
                        listViewItem.SubItems.Add(np != null && np.PerformanceDate != null ? UsefulMethods.NormalizeDate((DateTime)np.PerformanceDate) : "N/A");
                        listViewItem.SubItems.Add(np != null ? np.PerformanceSource.ToString() : "N/A");
                        listViewItem.SubItems.Add(np != null ? np.PerformanceGroupNum + "/" + np.PerformanceNum : "N/A");
                        listViewItem.SubItems.Add(np != null ? np.PerformanceGroup.GetGroupName() : "N/A");
                        listViewItem.SubItems.Add(np != null ? np.Remains.ToString() : "N/A");
                    }
                }
                if (np != null && np.Condition == ConditionState.Overdue)
                {
                    listViewItem.BackColor = Color.FromArgb(255, 170, 170);
                }
                else if (np != null && np.Condition == ConditionState.Notify)
                {
                    listViewItem.BackColor = Color.FromArgb(255, 255, 170);
                }
                else if (np == null || np.Condition == ConditionState.NotEstimated)
                {
                    listViewItem.BackColor = Color.FromArgb(170, 170, 255);
                }
            }
            else
            {
                NextPerformance np = check.NextPerformances.FirstOrDefault();
                if (check.LastPerformance == null)
                {
                    listViewItem.SubItems.Add("N/A");
                    listViewItem.SubItems.Add("N/A");
                    listViewItem.SubItems.Add("N/A");
                    listViewItem.SubItems.Add("N/A");
                    listViewItem.SubItems.Add(np != null && np.PerformanceDate != null ? UsefulMethods.NormalizeDate((DateTime)np.PerformanceDate) : "N/A");
                    listViewItem.SubItems.Add(np != null ? np.PerformanceSource.ToString() : "N/A");
                    listViewItem.SubItems.Add("N/A");
                    listViewItem.SubItems.Add("N/A");
                    listViewItem.SubItems.Add(np != null ? np.Remains.ToString() : "N/A");
                }
                else
                {
                    listViewItem.SubItems.Add(UsefulMethods.NormalizeDate(check.LastPerformance.RecordDate));
                    listViewItem.SubItems.Add(check.LastPerformance.OnLifelength.ToString());
                    listViewItem.SubItems.Add(check.LastPerformance.NumGroup.ToString());
                    listViewItem.SubItems.Add("N/A");
                    listViewItem.SubItems.Add(np != null && np.PerformanceDate != null ? UsefulMethods.NormalizeDate((DateTime)np.PerformanceDate) : "N/A");
                    listViewItem.SubItems.Add(np != null ? np.PerformanceSource.ToString() : "N/A");
                    listViewItem.SubItems.Add("N/A");
                    listViewItem.SubItems.Add("N/A");
                    listViewItem.SubItems.Add(np != null ? np.Remains.ToString() : "N/A");
                }
                if (np != null && np.Condition == ConditionState.Overdue)
                {
                    listViewItem.BackColor = Color.FromArgb(255, 170, 170);
                }
                else if (np != null && np.Condition == ConditionState.Notify)
                {
                    listViewItem.BackColor = Color.FromArgb(255, 255, 170);
                }
                else if (np == null || np.Condition == ConditionState.NotEstimated)
                {
                    listViewItem.BackColor = Color.FromArgb(170, 170, 255);
                }
            }


            listViewItem.Group = GetGroup(check);
            return(listViewItem);
        }