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