Exemplo n.º 1
0
        public void FinalizeSummaries()
        {
            _hub.StatusUpdate("Finalizing");

            CombineCalcAndManualSummaries();

            ResultSummaryFinal.UseOnReports
                = ResultSummaryFinal.BallotsNeedingReview == 0 &&
                  ResultTies.All(rt => rt.IsResolved.AsBoolean()) &&
                  ResultSummaryFinal.NumBallotsWithManual == ResultSummaryFinal.SumOfEnvelopesCollected;
        }
Exemplo n.º 2
0
        protected void FinalizeResultsAndTies()
        {
            _hub.StatusUpdate("Checking for ties");

            // remove any results no longer needed
            Results.Where(r => r.VoteCount.AsInt() == 0)
            .ToList()
            .ForEach(r =>
            {
                Savers.ResultSaver(DbAction.AttachAndRemove, r);
                //Results.Remove(r);
            });

            // remove any existing Tie info
            SharedDbContext.ResultTie.RemoveRange(SharedDbContext.ResultTie.Where(rt => rt.ElectionGuid == TargetElection.ElectionGuid));
            ResultTies.Clear();

            DetermineOrderAndSections();
            AnalyzeForTies();
        }
Exemplo n.º 3
0
        internal void AnalyzeForTies()
        {
            Result aboveResult          = null;
            var    nextTieBreakGroup    = 1;
            var    foundFirstOneInOther = false;

            // round 1
            foreach (var result in Results.OrderBy(r => r.Rank))
            {
                result.IsTied        = false;
                result.TieBreakGroup = null;

                if (aboveResult != null)
                {
                    // compare this with the one 'above' it
                    var numFewerVotesThanAboveResult = aboveResult.VoteCount - result.VoteCount;
                    if (numFewerVotesThanAboveResult == 0)
                    {
                        aboveResult.IsTied = true;

                        result.IsTied = true;

                        if (!foundFirstOneInOther && result.Section == ResultHelper.Section.Other)
                        {
                            foundFirstOneInOther = true;
                        }

                        if (aboveResult.TieBreakGroup.HasNoContent())
                        {
                            aboveResult.TieBreakGroup = nextTieBreakGroup;
                            nextTieBreakGroup++;
                        }
                        result.TieBreakGroup = aboveResult.TieBreakGroup;
                    }
                    else
                    {
                        // not tied with one above
                        if (foundFirstOneInOther)
                        {
                            // already finished a tie break in Other
                            // don't bother marking others
                            break;
                        }
                    }

                    // set CloseTo___ - if tied, then is also Close to
                    var isClose = numFewerVotesThanAboveResult <= ThresholdForCloseVote;
                    aboveResult.CloseToNext = isClose;
                    result.CloseToPrev      = isClose;
                }
                else
                {
                    result.CloseToPrev = false;
                }

                aboveResult = result;
            }

            // last one?
            if (aboveResult != null)
            {
                aboveResult.CloseToNext = false;
            }

            // pass 2
            for (var groupCode = 1; groupCode < nextTieBreakGroup; groupCode++)
            {
                var code = groupCode;

                var resultTie = new ResultTie
                {
                    ElectionGuid  = TargetElection.ElectionGuid,
                    TieBreakGroup = code,
                };

                Savers.ResultTieSaver(DbAction.Add, resultTie);
                ResultTies.Add(resultTie);

                AnalyzeTieGroup(resultTie, Results.Where(r => r.TieBreakGroup == code).OrderBy(r => r.Rank).ToList());
            }

            // set global value
        }
Exemplo n.º 4
0
 public ResultTie AddResultTie(ResultTie arg)
 {
     arg.C_RowId = ++_rowCounter;
     ResultTies.Add(arg);
     return(arg);
 }