public DirectiveRecordView(DirectiveRecord source)
 {
     if (source == null)
     {
         return;
     }
     Id                           = source.Id;
     NumGroup                     = source.NumGroup;
     RecordTypeID                 = source.RecordTypeID;
     ParentID                     = source.ParentID;
     ParentTypeId                 = source.ParentTypeId;
     Remarks                      = source.Remarks;
     RecordDate                   = source.RecordDate;
     WorkPackageID                = source.WorkPackageID;
     Dispatched                   = source.Dispatched;
     Completed                    = source.Completed;
     Reference                    = source.Reference;
     ODR                          = source.ODR;
     MaintenanceOrganization      = source.MaintenanceOrganization;
     MaintenanceDirectiveRecordId = source.MaintenanceDirectiveRecordId;
     MaintenanceCheckRecordId     = source.MaintenanceCheckRecordId;
     PerformanceNum               = source.PerformanceNum.HasValue ? source.PerformanceNum.Value : 0;
     IsControlPoint               = source.IsControlPoint;
     ComplianceCheckName          = source.ComplianceCheckName;
     OnLifelength                 = Lifelength.ConvertFromByteArray(source.OnLifelength);
     Unused                       = Lifelength.ConvertFromByteArray(source.Unused);
     CalculatedPerformanceSource  = Lifelength.ConvertFromByteArray(source.CalculatedPerformanceSource);
     Overused                     = Lifelength.ConvertFromByteArray(source.Overused);
 }
Example #2
0
        private void CreateAndSavePerformanceForBindedItems(ComponentDirective componentDirective, DirectiveRecord directiveRecord)
        {
            if (componentDirective.ParentComponent != null && componentDirective.ParentComponent.ParentAircraftId > 0)
            {
                var bindedItem = _bindedItemsCore.GetBindedItemsFor(componentDirective.ParentComponent.ParentAircraftId, componentDirective).SingleOrDefault();

                if (bindedItem is MaintenanceDirective)
                {
                    var mpd            = bindedItem as MaintenanceDirective;
                    var newPerformance = new DirectiveRecord(directiveRecord)
                    {
                        MaintenanceDirectiveRecordId = -1,
                        //TODO:(Evgenii Babak) Выяснить почему при создании записи берем наработку на начало дня, но в отчетах, для записей о выполнении пересчитываем наработку, и выводим наработку на конец дня
                        OnLifelength = _calculator.GetFlightLifelengthOnStartOfDay(mpd.ParentBaseComponent, directiveRecord.RecordDate),
                        Parent       = mpd,
                        ParentId     = mpd.ItemId
                    };

                    _newKeeper.Save(newPerformance, false);

                    directiveRecord.MaintenanceDirectiveRecordId = newPerformance.ItemId;
                    _newKeeper.Save(directiveRecord);
                }
            }
        }
Example #3
0
        public void SmartCoreFileTest_DirectiveRecord()
        {
            var enviroment = GetEnviroment();

            var directiveRecord = new DirectiveRecord
            {
                AttachedFile = new AttachedFile {
                    FileName = "AttachedFile.test"
                },
                Parent = new Document()
            };

            enviroment.NewKeeper.Save(directiveRecord, true);

            Assert.IsTrue(directiveRecord.ItemId > 0, "ItemId должен быть больше 0");

            var forCheck = enviroment.NewLoader.GetObject <DirectiveRecordDTO, DirectiveRecord>(new Filter("ItemId", directiveRecord.ItemId), true);

            enviroment.NewKeeper.Delete(directiveRecord);

            Assert.IsTrue(forCheck != null, "значение не должно быть null");
            Assert.AreEqual(forCheck.Files.Count, 1, "Кол-во файлов должно быть 1");
            Assert.IsTrue(forCheck.AttachedFile != null);
            Assert.AreEqual(forCheck.AttachedFile.FileName, "AttachedFile.test");
        }
Example #4
0
        public void Export()
        {
            var env                = GetEnviroment();
            var aircraftCore       = new AircraftsCore(env.Loader, env.NewKeeper, env.NewLoader);
            var itemRelationCore   = new ItemsRelationsDataAccess(env);
            var componentCore      = new ComponentCore(env, env.Loader, env.NewLoader, env.NewKeeper, aircraftCore, itemRelationCore);
            var mpdCore            = new MaintenanceCore(env, env.NewLoader, env.NewKeeper, itemRelationCore, aircraftCore);
            var aircraftFlightCore = new AircraftFlightCore(env, env.Loader, env.NewLoader, null, null, componentCore, null, aircraftCore);
            var calc               = new Calculator(env, componentCore, aircraftFlightCore, aircraftCore);

            aircraftCore.LoadAllAircrafts();
            var aircraft = aircraftCore.GetAircraftById(2316);
            var mpds     = mpdCore.GetMaintenanceDirectives(aircraft);

            int q  = 0;
            var ds = ExcelToDataTableUsingExcelDataReader(@"D:\MPD.xlsx");

            foreach (DataTable table in ds.Tables)
            {
                foreach (DataRow row in table.Rows)
                {
                    var mpd = mpds.FirstOrDefault(i => i.TaskNumberCheck == row[0].ToString());
                    if (mpd == null)
                    {
                        continue;
                    }

                    var record = new DirectiveRecord
                    {
                        Parent       = mpd,
                        ParentId     = mpd.ItemId,
                        OnLifelength = new Lifelength(),
                    };

                    if (int.TryParse(row[2].ToString(), out var hour))
                    {
                        record.OnLifelength.Hours = hour;
                    }
                    if (int.TryParse(row[3].ToString(), out var cycle))
                    {
                        record.OnLifelength.Cycles = cycle;
                    }
                    if (DateTime.TryParse(row[4].ToString(), out var date))
                    {
                        record.RecordDate = date;
                    }

                    var res = calc.GetFlightLifelengthOnStartOfDay(aircraft, date);

                    if ((hour > 0 || cycle > 0) && date != DateTime.MinValue)
                    {
                        record.OnLifelength.Days = res.Days;
                        //Trace.WriteLine(row[0].ToString());
                        env.NewKeeper.Save(record);
                    }
                }
            }
        }
Example #5
0
        ///<summary>
        ///</summary>
        ///<param name="currentDirective"></param>
        ///<param name="currentRecord"></param>
        public DirectiveComplianceDialog(IDirective currentDirective, DirectiveRecord currentRecord)
            : this()
        {
            _currentDirective       = currentDirective;
            _currentDirectiveRecord = currentRecord;

            _animatedThreadWorker.DoWork             += AnimatedThreadWorkerDoLoad;
            _animatedThreadWorker.RunWorkerCompleted += BackgroundWorkerRunWorkerLoadCompleted;
        }
Example #6
0
 /// <summary>
 /// Создает форму для добавления записи Compliance работе агрегата
 /// </summary>
 /// <param name="detail">Агрегат</param>
 public ComplianceForm(AbstractDetail detail)
 {
     currentDetail = detail;
     currentRecord = new DirectiveRecord();
     mode          = ScreenMode.Add;
     InitializeComponent();
     UpdateDetailDirectiveList();
     UpdateInformation();
 }
Example #7
0
 /// <summary>
 /// Создает форму для добавления записи Compliance директиве
 /// </summary>
 /// <param name="directive">Директива</param>
 public ComplianceForm(BaseDetailDirective directive)
 {
     currentDirective = directive;
     currentRecord    = new DirectiveRecord();
     mode             = ScreenMode.Add;
     InitializeComponent();
     UpdateWorkTypes();
     UpdateInformation();
 }
Example #8
0
        public Lifelength GetFlightLifelengthOnEndOfDay(DirectiveRecord record)
        {
            object parent = record.Parent;

            if (parent == null)
            {
                throw new Exception($"1537: Performance record {record.RecordType} ({record.ItemId}:{record.ParentId}) referst to null object");
            }

            //
            var date = record.RecordDate;

            // Обрабатываем объекты
            if (parent is ComponentDirective componentDirective)
            {
                // Запись принадлежит работе по агрегату
                // Агрегат / Базовый агрегат
                if (componentDirective.ParentComponent.IsBaseComponent)
                {
                    return(GetFlightLifelengthOnEndOfDay((BaseComponent)componentDirective.ParentComponent, date));
                }
                if (!componentDirective.ParentComponent.IsBaseComponent)
                {
                    return(GetFlightLifelengthOnEndOfDay(componentDirective.ParentComponent, date));
                }
                throw new Exception($"1543: Can not get parent object for component directive {componentDirective.ItemId}");
            }
            if (parent is Directive directive1)
            {
                var bd = directive1.ParentBaseComponent;
                if (bd == null)
                {
                    throw new Exception($"1550: Parent object for directive {directive1.ItemId} is set to null");
                }
                return(GetFlightLifelengthOnEndOfDay(bd, date));
            }
            if (parent is MaintenanceDirective directive)
            {
                var a = directive.ParentBaseComponent;
                if (a == null)
                {
                    throw new Exception($"1550: Parent object for directive {directive.ItemId} is set to null");
                }
                return(GetFlightLifelengthOnEndOfDay(a, date));
            }
            if (parent is Procedure p)
            {
                var op = p.ParentOperator;
                if (op == null)
                {
                    throw new Exception($"1550: Parent object for directive {p.ItemId} is set to null");
                }
                return(GetFlightLifelengthOnEndOfDay(op, date));
            }
            throw new Exception($"1545: Can not recognize parent object {parent.GetType()} for record {record.RecordType} ({record.ItemId}:{record.ParentId})");
        }
Example #9
0
        ///<summary>
        ///</summary>
        ///<param name="currentDirective"></param>
        ///<param name="nextPerformance"></param>
        public DirectiveComplianceDialog(IDirective currentDirective, NextPerformance nextPerformance)
            : this()
        {
            _currentDirective       = currentDirective;
            _currentDirectiveRecord = DirectiveRecord.CreateInstance(nextPerformance);
            _nextPerformance        = nextPerformance;

            _animatedThreadWorker.DoWork             += AnimatedThreadWorkerDoLoad;
            _animatedThreadWorker.RunWorkerCompleted += BackgroundWorkerRunWorkerLoadCompleted;
        }
Example #10
0
        private void AddListViewItem(AbstractRecord record, string[] subs, WorkPackage workPackage)
        {
            Color foreColor = Color.Black;

            if (record is ActualStateRecord)
            {
                foreColor = Color.FromArgb(0, 122, 122, 122);
            }

            ListViewItem newItem = new ListViewItem(subs)
            {
                Group     = listViewCompliance.Groups[1],
                Tag       = record,
                ForeColor = foreColor
            };

            if (record is AbstractPerformanceRecord)
            {
                AbstractPerformanceRecord apr = (AbstractPerformanceRecord)record;
                if (workPackage != null)
                {
                    //запись о выполнении блокируется найденым пакетом
                    apr.DirectivePackage = workPackage;
                    newItem.BackColor    = Color.FromArgb(Highlight.Grey.Color);
                    newItem.ToolTipText  =
                        "Perform of the task:" + apr.Parent +
                        "\nadded by Work Package:" +
                        "\n" + apr.DirectivePackage.Title +
                        "\nTo remove a performance of task, you need to exclude task from this work package," +
                        "\nor delete the work package ";
                }
                else if (apr is DirectiveRecord)
                {
                    DirectiveRecord dr = apr as DirectiveRecord;
                    if (dr.MaintenanceDirectiveRecordId > 0)
                    {
                        DirectiveRecord mdr = GlobalObjects.CasEnvironment.NewLoader.GetObjectById <DirectiveRecordDTO, DirectiveRecord>(dr.MaintenanceDirectiveRecordId);
                        if (mdr != null && mdr.ParentType == SmartCoreType.MaintenanceDirective)
                        {
                            MaintenanceDirective md = GlobalObjects.MaintenanceCore.GetMaintenanceDirective(mdr.ParentId);
                            if (md != null)
                            {
                                newItem.ToolTipText =
                                    "Perform of the task:" + dr.WorkType +
                                    "\nadded by MPD Item:" +
                                    "\n" + md.TaskNumberCheck;
                            }
                        }
                    }
                }
            }
            //listViewCompliance.Items.Insert(index, newItem);
            listViewCompliance.Items.Add(newItem);
        }
        private void ButtonDeleteClick(object sender, EventArgs e)
        {
            if (listViewCompliance.SelectedItems.Count == 0 ||
                !(listViewCompliance.SelectedItems[0].Tag is DirectiveRecord))
            {
                return;
            }

            DirectiveRecord record = (DirectiveRecord)listViewCompliance.SelectedItems[0].Tag;

            if (record.DirectivePackage != null)
            {
                MessageBox.Show("Perform of the task:" + listViewCompliance.SelectedItems[0].Text +
                                "\nadded by Work Package:" +
                                "\n" + record.DirectivePackage.Title +
                                "\nTo remove a performance of task, you need to exclude task from this work package," +
                                "\nor delete the work package ",
                                (string)new GlobalTermsProvider()["SystemName"],
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Warning,
                                MessageBoxDefaultButton.Button1);
                return;
            }
            if (record.MaintenanceCheck != null)
            {
                MessageBox.Show("Perform of the task:" + listViewCompliance.SelectedItems[0].Text +
                                "\nadded by Maintenance check:" +
                                "\n" + record.MaintenanceCheck.Name +
                                "\nTo remove a performance of task, you need to exclude perform of task from perform of maintenance check," +
                                "\nor delete the perform of maintenance check ",
                                (string)new GlobalTermsProvider()["SystemName"],
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Warning,
                                MessageBoxDefaultButton.Button1);
                return;
            }

            switch (MessageBox.Show(@"Delete this compliance " + record.RecordType + " ?", (string)new GlobalTermsProvider()["SystemName"],
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation,
                                    MessageBoxDefaultButton.Button2))
            {
            case DialogResult.Yes:
                GlobalObjects.PerformanceCore.Delete(record);
                InvokeComplianceAdded(null);
                break;

            case DialogResult.No:
                //arguments.Cancel = true;
                break;
            }
        }
        private void AddListViewItem(AbstractPerformanceRecord apr, WorkPackage workPackage)
        {
            DirectiveRecord directiveRecord = (DirectiveRecord)apr;

            string           workTypeString = "";
            StaticDictionary workType;

            if (directiveRecord.Parent is MaintenanceDirective)
            {
                MaintenanceDirective parentDirective = (MaintenanceDirective)directiveRecord.Parent;
                workType       = parentDirective.WorkType;
                workTypeString = parentDirective.WorkType.ToString();
            }
            else if (directiveRecord.Parent is ComponentDirective)
            {
                ComponentDirective parentDirective = (ComponentDirective)directiveRecord.Parent;
                workType       = parentDirective.DirectiveType;
                workTypeString = parentDirective.DirectiveType + " of " + parentDirective.ParentComponent.Description;
            }
            else
            {
                workType = MaintenanceDirectiveTaskType.Unknown;
            }
            string[] subs = new[]  {
                workTypeString,
                UsefulMethods.NormalizeDate(directiveRecord.RecordDate),
                directiveRecord.OnLifelength != null
                                           ? directiveRecord.OnLifelength.ToString()
                                           : "",
                directiveRecord.Remarks,
            };
            ListViewItem newItem = new ListViewItem(subs)
            {
                Group = listViewCompliance.Groups[1],
                Tag   = directiveRecord
            };

            if (workPackage != null)
            {
                //запись о выполнении блокируется найденым пакетом
                apr.DirectivePackage = workPackage;
                newItem.BackColor    = Color.FromArgb(Highlight.Grey.Color);
                newItem.ToolTipText  =
                    "Perform of the task:" + workType +
                    "\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);
        }
Example #13
0
        /// <summary>
        /// </summary>
        /// <param name="currentDirective"></param>
        /// <param name="nextPerformances"></param>
        /// <param name="averageUtilization"></param>
        /// <param name="nextPerformance"></param>
        public DirectiveComplianceDialog(IDirective currentDirective, List <NextPerformance> nextPerformances,
                                         AverageUtilization averageUtilization)
            : this()
        {
            _currentDirective       = currentDirective;
            _currentDirectiveRecord = DirectiveRecord.CreateInstance(nextPerformances.FirstOrDefault());
            _nextPerformance        = nextPerformances.FirstOrDefault();
            _nextPerformances       = nextPerformances;
            _averageUtilization     = averageUtilization;

            checkBox1.Visible = true;

            _animatedThreadWorker.DoWork             += AnimatedThreadWorkerDoLoad;
            _animatedThreadWorker.RunWorkerCompleted += BackgroundWorkerRunWorkerLoadCompleted;
        }
        private void AddListViewItem(AbstractPerformanceRecord apr, WorkPackage workPackage,
                                     MaintenanceCheckRecord mcr)
        {
            DirectiveRecord      directiveRecord = (DirectiveRecord)apr;
            MaintenanceDirective parentDirective = (MaintenanceDirective)directiveRecord.Parent;

            string[] subs = new[]  {
                parentDirective.WorkType.ToString(),
                     UsefulMethods.NormalizeDate(directiveRecord.RecordDate),
                directiveRecord.OnLifelength != null
                                                   ? directiveRecord.OnLifelength.ToString()
                                                   : "",
                "",
                "",
                directiveRecord.Remarks,
            };

            ListViewItem newItem = new ListViewItem(subs)
            {
                Group = listViewCompliance.Groups[1],
                Tag   = directiveRecord
            };

            if (workPackage != null)
            {
                //запись о выполнении блокируется найденым пакетом
                apr.DirectivePackage = workPackage;
                newItem.BackColor    = Color.FromArgb(Highlight.Grey.Color);
                newItem.ToolTipText  =
                    "Perform of the task:" + parentDirective.WorkType +
                    "\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 ";
            }
            else if (directiveRecord.MaintenanceCheckRecordId > 0 && mcr != null && mcr.ParentCheck != null)
            {
                MaintenanceCheck mc = mcr.ParentCheck;
                directiveRecord.MaintenanceCheck = mc;
                newItem.BackColor   = Color.FromArgb(Highlight.Grey.Color);
                newItem.ToolTipText =
                    "Perform of the task:" + parentDirective.WorkType +
                    "\nadded by Maintenance Check:" +
                    "\n" + mc.Name +
                    "\nTo remove a performance of task, you need to delete performance of maintenance check";
            }
            listViewCompliance.Items.Add(newItem);
        }
Example #15
0
        /// <summary>
        /// Сохранение измененных данных в редактируемом элементе
        /// </summary>
        public void SaveData()
        {
            generalDataAndPerformanceControl.SaveData();
            attributesAndParametersControl.SaveData();

            try
            {
                currentDirective.Save(true);
                if (currentDirective.DirectiveType == DirectiveTypeCollection.Instance.SBDirectiveType || currentDirective.DirectiveType == DirectiveTypeCollection.Instance.ADDirectiveType)
                {
                    if (generalDataAndPerformanceControl.Supersedes != "")
                    {
                        BaseDetailDirective directive = GetDirectiveByTitle(generalDataAndPerformanceControl.Supersedes);
                        if (directive != null)
                        {
                            if (currentDirective.Paragraph == "" && directive.Paragraph == "")
                            {
                                directive.SupersededBy = currentDirective.Title;
                                directive.Save();
                            }
                            DirectiveRecord record = new DirectiveRecord();
                            record.RecordType = RecordTypesCollection.Instance.DirectiveSupersedingRecordType;
                            directive.AddRecord(record);
                        }
                    }
                    if (generalDataAndPerformanceControl.SupersededBy != "")
                    {
                        BaseDetailDirective directive = GetDirectiveByTitle(generalDataAndPerformanceControl.SupersededBy);
                        if (directive != null)
                        {
                            if (currentDirective.Paragraph == "" && directive.Paragraph == "")
                            {
                                directive.Supersedes = currentDirective.Title;
                                directive.Save();
                            }
                            DirectiveRecord record = new DirectiveRecord();
                            record.RecordType = RecordTypesCollection.Instance.DirectiveSupersedingRecordType;
                            currentDirective.AddRecord(record);
                        }
                    }
                }
                ReloadDirective();
            }
            catch (Exception ex)
            {
                Program.Provider.Logger.Log("Error while saving data", ex);
            }
        }
Example #16
0
        public void DeleteDirectiveRecordTest()
        {
            var enviroment      = GetEnviroment();
            var performanceCore = new PerformanceCore(enviroment.NewKeeper, enviroment.Keeper, enviroment.Calculator, null);

            var mpd = new MaintenanceDirective
            {
                Remarks = "Test"
            };

            enviroment.NewKeeper.Save(mpd);

            var directiveRecordForMpdFirst = new DirectiveRecord
            {
                MaintenanceDirectiveRecordId = mpd.ItemId,
                Parent  = mpd,
                Remarks = "Test"
            };

            enviroment.NewKeeper.Save(directiveRecordForMpdFirst);

            var directiveRecordForMpdSecond = new DirectiveRecord
            {
                MaintenanceDirectiveRecordId = directiveRecordForMpdFirst.ItemId,
                Remarks = "Test"
            };

            enviroment.NewKeeper.Save(directiveRecordForMpdSecond);


            performanceCore.Delete(directiveRecordForMpdFirst);

            //Загрузка 1 и 2 DirectiveRecord
            var forCheckFirst  = enviroment.NewLoader.GetObject <DirectiveRecordDTO, DirectiveRecord>(new Filter("ItemId", directiveRecordForMpdFirst.ItemId), getDeleted: true);
            var forCheckSecond = enviroment.NewLoader.GetObject <DirectiveRecordDTO, DirectiveRecord>(new Filter("MaintenanceDirectiveRecordId", directiveRecordForMpdFirst.ItemId), getDeleted: true);

            //Проверка что оба DirectiveRecord - a помечены как удаленные
            Assert.IsTrue(forCheckFirst.IsDeleted);
            Assert.IsTrue(forCheckSecond.IsDeleted);

            //Удаление из БД
            enviroment.NewKeeper.Delete(mpd);
            enviroment.NewKeeper.Delete(directiveRecordForMpdFirst, false, false);
            enviroment.NewKeeper.Delete(directiveRecordForMpdSecond, false, false);
        }
Example #17
0
        /// <summary>
        /// Удаляет запись о выполнении директивы
        /// </summary>
        /// <param name="directiveRecord"></param>
        public void Delete(DirectiveRecord directiveRecord)
        {
            if (directiveRecord.Dispatched == new DateTime(0001, 01, 01))
            {
                directiveRecord.Dispatched = DateTimeExtend.GetCASMinDateTime();
            }

            directiveRecord.IsDeleted = true;
            _newKeeper.Save(directiveRecord);

            // нужно обнулить математический аппарат объекта, которому принадлежит запись о выполнении
            // а также удалить выполнение директивы из коллекции выполнений директивы
            IDirective parent = directiveRecord.Parent;

            if (parent == null)
            {
                throw new Exception("1040: Failed to specify directive record parent type");
            }

            ICommonFilter filter = null;

            if (parent is MaintenanceCheck)
            {
                filter = new CommonFilter <int>(DirectiveRecord.MaintenanceCheckRecordIdProperty, directiveRecord.ItemId);
            }
            else if (parent is MaintenanceDirective)
            {
                filter = new CommonFilter <int>(DirectiveRecord.MaintenanceDirectiveRecordIdProperty, directiveRecord.ItemId);
            }
            else if (parent is ComponentDirective)
            {
                if (directiveRecord.MaintenanceDirectiveRecordId > 0)
                {
                    filter = new CommonFilter <int>(DirectiveRecord.MaintenanceDirectiveRecordIdProperty, directiveRecord.ItemId);
                }
            }

            if (filter != null)
            {
                _keeper.MarkAsDeleted <DirectiveRecord>(new[] { filter });
            }


            parent.PerformanceRecords.Remove(directiveRecord);
        }
Example #18
0
 /// <summary>
 /// Создает форму для редактирования записи Compliance директивы
 /// </summary>
 /// <param name="directiveRecord">Запись Compliance</param>
 public ComplianceForm(DirectiveRecord directiveRecord)
 {
     mode          = ScreenMode.Edit;
     currentRecord = directiveRecord;
     if (directiveRecord.Parent is BaseDetailDirective)
     {
         currentDirective = (BaseDetailDirective)directiveRecord.Parent;
         InitializeComponent();
         UpdateWorkTypes();
     }
     else
     {
         currentDetail = (AbstractDetail)directiveRecord.Parent.Parent;
         InitializeComponent();
         UpdateDetailDirectiveList();
     }
     UpdateInformation();
 }
Example #19
0
        private void CreateAndSavePerformanceForBindedItems(MaintenanceDirective mpd, AbstractPerformanceRecord performance)
        {
            var bindedItems = _bindedItemsCore.GetBindedItemsFor(mpd.ParentBaseComponent.ParentAircraftId, mpd);

            foreach (var bindedItem in bindedItems)
            {
                if (bindedItem is ComponentDirective)
                {
                    var componentDirective = (ComponentDirective)bindedItem;
                    var newPerformance     = new DirectiveRecord(performance)
                    {
                        MaintenanceDirectiveRecordId = performance.ItemId,
                        Parent = componentDirective,
                        //TODO:(Evgenii Babak) Выяснить почему при создании записи берем наработку на начало дня, но в отчетах, для записей о выполнении пересчитываем наработку, и выводим наработку на конец дня
                        OnLifelength = _calculator.GetFlightLifelengthOnStartOfDay(componentDirective.ParentComponent, performance.RecordDate),
                        ParentId     = componentDirective.ItemId
                    };
                    _newKeeper.Save(newPerformance, false);
                }
            }
        }
Example #20
0
        private void AddDirectiveRecord(Component component, ComponentDirective componentDirective)
        {
            // Если у MPD Item есть записи о выполнении,
            //то их нужно внести в записи о выполнении новой задачи по компоненту
            if (_maintenanceDirective.LastPerformance != null)
            {
                //Получение записи об установке агрегата
                TransferRecord tr = component.TransferRecords.GetLast();
                //Необходимо ввести только те записи, что могли быть выполнены после установки агрегата
                var performanceRecords = _maintenanceDirective.PerformanceRecords.Where(dr => dr.RecordDate >= tr.TransferDate);

                foreach (DirectiveRecord performanceRecord in performanceRecords)
                {
                    var newPerformance = new DirectiveRecord(performanceRecord);
                    newPerformance.MaintenanceDirectiveRecordId = performanceRecord.ItemId;
                    newPerformance.OnLifelength =
                        GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthOnStartOfDay(component, newPerformance.RecordDate);

                    GlobalObjects.PerformanceCore.RegisterPerformance(componentDirective, newPerformance, registerPerformanceForBindedItems: false);
                }
            }
        }
Example #21
0
        /// <summary>
        /// Данные работы обновляются по введенным значениям
        /// </summary>
        private bool SaveData()
        {
            if (_nextPerformances != null)
            {
                foreach (var performance in _nextPerformances)
                {
                    var newRecord = DirectiveRecord.CreateInstance(performance);
                    newRecord.Parent         = performance.Parent;
                    newRecord.RecordDate     = dateTimePicker1.Value;
                    newRecord.Remarks        = textBox_Remarks.Text;
                    newRecord.OnLifelength   = lifelengthViewer_LastCompliance.Lifelength;
                    newRecord.PerformanceNum = performance.Group;
                    if (fileControl.GetChangeStatus())
                    {
                        fileControl.ApplyChanges();
                        newRecord.AttachedFile = fileControl.AttachedFile;
                    }
                    newRecord.Completed = true;

                    try
                    {
                        GlobalObjects.PerformanceCore.RegisterPerformance(newRecord.Parent, newRecord);


                        if (newRecord.Document?.ParentId <= 0)
                        {
                            newRecord.Document.ParentId = newRecord.ItemId;
                            GlobalObjects.CasEnvironment.NewKeeper.Save(newRecord.Document);
                        }

                        if (checkBox1.Checked && !checkClosed)
                        {
                            checkClosed = true;

                            var rec = performance.Parent as MaintenanceDirective;

                            var checkRecord = new MTOPCheckRecord
                            {
                                RecordDate = dateTimePicker1.Value,
                                CheckName  = performance.ParentCheck.Name,
                                GroupName  = performance.Group,
                                CalculatedPerformanceSource = lifelengthViewer_LastCompliance.Lifelength,
                                ParentId           = performance.ParentCheck.ItemId,
                                Remarks            = "Closed by Mtop Forecast",
                                AverageUtilization = _averageUtilization
                            };

                            GlobalObjects.CasEnvironment.NewKeeper.Save(checkRecord);
                        }
                    }
                    catch (Exception ex)
                    {
                        Program.Provider.Logger.Log("Error while saving performance for directive", ex);
                        return(false);
                    }
                }

                return(true);
            }
            else
            {
                _currentDirectiveRecord.RecordDate   = dateTimePicker1.Value;
                _currentDirectiveRecord.Remarks      = textBox_Remarks.Text;
                _currentDirectiveRecord.OnLifelength = lifelengthViewer_LastCompliance.Lifelength;

                if (fileControl.GetChangeStatus())
                {
                    fileControl.ApplyChanges();
                    _currentDirectiveRecord.AttachedFile = fileControl.AttachedFile;
                }
                _currentDirectiveRecord.Completed = true;

                try
                {
                    if (_currentDirectiveRecord.ItemId <= 0)
                    {
                        GlobalObjects.PerformanceCore.RegisterPerformance(_currentDirective, _currentDirectiveRecord);
                    }
                    else
                    {
                        GlobalObjects.CasEnvironment.Manipulator.Save(_currentDirectiveRecord);
                    }

                    //if(_needActualState)
                    //    GlobalObjects.ComponentCore.RegisterActualState(_currentDirective.LifeLengthParent,
                    //        dateTimePicker1.Value,
                    //        _currentDirectiveRecord.OnLifelength);

                    if (_currentDirectiveRecord.Document?.ParentId <= 0)
                    {
                        _currentDirectiveRecord.Document.ParentId = _currentDirectiveRecord.ItemId;
                        GlobalObjects.CasEnvironment.NewKeeper.Save(_currentDirectiveRecord.Document);
                    }
                }
                catch (Exception ex)
                {
                    Program.Provider.Logger.Log("Error while saving performance for directive", ex);
                    return(false);
                }

                return(true);
            }
        }
Example #22
0
        /// <summary>
        /// Добавляется элемент в таблицу данных
        /// </summary>
        /// <param name="reportedComponentобавлямая директива</param>
        /// <param name="destinationDataSet">Таблица, в которую добавляется элемент</param>
        private void AddDirectiveToDataset(Component reportedComponent, LandingGearStatusDataSet destinationDataSet)
        {
            Lifelength total = GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(reportedComponent);

            string domTtsnTcsn = SmartCore.Auxiliary.Convert.GetDateFormat(reportedComponent.ManufactureDate, "/");

            if (domTtsnTcsn != "")
            {
                domTtsnTcsn += "\n";
            }
            domTtsnTcsn += total.ToHoursMinutesAndCyclesStrings("FH", "FC");

            string position = reportedComponent.Position;
            string pos      = "";
            string dwgItem  = "";
            string pattern  = @"\d+";

            Regex r = new Regex(pattern);
            Match m = r.Match(position);

            if (m.Success)
            {
                pos     = position.Substring(0, m.Index);
                dwgItem = position.Substring(m.Index);
            }

            ComponentRecordType workType = ComponentRecordType.Unknown;

            ComponentDirective overhaul =
                reportedComponent.ComponentDirectives.FirstOrDefault(dd => dd.DirectiveType == ComponentRecordType.Overhaul);
            Lifelength interval = Lifelength.Null;
            Lifelength used     = Lifelength.Null;
            Lifelength remain   = Lifelength.Null;

            string lastPerformanceDateString = "";
            string lastPerformanceHours      = "";
            string lastPerformanceCycles     = "";

            if (overhaul != null)
            {
                if (overhaul.LastPerformance != null)
                {
                    DirectiveRecord lastPerformance = overhaul.LastPerformance;
                    interval = overhaul.Threshold.RepeatInterval;
                    lastPerformanceDateString =
                        SmartCore.Auxiliary.Convert.GetDateFormat(lastPerformance.RecordDate, "/");
                    lastPerformanceHours  = lastPerformance.OnLifelength.ToHoursMinutesFormat("FH");
                    lastPerformanceCycles = lastPerformance.OnLifelength.Cycles != null &&
                                            lastPerformance.OnLifelength.Cycles != 0
                                                ? lastPerformance.OnLifelength.Cycles.ToString()
                                                : "";
                    used = total - lastPerformance.OnLifelength;
                    used.Resemble(interval);
                }
                else
                {
                    interval = overhaul.Threshold.FirstPerformanceSinceNew;
                    used     = new Lifelength(total);
                    used.Resemble(interval);
                }
                workType = overhaul.DirectiveType;
                remain   = new Lifelength(overhaul.Remains);
            }

            destinationDataSet.ItemsTable.AddItemsTableRow(
                dwgItem,
                reportedComponent.ATAChapter.ToString(),
                reportedComponent.PartNumber,
                reportedComponent.SerialNumber,
                pos,
                reportedComponent.Description,
                reportedComponent.MaintenanceControlProcess.ToString(),
                SmartCore.Auxiliary.Convert.GetDateFormat(reportedComponent.TransferRecords.GetLast().TransferDate, "/"),
                reportedComponent.LifeLimit.ToHoursMinutesAndCyclesStrings("FH", "FC"),
                total.ToHoursMinutesAndCyclesStrings("FH", "FC"),
                reportedComponent.Remains.ToHoursMinutesAndCyclesStrings("FH", "FC"),
                workType.ToString(),
                interval.ToHoursMinutesAndCyclesStrings("FH", "FC"),
                lastPerformanceDateString,
                lastPerformanceHours,
                lastPerformanceCycles,
                used.Days != null ? used.Days.ToString() : "",
                used.Hours != null ? used.Hours.ToString() : "",
                used.Cycles != null ? used.Cycles.ToString(): "",
                used.ToHoursMinutesAndCyclesStrings("FH", "FC"),
                "", "", "",
                remain.ToHoursMinutesAndCyclesStrings("FH", "FC"),
                reportedComponent.Condition.ToString(),
                reportedComponent.ManHours,
                reportedComponent.Cost,
                reportedComponent.Kits.ToString(),
                "",
                reportedComponent.Remarks,
                reportedComponent.Status.ToString(),
                domTtsnTcsn);
        }
Example #23
0
        /// <summary>
        /// Данные работы обновляются по введенным значениям
        /// </summary>
        private void SaveData()
        {
            foreach (WorkPackageClosingDataGridViewRow row in dataGridViewItems.Rows.OfType <WorkPackageClosingDataGridViewRow>())
            {
                if ((bool)row.Cells[ColumnClosed.Index].Value == false)
                {
                    continue;
                }
                try
                {
                    DateTime performDate = (DateTime)row.Cells[ColumnDate.Index].Value;
                    if (row.ClosingItem is Procedure)
                    {
                        Procedure       dir             = (Procedure)row.ClosingItem;
                        DirectiveRecord directiveRecord = (DirectiveRecord)row.Record;

                        if (directiveRecord.ItemId <= 0)
                        {
                            directiveRecord.Completed    = true;
                            directiveRecord.RecordType   = DirectiveRecordType.Perfromed;
                            directiveRecord.RecordTypeId = DirectiveRecordType.Perfromed.ItemId;
                            directiveRecord.Remarks      = "Audit " + _currentAudit.Title + " Close " + dir.ProcedureType.CommonName + " Procedure";
                        }
                        directiveRecord.RecordDate = performDate;
                        Lifelength performanceSource;
                        directiveRecord.OnLifelength = Lifelength.TryParse((string)row.Cells[ColumnHours.Index].Value,
                                                                           (string)row.Cells[ColumnCycles.Index].Value,
                                                                           (string)row.Cells[ColumnDays.Index].Value,
                                                                           out performanceSource) ? performanceSource : Lifelength.Zero;

                        GlobalObjects.PerformanceCore.RegisterPerformance(dir, directiveRecord, _currentAudit);
                    }
                }
                catch (Exception ex)
                {
                    Program.Provider.Logger.Log("Error while saving performance for directive", ex);
                }
            }
            //_closingItems.All(item => item.SaveData());

            IEnumerable <MaintenanceCheck> closedChecks =
                dataGridViewItems.Rows.OfType <WorkPackageClosingDataGridViewRow>()
                .Where(ci => ci.ClosingItem is MaintenanceCheck)
                .Select(ci => ci.ClosingItem as MaintenanceCheck);

            foreach (MaintenanceCheck mc in closedChecks)
            {
                MaintenanceCheckRecord mcRecord =
                    mc.PerformanceRecords.FirstOrDefault(pr => pr.DirectivePackageId == _currentAudit.ItemId);
                if (mcRecord == null)
                {
                    continue;
                }
                IEnumerable <DirectiveRecord> bindedMpdsRecords =
                    dataGridViewItems.Rows.OfType <WorkPackageClosingDataGridViewRow>()
                    .Where(ci => ci.ClosingItem is MaintenanceDirective)
                    .Select(ci => ci.ClosingItem as MaintenanceDirective)
                    .Where(mpd => mpd.MaintenanceCheck != null &&
                           mpd.MaintenanceCheck.ItemId == mc.ItemId &&
                           mpd.PerformanceRecords.FirstOrDefault(pr => pr.DirectivePackageId == _currentAudit.ItemId) != null)
                    .Select(mpd => mpd.PerformanceRecords.FirstOrDefault(pr => pr.DirectivePackageId == _currentAudit.ItemId));
                foreach (DirectiveRecord mpdsRecord in bindedMpdsRecords)
                {
                    mpdsRecord.MaintenanceCheckRecordId = mcRecord.ItemId;
                    GlobalObjects.NewKeeper.Save(mpdsRecord, false);
                }
            }
        }
Example #24
0
        protected override void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            backgroundWorker.ReportProgress(50);

            Invoke(new Action(() => listViewCompliance.Items.Clear()));

            if (_currentDirective == null)
            {
                e.Cancel = true;
                return;
            }

            List <AbstractRecord>  lastRecords      = new List <AbstractRecord>();
            List <NextPerformance> nextPerformances = new List <NextPerformance>();

            //прогнозируемый ресурс
            //если известна родительская деталь данной директивы,
            //то ее текущая наработка и средняя утилизация
            //используются в качестве ресурсов прогноза
            //для расчета всех просроченных выполнений
            ForecastData forecastData   = null;
            Aircraft     parentAircraft = null;

            if (_currentDirective.ParentBaseComponent != null)
            {
                //если известна родительская деталь данной директивы,
                //то ее текущая наработка и средняя утилизация
                //используются в качестве ресурсов прогноза
                //для расчета всех просроченных выполнений
                forecastData = new ForecastData(DateTime.Now,
                                                _currentDirective.ParentBaseComponent.AverageUtilization,
                                                GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_currentDirective.ParentBaseComponent));
                parentAircraft = GlobalObjects.AircraftsCore.GetAircraftById(_currentDirective.ParentBaseComponent.ParentAircraftId);//TODO:(Evgenii Babak) пересмотреть использование ParentAircrafId здесь
            }
            //расчет след. выполнений директивы.
            //если известен ресурс прогноза, то будут расчитаны все просрочнные выполнения
            //если неизвестне, то только первое
            //GlobalObjects.PerformanceCalculator.GetNextPerformance(_currentDirective, forecastData);
            nextPerformances.AddRange(_currentDirective.NextPerformances);
            lastRecords.AddRange(_currentDirective.PerformanceRecords.ToArray());

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

            if (backgroundWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Opened));

            if (backgroundWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Published));

            CommonCollection <WorkPackage> allWorkPackagesIncludedTask     = new CommonCollection <WorkPackage>();
            CommonCollection <WorkPackage> openPubWorkPackagesIncludedTask = new CommonCollection <WorkPackage>();
            CommonCollection <WorkPackage> closedWorkPackages = new CommonCollection <WorkPackage>();

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

            allWorkPackagesIncludedTask.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft,
                                                                                                   WorkPackageStatus.All,
                                                                                                   new IDirective[] { _currentDirective }));


            #region Добавление в список просроченных выполнений
            //и сравнение их с открытыми и опубликованными рабочими пакетами
            openPubWorkPackagesIncludedTask.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Opened ||
                                                                                       wp.Status == WorkPackageStatus.Published));
            //сбор всех записей рабочих пакетов для удобства фильтрации
            List <WorkPackageRecord> openPubWpRecords = openPubWorkPackagesIncludedTask.SelectMany(wp => wp.WorkPakageRecords).ToList();
            //LINQ запрос для сортировки записей по дате
            List <NextPerformance> sortNextRecords = (from record in nextPerformances
                                                      orderby GetDate(record) descending
                                                      select record).ToList();
            for (int i = 0; i < sortNextRecords.Count; i++)
            {
                if (backgroundWorker.CancellationPending)
                {
                    allWorkPackagesIncludedTask.Clear();
                    openPubWorkPackagesIncludedTask.Clear();
                    closedWorkPackages.Clear();

                    e.Cancel = true;
                    return;
                }

                //поиск записи в рабочих пакетах по данному чеку
                //чей номер группы выполнения (по записи) совпадает с расчитанным
                Directive directive = (Directive)sortNextRecords[i].Parent;
                //номер выполнения
                int parentCountPerf;
                if (directive.LastPerformance != null)
                {
                    parentCountPerf = directive.LastPerformance.PerformanceNum <= 0
                        ? 1
                        : directive.LastPerformance.PerformanceNum;
                }
                else
                {
                    parentCountPerf = 0;
                }
                parentCountPerf += directive.NextPerformances.IndexOf(sortNextRecords[i]);
                parentCountPerf += 1;

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

            #region Добавление в список записей о произведенных выполнениях
            //и сравнение их с закрытыми рабочими пакетами
            closedWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Closed));

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

            foreach (AbstractRecord t in sortLastRecords)
            {
                if (backgroundWorker.CancellationPending)
                {
                    allWorkPackagesIncludedTask.Clear();
                    openPubWorkPackagesIncludedTask.Clear();
                    closedWorkPackages.Clear();

                    e.Cancel = true;
                    return;
                }

                DirectiveRecord directiveRecord = (DirectiveRecord)t;
                WorkPackage     workPackage     =
                    closedWorkPackages.Where(wp => wp.ItemId == directiveRecord.DirectivePackageId).FirstOrDefault();
                Invoke(new Action <AbstractPerformanceRecord, WorkPackage>(AddListViewItem),
                       new object[] { t, workPackage });
            }
            #endregion

            allWorkPackagesIncludedTask.Clear();
            openPubWorkPackagesIncludedTask.Clear();
            closedWorkPackages.Clear();

            backgroundWorker.ReportProgress(100);
        }
        protected override void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            //TODO:(Evgenii Babak) много повторяющегося кода, требуется оптимизация
            backgroundWorker.ReportProgress(50);

            Invoke(new Action(() => listViewCompliance.Items.Clear()));

            if (_currentDirective == null)
            {
                e.Cancel = true;
                return;
            }

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

            if (_openPubWorkPackages == null)
            {
                _openPubWorkPackages = new CommonCollection <WorkPackage>();
            }
            _openPubWorkPackages.Clear();

            var parentAircraft = GlobalObjects.AircraftsCore.GetAircraftById(_currentDirective.ParentBaseComponent.ParentAircraftId);    //TODO:(Evgenii Babak) пересмотреть использование ParentAircrafId здесь

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

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

            if (_currentDirective.IsAffect().GetValueOrDefault(true))
            {
                //Поиск и заполнение просроченных директив и записей о перемещении
                //Объекты для в которые будет извлекаться информация
                //из записеи о перемещении

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

                //расчет след. выполнений директивы.
                //если известен ресурс прогноза, то будут расчитаны все просрочнные выполнения
                //если неизвестне, то только первое
                //GlobalObjects.PerformanceCalculator.GetNextPerformance(_currentDirective, forecastData);
                nextPerformances.AddRange(_currentDirective.NextPerformances);
                lastRecords.AddRange(_currentDirective.PerformanceRecords.ToArray());
                ////////////////////////////////////////////
                //загрузка рабочих пакетов для определения
                //перекрытых ими выполнений задач
                _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackages(parentAircraft, WorkPackageStatus.Opened, true));
                _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackages(parentAircraft, WorkPackageStatus.Published, true));

                allWorkPackagesIncludedTask.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft,
                                                                                                       WorkPackageStatus.All,
                                                                                                       new IDirective[] { _currentDirective }));


                #region Добавление в список просроченных выполнений
                //и сравнение их с открытыми и опубликованными рабочими пакетами
                openPubWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Opened ||
                                                                               wp.Status == WorkPackageStatus.Published));
                //сбор всех записей рабочих пакетов для удобства фильтрации
                List <WorkPackageRecord> openPubWpRecords = openPubWorkPackages.SelectMany(wp => wp.WorkPakageRecords).ToList();
                //LINQ запрос для сортировки записей по дате
                List <NextPerformance> sortNextRecords = (from record in nextPerformances
                                                          orderby GetDate(record) descending
                                                          select record).ToList();

                for (int i = 0; i < sortNextRecords.Count; i++)
                {
                    if (backgroundWorker.CancellationPending)
                    {
                        allWorkPackagesIncludedTask.Clear();
                        openPubWorkPackages.Clear();
                        closedWorkPackages.Clear();

                        e.Cancel = true;
                        return;
                    }

                    //поиск записи в рабочих пакетах по данному чеку
                    //чей номер группы выполнения (по записи) совпадает с расчитанным
                    MaintenanceDirective directive = (MaintenanceDirective)sortNextRecords[i].Parent;
                    //номер выполнения
                    int parentCountPerf;
                    if (directive.LastPerformance != null)
                    {
                        parentCountPerf = directive.LastPerformance.PerformanceNum <= 0
                            ? 1
                            : directive.LastPerformance.PerformanceNum;
                    }
                    else
                    {
                        parentCountPerf = 0;
                    }
                    parentCountPerf += directive.NextPerformances.IndexOf(sortNextRecords[i]);
                    parentCountPerf += 1;

                    WorkPackageRecord wpr =
                        openPubWpRecords.FirstOrDefault(r => r.PerformanceNumFromStart == parentCountPerf &&
                                                        r.WorkPackageItemType == directive.SmartCoreObjectType.ItemId &&
                                                        r.DirectiveId == directive.ItemId);
                    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].Condition != ConditionState.Overdue)
                            {
                                break;
                            }
                            if (sortNextRecords[j].Parent == directive)
                            {
                                sortNextRecords[j].BlockedByPackage = wp;
                                Invoke(new Action <int, Color>(SetItemColor), new object[] { j, Color.FromArgb(Highlight.GrayLight.Color) });
                            }
                        }
                    }
                    Invoke(new Action <NextPerformance>(AddListViewItem), sortNextRecords[i]);
                }
                #endregion

                #region Добавление в список записей о произведенных выполнениях
                //и сравнение их с закрытыми рабочими пакетами
                closedWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Closed));

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

                for (int i = 0; i < sortLastRecords.Count(); i++)
                {
                    if (backgroundWorker.CancellationPending)
                    {
                        allWorkPackagesIncludedTask.Clear();
                        openPubWorkPackages.Clear();
                        closedWorkPackages.Clear();

                        e.Cancel = true;
                        return;
                    }

                    DirectiveRecord directiveRecord = (DirectiveRecord)sortLastRecords[i];
                    WorkPackage     workPackage     =
                        closedWorkPackages.Where(wp => wp.ItemId == directiveRecord.DirectivePackageId).FirstOrDefault();
                    if (workPackage != null)
                    {
                        Invoke(new Action <AbstractPerformanceRecord, WorkPackage, MaintenanceCheckRecord>(AddListViewItem),
                               new object[] { sortLastRecords[i], workPackage, null });
                    }
                    else if (directiveRecord.MaintenanceCheckRecordId > 0)
                    {
                        var mcr = GlobalObjects.CasEnvironment.NewLoader.GetObject <DirectiveRecordDTO, MaintenanceCheckRecord>(new Filter("ItemId", directiveRecord.MaintenanceCheckRecordId));

                        if (mcr != null)
                        {
                            mcr.ParentCheck = GlobalObjects.CasEnvironment.NewLoader.GetObjectById <MaintenanceCheckDTO, MaintenanceCheck>(mcr.ParentId);
                        }

                        Invoke(new Action <AbstractPerformanceRecord, WorkPackage, MaintenanceCheckRecord>(AddListViewItem),
                               new object[] { sortLastRecords[i], workPackage, mcr });
                    }
                    else
                    {
                        Invoke(new Action <AbstractPerformanceRecord, WorkPackage>(AddListViewItem),
                               new object[] { sortLastRecords[i], workPackage });
                    }
                }
                #endregion
            }
            else
            {
                //Поиск и заполнение просроченных директив и записей о перемещении
                //Объекты для в которые будет извлекаться информация
                //из записеи о перемещении

                //прогнозируемый ресурс
                foreach (var directive in _bindedItems)
                {
                    if (directive is ComponentDirective)
                    {
                        var componentDirective = (ComponentDirective)directive;
                        var detail             = componentDirective.ParentComponent ?? _currentDirective.ParentBaseComponent;
                        //прогнозируемый ресурс
                        //если известна родительская деталь данной директивы,
                        //то ее текущая наработка и средняя утилизация
                        //используются в качестве ресурсов прогноза
                        //для расчета всех просроченных выполнений
                        var forecastData = new ForecastData(DateTime.Now,
                                                            GlobalObjects.AverageUtilizationCore.GetAverageUtillization(detail),
                                                            GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(detail));
                        //расчет след. выполнений директивы.
                        //если известен ресурс прогноза, то будут расчитаны все просрочнные выполнения
                        //если неизвестне, то только первое
                        GlobalObjects.PerformanceCalculator.GetNextPerformance(componentDirective, forecastData);
                        nextPerformances.AddRange(componentDirective.NextPerformances);
                        lastRecords.AddRange(componentDirective.PerformanceRecords.ToArray());
                    }
                }
                var directiveRecords = _bindedItems.SelectMany(dd => dd.PerformanceRecords.Cast <DirectiveRecord>());
                lastRecords.AddRange(_currentDirective.PerformanceRecords
                                     .Where(performanceRecord => directiveRecords.Count(d => d.MaintenanceDirectiveRecordId == performanceRecord.ItemId) == 0)
                                     .Cast <AbstractPerformanceRecord>());
                ////////////////////////////////////////////
                //загрузка рабочих пакетов для определения
                _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Opened));
                _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Published));

                allWorkPackagesIncludedTask.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft,
                                                                                                       WorkPackageStatus.All,
                                                                                                       _bindedItems));

                #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 GetDate(record) descending
                                                          select record).ToList();

                for (int i = 0; i < sortNextRecords.Count; i++)
                {
                    if (backgroundWorker.CancellationPending)
                    {
                        allWorkPackagesIncludedTask.Clear();
                        openPubWorkPackages.Clear();
                        closedWorkPackages.Clear();

                        e.Cancel = true;
                        return;
                    }

                    //поиск записи в рабочих пакетах по данному чеку
                    //чей номер группы выполнения (по записи) совпадает с расчитанным
                    ComponentDirective directive = (ComponentDirective)sortNextRecords[i].Parent;
                    //номер выполнения
                    int parentCountPerf;
                    if (directive.LastPerformance != null)
                    {
                        parentCountPerf = directive.LastPerformance.PerformanceNum <= 0
                            ? 1
                            : directive.LastPerformance.PerformanceNum;
                    }
                    else
                    {
                        parentCountPerf = 0;
                    }
                    parentCountPerf += directive.NextPerformances.IndexOf(sortNextRecords[i]);
                    parentCountPerf += 1;

                    WorkPackageRecord wpr =
                        openPubWpRecords.Where(r => r.PerformanceNumFromStart == parentCountPerf &&
                                               r.WorkPackageItemType == directive.SmartCoreObjectType.ItemId &&
                                               r.DirectiveId == directive.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].Condition != ConditionState.Overdue)
                            {
                                break;
                            }
                            if (sortNextRecords[j].Parent == directive)
                            {
                                sortNextRecords[j].BlockedByPackage = wp;
                                Invoke(new Action <int, Color>(SetItemColor), new object[] { j, Color.FromArgb(Highlight.GrayLight.Color) });
                            }
                        }
                    }
                    Invoke(new Action <NextPerformance>(AddListViewItem), sortNextRecords[i]);
                }
                #endregion

                #region Добавление в список записей о произведенных выполнениях
                //и сравнение их с закрытыми рабочими пакетами
                closedWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Closed));

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

                for (int i = 0; i < sortLastRecords.Count; i++)
                {
                    if (backgroundWorker.CancellationPending)
                    {
                        allWorkPackagesIncludedTask.Clear();
                        openPubWorkPackages.Clear();
                        closedWorkPackages.Clear();

                        e.Cancel = true;
                        return;
                    }
                    WorkPackage workPackage =
                        closedWorkPackages.FirstOrDefault(wp => wp.ItemId == sortLastRecords[i].DirectivePackageId);
                    Invoke(new Action <AbstractPerformanceRecord, WorkPackage>(AddListViewItem),
                           new object[] { sortLastRecords[i], workPackage });
                }
                #endregion
            }

            allWorkPackagesIncludedTask.Clear();
            openPubWorkPackages.Clear();
            closedWorkPackages.Clear();

            backgroundWorker.ReportProgress(100);
        }
Example #26
0
        private void ButtonDeleteClick(object sender, EventArgs e)
        {
            if (listViewCompliance.SelectedItems.Count == 0)
            {
                return;
            }

            if (listViewCompliance.SelectedItems[0].Tag is DirectiveRecord)
            {
                DirectiveRecord record = (DirectiveRecord)listViewCompliance.SelectedItems[0].Tag;
                if (record.DirectivePackage != null)
                {
                    MessageBox.Show("Perform of the task:" + listViewCompliance.SelectedItems[0].Text +
                                    "\nadded by Work Package:" +
                                    "\n" + record.DirectivePackage.Title +
                                    "\nTo remove a performance of task, you need to exclude task from this work package," +
                                    "\nor delete the work package ",
                                    (string)new GlobalTermsProvider()["SystemName"],
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Warning,
                                    MessageBoxDefaultButton.Button1);
                    return;
                }

                switch (MessageBox.Show(@"Delete this compliance " + record.RecordType + " ?", (string)new GlobalTermsProvider()["SystemName"],
                                        MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation,
                                        MessageBoxDefaultButton.Button2))
                {
                case DialogResult.Yes:
                    GlobalObjects.PerformanceCore.Delete(record);
                    InvokeComplianceAdded(null);
                    break;

                case DialogResult.No:
                    break;
                }
            }
            else if (listViewCompliance.SelectedItems[0].Tag is ActualStateRecord)
            {
                ActualStateRecord record = (ActualStateRecord)listViewCompliance.SelectedItems[0].Tag;

                switch (MessageBox.Show(@"Delete this actual state record ?", (string)new GlobalTermsProvider()["SystemName"],
                                        MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation,
                                        MessageBoxDefaultButton.Button2))
                {
                case DialogResult.Yes:
                    GlobalObjects.ComponentCore.DeleteActualStateRecord(record);
                    InvokeComplianceAdded(null);
                    break;

                case DialogResult.No:
                    break;
                }
            }
            else if (listViewCompliance.SelectedItems[0].Tag is ComponentLLPCategoryChangeRecord)
            {
                ComponentLLPCategoryChangeRecord record = (ComponentLLPCategoryChangeRecord)listViewCompliance.SelectedItems[0].Tag;

                if (record.ParentComponent == null)
                {
                    record.ParentComponent = _currentComponent;
                }

                switch (MessageBox.Show(@"Delete this LLP category change record ?", (string)new GlobalTermsProvider()["SystemName"],
                                        MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation,
                                        MessageBoxDefaultButton.Button2))
                {
                case DialogResult.Yes:
                    GlobalObjects.ComponentCore.DeleteLLPCategoryChangeRecord(record);
                    InvokeComplianceAdded(null);
                    break;

                case DialogResult.No:
                    break;
                }
            }
        }
Example #27
0
        /// <summary>
        /// Добавить выполнение работы к задаче
        /// </summary>
        /// <param name="performance"></param>
        /// <param name="saveAttachedFile"></param>
        public void Save(AbstractPerformanceRecord performance, bool saveAttachedFile = true)
        {
            if (performance == null)
            {
                return;
            }

            var type = AuditOperation.Created;

            if (performance.ItemId > 0)
            {
                type = AuditOperation.Changed;
            }

            performance.CorrectorId = _casEnvironment.IdentityUser.ItemId;

            _casEnvironment.Keeper.Save(performance, saveAttachedFile);
            _auditRepository.WriteAsync(performance, type, _casEnvironment.IdentityUser);

            if (performance.Parent.PerformanceRecords.GetItemById(performance.ItemId) == null)
            {
                performance.Parent.PerformanceRecords.Add(performance);
            }

            if (performance.Parent is MaintenanceDirective)
            {
                DirectiveRecord ddr = _casEnvironment.NewLoader.GetObjectListAll <DirectiveRecordDTO, DirectiveRecord>(new Filter("MaintenanceDirectiveRecordId", performance.ItemId)).FirstOrDefault();

                if (ddr != null)
                {
                    ComponentDirective dd = _casEnvironment.NewLoader.GetObject <ComponentDirectiveDTO, ComponentDirective>(new Filter("ItemId", ddr.ParentId));
                    if (dd != null)
                    {
                        BaseComponent bd = _componentCore.GetBaseComponentById(dd.ComponentId);
                        if (bd != null)
                        {
                            ddr.OnLifelength =
                                _casEnvironment.Calculator.GetFlightLifelengthOnStartOfDay(bd, performance.RecordDate);
                        }
                        else
                        {
                            General.Accessory.Component d = _componentCore.GetComponentById(dd.ComponentId);
                            if (d != null)
                            {
                                ddr.OnLifelength = _casEnvironment.Calculator.GetFlightLifelengthOnStartOfDay(d, performance.RecordDate);
                            }
                        }
                    }
                    ddr.RecordDate = performance.RecordDate;
                    _casEnvironment.NewKeeper.Save(ddr, saveAttachedFile);
                }
            }
            else if (performance.Parent is ComponentDirective)
            {
                DirectiveRecord ddr = performance as DirectiveRecord;
                if (ddr != null)
                {
                    DirectiveRecord mpdRecord = _casEnvironment.NewLoader.GetObject <DirectiveRecordDTO, DirectiveRecord>(new Filter("ItemId", ddr.MaintenanceDirectiveRecordId));
                    if (mpdRecord != null)
                    {
                        MaintenanceDirective md = _maintenanceCore.GetMaintenanceDirective(mpdRecord.ParentId);
                        if (md != null)
                        {
                            mpdRecord.OnLifelength = _casEnvironment.Calculator.GetFlightLifelengthOnStartOfDay(md.ParentBaseComponent, ddr.RecordDate);
                        }
                        mpdRecord.RecordDate = ddr.RecordDate;
                        _casEnvironment.NewKeeper.Save(mpdRecord, saveAttachedFile);
                    }
                }
            }
        }
Example #28
0
        /// <summary>
        /// Обновляет значения полей
        /// </summary>
        public override void FillControls()
        {
            BeginUpdate();

            dateTimePicker1.ValueChanged -= DateTimePicker1ValueChanged;

            if (MaintenanceDirective != null)
            {
                textBoxMpdItem.Text = MaintenanceDirective.TaskNumberCheck;

                if (_maintenanceCheckRecord != null)
                {
                    _maintenanceDirectiveRecord =
                        MaintenanceDirective.PerformanceRecords
                        .FirstOrDefault(pr => pr.MaintenanceCheckRecordId == _maintenanceCheckRecord.ItemId);
                }

                checkBoxClose.Checked = _maintenanceDirectiveRecord != null;
                dateTimePicker1.Value = _maintenanceDirectiveRecord != null ? _maintenanceDirectiveRecord.RecordDate : DateTime.Today;

                #region Определение ограничений по ресурсу и дате выполнения
                if (_maintenanceDirectiveRecord != null && _maintenanceDirectiveRecord.ItemId > 0)
                {
                    //редактируется старая запись
                    int index = MaintenanceDirective.PerformanceRecords.IndexOf(_maintenanceDirectiveRecord);
                    if (index == 0)
                    {
                        //редактируется первая запись о выполнении
                        _prevPerfDate = null;
                        if (MaintenanceDirective.PerformanceRecords.Count > 1)
                        {
                            //было сделано много записей о выполнении
                            _nextPerfDate = MaintenanceDirective.PerformanceRecords[index + 1].RecordDate;
                        }
                        else if (MaintenanceDirective.NextPerformances.Count > 0)
                        {
                            //была сделана одна запись о выполнении и есть "след. выполнения"
                            _nextPerfDate = MaintenanceDirective.NextPerformances[0].PerformanceDate;
                        }
                        else
                        {
                            _nextPerfDate = null;
                        }
                    }
                    else if (index < MaintenanceDirective.PerformanceRecords.Count - 1)
                    {
                        //редактируется запись из середины списка записей о выполнении
                        _prevPerfDate = MaintenanceDirective.PerformanceRecords[index - 1].RecordDate;
                        _nextPerfDate = MaintenanceDirective.PerformanceRecords[index + 1].RecordDate;
                    }
                    else //(index == _currentDirective.PerformanceRecords.Count - 1)
                    {
                        //редактируется запись из середины списка записей о выполнении
                        _prevPerfDate = MaintenanceDirective.PerformanceRecords[index - 1].RecordDate;
                        if (MaintenanceDirective.NextPerformances.Count > 0)
                        {
                            //запись о выполнении сделана последней и есть "след. выполнения"
                            _nextPerfDate = MaintenanceDirective.NextPerformances[0].PerformanceDate;
                        }
                        else
                        {
                            _nextPerfDate = null;
                        }
                    }
                }
                else
                {
                    //редактируется новая запись
                    //int index = MaintenanceDirective.NextPerformances.IndexOf(_nextPerformance);
                    //if (index == 0)
                    //{
                    //    //редактируется первое "след.выполнение"
                    //    if (MaintenanceDirective.LastPerformance != null)
                    //    {
                    //        //была сделана запись о выполнении
                    //        _prevPerfDate = MaintenanceDirective.LastPerformance.RecordDate;
                    //        _prevPerfLifelength =
                    //            GlobalObjects.CasEnvironment.Calculator.GetLifelength(MaintenanceDirective.LifeLengthParent,
                    //                                                                  _prevPerfDate.Value);
                    //    }
                    //    else
                    //    {
                    //        _prevPerfDate = null;
                    //        _prevPerfLifelength = null;
                    //    }
                    //    if (MaintenanceDirective.NextPerformances.Count > 1)
                    //    {
                    //        //"след. выполнений" больше одного
                    //        _nextPerfDate = MaintenanceDirective.NextPerformances[1].PerformanceDate;
                    //        _nextPerfLifelength = MaintenanceDirective.NextPerformances[1].PerformanceSource;
                    //    }
                    //    else
                    //    {
                    //        _nextPerfDate = null;
                    //        _nextPerfLifelength = null;
                    //    }
                    //}
                    //else if (index < MaintenanceDirective.NextPerformances.Count - 1)
                    //{
                    //    //редактируется запись из середины списка "след. выполнений"
                    //    _prevPerfDate = MaintenanceDirective.NextPerformances[index - 1].PerformanceDate;
                    //    _prevPerfLifelength = MaintenanceDirective.NextPerformances[index - 1].PerformanceSource;

                    //    _nextPerfDate = MaintenanceDirective.NextPerformances[index + 1].PerformanceDate;
                    //    _nextPerfLifelength = MaintenanceDirective.NextPerformances[index + 1].PerformanceSource;
                    //}
                    //else //(index == _currentDirective.NextPerformances.Count - 1)
                    //{
                    //    //редактируется запись из середины списка записей о выполнении
                    //    _prevPerfDate = MaintenanceDirective.NextPerformances[index - 1].PerformanceDate;
                    //    _prevPerfLifelength = MaintenanceDirective.NextPerformances[index - 1].PerformanceSource;
                    //    _nextPerfDate = null;
                    //    _nextPerfLifelength = null;
                    //}
                }
                #endregion
            }

            dateTimePicker1.ValueChanged += DateTimePicker1ValueChanged;

            EndUpdate();
        }
Example #29
0
        /*
         * Перегружаемые методы
         */

        #region public override void ApplyChanges()
        /// <summary>
        /// Применить к объекту сделанные изменения на контроле.
        /// Если не все данные удовлетворяют формату ввода (например при вводе чисел), свойства объекта не изменяются, возвращается false
        /// Вызов base.ApplyChanges() обязателен
        /// </summary>
        /// <returns></returns>
        public override void ApplyChanges()
        {
            if (MaintenanceDirective != null)
            {
                if (_maintenanceDirectiveRecord != null && checkBoxClose.Checked == false)
                {
                    _maintenanceDirectiveRecord.IsDeleted = true;
                }
                if (_maintenanceDirectiveRecord != null && checkBoxClose.Checked)
                {
                    _maintenanceDirectiveRecord.RecordDate = dateTimePicker1.Value;
                }
                if (!MaintenanceDirective.IsClosed && _maintenanceDirectiveRecord == null && checkBoxClose.Checked)
                {
                    DirectiveRecord apr = null;
                    if (MaintenanceDirective.PerformanceRecords.Count > 0)
                    {
                        //Поиск записи о выполнении задачи программы обслуживания
                        //которая могла бы подойти под создаваемую запись
                        //о выполнении чека программы обслуживания
                        double?days;
                        if (MaintenanceDirective.MaintenanceCheck != null &&
                            MaintenanceDirective.MaintenanceCheck.ParentAircraft != null)
                        {
                            var a                  = MaintenanceDirective.MaintenanceCheck.ParentAircraft;
                            var partInterval       = MaintenanceDirective.MaintenanceCheck.Interval * 0.2;
                            var aircraftFrame      = GlobalObjects.ComponentCore.GetBaseComponentById(a.AircraftFrameId);
                            var averageUtilization = GlobalObjects.AverageUtilizationCore.GetAverageUtillization(aircraftFrame);
                            days = AnalystHelper.GetApproximateDays(partInterval, averageUtilization);
                        }
                        else
                        {
                            var partInterval = MaintenanceDirective.RepeatInterval * 0.2;
                            days = AnalystHelper.GetApproximateDays(partInterval, MaintenanceDirective.ParentBaseComponent.AverageUtilization);
                        }

                        IEnumerable <DirectiveRecord> aprs = null;
                        if (days != null && days > 0)
                        {
                            double daysValue = Convert.ToDouble(days);
                            //Производится поиск записей о выполнении дата выполнения которых лежит
                            //в заданном диапозоне
                            aprs = MaintenanceDirective.PerformanceRecords.Where(
                                pr => pr.RecordDate >= dateTimePicker1.Value.AddDays(-daysValue) &&
                                pr.RecordDate <= dateTimePicker1.Value.AddDays(daysValue));
                        }
                        if (aprs != null && aprs.Count() > 0)
                        {
                            if (aprs.Count() == 1)
                            {
                                apr = aprs.First();
                            }
                            else
                            {
                                DirectiveRecord min     = null;
                                double          minDays = int.MaxValue;
                                foreach (DirectiveRecord record in aprs)
                                {
                                    if (min == null)
                                    {
                                        min     = record;
                                        minDays = Math.Abs((min.RecordDate - dateTimePicker1.Value).TotalDays);
                                        continue;
                                    }
                                    double candidateMin = Math.Abs((record.RecordDate - dateTimePicker1.Value).TotalDays);
                                    if (candidateMin < minDays)
                                    {
                                        min     = record;
                                        minDays = candidateMin;
                                    }
                                }
                                apr = min;
                            }
                        }
                    }

                    if (apr != null)
                    {
                        _maintenanceDirectiveRecord = apr;
                    }
                    else
                    {
                        NextPerformance performance =
                            MaintenanceDirective.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                                 p.PerformanceDate.Value.Date == dateTimePicker1.Value) ??
                            MaintenanceDirective.NextPerformances.LastOrDefault(p => p.PerformanceDate != null &&
                                                                                p.PerformanceDate < dateTimePicker1.Value) ??
                            MaintenanceDirective.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null &&
                                                                                 p.PerformanceDate > dateTimePicker1.Value);
                        _maintenanceDirectiveRecord = new DirectiveRecord
                        {
                            PerformanceNum = performance != null ? performance.PerformanceNum : 0,
                            Parent         = MaintenanceDirective,
                            ParentId       = MaintenanceDirective.ItemId,
                            RecordDate     = dateTimePicker1.Value
                        };
                    }
                }
            }

            base.ApplyChanges();
        }
Example #30
0
        /// <summary>
        /// Добавляется элемент в таблицу данных
        /// </summary>
        /// <param name="reportedDirective">Добавлямая директива</param>
        /// <param name="destinationDataSet">Таблица, в которую добавляется элемент</param>
        private void AddDirectiveToDataset(object reportedDirective, ComponentListDataSet destinationDataSet)
        {
            //if (!DefaultFilter.Acceptable(directive))
            //  return;
            Component          component;
            ComponentDirective directive;
            NextPerformance    nextDueAtAircraftUtilization = null;
            DirectiveRecord    lastPerformance = null;
            string             positionString = "";
            string             remarks = "", condition = "";
            string             workType = "", lastComplianceDate = "", nextComplianceDate = "", ampReference = "";
            double             mansHours = 0, cost = 0;
            DateTime           installationDate = DateTimeExtend.GetCASMinDateTime();
            string             kits = "", equipment = "", status = "";
            Lifelength         lifeLimit, componentCurrent = Lifelength.Null;
            Lifelength         repeat = Lifelength.Null, lastCompliance = Lifelength.Null;
            Lifelength         used = Lifelength.Null, nextPerformanceSource = Lifelength.Null, remain = Lifelength.Null;

            if (reportedDirective is ComponentDirective)
            {
                directive        = (ComponentDirective)reportedDirective;
                component        = directive.ParentComponent;
                positionString   = component.TransferRecords.GetLast().Position;
                installationDate = component.TransferRecords.GetLast().TransferDate;

                componentCurrent = directive.ParentComponent.IsBaseComponent
                    ? GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength((BaseComponent)component)
                    : GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(component);

                remarks   = directive.Remarks;
                workType  = directive.DirectiveType.ToString();
                repeat    = directive.Threshold.RepeatInterval;
                lifeLimit = component.LifeLimit;

                //nextCompliance = GlobalObjects.CasEnvironment.Calculator.GetNextPerformance(directive);
                GlobalObjects.PerformanceCalculator.GetNextPerformance(directive);
                nextPerformanceSource = directive.NextPerformanceSource;

                if (directive.MaintenanceDirective != null)
                {
                    ampReference = directive.MaintenanceDirective.TaskNumberCheck;
                }
                if (nextPerformanceSource != null && directive.Status != DirectiveStatus.Closed)
                {
                    nextComplianceDate = directive.NextPerformanceDate != null
                                     ? ((DateTime)directive.NextPerformanceDate).ToString(
                        new GlobalTermsProvider()["DateFormat"].ToString())
                                     : "";
                    remain.Add(nextPerformanceSource);
                    remain.Substract(componentCurrent);
                    used.Add(componentCurrent);

                    if (_reportedAircraft != null)
                    {
                        nextDueAtAircraftUtilization = new NextPerformance
                        {
                            PerformanceDate   = directive.NextPerformanceDate,
                            PerformanceSource = GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_reportedAircraft)
                        };

                        nextDueAtAircraftUtilization.PerformanceSource.Add(remain);
                    }
                }
                else
                {
                    nextPerformanceSource = Lifelength.Null;
                }


                if (directive.LastPerformance != null && directive.Status != DirectiveStatus.Closed)
                {
                    lastPerformance    = directive.LastPerformance;
                    lastComplianceDate =
                        directive.LastPerformance.RecordDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString());
                    lastCompliance = directive.LastPerformance.OnLifelength;

                    used.Substract(lastCompliance);
                    used.Resemble(directive.Threshold.RepeatInterval);
                    remain.Resemble(directive.Threshold.RepeatInterval);
                    if (nextDueAtAircraftUtilization != null)
                    {
                        nextDueAtAircraftUtilization.PerformanceSource.Resemble(directive.Threshold.RepeatInterval);
                    }
                }
                else
                {
                    used.Resemble(directive.Threshold.FirstPerformanceSinceNew);
                    remain.Resemble(directive.Threshold.FirstPerformanceSinceNew);
                    if (nextDueAtAircraftUtilization != null)
                    {
                        nextDueAtAircraftUtilization.PerformanceSource.Resemble(directive.Threshold.FirstPerformanceSinceNew);
                    }
                }

                int num = 1;
                foreach (AccessoryRequired kit in directive.Kits)
                {
                    kits += num + ": " + kit.PartNumber + "\n";
                    num++;
                }

                condition = directive.Condition.ToString();
            }
            //Если объект является деталью или базовой деталью с директивами
            //то надо возвратится, т.к. данные по детали/базовой детали будут
            //добавлены при добавлении их директив в набор данных
            //Если деталь.базовая деталь без директив, тогда в набор данных надо добавить и данные сразу
            else if (reportedDirective is Component)
            {
                component = (Component)reportedDirective;
                lifeLimit = component.LifeLimit;
                if (component.ComponentDirectives.Count != 0)
                {
                    return;
                }
            }
            else
            {
                throw new ArgumentException();
            }

            Lifelength lifeLimitUsed = Lifelength.Null;

            lifeLimitUsed.Add(componentCurrent);
            lifeLimitUsed.Resemble(lifeLimit);
            Lifelength lifeLimitRemain = Lifelength.Null;

            lifeLimitRemain.Add(lifeLimit);
            lifeLimitRemain.Substract(componentCurrent);
            lifeLimitRemain.Resemble(lifeLimit);

            //string status = "";
            //if (.Status == DirectiveStatus.Closed) status = "C";
            //if (directive.Status == DirectiveStatus.Open) status = "O";
            //if (directive.Status == DirectiveStatus.Repetative) status = "R";
            //if (directive.Status == DirectiveStatus.NotApplicable) status = "N/A";

            destinationDataSet.ItemsTable.AddItemsTableRow(component.ATAChapter.ShortName,
                                                           ampReference,
                                                           component.PartNumber,
                                                           component.SerialNumber,
                                                           positionString,
                                                           component.Description,
                                                           component.MaintenanceControlProcess.ToString(),
                                                           installationDate,
                                                           lifeLimit.Days != null ? lifeLimit.Days.ToString() : "",
                                                           lifeLimit.Hours != null ? lifeLimit.Hours.ToString() : "",
                                                           lifeLimit.Cycles != null ? lifeLimit.Cycles.ToString() : "",
                                                           lifeLimitUsed.Days != null
                                                               ? lifeLimitUsed.Days.ToString()
                                                               : "",
                                                           lifeLimitUsed.Hours != null
                                                               ? lifeLimitUsed.Hours.ToString()
                                                               : "",
                                                           lifeLimitUsed.Cycles != null
                                                               ? lifeLimitUsed.Cycles.ToString()
                                                               : "",
                                                           lifeLimitRemain.Days != null
                                                               ? lifeLimitRemain.Days.ToString()
                                                               : "",
                                                           lifeLimitRemain.Hours != null
                                                               ? lifeLimitRemain.Hours.ToString()
                                                               : "",
                                                           lifeLimitRemain.Cycles != null
                                                               ? lifeLimitRemain.Cycles.ToString()
                                                               : "",
                                                           workType,
                                                           repeat.Days != null
                                                               ? repeat.Days.ToString()
                                                               : "",
                                                           repeat.Hours != null
                                                               ? repeat.Hours.ToString()
                                                               : "",
                                                           repeat.Cycles != null
                                                               ? repeat.Cycles.ToString()
                                                               : "",
                                                           repeat.ToHoursMinutesAndCyclesStrings(" FH", " FC"),
                                                           lastComplianceDate,
                                                           lastCompliance.Hours != null
                                                               ? lastCompliance.Hours.ToString()
                                                               : "",
                                                           lastCompliance.Cycles != null
                                                               ? lastCompliance.Cycles.ToString()
                                                               : "",
                                                           lastPerformance != null
                                                               ? lastPerformance.ToStrings("/")
                                                               : "",
                                                           used.Days != null ? used.Days.ToString() : "",
                                                           used.Hours != null ? used.Hours.ToString() : "",
                                                           used.Cycles != null ? used.Cycles.ToString() : "",
                                                           nextComplianceDate,
                                                           nextPerformanceSource.Hours != null
                                                               ? nextPerformanceSource.Hours.ToString()
                                                               : "",
                                                           nextPerformanceSource.Cycles != null
                                                               ? nextPerformanceSource.Cycles.ToString()
                                                               : "",
                                                           nextDueAtAircraftUtilization != null
                                                               ? nextDueAtAircraftUtilization.ToStrings("/")
                                                               : "",
                                                           remain.Days != null ? remain.Days.ToString() : "",
                                                           remain.Hours != null ? remain.Hours.ToString() : "",
                                                           remain.Cycles != null ? remain.Cycles.ToString() : "",
                                                           remain.ToHoursMinutesAndCyclesStrings(" FH", " FC"),
                                                           condition, mansHours, cost, kits,
                                                           equipment, remarks, status);
        }