private void DeleteEquipment(object sender, EventArgs e) { int buttonTag = Convert.ToInt32(((ToolStripButton)sender).Tag); DataGridViewCustomed dgv; switch (buttonTag) { case 3: dgv = gvProviderSetProviderSummary.DependentGridView; break; case 13: dgv = gvProviderSetClientSummary.DependentGridView; break; case 23: dgv = gvClientSetProviderSummary.DependentGridView; break; default: throw new Exception("Invalid button tag"); } if (dgv.SelectedRows.Count != 1) return; Equipment deletedEquipment = (Equipment)((EquipmentGridViewItemDetailed)dgv.SelectedRows[0].DataBoundItem).Tag; if (deletedEquipment == null) throw new Exception("Invalid data structure in child table"); if (MessageBox.Show(@"Удалить оборудование "+deletedEquipment.Description+@"?", @"Удаление!", MessageBoxButtons.YesNo) == DialogResult.Yes) { try { Cursor = Cursors.WaitCursor; List<SideLink> deletedLinks = new List<SideLink>(); if (deletedEquipment.EquipmentPorts.Any(port => port.SideLink != null)) { if (MessageBox.Show(@"На портах присутсвуют связи с другими элементами. Удалить все равно?", @"Удаление", MessageBoxButtons.YesNo) == DialogResult.Yes) { foreach (EquipmentPort fromPort in deletedEquipment.EquipmentPorts) { if (fromPort.SideLink != null) { switch (fromPort.SideLink.LinkType) { case (int) SideLinkType.toEquipmentPort: var toPort = _dataContexts.AccEquipmentV2Entities.EquipmentPorts.Find(fromPort.SideLink.LinkEquipmentPortId); if (toPort == null) throw new ArgumentNullException("Invalid data in sidelink structure"); deletedLinks.Add(fromPort.SideLink); deletedLinks.Add(toPort.SideLink); break; case (int)SideLinkType.toCustomData: case (int) SideLinkType.toCustomerSide: deletedLinks.Add(fromPort.SideLink); break; default: break; } } } } else { Cursor = Cursors.Default; ResumeLayout(); return; } } if (deletedEquipment.SideLink != null) deletedLinks.Add(deletedEquipment.SideLink); ListSelectionForm listSelectionForm = new ListSelectionForm(_dataContexts, deletedEquipment, EquipmentListTypes.toDismantle) { Text = @"Списки оборудования на демонтаж", btnCreateList={Enabled = SharedAppData.IsFlagSet(EquipmentListsForm.ObjectAccessId, RightsFlags.Add)}, cbLists = {SelectedItem = SharedAppData.LastSelectedDismantleList} }; if (listSelectionForm.ShowDialog(this) == DialogResult.OK) { EquipmentList dismantleList = listSelectionForm.cbLists.SelectedItem as EquipmentList; if (dismantleList == null) throw new Exception(@"Неправильный список на демонтаж!"); SharedAppData.LastSelectedDismantleList = dismantleList; List<EquipmentListsDetail> details = new List<EquipmentListsDetail> { new EquipmentListsDetail { Comments = deletedEquipment.Comments, Description = deletedEquipment.Description, SerialNumber = deletedEquipment.SerialNumber, SideData = GetSideData(deletedEquipment), Id = Guid.NewGuid(), EquipmentList = dismantleList } }; var deletedChildEquipments = deletedEquipment.ChildEquipments.FlattenNr(x => x.ChildEquipments).ToList(); details.AddRange(deletedChildEquipments.Select(childEquipment => new EquipmentListsDetail { Comments = childEquipment.Comments, Description = childEquipment.Description, SerialNumber = childEquipment.SerialNumber, SideData = GetSideData(deletedEquipment), Id = Guid.NewGuid(), EquipmentList = dismantleList })); Cursor = Cursors.WaitCursor; _dataContexts.AccEquipmentV2Entities.EquipmentListsDetails.AddRange(details); _dataContexts.AccEquipmentV2Entities.Equipments.RemoveRange(deletedChildEquipments); if (deletedEquipment.EquipmentPorts.Any()) { var eventPorts = _dataContexts.AccEquipmentV2Entities.Events.Where(Extensions.BuildContainsExpression<Event, Guid>(ec => ec.EquipmentPortId.Value, deletedEquipment.EquipmentPorts.Select(dp => dp.PortId))); if (eventPorts.Any()) { foreach (Event @event in eventPorts) { @event.Description = "Порт был удален из оборудования: " + _dataContexts.GetPortFullDescription(@event.EquipmentPort) + Environment.NewLine + @event.Description; @event.EquipmentPort = null; @event.EquipmentPortId = null; System.Diagnostics.Debug.WriteLine("Remove events ports from parent"); } // _dataContexts.AccEquipmentV2Entities.SaveChanges(); } _dataContexts.AccEquipmentV2Entities.EquipmentPorts.RemoveRange(deletedEquipment.EquipmentPorts); } _dataContexts.AccEquipmentV2Entities.SideLinks.RemoveRange(deletedLinks); _dataContexts.AccEquipmentV2Entities.Equipments.Remove(deletedEquipment); _dataContexts.AccEquipmentV2Entities.SaveChanges(); ReloadData(_loadedArea, true); SharedAppData.HistoryStore.AddHistoryEvent("Add Equipment", deletedEquipment.Description); OnUpdateData(); Cursor = Cursors.Default; } Cursor = Cursors.Default; } catch (Exception) { throw; } } }
private void button1_Click(object sender, EventArgs e) { string description = tbDescription.Visible ? tbDescription.Text.Trim() : cbDescription.Text.Trim(); if (string.IsNullOrEmpty(description)) return; _clonedEquipment.Description = description; _clonedEquipment.NetworkDescription = tbNetworkDescription.Text; _clonedEquipment.SerialNumber = tbSerialNumber.Text; _clonedEquipment.OwnerType = cbOwner.SelectedIndex; _clonedEquipment.PlaceType = cbSide.SelectedIndex; _clonedEquipment.Comments = tbComments.Text; if (_manageEquipment == null) { //add try { Cursor = Cursors.WaitCursor; ListSelectionForm listSelectionForm = new ListSelectionForm(_dataContexts, _clonedEquipment, EquipmentListTypes.toReceive) { Text = @"Списки оборудования на получение", cbLists = { SelectedItem = SharedAppData.LastSelectedReceiveList }, btnCreateList = {Enabled = SharedAppData.IsFlagSet(EquipmentListsForm.ObjectAccessId, RightsFlags.Add)} }; if (listSelectionForm.ShowDialog(this) == DialogResult.OK) { EquipmentList list = listSelectionForm.cbLists.SelectedItem as EquipmentList; if (list==null) throw new Exception("Неправильный список оборудования!!!!"); SharedAppData.LastSelectedReceiveList = list; List<EquipmentListsDetail> details = new List<EquipmentListsDetail> { new EquipmentListsDetail { Comments = _clonedEquipment.Comments, Description = _clonedEquipment.Description, SerialNumber = _clonedEquipment.SerialNumber, SideData = GetSideData(_clonedEquipment), Id = Guid.NewGuid(), EquipmentList = list } }; if (_clonedEquipment.ChildEquipments.Any()) details.AddRange(_clonedEquipment.ChildEquipments.Select(childEquipment => new EquipmentListsDetail { Comments = childEquipment.Comments, Description = childEquipment.Description, SerialNumber = childEquipment.SerialNumber, SideData = GetSideData(_clonedEquipment), Id = Guid.NewGuid(), EquipmentList = list })); _dataContexts.AccEquipmentV2Entities.EquipmentListsDetails.AddRange(details); _dataContexts.AccEquipmentV2Entities.Equipments.Add(_clonedEquipment); _dataContexts.AccEquipmentV2Entities.SaveChanges(); } else { Cursor = Cursors.Default; return; } Cursor = Cursors.Default; DialogResult = DialogResult.OK; } catch (Exception) { throw; } } else { //update { try { Cursor = Cursors.WaitCursor; string diff; if (IsDifferentEquipment(_manageEquipment, _clonedEquipment, out diff)) { SharedAppData.HistoryStore.AddHistoryEvent("Change Equipment " + _manageEquipment.Description, diff); _manageEquipment.Description = _clonedEquipment.Description; _manageEquipment.NetworkDescription = _clonedEquipment.NetworkDescription; _manageEquipment.SerialNumber = _clonedEquipment.SerialNumber; _manageEquipment.OwnerType = _clonedEquipment.OwnerType; _manageEquipment.PlaceType = _clonedEquipment.PlaceType; _manageEquipment.Comments = _clonedEquipment.Comments; _dataContexts.AccEquipmentV2Entities.SaveChanges(); } if (IsDifferentChildEquipments(_manageEquipment, _clonedEquipment)) { _dataContexts.AccEquipmentV2Entities.Equipments.RemoveRange(_manageEquipment.ChildEquipments); _dataContexts.AccEquipmentV2Entities.SaveChanges(); foreach (Equipment equipment in _clonedEquipment.ChildEquipments) { equipment.ParentEquipment = _manageEquipment; _manageEquipment.ChildEquipments.Add(equipment); } _dataContexts.AccEquipmentV2Entities.SaveChanges(); } if (IsDifferentPorts(_manageEquipment, _clonedEquipment)) { List<EquipmentPort> deletedPorts= _manageEquipment.EquipmentPorts.Where(mport => _clonedEquipment.EquipmentPorts.All(port => port.PortId != mport.PortId)).ToList(); if (deletedPorts.Any()) { var eventPorts = _dataContexts.AccEquipmentV2Entities.Events.Where(Extensions.BuildContainsExpression<Event, Guid>(ec => ec.EquipmentPortId.Value, deletedPorts.Select(dp => dp.PortId))); if (eventPorts.Any()) { foreach (Event @event in eventPorts) { @event.Description = "Порт был удален из оборудования: " + _dataContexts.GetPortFullDescription(@event.EquipmentPort)+ Environment.NewLine + @event.Description; @event.EquipmentPort = null; @event.EquipmentPortId = null; System.Diagnostics.Debug.WriteLine("Remove events ports from parent"); } // _dataContexts.AccEquipmentV2Entities.SaveChanges(); } _dataContexts.AccEquipmentV2Entities.EquipmentPorts.RemoveRange(deletedPorts); _dataContexts.AccEquipmentV2Entities.SaveChanges(); } foreach (EquipmentPort cport in _clonedEquipment.EquipmentPorts) { var mports = _manageEquipment.EquipmentPorts.Where(port => port.PortId == cport.PortId).ToList(); if (mports.Count == 0) { var nport = new EquipmentPort { PortId = Guid.NewGuid(), Equipment = _manageEquipment, PortType = cport.PortType, Description = cport.Description }; _manageEquipment.EquipmentPorts.Add(nport); continue; } if (mports.Count > 1) throw new Exception("Invalid data struct in ports"); var mport = mports.First(); mport.Description = cport.Description; mport.PortTypeId = cport.PortTypeId; } _dataContexts.AccEquipmentV2Entities.SaveChanges(); } if (IsDifferentSideLink(_manageEquipment, _clonedEquipment)) { if (_clonedEquipment.SideLink == null) { _dataContexts.AccEquipmentV2Entities.SideLinks.Remove(_manageEquipment.SideLink); } else { if (_manageEquipment.SideLink == null) { _manageEquipment.SideLink = new SideLink() {LinkId = Guid.NewGuid()}; _dataContexts.AccEquipmentV2Entities.SideLinks.Add(_manageEquipment.SideLink); } _manageEquipment.SideLink.LinkType = _clonedEquipment.SideLink.LinkType; if (_clonedEquipment.SideLink.LinkType == (int) SideLinkType.toCustomData) { _manageEquipment.SideLink.CustomData = _clonedEquipment.SideLink.CustomData; } else { _manageEquipment.SideLink.LinkCustomerSideId = _clonedEquipment.SideLink.LinkCustomerSideId; } } _dataContexts.AccEquipmentV2Entities.SaveChanges(); } Cursor = Cursors.Default; } catch (Exception) { throw; } } DialogResult = DialogResult.OK; } }