示例#1
0
        public void EnsureVoteStatsCalculate_Certified()
        {
            var stats = new VoteStatistics();

            var passedDictionary = new Dictionary <int, int>()
            {
                { 1, 5 },
                { 2, 5 },
                { 3, 5 },
            };


            stats.Raw.Add(VoteRestrictionStatus.Certified,
                          passedDictionary
                          );

            var allstats = stats.All;

            var friendly = stats.Friendly;

            Assert.IsNotNull(friendly);
            Assert.AreEqual(1, friendly.Keys.Count);

            //foreach (var key in friendly.Keys)
            //{
            //    var friendlyDictionary = friendly[key];
            //    var sum = friendlyDictionary.Values.Sum(x => x.Percentage);
            //    sum = Math.Round(sum);
            //    Assert.AreEqual(1, sum);

            //    Dictionary<int, int> dict = stats.All[key];

            //    if (key == VoteRestrictionStatus.All)
            //    {
            //        var keys = passedDictionary.Keys.Union(failedDictionary.Keys);
            //        var summedold = keys.ToDictionary(k => k, k => (passedDictionary.Keys.Contains(k) ? passedDictionary[k] : 0) + (failedDictionary.Keys.Contains(k) ? failedDictionary[k] : 0));

            //        dict = summedold;
            //    }
            //    else if (key == VoteRestrictionStatus.Certified)
            //    {
            //        dict = passedDictionary;
            //    }
            //    else if (key == VoteRestrictionStatus.Uncertified)
            //    {
            //        dict = failedDictionary;
            //    }

            //    Assert.AreEqual(friendlyDictionary.Count, dict.Count);

            //    var dictCount = dict.Values.Sum();
            //    var friendCount = friendlyDictionary.TotalCount;
            //    Assert.AreEqual(dictCount, friendCount);

            //    foreach (var keyPair in friendlyDictionary)
            //    {
            //        Assert.AreEqual(keyPair.Value.Count, dict[keyPair.Key]);
            //    }
            //}
        }
        //GetVotes
        public async Task <VoteStatistics> GetVoteStatistics(int id)
        {
            var result = new VoteStatistics();

            var data = (from v in _db.VoteTracker
                        where v.VoteID == id
                        group v by new { v.RestrictionsPassed, v.VoteOptionID } into g
                        select new {
                g.Key.RestrictionsPassed,
                g.Key.VoteOptionID,
                Count = g.Count()
            }).ToList();

            var passed = data.Where(x => x.RestrictionsPassed).ToDictionary(x => x.VoteOptionID, y => y.Count);
            var failed = data.Where(x => !x.RestrictionsPassed).ToDictionary(x => x.VoteOptionID, y => y.Count);

            result.VoteID = id;
            if (passed != null && passed.Count > 0)
            {
                result.Raw.Add(VoteRestrictionStatus.Certified, passed);
            }
            if (failed != null && failed.Count > 0)
            {
                result.Raw.Add(VoteRestrictionStatus.Uncertified, failed);
            }

            return(result);
        }
示例#3
0
        public void EnsureVoteStatsCalculate_Empty()
        {
            var stats    = new VoteStatistics();
            var allstats = stats.All;
            var friendly = stats.Friendly;

            Assert.IsNotNull(friendly);
            Assert.AreEqual(0, friendly.Keys.Count);
        }
        internal async Task <ResultsResponse> ResultsAction(string id)
        {
            return(await Task.Run(async() =>
            {
                List <VoteStatistics> parties = new List <VoteStatistics>();
                int votants = 0;
                int population = 0;
                int pending = 0;
                string name = null;
                var gender = new GenderStatistic();
                try
                {
                    using (var context = new SystemDBContext())
                    {
                        if (id != "0")
                        {
                            votants = (from st in context.Blocks
                                       where st.RegionId == Int32.Parse(id)
                                       select st.BlockId).Count();
                            name = (from st in context.Regions
                                    where st.RegiondId == Int32.Parse(id)
                                    select st.RegionName).Single().ToString();

                            //-----------------Number of parties to count------------------
                            for (int i = 1; i <= context.Parties.Count(); i++)
                            {
                                var party = new VoteStatistics();
                                party.IDParty = i;
                                party.Votes = (from st in context.Blocks
                                               where st.PartyId == party.IDParty &&
                                               st.RegionId == Int32.Parse(id)
                                               select st).Count();
                                party.Color = context.Parties.Where(x => x.PartyId == party.IDParty).SingleOrDefault()
                                              ?.Color;
                                party.Name = context.Parties.Where(x => x.PartyId == party.IDParty).SingleOrDefault()
                                             ?.PartyName;
                                parties.Add(party);
                            }

                            //-----------------Population------------------
                            population = (from st in context.FiscData
                                          where st.Region == name
                                          select st.Idnp).Count();

                            //-----------------Number of male gender voters------------------
                            gender.Male = (from st in context.Blocks
                                           where st.Gender == "Masculin" &&
                                           st.RegionId == Int32.Parse(id)
                                           select st).Count();
                            //-----------------Number of female gender voters------------------
                            gender.Female = (from st in context.Blocks
                                             where st.Gender == "Feminin" &&
                                             st.RegionId == Int32.Parse(id)
                                             select st).Count();
                        }
                        else
                        {
                            name = "Republica Moldova";
                            votants = (from st in context.Blocks
                                       select st.BlockId).Count();
                            //-----------------Number of parties to count------------------
                            for (int i = 1; i <= 5; i++)
                            {
                                var party = new VoteStatistics();
                                party.IDParty = i;
                                var Name = context.Parties.Where(x => x.PartyId == party.IDParty).SingleOrDefault()
                                           ?.PartyName;

                                party.Votes = (from st in context.Blocks
                                               where st.PartyId == party.IDParty
                                               select st).Count();
                                party.Color = context.Parties.Where(x => x.PartyId == party.IDParty).SingleOrDefault()
                                              ?.Color;
                                party.Name = context.Parties.Where(x => x.PartyId == party.IDParty).SingleOrDefault()
                                             ?.PartyName;

                                parties.Add(party);
                            }

                            population = (from st in context.FiscData
                                          select st.Idnp).Count();
                            pending = (from st in context.IdvnAccounts
                                       select st.Idvn).Count();
                            gender.Male = (from st in context.Blocks
                                           where st.Gender == "Masculin"
                                           select st).Count();
                            gender.Female = (from st in context.Blocks
                                             where st.Gender == "Feminin"
                                             select st).Count();
                        }
                    }
                }

                catch (Exception e)
                {
                    _logger.Error("Results | " + e.Message);
                }

                return new ResultsResponse
                {
                    Name = name,
                    Time = DateTime.Now,
                    TotalVotes = parties,
                    Votants = votants,
                    Population = population,
                    Pending = pending,
                    GenderStatistics = gender
                };
            }));
        }