Ejemplo n.º 1
0
        private void UpdateDatabase()
        {
            // For now we just use a single Issue Group "Issues"
            // Create it, initially disabled
            DeleteNonPermanentIssueGroups();
            IssueGroups2.Insert(issuesIssueGroupId, 10, false, "Issues", Empty);
            AppendStatusText("Global Issue Group created");

            // Add the Issues
            DeleteNonPermanentIssues();
            foreach (var kvp in _IssueDictionary)
            {
                Issues2.Insert(kvp.Value.IssueId, kvp.Value.IssueId, kvp.Value.Issue, false);
            }
            AppendStatusText($"{_IssueDictionary.Count} Issues created");

            // Add the IssueGroupsIssues
            DeleteNonPermanentIssueGroupsIssues();
            foreach (var kvp in _IssueDictionary)
            {
                IssueGroupsIssues2.Insert(issuesIssueGroupId, kvp.Value.IssueId, kvp.Value.IssueId);
            }
            AppendStatusText($"{_IssueDictionary.Count} IssueGroupsIssues created");

            // Add the Questions
            DeleteNonPermanentQuestions();
            foreach (var kvp in _TopicDictionary)
            {
                Questions2.Insert(kvp.Value.TopicId, kvp.Value.Topic, false);
            }
            AppendStatusText($"{_TopicDictionary.Count} Questions created");

            // Add the QuestionJurisdictions
            // All are federal for now
            DeleteNonPermanentQuestionsJurisdictions();
            foreach (var kvp in _TopicDictionary)
            {
                QuestionsJurisdictions.Insert(kvp.Value.TopicId, "B", Empty, Empty);
            }
            AppendStatusText($"{_TopicDictionary.Count} QuestionsJurisdictions created");

            // Add the IssuesQuestions
            DeleteNonPermanentIssuesQuestions();
            var iqCount = 0;

            foreach (var kvp in _IssueDictionary)
            {
                var value = kvp.Value;
                foreach (var topicId in value.TopicIds)
                {
                    IssuesQuestions.Insert(value.IssueId, topicId, topicId);
                    iqCount++;
                }
            }
            AppendStatusText($"{iqCount} IssuesQuestions created");

            // remap existing answers
            RemapExistingAnswers();
        }
Ejemplo n.º 2
0
        public static void SaveIssueGroupsData(IssueGroupsData[] data)
        {
            var issueGroupsTable       = GetAllData();
            var issueGroupsIssuesTable = IssueGroupsIssues2.GetAllData();

            // delete any missing IssueGroups rows
            foreach (var igRow in issueGroupsTable)
            {
                if (data.All(ig => igRow.IssueGroupId != ig.IssueGroupId))
                {
                    igRow.Delete();
                }
            }

            // delete any missing IssueGroupsIssues rows
            foreach (var igiRow in issueGroupsIssuesTable)
            {
                var issueGroup =
                    data.FirstOrDefault(ig => ig.IssueGroupId == igiRow.IssueGroupId);
                if (issueGroup == null || issueGroup.Issues.All(igi => igi.IssueId != igiRow.IssueId))
                {
                    igiRow.Delete();
                }
            }

            // update or add remaining entries
            var igOrder = 0;

            foreach (var ig in data)
            {
                igOrder += 10;
                var igRow = issueGroupsTable.Where(r => r.RowState != DataRowState.Deleted)
                            .FirstOrDefault(r => r.IssueGroupId == ig.IssueGroupId);
                if (igRow == null)
                {
                    //igRow = issueGroupsTable.NewRow(ig.IssueGroupId, igOrder, ig.IsEnabled,
                    //  ig.Heading, ig.SubHeading);
                    //issueGroupsTable.AddRow(igRow);
                    // insert directly because of auto increment column
                    Insert(ig.IssueGroupId, igOrder, ig.IsEnabled, ig.Heading,
                           ig.SubHeading);
                }
                else
                {
                    if (igRow.IssueGroupOrder != igOrder)
                    {
                        igRow.IssueGroupOrder = igOrder;
                    }
                    if (igRow.IsEnabled != ig.IsEnabled)
                    {
                        igRow.IsEnabled = ig.IsEnabled;
                    }
                    if (igRow.Heading != ig.Heading)
                    {
                        igRow.Heading = ig.Heading;
                    }
                    if (igRow.SubHeading != ig.SubHeading)
                    {
                        igRow.SubHeading = ig.SubHeading;
                    }
                }

                var igiOrder = 0;
                foreach (var igi in ig.Issues)
                {
                    igiOrder += 10;
                    var igiRow = issueGroupsIssuesTable.Where(r => r.RowState != DataRowState.Deleted)
                                 .FirstOrDefault(r => r.IssueGroupId == ig.IssueGroupId && r.IssueId == igi.IssueId);
                    if (igiRow == null)
                    {
                        igiRow = issueGroupsIssuesTable.NewRow(ig.IssueGroupId, igi.IssueId, igiOrder);
                        issueGroupsIssuesTable.AddRow(igiRow);
                    }
                    else
                    if (igiRow.IssueOrder != igiOrder)
                    {
                        igiRow.IssueOrder = igiOrder;
                    }
                }
            }

            UpdateTable(issueGroupsTable);
            IssueGroupsIssues2.UpdateTable(issueGroupsIssuesTable);
        }
Ejemplo n.º 3
0
        public static void SaveIssuesData(IssuesDataIssue[] data)
        {
            var issuesTable            = GetAllData();
            var issueGroupsIssuesTable = IssueGroupsIssues2.GetAllData();
            var issuesQuestionsTable   = IssuesQuestions.GetAllData();

            // this dictionary is used for adding IssueGroupsIssues entries for new issues
            var igiMaxOrderByIssueGroup = issueGroupsIssuesTable.GroupBy(igi => igi.IssueGroupId)
                                          .Select(g => new { IssueGroupId = g.Key, MaxOrder = g.Max(igi => igi.IssueOrder) })
                                          .ToDictionary(ig => ig.IssueGroupId, ig => ig.MaxOrder);

            // delete any missing Issues rows
            foreach (var iRow in issuesTable)
            {
                if (data.All(i => iRow.IssueId != i.IssueId))
                {
                    iRow.Delete();
                }
            }

            // delete any missing IssueGroupsIssues rows
            foreach (var igiRow in issueGroupsIssuesTable)
            {
                var issue =
                    data.FirstOrDefault(i => i.IssueId == igiRow.IssueId);
                if (issue == null)
                {
                    igiRow.Delete();
                }
            }

            // delete any missing IssuesQuestions rows
            foreach (var iqRow in issuesQuestionsTable)
            {
                var issue =
                    data.FirstOrDefault(i => i.IssueId == iqRow.IssueId);
                if (issue == null || issue.QuestionIds.All(iq => iq != iqRow.QuestionId))
                {
                    iqRow.Delete();
                }
            }

            // update or add remaining entries
            var iOrder = 0;

            foreach (var i in data)
            {
                iOrder += 10;
                var iRow = issuesTable.Where(r => r.RowState != DataRowState.Deleted)
                           .FirstOrDefault(r => r.IssueId == i.IssueId);

                // Issues
                if (iRow == null)
                {
                    // insert directly because of auto increment column
                    Insert(i.IssueId, iOrder, i.Issue, !i.IsEnabled);

                    // new issues are added to IssueGroupsIssues at the end of the sequence by issue group
                    var maxOrder = igiMaxOrderByIssueGroup[i.IssueGroupId] + 10;
                    igiMaxOrderByIssueGroup[i.IssueGroupId] = maxOrder;
                    var igiRow = issueGroupsIssuesTable.NewRow(i.IssueGroupId, i.IssueId, maxOrder);
                    issueGroupsIssuesTable.AddRow(igiRow);
                }
                else
                {
                    if (iRow.IssueOrder != iOrder)
                    {
                        iRow.IssueOrder = iOrder;
                    }
                    if (iRow.Issue != i.Issue)
                    {
                        iRow.Issue = i.Issue;
                    }
                    if (iRow.IsIssueOmit != !i.IsEnabled)
                    {
                        iRow.IsIssueOmit = !i.IsEnabled;
                    }
                }

                var iqOrder = 0;
                foreach (var iq in i.QuestionIds)
                {
                    iqOrder += 10;
                    var iqRow = issuesQuestionsTable.Where(r => r.RowState != DataRowState.Deleted)
                                .FirstOrDefault(r => r.IssueId == i.IssueId && r.QuestionId == iq);
                    if (iqRow == null)
                    {
                        iqRow = issuesQuestionsTable.NewRow(i.IssueId, iq, iqOrder);
                        issuesQuestionsTable.AddRow(iqRow);
                    }
                    else
                    if (iqRow.QuestionOrder != iqOrder)
                    {
                        iqRow.QuestionOrder = iqOrder;
                    }
                }
            }

            UpdateTable(issuesTable);
            IssueGroupsIssues2.UpdateTable(issueGroupsIssuesTable);
            IssuesQuestions.UpdateTable(issuesQuestionsTable);
        }