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(); }
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(); }