示例#1
0
        private async Task <LiveElectionInfo> GetCandidatesFromDb(ElectionResultsQuery query, Ballot ballot,
                                                                  ApplicationDbContext dbContext)
        {
            LiveElectionInfo liveElectionInfo = new LiveElectionInfo();

            if (ballot.Election.Live && ballot.AllowsDivision(query.Division, query.LocalityId.GetValueOrDefault()))
            {
                try
                {
                    int?siruta;
                    var county = await _territoryRepository.GetCountyById(query.CountyId);

                    if (query.LocalityId.GetValueOrDefault().IsCapitalCity() && query.Division == ElectionDivision.County)
                    {
                        siruta = null;
                    }
                    else
                    {
                        var locality = await _territoryRepository.GetLocalityById(query.LocalityId);

                        if (locality.IsFailure)
                        {
                            return(LiveElectionInfo.Default);
                        }
                        siruta = locality.IsSuccess ? locality.Value?.Siruta : null;
                    }
                    if (county.IsFailure)
                    {
                        return(LiveElectionInfo.Default);
                    }

                    var countyShortName = county.IsSuccess ? county.Value.ShortName : null;
                    var url             = _liveElectionUrlBuilder.GetFileUrl(ballot.BallotType, query.Division, countyShortName, siruta);
                    if (url.IsFailure)
                    {
                        return(LiveElectionInfo.Default);
                    }
                    liveElectionInfo = await _csvDownloaderJob.GetCandidatesFromUrl(url.Value);

                    var candidates = liveElectionInfo.Candidates;
                    var parties    = await dbContext.Parties.ToListAsync();

                    var candidatesForThisElection = await GetCandidateResultsFromQueryAndBallot(query, ballot, dbContext);

                    var dbCandidates = new List <CandidateResult>();
                    if (candidates == null)
                    {
                        liveElectionInfo.Candidates = dbCandidates;
                        return(liveElectionInfo);
                    }
                    foreach (var candidate in candidates)
                    {
                        dbCandidates.Add(PopulateCandidateData(candidatesForThisElection, candidate, parties, ballot));
                    }

                    liveElectionInfo.Candidates = dbCandidates;
                    return(liveElectionInfo);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Probably there are no votes ");
                    Console.WriteLine(e);
                    return(new LiveElectionInfo());
                }
            }
            if (ballot.Election.Category == ElectionCategory.Local && query.CountyId.GetValueOrDefault().IsCapitalCity() == false)
            {
                if (!ballot.AllowsDivision(query.Division, query.LocalityId.GetValueOrDefault()) && !ballot.Election.Live)
                {
                    var aggregatedVotes = await RetrieveAggregatedVotes(query, ballot);

                    liveElectionInfo.Candidates = aggregatedVotes;
                    return(liveElectionInfo);
                }
            }

            var results = await GetCandidateResultsFromQueryAndBallot(query, ballot, dbContext);

            liveElectionInfo.Candidates = results;
            return(liveElectionInfo);
        }