Exemplo n.º 1
0
        private static ElectionResultsResponse GetResults(Turnout electionTurnout, Ballot ballot, List <CandidateResult> candidates)
        {
            ElectionResultsResponse results = new ElectionResultsResponse();

            results.NullVotes      = electionTurnout.NullVotes;
            results.TotalVotes     = electionTurnout.TotalVotes;
            results.ValidVotes     = electionTurnout.ValidVotes;
            results.EligibleVoters = electionTurnout.EligibleVoters;
            results.TotalSeats     = electionTurnout.TotalSeats;
            results.VotesByMail    = electionTurnout.VotesByMail != 0 ? electionTurnout.VotesByMail : (int?)null;
            if (ballot.BallotType == BallotType.Referendum)
            {
                if (results.ValidVotes == 0)
                {
                    results.ValidVotes = results.TotalVotes - results.ValidVotes;
                }

                results.Candidates = new List <CandidateResponse>
                {
                    new CandidateResponse
                    {
                        Name      = "DA",
                        ShortName = "DA",
                        Votes     = candidates.FirstOrDefault().YesVotes,
                    },
                    new CandidateResponse
                    {
                        Name      = "NU",
                        ShortName = "NU",
                        Votes     = candidates.FirstOrDefault().NoVotes,
                    }
                };
            }
            else
            {
                results.Candidates = candidates.Select(c => new CandidateResponse
                {
                    ShortName   = c.ShortName,
                    Name        = GetCandidateName(c),
                    Votes       = c.Votes,
                    PartyColor  = GetPartyColor(c),
                    PartyLogo   = c.Party?.LogoUrl,
                    Seats       = c.TotalSeats,
                    SeatsGained = c.SeatsGained
                }).OrderByDescending(c => c.Votes).ToList();
            }

            return(results);
        }
Exemplo n.º 2
0
        public static ElectionResultsResponse PopulateElectionResults(Turnout electionTurnout, Ballot ballot, List <CandidateResult> candidates, List <Party> parties)
        {
            ElectionResultsResponse results = new ElectionResultsResponse();

            if (candidates == null)
            {
                results.Candidates     = new List <CandidateResponse>();
                results.TotalVotes     = 0;
                results.EligibleVoters = 0;
                results.NullVotes      = 0;
                results.ValidVotes     = 0;
                return(results);
            }
            results.NullVotes      = electionTurnout.NullVotes;
            results.CountedVotes   = electionTurnout.CountedVotes;
            results.TotalVotes     = electionTurnout.TotalVotes;
            results.ValidVotes     = electionTurnout.ValidVotes;
            results.EligibleVoters = electionTurnout.EligibleVoters;
            results.TotalSeats     = candidates.Sum(c => c.Seats1 + c.Seats2);
            results.VotesByMail    = electionTurnout.VotesByMail != 0 ? electionTurnout.VotesByMail : (int?)null;
            if (ballot.BallotType == BallotType.Referendum)
            {
                if (results.ValidVotes == 0)
                {
                    results.ValidVotes = results.TotalVotes - results.ValidVotes;
                }

                results.Candidates = new List <CandidateResponse>
                {
                    new CandidateResponse
                    {
                        Name      = "DA",
                        ShortName = "DA",
                        Votes     = candidates.FirstOrDefault().YesVotes,
                    },
                    new CandidateResponse
                    {
                        Name      = "NU",
                        ShortName = "NU",
                        Votes     = candidates.FirstOrDefault().NoVotes,
                    },
                    new CandidateResponse
                    {
                        Name      = "NU AU VOTAT",
                        ShortName = "NU AU VOTAT",
                        Votes     = (results.EligibleVoters - results.TotalVotes).GetValueOrDefault(),
                    }
                };
            }
            else
            {
                var colors = new List <string>();
                var logos  = new List <string>();
                foreach (var candidate in candidates)
                {
                    var matchingParty = parties.GetMatchingParty(candidate.ShortName) ?? parties.FirstOrDefault(p => p.Name.ContainsString(candidate.Name));
                    if (matchingParty != null)
                    {
                        colors.Add(matchingParty.Color);
                        logos.Add(matchingParty.LogoUrl);
                    }
                    else
                    {
                        colors.Add(null);
                        logos.Add(null);
                    }
                }
                results.Candidates = candidates.Select(c => new CandidateResponse
                {
                    ShortName  = c.GetCandidateShortName(ballot),
                    Name       = c.GetCandidateName(ballot),
                    Votes      = c.Votes,
                    PartyColor = c.GetPartyColor(),
                    PartyLogo  = c.Party?.LogoUrl,
                    Seats      = c.TotalSeats != 0 ? c.TotalSeats : c.Seats1 + c.Seats2,
                    TotalSeats = c.TotalSeats != 0 ? c.TotalSeats : c.Seats1 + c.Seats2
                }).ToList();
                for (var i = 0; i < results.Candidates.Count; i++)
                {
                    var candidate = results.Candidates[i];
                    if (candidate.PartyColor.IsEmpty())
                    {
                        candidate.PartyColor = colors[i] ?? Consts.IndependentCandidateColor;
                    }
                    if (candidate.PartyLogo.IsEmpty())
                    {
                        candidate.PartyLogo = logos[i];
                    }
                }
            }

            results.Candidates = results.Candidates.OrderByDescending(c => c.Votes).ToList();
            if (ballot.BallotType == BallotType.Referendum)
            {
                results.Candidates = results.Candidates.OrderForReferendum(ballot.Election);
            }

            return(results);
        }
Exemplo n.º 3
0
        public async Task <Result <ElectionResponse> > GetBallotResults(ElectionResultsQuery query)
        {
            using (var dbContext = _serviceProvider.CreateScope().ServiceProvider.GetService <ApplicationDbContext>())
            {
                var ballot = dbContext.Ballots
                             .AsNoTracking()
                             .Include(b => b.Election)
                             .FirstOrDefault(e => e.BallotId == query.BallotId);
                if (query.CountyId != null &&
                    query.CountyId.Value.IsCapitalCity() &&
                    query.Division == ElectionDivision.County &&
                    ballot.Date.Year == 2020)
                {
                    BallotType ballotType = ballot.BallotType;
                    if (ballot.BallotType == BallotType.Mayor)
                    {
                        ballotType = BallotType.CountyCouncilPresident;
                    }
                    if (ballot.BallotType == BallotType.LocalCouncil)
                    {
                        ballotType = BallotType.CountyCouncil;
                    }
                    ballot = dbContext.Ballots
                             .AsNoTracking()
                             .Include(b => b.Election)
                             .FirstOrDefault(e => e.ElectionId == ballot.ElectionId && e.BallotType == ballotType);
                }
                if (ballot == null)
                {
                    throw new Exception($"No results found for ballot id {query.BallotId}");
                }
                var electionResponse = new ElectionResponse();

                var divisionTurnout =
                    await GetDivisionTurnout(query, dbContext, ballot);

                var electionInfo = await GetCandidatesFromDb(query, ballot, dbContext);

                if (electionInfo.TotalVotes > 0)
                {
                    divisionTurnout = new Turnout
                    {
                        EligibleVoters = divisionTurnout.EligibleVoters,
                        CountedVotes   = electionInfo.TotalVotes,
                        TotalVotes     = divisionTurnout.TotalVotes,
                        ValidVotes     = electionInfo.ValidVotes,
                        NullVotes      = electionInfo.NullVotes
                    };
                }
                ElectionResultsResponse results;
                if (divisionTurnout == null)
                {
                    results = new ElectionResultsResponse
                    {
                        TotalVotes     = 0,
                        EligibleVoters = 0,
                        NullVotes      = 0,
                        ValidVotes     = 0,
                        Candidates     = new List <CandidateResponse>()
                    };
                }
                else
                {
                    var parties = await _partiesRepository.GetAllParties();

                    results = ResultsProcessor.PopulateElectionResults(divisionTurnout, ballot, electionInfo.Candidates, parties.ToList());
                }

                electionResponse.Aggregated  = electionInfo.Aggregated;
                electionResponse.Results     = results;
                electionResponse.Observation = await dbContext.Observations.FirstOrDefaultAsync(o => o.BallotId == ballot.BallotId);

                if (divisionTurnout != null)
                {
                    electionResponse.Turnout = new ElectionTurnout
                    {
                        TotalVotes     = divisionTurnout.TotalVotes,
                        EligibleVoters = divisionTurnout.EligibleVoters,
                    };
                    if (query.Division == ElectionDivision.Diaspora ||
                        query.Division == ElectionDivision.Diaspora_Country)
                    {
                        electionResponse.Turnout.EligibleVoters = electionResponse.Turnout.TotalVotes;
                    }
                }

                electionResponse.Scope = await CreateElectionScope(dbContext, query);

                electionResponse.Meta         = CreateElectionMeta(ballot);
                electionResponse.ElectionNews = await GetElectionNews(dbContext, ballot.BallotId, ballot.ElectionId);

                return(electionResponse);
            }
        }