Пример #1
0
        private void GlobalStats_Shown(object sender, EventArgs e)
        {
            // no vote record is currently in database
            voteAppEntities dbContext = DbUtils.AppEntities;

            if (dbContext.Votes.Any() == false)
            {
                return;
            }

            if (_mapTotalVote.Count == 0)
            {
                // map total vote
                foreach (Partido partie in dbContext.Partidos)
                {
                    long totalVote = dbContext.Votes.Where(v => v.idPartido == partie.Id && v.provinceId == _user.ProvinceId)
                                     .Sum(v => v.voteData);
                    _mapTotalVote.Add(partie.Id, totalVote);
                }
            }

            listViewGlobalStats.BeginUpdate();
            foreach (Partido partie in DbUtils.AppEntities.Partidos)
            {
                // ignore disabled parties
                if (partie.Enabled == false)
                {
                    continue;
                }
                ListViewItem lvi = new ListViewItem(partie.Name)
                {
                    Tag = partie,
                };
                listViewGlobalStats.Items.Add(lvi);
            }

            if (comboBoxDisplayResultBy.Items.Count > 0)
            {
                comboBoxDisplayResultBy.SelectedIndex = 0;
            }

            listViewGlobalStats.EndUpdate();
        }
Пример #2
0
        public Main(User loginUser)
        {
            InitializeComponent();

            FormClosed += Main_FormClosed;

            textBoxInvalidVote.KeyDown += UIUtils.TextBoxKeyDownHandler;
            textBoxRegistered.KeyDown  += UIUtils.TextBoxKeyDownHandler;
            textBoxVote.KeyDown        += UIUtils.TextBoxKeyDownHandler;

            DbContext  = DbUtils.AppEntities;
            _loginUser = loginUser;
#if !DEBUG
            groupBoxAddVote.Enabled = loginUser.Type == TypeUser.Admin;
#endif

            InitUI();

            //this.listViewVotes.rectangle
            //buttonAddVote.Paint += (o, args) => ButtonAddVote_Paint(o, args);
        }
        private void InitUI(TypeUser typsUser)
        {
            LayoutButtons();

            if (typsUser == TypeUser.SuperAdmin)
            {
                labelProvince.Enabled    = false;
                labelProvince.Visible    = false;
                comboBoxProvince.Enabled = false;
                comboBoxProvince.Visible = false;
            }
            else
            {
                using (voteAppEntities dbContext = new voteAppEntities())
                {
                    foreach (Province province in dbContext.Provinces)
                    {
                        comboBoxProvince.Items.Add(new DisplayItem <Province>(province));
                    }
                }
            }
        }
Пример #4
0
        public LoginForm()
        {
            InitializeComponent();
            DbContext = DbUtils.AppEntities;

            // try fixing problem, control not redrawing itself.
            Shown += delegate
            {
                //Invalidate();
                Refresh();
            };

            // directoryEntry1
            // var result = directorySearcher1.FindOne();

#if DEBUG
            foreach (CheckBox checkbox in groupBox1.Controls.OfType <CheckBox>())
            {
                checkbox.Enabled         = true;
                checkbox.CheckedChanged += Checkbox_CheckedChanged;
            }
#endif
        }
Пример #5
0
 static DbUtils()
 {
     AppEntities = new voteAppEntities();
     BuildPreDefinedDataBase();
 }
        private void ButtonSubmit_Click(object sender, EventArgs e)
        {
            // validation
            string userName        = textBoxUserName.Text;
            string fullName        = textBoxFullName.Text;
            string password        = textBoxPassword.Text;
            string passwordConfirm = textBoxConfirmPassword.Text;

            if (!DataValidator.IsValidUserName(userName))
            {
                return;
            }
            if (!DataValidator.IsValidFullName(fullName))
            {
                return;
            }
            if (!DataValidator.IsValidPassword(password, passwordConfirm))
            {
                return;
            }

            bool isProvinceAdmin = _configs.TypeUser == TypeUser.Admin;

            if (isProvinceAdmin && comboBoxProvince.SelectedItem == null)
            {
                return;
            }

            (string hashPassword, string salt) = PwdUtils.GetSaltyPassword(password);

            // create new super admin
            User newUser = new User
            {
                DateCreation = DateTime.Now,
                FullName     = fullName,
                Password     = hashPassword,
                Salt         = salt,
                Enabled      = true,
                Name         = userName,
                Type         = isProvinceAdmin ? TypeUser.Admin : TypeUser.SuperAdmin,
                OwnerId      = 0,
                ProvinceId   = isProvinceAdmin ? ((DisplayItem <Province>)comboBoxProvince.SelectedItem).Item.Id : 0
            };

            using (voteAppEntities dbContext = new voteAppEntities())
            {
                // check if admin for the selected province doesn't already exits
                if (_configs.TypeUser == TypeUser.Admin)
                {
                    if (dbContext.Users.Any(user => user.ProvinceId == newUser.ProvinceId))
                    {
                        MessageBox.Show("Province already contain a admin, please choose another province");
                        // deselect selected province
                        return;
                    }
                }
                dbContext.Users.Add(newUser);
                dbContext.SaveChanges();
                User = newUser;
            }

            MessageBox.Show("User added succesfully", "User added with success", MessageBoxButtons.OK, MessageBoxIcon.Information);

            if (_configs.TypeUser == TypeUser.SuperAdmin)
            {
                ButtonButtonOK_Click(null, null);
            }
            else
            {
                ClearControls();
            }
        }
Пример #7
0
        // ReSharper disable once InconsistentNaming
        private void InitUI()
        {
            // banners
            panelBanner.BackColor       = Configurations.PartieInfo.PrimaryColor;
            statusStripBanner.BackColor = Configurations.PartieInfo.SecondaryColor;

            voteAppEntities dbContext = DbUtils.AppEntities;

            // init combobox province
            comboBoxByProvince.BeginUpdate();

            // linq doesn't support init with param
            //comboBoxByProvince.Items.AddRange(dbContext.Provinces.OrderBy(p => p.Name).Select(p => new DisplayItem<Province>(p)).ToArray());
            foreach (Province item in dbContext.Provinces.OrderBy(p => p.Name))
            {
                comboBoxByProvince.Items.Add(new DisplayItem <Province>(item));
            }

            comboBoxByProvince.SelectedIndexChanged -= ComboBoxByProvince_SelectedIndexChanged;
            // sel first item
            if (comboBoxByProvince.Items.Count > 0)
            {
                comboBoxByProvince.SelectedIndex = 0;
            }

            comboBoxByProvince.EndUpdate();
            comboBoxByProvince.SelectedIndexChanged += ComboBoxByProvince_SelectedIndexChanged;

            #region ListView

            listViewLegislative.BeginUpdate();
            listViewLegislative.Columns.Clear();

            listViewLegislative.Items.Clear();

            listViewLegislative.Columns.Add(new ColumnHeader()
            {
                Text = "Partido", Width = 108,
            });

            foreach (Province province in dbContext.Provinces.OrderBy(p => p.Id))
            {
                listViewLegislative.Columns.Add(new ColumnHeader()
                {
                    Text = province.Name, Width = 108,
                });
            }

            // add parties

            //var items = dbContext.Partidos.Select(p => new ListViewItem(p.Name) { Tag = p }).ToArray();

            foreach (IGrouping <int, Vote> item in dbContext.Votes.GroupBy(v => v.idPartido))
            {
                Partido partie = dbContext.Partidos.FirstOrDefault(p => p.Id == item.Key);
                if (partie == null)
                {
                    continue;
                }

                ListViewItem lvi = new ListViewItem(partie.Name)
                {
                    Tag = partie.Id
                };

                foreach (IGrouping <int, Vote> vote in item.OrderBy(i => i.provinceId).GroupBy(v => v.provinceId))
                {
                    int numberOfMpPerProvine = vote.Sum(v => v.voteData) / _mpPerElectoralCircle;
                    lvi.SubItems.Add(numberOfMpPerProvine.ToString());
                }

                listViewLegislative.Items.Add(lvi);
            }

            listViewLegislative.EndUpdate();

            #endregion

            #region Chart

            UpdateChart();

            #endregion
        }
Пример #8
0
        private void UpdateChart()
        {
            if (DbUtils.AppEntities.Votes.Any() == false)
            {
                return;
            }

            voteAppEntities dbContext = DbUtils.AppEntities;

            chart1.BeginInit();

            Series series = chart1.Series.FirstOrDefault();

            series.Points.Clear();

            if (series == null)
            {
                Debug.WriteLine("NO SERIE FOUND!");
                return;
            }

            Province selProvince = ((DisplayItem <Province>)comboBoxByProvince.SelectedItem).Item;
            // calculate top 5 partie with more MP (deputados)
            IGrouping <int, Vote> provinceVote = dbContext.Votes.GroupBy(v => v.provinceId).FirstOrDefault(g => g.Key == selProvince.Id);

            // find top five partie with more vote
            var topFivePartieWithMoreVote = provinceVote.GroupBy(v => v.idPartido)
                                            .Select(v => new { PartieId = v.Key, TotalVote = v.Sum(vt => vt.voteData) })
                                            .OrderByDescending(t => t.TotalVote)
                                            .Take(5);

            // variante #1
            double totalVotePerSelProvince = dbContext.Votes.Where(v => v.provinceId == selProvince.Id)
                                             .Sum(v => v.voteData);

            // variante #2
            double totalMPInSelProvince = dbContext.Votes.Where(v => v.provinceId == selProvince.Id)
                                          .Sum(v => v.voteData) / _mpPerElectoralCircle;

            foreach (var topFivePartie in topFivePartieWithMoreVote)
            {
                Partido partie = dbContext.Partidos.First(p => p.Id == topFivePartie.PartieId);

                //double partieTotalVoteInSelProvince = dbContext.Votes
                //    .Where(v => v.provinceId == selProvince.Id && v.idPartido == partie.Id)
                //    .Sum(v => v.voteData);

                double partieTotalMPInProvince = dbContext.Votes
                                                 .Where(v => v.provinceId == selProvince.Id &&
                                                        v.idPartido == partie.Id)
                                                 .Sum(v => v.voteData) / totalMPInSelProvince;

                DataPoint dp = new DataPoint()
                {
                    LegendText = partie.Name,                                                                          // name displayed in legend column
                    Label      =
                        $"{partie.Name} - {partieTotalMPInProvince / totalMPInSelProvince * Math.Pow(10, 3):00.00} %", // name display in cicle
                };

                dp.SetValueY(topFivePartie.TotalVote);

                series.Points.Add(dp);
            }

            //series.Points.ad
            chart1.EndInit();
        }
Пример #9
0
        /// <summary>
        /// Available only for user that statistic user
        /// </summary>
        /// <param name="displayType"></param>
        private void UpdateListViewColumns(DisplayType displayType)
        {
            // NO VOTE IN DB!
            if (DbUtils.AppEntities.Votes.Any() == false)
            {
                return;
            }

            /* NOT REALLY!
             * if (displayType == DisplayType.None)
             * {
             *  listViewGlobalStats.BeginUpdate();
             *  listViewGlobalStats.Items.Clear();
             *  listViewGlobalStats.EndUpdate();
             *  return;
             * }
             */

            listViewGlobalStats.BeginUpdate();
            listViewGlobalStats.Columns.Clear(); // !
            listViewGlobalStats.Items.Clear();

            listViewGlobalStats.Columns.Add("Partidos", 108, HorizontalAlignment.Center);

            // TODO: Keep this static!
            foreach (Partido partie in DbUtils.AppEntities.Partidos)
            {
                listViewGlobalStats.Items.Add(new ListViewItem(partie.Name)
                {
                    Tag = partie
                });
            }

            //var gfx = listViewGlobalStats.CreateGraphics();
            voteAppEntities dbContext = DbUtils.AppEntities;

            bool displayAll             = _user.Type == TypeUser.SuperAdmin || _user.Type == TypeUser.Standard;
            IQueryable <Region> regions = dbContext.Regions.Where(r => r.idProvince == _user.ProvinceId || displayAll);

            switch (displayType)
            {
            case DisplayType.Província:
                // init columns
                foreach (Province province in DbUtils.AppEntities.Provinces.OrderBy(p => p.Id))
                {
                    //var size = gfx.MeasureString(province.Name, listViewGlobalStats.Font);
                    //var width = (int)Math.Round(size.Width + 4.5);
                    listViewGlobalStats.Columns.Add(province.Name, 108, HorizontalAlignment.Center);
                }
                listViewGlobalStats.Columns.Add("Total", (int)Math.Round(108 * 1.5), HorizontalAlignment.Center);

                // add datas
                foreach (ListViewItem itemPartie in listViewGlobalStats.Items)
                {
                    Partido partie   = itemPartie.Tag as Partido;
                    long    totalSum = dbContext.Votes.Where(v => v.idPartido == partie.Id).Sum(v => v.voteData);
                    itemPartie.SubItems.Add(totalSum.ToString());
                }
                break;

            case DisplayType.Região:

                // add columns region
                foreach (Region region in regions.OrderBy(r => r.Id))
                {
                    listViewGlobalStats.Columns.Add(region.Name, 108, HorizontalAlignment.Center);
                }

                listViewGlobalStats.Columns.Add("Total", (int)Math.Round(108 * 1.5), HorizontalAlignment.Center);
                foreach (ListViewItem itemPartie in listViewGlobalStats.Items)
                {
                    Partido partie = itemPartie.Tag as Partido;
                    foreach (IGrouping <int, Vote> voteGroup in dbContext.Votes.Where(v => v.provinceId == _user.ProvinceId || displayAll).GroupBy(v => v.idRegion))
                    {
                        int sum = voteGroup.Where(v => v.idPartido == partie.Id).OrderBy(vote => vote.idRegion).Sum(v => v.voteData);
                        itemPartie.SubItems.Add(sum.ToString());
                    }
                    itemPartie.SubItems.Add(_mapTotalVote[partie.Id].ToString());
                }

                break;

            case DisplayType.Sector:
                foreach (Region item in regions)
                {
                    foreach (Sector sector in item.sectors.OrderBy(sector => sector.Id))
                    {
                        listViewGlobalStats.Columns.Add(sector.Name, 108, HorizontalAlignment.Center);
                    }
                }
                listViewGlobalStats.Columns.Add("Total", (int)Math.Round(108 * 1.5), HorizontalAlignment.Center);

                //foreach (var sector in regions.Sectors.Where(sec => sec.Region.idProvince == _user.ProvinceId || displayAll).OrderBy(sector => sector.Id))
                //{
                //    //var size = gfx.MeasureString(sector.Name, listViewGlobalStats.Font);
                //    //var width = (int)Math.Round(size.Width + 4.5);
                //    listViewGlobalStats.Columns.Add(sector.Name, 108, HorizontalAlignment.Center);
                //    //listViewGlobalStats.Columns.Insert(listViewGlobalStats.Columns.Count, sector.Name);
                //}

                foreach (ListViewItem itemPartie in listViewGlobalStats.Items)
                {
                    Partido partie = itemPartie.Tag as Partido;
                    foreach (IGrouping <int, Vote> voteGroup in dbContext.Votes.Where(v => v.provinceId == _user.ProvinceId || displayAll).GroupBy(v => v.idSector))
                    {
                        // voteGroup.Key == region
                        int result = voteGroup.Where(v => v.idPartido == partie.Id).OrderBy(vote => vote.idSector).Sum(v => v.voteData);
                        itemPartie.SubItems.Add(result.ToString());
                    }
                    itemPartie.SubItems.Add(_mapTotalVote[partie.Id].ToString());
                }

                //foreach (ListViewItem item in listViewGlobalStats.Items)
                //{
                //    var partie = (Partido)item.Tag;
                //    var totalVote = dbContext.Votes.Where(v => v.Id == partie.Id).Sum(v => v.voteData);
                //    item.SubItems.Add(totalVote.ToString());
                //}

                break;

            case DisplayType.CE:

                foreach (CE ce in regions.SelectMany(s => s.sectors).SelectMany(ce => ce.CEs).OrderBy(ce => ce.Id))
                {
                    //var size = gfx.MeasureString(ce.Name, listViewGlobalStats.Font);
                    //var width = (int)Math.Round(size.Width + 4.5);

                    listViewGlobalStats.Columns.Add(ce.Name, 108, HorizontalAlignment.Center);
                    //listViewGlobalStats.Columns.Insert(listViewGlobalStats.Columns.Count, ce.Name);
                }
                listViewGlobalStats.Columns.Add("Total", (int)Math.Round(108 * 1.5), HorizontalAlignment.Center);
                foreach (ListViewItem itemPartie in listViewGlobalStats.Items)
                {
                    Partido partie = itemPartie.Tag as Partido;
                    foreach (IGrouping <int, Vote> voteGroup in dbContext.Votes.Where(v => v.provinceId == _user.ProvinceId || displayAll).GroupBy(v => v.idCE))
                    {
                        // voteGroup.Key == region
                        int result = voteGroup.Where(v => v.idPartido == partie.Id).OrderBy(vote => vote.idCE).Sum(v => v.voteData);
                        itemPartie.SubItems.Add(result.ToString());
                    }
                    itemPartie.SubItems.Add(_mapTotalVote[partie.Id].ToString());
                }
                break;

            case DisplayType.Mesa:
                foreach (VoteTable table in regions.SelectMany(s => s.sectors).SelectMany(ce => ce.CEs).OrderBy(ce => ce.Id).SelectMany(ce => ce.voteTables).OrderBy(vt => vt.Id))
                {
                    //var size = gfx.MeasureString(table.Name, listViewGlobalStats.Font);
                    //var width = (int)Math.Round(size.Width + 4.5);
                    listViewGlobalStats.Columns.Add(table.Name, 108, HorizontalAlignment.Center);
                    //listViewGlobalStats.Columns.Insert(listViewGlobalStats.Columns.Count, table.Name);
                }
                listViewGlobalStats.Columns.Add("Total", (int)Math.Round(108 * 1.5), HorizontalAlignment.Center);
                foreach (ListViewItem itemPartie in listViewGlobalStats.Items)
                {
                    Partido partie = itemPartie.Tag as Partido;
                    foreach (IGrouping <int, Vote> voteGroup in dbContext.Votes.Where(v => v.provinceId == _user.ProvinceId || displayAll).GroupBy(v => v.idVoteTable))
                    {
                        // voteGroup.Key == region
                        int result = voteGroup.Where(v => v.idPartido == partie.Id).OrderBy(vote => vote.idVoteTable).Sum(v => v.voteData);
                        itemPartie.SubItems.Add(result.ToString());
                    }
                    itemPartie.SubItems.Add(_mapTotalVote[partie.Id].ToString());
                }
                //foreach (ListViewItem item in listViewGlobalStats.Items)
                //{
                //    var partie = (Partido)item.Tag;
                //    var totalVote = dbContext.Votes.Where(v => v.Id == partie.Id).Sum(v => v.voteData);
                //    item.SubItems.Add(totalVote.ToString());
                //}
                break;
            }

            listViewGlobalStats.EndUpdate();
        }