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); }