Esempio n. 1
0
        private void ButtonDelete_Click(object sender, EventArgs e)
        {
            if (listViewTransferedDetails.SelectedItems.Count == 0)
            {
                return;
            }

            ComponentCollection             removedComponents   = new ComponentCollection();
            ComponentCollection             installedComponents = new ComponentCollection(_installedComponents.ToArray());
            List <ReplaceComponentFormItem> replaceDetailFormItems;

            foreach (ListViewItem item in listViewTransferedDetails.SelectedItems)
            {
                if (item.Group == listViewTransferedDetails.Groups[0])
                {
                    Component component = (Component)item.Tag;
                    removedComponents.Add(component);
                }
            }

            if (removedComponents.Count == 0)
            {
                return;
            }

            replaceDetailFormItems = new List <ReplaceComponentFormItem>();
            foreach (Component item in removedComponents)
            {
                var newItem = new ReplaceComponentFormItem(item, null,
                                                           _removedTransfers.GetRecordByComponentId(item.ItemId), null, _parentType);
                replaceDetailFormItems.Add(newItem);

                if (installedComponents.Count == 0)
                {
                    newItem.UpdateInformation(false);
                    continue;
                }

                foreach (Component installedItem in installedComponents)
                {
                    //проверка по сходству ID
                    //проверка по сходству названия
                    if (installedItem.ItemId == item.ItemId ||
                        installedItem.Description.ToUpper() == item.Description.ToUpper())
                    {
                        //Если ID идентичны, то эта деталь сначала была перемещена куда-то,
                        //а потом обратно на самолет

                        //если название идентично, значит эта могла быть направлена на самолет
                        //для замены снятой
                        newItem.ReplacedByComponent      = installedItem;
                        newItem.ReplacedByDetailTransfer = installedItem.TransferRecords.GetLast();

                        //удаление элемента из коллекции, что бы он не попал в результат дважды
                        installedComponents.Remove(installedItem);
                        break;
                    }
                }
                newItem.UpdateInformation(false);
            }

            var form = new ReplaceComponentForm(_removedComponents, _installedComponents, replaceDetailFormItems.ToArray(), _parentType);

            form.UpdateLabels(false);

            TopMost = false;             //что бы данное онко не перекрывало окно диалога
            form.ShowDialog();
            TopMost = true;
            //Если изменения не были произведены, то просто возвращаемся из данной функции
            if (form.DialogResult == DialogResult.Cancel)
            {
                return;
            }
            //иначе производится замена/перемещение компонентов
            List <ReplaceComponentFormItem> replacedItems = new List <ReplaceComponentFormItem>(form.GetReplacedItems());

            foreach (ReplaceComponentFormItem replacedItem in replacedItems)
            {
                if (replacedItem.ParentComponent != null)
                {
                    TransferRecord record = _removedTransfers.GetRecordByComponentId(replacedItem.ParentComponent.ItemId);
                    record.PODR = true;

                    if (replacedItem.ReplacedByComponent != null)
                    {
                        record.ReplaceComponentId        = replacedItem.ReplacedByComponent.ItemId;
                        record.IsReplaceComponentRemoved = false;
                    }

                    GlobalObjects.CasEnvironment.NewKeeper.Save(record);

                    BaseComponent from = GlobalObjects.ComponentCore.GetBaseComponentById(record.FromBaseComponentId);
                    //уменьшение необходимого кол-ва деталей родительского компонента
                    //сохранение родительского компонента
                    if (from != null)
                    {
                        from.ComponentCount--;
                        GlobalObjects.ComponentCore.Save(from);
                    }
                    _removedComponents.Remove(replacedItem.ParentComponent);
                    _removedTransfers.Remove(record);
                }

                if (replacedItem.ReplacedByComponent != null)
                {
                    ActualStateRecord actual =
                        replacedItem.ReplacedByComponent.ActualStateRecords[replacedItem.ReplacedByComponent.TransferRecords.GetLast().StartTransferDate];

                    actual.RecordDate   = replacedItem.ReplacedByDate;
                    actual.OnLifelength = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthOnEndOfDay(replacedItem.ReplacedByComponent, DateTime.Now);//TODO:(Evgenii Babak) пересмотреть подход, наработка считается на начало дня, а в метод передаем DateTime.Now(может быть и началом дня)
                    GlobalObjects.CasEnvironment.NewKeeper.Save(actual);

                    replacedItem.ReplacedByComponent.TransferRecords.GetLast().DODR         = true;
                    replacedItem.ReplacedByComponent.TransferRecords.GetLast().TransferDate =
                        replacedItem.ReplacedByDate;
                    //увеличение необходимого кол-ва деталей родительского компонента
                    //сохранение родительского компонента
                    if (replacedItem.ReplacedByComponent.ParentBaseComponent != null)
                    {
                        replacedItem.ReplacedByComponent.ParentBaseComponent.ComponentCount++;
                        GlobalObjects.ComponentCore.Save(replacedItem.ReplacedByComponent.ParentBaseComponent);
                    }
                    GlobalObjects.CasEnvironment.NewKeeper.Save(replacedItem.ReplacedByComponent.TransferRecords.GetLast());
                    _installedComponents.Remove(replacedItem.ReplacedByComponent);
                    TransferRecord record = _installedTransfers.GetRecordByComponentId(replacedItem.ReplacedByComponent.ItemId);
                    if (record != null)
                    {
                        _installedTransfers.Remove(record);
                    }
                }
            }
            InvokeButtonDeleteClick();

            UpdateInformation();
        }
Esempio n. 2
0
        private void ButtonAdd_Click(object sender, EventArgs e)
        {
            if (listViewTransferedDetails.SelectedItems.Count == 0)
            {
                return;
            }

            ComponentCollection             installedComponents = new ComponentCollection();
            ComponentCollection             removedComponents   = new ComponentCollection(_removedComponents.ToArray());
            List <ReplaceComponentFormItem> replaceDetailFormItems;

            foreach (ListViewItem item in listViewTransferedDetails.SelectedItems)
            {
                if (item.Group == listViewTransferedDetails.Groups[1])
                {
                    Component component = (Component)item.Tag;
                    installedComponents.Add(component);

                    //detail.TransferRecords.Last.DODR = true;

                    ////увеличение необходимого кол-ва деталей родительского компонента
                    ////сохранение родительского компонента
                    //detail.ParentBaseDetail.ComponentCount++;
                    //GlobalObjects.CasEnvironment.Keeper.Save(detail.ParentBaseDetail);

                    //GlobalObjects.CasEnvironment.Keeper.Save(detail.TransferRecords.Last);
                    //_installedDetails.Remove(detail);
                    //TransferRecord record = _installedTransfers.GetTransferRecordByDetailID(detail.DetailId);
                    //if (record != null) _installedTransfers.Remove(record);
                }
            }

            if (installedComponents.Count == 0)
            {
                return;
            }
            replaceDetailFormItems = new List <ReplaceComponentFormItem>();

            foreach (Component item in installedComponents)
            {
                var newItem = new ReplaceComponentFormItem(item, null, _parentType);
                replaceDetailFormItems.Add(newItem);

                if (item is BaseComponent)
                {
                    newItem.comboBoxReplaceByDetail.Items.AddRange(_waitremovedConfirmComponents.Where(i => i is BaseComponent).ToArray());
                }
                if (item is Component)
                {
                    newItem.comboBoxReplaceByDetail.Items.AddRange(_waitremovedConfirmComponents.Where(i => i is Component).ToArray());
                }

                if (removedComponents.Count == 0)
                {
                    newItem.UpdateInformation(true);
                    continue;
                }

                foreach (Component removedItem in removedComponents)
                {
                    //проверка по сходству ID
                    //проверка по сходству названия
                    if (removedItem.ItemId == item.ItemId ||
                        removedItem.Description.ToUpper() == item.Description.ToUpper())
                    {
                        //Если ID идентичны, то эта деталь сначала была перемещена куда-то,
                        //а потом обратно на самолет

                        //если название идентично, значит эта могла быть направлена на самолет
                        //для замены снятой
                        newItem.ReplacedByComponent      = removedItem;
                        newItem.ReplacedByDetailTransfer =
                            _removedTransfers.GetRecordByComponentId(removedItem.ItemId);

                        //удаление элемента из коллекции, что бы он не попал в результат дважды
                        removedComponents.Remove(removedItem);
                        break;
                    }
                }
                newItem.UpdateInformation(true);
            }

            var form = new ReplaceComponentForm(_installedComponents, _removedComponents, replaceDetailFormItems.ToArray(), _parentType);

            form.UpdateLabels(true);

            TopMost = false; //что бы данное онко не перекрывало окно диалога
            form.ShowDialog();
            TopMost = true;

            //return;

            //Если изменения не были произведены, то просто возвращаемся из данной функции
            if (form.DialogResult == DialogResult.Cancel)
            {
                return;
            }
            //иначе производится замена/перемещение компонентов
            var replacedItems = new List <ReplaceComponentFormItem>(form.GetReplacedItems());

            foreach (ReplaceComponentFormItem replacedItem in replacedItems)
            {
                if (!replacedItem.ConfirmTransfer)
                {
                    continue;
                }

                if (replacedItem.ParentComponent != null)
                {
                    if (replacedItem.ParentComponent.IsBaseComponent)
                    {
                        BaseComponent bd =
                            GlobalObjects.CasEnvironment.BaseComponents.
                            GetItemById(replacedItem.ParentComponent.ItemId);

                        ActualStateRecord actual =
                            bd.ActualStateRecords[bd.TransferRecords.GetLast().StartTransferDate];

                        if (actual != null)
                        {
                            actual.RecordDate = replacedItem.ConfirmDate;
                            //TODO:(Evgenii Babak) пересмотреть подход, наработка считается на начало дня, а в метод передаем DateTime.Now(может быть и концом дня)
                            actual.OnLifelength = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthOnStartOfDay(bd, replacedItem.ConfirmDate);
                            GlobalObjects.CasEnvironment.NewKeeper.Save(actual);
                        }
                        else
                        {
                            actual = new ActualStateRecord
                            {
                                ComponentId = bd.ItemId,
                                RecordDate  = DateTime.Now,
                                //TODO:(Evgenii Babak) пересмотреть подход, наработка считается на начало дня, а в метод передаем DateTime.Now(может быть и концом дня)
                                OnLifelength = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthOnStartOfDay(bd, replacedItem.ConfirmDate)
                            };
                            GlobalObjects.ComponentCore.RegisterActualState(bd, actual);
                        }

                        bd.TransferRecords.GetLast().DODR = true;
                        bd.TransferRecords.GetLast().PreConfirmTransfer = true;
                        bd.TransferRecords.GetLast().TransferDate       = replacedItem.ConfirmDate;
                        GlobalObjects.CasEnvironment.NewKeeper.Save(bd.TransferRecords.GetLast());
                    }
                    else
                    {
                        ActualStateRecord actual =
                            replacedItem.ParentComponent.ActualStateRecords[replacedItem.ParentComponent.TransferRecords.GetLast().StartTransferDate];

                        if (actual != null)
                        {
                            actual.RecordDate = replacedItem.ConfirmDate;
                            //TODO:(Evgenii Babak) пересмотреть подход, наработка считается на начало дня, а в метод передаем DateTime.Now(может быть и началом дня)
                            actual.OnLifelength = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthOnEndOfDay(replacedItem.ParentComponent, DateTime.Now);
                            GlobalObjects.CasEnvironment.NewKeeper.Save(actual);
                        }
                        else
                        {
                            actual = new ActualStateRecord
                            {
                                ComponentId = replacedItem.ParentComponent.ItemId,
                                RecordDate  = DateTime.Now,
                                //TODO:(Evgenii Babak) пересмотреть подход, наработка считается на начало дня, а в метод передаем DateTime.Now(может быть и началом дня)
                                OnLifelength = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthOnEndOfDay(replacedItem.ParentComponent, DateTime.Now)
                            };
                            GlobalObjects.ComponentCore.RegisterActualState(replacedItem.ParentComponent, actual);
                        }

                        if (replacedItem.ReplacedByComponent != null && replacedItem.ReplacedByComponent.ComponentDirectives.Count > 0)
                        {
                            foreach (var directive in replacedItem.ReplacedByComponent.ComponentDirectives)
                            {
                                var newDirective = directive.GetCopyUnsaved();
                                newDirective.ComponentId     = replacedItem.ParentComponent.ItemId;
                                newDirective.ParentComponent = replacedItem.ParentComponent;
                                GlobalObjects.CasEnvironment.NewKeeper.Save(newDirective);
                            }
                        }


                        replacedItem.ParentComponent.TransferRecords.GetLast().DODR = true;
                        replacedItem.ParentComponent.TransferRecords.GetLast().PreConfirmTransfer = true;
                        replacedItem.ParentComponent.TransferRecords.GetLast().TransferDate       =
                            replacedItem.ConfirmDate;
                        //увеличение необходимого кол-ва деталей родительского компонента
                        //сохранение родительского компонента
                        if (replacedItem.ParentComponent.ParentBaseComponent != null)
                        {
                            replacedItem.ParentComponent.ParentBaseComponent.ComponentCount++;
                            GlobalObjects.ComponentCore.Save(replacedItem.ParentComponent.ParentBaseComponent);//TODO:(Evgenii Babak) заменить на использование ComponentCore
                        }
                        GlobalObjects.CasEnvironment.NewKeeper.Save(replacedItem.ParentComponent.TransferRecords.GetLast());
                    }
                    _installedComponents.Remove(replacedItem.ParentComponent);
                    TransferRecord record = _installedTransfers.GetRecordByComponentId(replacedItem.ParentComponent.ItemId);
                    if (record != null)
                    {
                        _installedTransfers.Remove(record);

                        if (replacedItem.ReplacedByComponent != null)
                        {
                            record.ReplaceComponentId        = replacedItem.ReplacedByComponent.ItemId;
                            record.IsReplaceComponentRemoved = true;
                            GlobalObjects.CasEnvironment.NewKeeper.Save(record);
                        }
                    }
                }

                if (replacedItem.ReplacedByComponent != null)
                {
                    TransferRecord record = _removedTransfers.GetRecordByComponentId(replacedItem.ReplacedByComponent.ItemId);
                    if (record != null)
                    {
                        _removedTransfers.Remove(record);
                        record.PODR = true;
                        GlobalObjects.CasEnvironment.NewKeeper.Save(record);

                        BaseComponent from = GlobalObjects.ComponentCore.GetBaseComponentById(record.FromBaseComponentId);
                        //уменьшение необходимого кол-ва деталей родительского компонента
                        //сохранение родительского компонента
                        if (from != null)
                        {
                            from.ComponentCount--;
                            GlobalObjects.ComponentCore.Save(from);
                        }

                        _removedComponents.Remove(replacedItem.ReplacedByComponent);
                    }
                }
            }

            //создание события ButtonAddClick
            InvokeButtonAddClick();

            UpdateInformation();
        }