Ejemplo n.º 1
0
 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;
         }
     }
 }
Ejemplo n.º 2
0
        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;
            }
        }