public List <Zona> Agregar(List <Zona> Zonas, int qtdMaxAptos, int TipoAgregacao)
 {
     foreach (Zona z in Zonas)
     {
         foreach (LocalVotacao lv in z.Locais)
         {
             var secoes = lv.Secoes.ToList();
             secoes = secoes.OrderByDescending(s => s.QuantidadeAptosTotal).ToList();
             for (int index = secoes.Count - 1; index >= 0; index = secoes.Count() - 1)
             {
                 Secao sAvaliada = secoes[index];
                 secoes.Remove(sAvaliada);
                 int   aptos     = sAvaliada.QuantidadeAptosTotal;
                 Secao sAgregada = null;
                 while ((secoes.Count > 0) && (qtdMaxAptos - sAvaliada.QuantidadeAptosTotal) > (sAgregada = secoes[0]).QuantidadeAptosTotal)
                 {
                     sAvaliada.Agregadas.Add(sAgregada);
                     sAgregada.SecaoAgregadora = sAvaliada;
                     sAgregada.TipoAgregacao   = TipoAgregacao;
                     secoes.Remove(sAgregada);
                     lv.Secoes.Remove(sAgregada);
                 }
             }
         }
     }
     return(Zonas);
 }
Exemple #2
0
        public List <String> GerarLinhasSecoes(Secao s, int nivel = 0)
        {
            List <String> linhas = new List <string>();

            linhas.Add(GerarLinhaSecao(s, nivel));
            foreach (var ss in s.Agregadas)
            {
                linhas.AddRange(GerarLinhasSecoes(ss, nivel + 1));
            }
            return(linhas);
        }
Exemple #3
0
        public String GerarLinhaSecao(Secao s, int nivel)
        {
            String       Separador = ";";
            Zona         z         = s.LocalVotacao.Zona;
            LocalVotacao lv        = s.LocalVotacao;
            String       linha     = z.Numero.ToString() + Separador +
                                     s.Numero.ToString() + Separador +
                                     lv.Nome + Separador + lv.Numero.ToString() + Separador;

            //Quantidade de Eleitores Aptos Após a Agregação.
            linha += Nivel(s, 0, nivel, Separador);
            linha += Nivel(s, 1, nivel, Separador);
            linha += Nivel(s, 2, nivel, Separador);

            //Quantidade de eleitores Aptos antes da agregação.
            //linha += s.QuantidadeAptos + Separador;
            if (s.SecaoAgregadora == null)
            {
                linha += "-";
            }
            else
            {
                linha += s.SecaoAgregadora.Numero;
            }
            linha += Separador;
            if (s.SecaoAgregadora == null)
            {
                if (s.Agregadas.Count == 0)
                {
                    linha += "-";
                }
                else
                {
                    linha += s.Numero;
                }
            }
            else
            {
                linha += s.SecaoAgregadora.Numero;
            }
            linha += Separador;
            linha += (s.TipoAgregacao == 1 ? "Definitiva" : s.TipoAgregacao == 2 ? "Provisoria" : "-") + Separador;
            linha += s.TTE ? "TTE" : "-";
            return(linha);
        }
Exemple #4
0
        public List <Zona> CarregarArquivo(String caminhoArquivo)
        {
            List <Zona> Zonas  = new List <Zona>();
            var         linhas = File.ReadAllLines(caminhoArquivo);

            foreach (var linha in linhas)
            {
                var          termos = linha.Split(';');
                Secao        s      = new Secao();
                Zona         z      = null;
                LocalVotacao lv     = null;

                int    numSecao  = int.Parse(termos[1]);
                int    numZona   = int.Parse(termos[0]);
                String nomeLocal = termos[3];
                int    numLocal  = int.Parse(termos[2]);
                int    qtdAptos  = int.Parse(termos[4]);

                s.Numero          = numSecao;
                s.QuantidadeAptos = qtdAptos;
                if ((z = Zonas.Where(zx => zx.Numero == numZona).FirstOrDefault()) == null)
                {
                    z = new Zona()
                    {
                        Numero = numZona
                    };
                    Zonas.Add(z);
                }

                s.Zona = z;
                if ((lv = z.Locais.Where(lx => lx.Numero == numLocal && lx.Nome == nomeLocal).FirstOrDefault()) == null)
                {
                    lv = new LocalVotacao()
                    {
                        Numero = numLocal, Nome = nomeLocal
                    };
                    z.Locais.Add(lv);
                    lv.Zona = z;
                }
                lv.Secoes.Add(s);
                s.LocalVotacao = lv;
            }
            return(Zonas);
        }
        public List <Secao> TTE(List <Secao> secoes, int qtdMaxTTE)
        {
            var Zonas = ZonasDeSecoes(secoes);

            foreach (Zona z in Zonas)
            {
                foreach (LocalVotacao lv in z.Locais)
                {
                    var secoesLocal = lv.Secoes.ToList();
                    secoesLocal = secoesLocal.OrderByDescending(s => s.QuantidadeAptosTotal).ToList();
                    int totalAptosLocalVotacao = secoesLocal.Sum(s => s.QuantidadeAptosTotal);
                    int qtdSecoesTTE           = (int)Math.Ceiling((double)totalAptosLocalVotacao / qtdMaxTTE);

                    if (qtdSecoesTTE < lv.Secoes.Count)
                    {
                        List <Secao> SecoesTTE = new List <Secao>();
                        for (int index = 0; index < qtdSecoesTTE; index++)
                        {
                            var SecaoAvaliada = lv.Secoes[0];
                            totalAptosLocalVotacao -= qtdMaxTTE;
                            var secaoTTE = new Secao()
                            {
                                Numero          = SecaoAvaliada.Numero,
                                Municipio       = SecaoAvaliada.Municipio,
                                QuantidadeAptos = Math.Min(totalAptosLocalVotacao, qtdMaxTTE),
                                LocalVotacao    = lv,
                                Zona            = lv.Zona,
                                TTE             = true
                            };
                            secaoTTE.Agregadas.Add(SecaoAvaliada);
                            SecoesTTE.Add(secaoTTE);
                            lv.Secoes.Remove(SecaoAvaliada);
                        }
                        SecoesTTE.Last().Agregadas.AddRange(lv.Secoes);
                        lv.Secoes = SecoesTTE;
                    }
                }
            }
            return(SecoesDeZonas(Zonas));
        }
Exemple #6
0
        private static string Nivel(Secao s, int NivelEscrita, int NivelVerificado, string Separador)
        {
            String linha = "";

            if (NivelEscrita == 0)
            {
                linha += s.QuantidadeAptos;
            }
            else if (NivelEscrita > 0)
            {
                if (s.TipoAgregacao == 0)
                {
                    var Agregadas = s.Agregadas.Where(sa => sa.TipoAgregacao <= NivelEscrita).ToList();
                    linha += Agregadas.Sum(sa => sa.QuantidadeAptosTotal) + s.QuantidadeAptos;
                }
                else if (s.TipoAgregacao > NivelEscrita)
                {
                    var Agregadas = s.Agregadas.Where(sa => sa.TipoAgregacao <= NivelEscrita).ToList();
                    if (Agregadas.Count() > 0)
                    {
                        linha += Agregadas.Sum(sa => sa.QuantidadeAptosTotal) + s.QuantidadeAptos;
                    }
                    else
                    {
                        linha += s.QuantidadeAptos;
                    }
                }
                else
                {
                    linha += "-";
                }
            }
            else
            {
                linha += "-";
            }
            linha += Separador;
            return(linha);
        }