private void LinkIssueButtonHandler(object parameter)
        {
            AddRelatedIssueDialog dialog = new AddRelatedIssueDialog();
            dialog.Show();
            dialog.Closed +=
                (s1, e1) =>
                {
                    if (dialog.DialogResult.HasValue && dialog.DialogResult.Value)
                    {
                        List<Issue> toAdd = dialog.SelectedIssues.ToList();

                        foreach (var issue in toAdd)
                        {
                            var existing = (from x in mControlSystem.IssueRelatedControlSystems
                                            where x.IssueId == issue.Id
                                                  && x.ControlSystemId == mControlSystem.Id
                                            select x).FirstOrDefault();

                            if (existing == null)
                            {
                                IssueRelatedControlSystem ird = new IssueRelatedControlSystem
                                {
                                    IssueId = issue.Id,
                                    Issue = issue,
                                    ControlSystemId = mControlSystem.Id,
                                    ControlSystem = mControlSystem
                                };

                                mControlSystem.IssueRelatedControlSystems.Add(ird);

                            }
                        }

                        if (toAdd.Any())
                        {
                            LoadData();

                            Utils.OnCollectionChanged(EventAggregator, mControlSystem, "ControlSystemRelatedIssuesViewModel", true);

                            OnCollectionChanged();
                        }
                    }
                };
        }
        private void SaveIssueRelatedControlSystem(Issue issue, Issue originalIssue, CmsEntities cee)
        {
            log.Verbose("SaveIssueRelatedControlSystem()");
            //Delete originalIssueRelatedControlSystems
            cee.DeleteWhere<IssueRelatedControlSystem>(cee, x => x.IssueId == issue.Id);

            cee.Configuration.AutoDetectChangesEnabled = false;
            foreach (IssueRelatedControlSystem issueRelatedControlSystem in issue.IssueRelatedControlSystems)
            {
                var newIssueRelatedControlSystem = new IssueRelatedControlSystem();

                newIssueRelatedControlSystem.IssueId = issueRelatedControlSystem.IssueId;
                newIssueRelatedControlSystem.ControlSystemId = issueRelatedControlSystem.ControlSystemId;

                if (issueRelatedControlSystem.Implemented && issueRelatedControlSystem.ImplementedById.HasValue)
                {
                    newIssueRelatedControlSystem.Implemented = issueRelatedControlSystem.Implemented;
                    newIssueRelatedControlSystem.ImplementedDate = issueRelatedControlSystem.ImplementedDate;
                    newIssueRelatedControlSystem.ImplementedById = issueRelatedControlSystem.ImplementedById;
                }

                if (issueRelatedControlSystem.Tested && issueRelatedControlSystem.TestedById.HasValue)
                {
                    newIssueRelatedControlSystem.Tested = issueRelatedControlSystem.Tested;
                    newIssueRelatedControlSystem.TestedDate = issueRelatedControlSystem.TestedDate;
                    newIssueRelatedControlSystem.TestedById = issueRelatedControlSystem.TestedById;
                }

                if (issueRelatedControlSystem.Loaded && issueRelatedControlSystem.LoadedById.HasValue)
                {
                    newIssueRelatedControlSystem.Loaded = issueRelatedControlSystem.Loaded;
                    newIssueRelatedControlSystem.LoadedDate = issueRelatedControlSystem.LoadedDate;
                    newIssueRelatedControlSystem.LoadedById = issueRelatedControlSystem.LoadedById;
                }

                newIssueRelatedControlSystem.Notes = issueRelatedControlSystem.Notes;

                originalIssue.IssueRelatedControlSystems.Add(newIssueRelatedControlSystem);
            }
            cee.Configuration.AutoDetectChangesEnabled = true;
        }
        private void AddRelatedIssueHandler(object parameter)
        {
            AddIssueDialog aid = new AddIssueDialog();

            aid.Closed += (s1, e1) =>
            {
                //Hadle dialog closed
                if (aid.DialogResult.HasValue && aid.DialogResult.Value)
                {
                    Issue newIssue = aid.Issue;

                    IssueRelatedControlSystem issueRelatedControlSystem = (from x in mControlSystem.IssueRelatedControlSystems
                                                                     where x.IssueId == newIssue.Id
                                                                           && x.ControlSystemId == mControlSystem.Id
                                                                     select x).FirstOrDefault();
                    if (issueRelatedControlSystem == null)
                    {
                        IssueRelatedControlSystem ird = new IssueRelatedControlSystem
                        {
                            IssueId = newIssue.Id,
                            Issue = newIssue,
                            ControlSystemId = mControlSystem.Id,
                            ControlSystem = mControlSystem
                        };

                        mControlSystem.IssueRelatedControlSystems.Add(ird);

                        LoadData();

                        Utils.OnCollectionChanged(EventAggregator, mControlSystem, "ControlSystemRelatedIssuesViewModel", true);

                        OnCollectionChanged();
                    }

                }
            };

            aid.Show();
        }
        private void SaveControlSystemRelatedIssues(ControlSystem controlSystem, CmsEntities cee)
        {
            //Delete original
            var originals =
                (from x in cee.IssueRelatedControlSystems where x.ControlSystemId == controlSystem.Id select x).ToList();
            originals.ForEach(x => cee.IssueRelatedControlSystems.Remove(x));

            foreach (var relatedControlSystem in controlSystem.IssueRelatedControlSystems)
            {
                var newObject = new IssueRelatedControlSystem
                {
                    ControlSystemId = controlSystem.Id,
                    IssueId = relatedControlSystem.IssueId,
                    Notes = relatedControlSystem.Notes,
                    TestedById = relatedControlSystem.TestedById,
                    TestedDate = relatedControlSystem.TestedDate,
                    ImplementedById = relatedControlSystem.ImplementedById,
                    ImplementedDate = relatedControlSystem.ImplementedDate
                };

                cee.IssueRelatedControlSystems.Add(newObject);
            }
        }