public IHttpActionResult GetEleicoes(int?codigoModulo = null, bool?aberta = null) { try { ICollection <Eleicao> eleicoes = eleicoesService.GetEleicoes(codigoModulo, aberta).ToList(); if (!User.IsInRole("Administrador")) { eleicoes = eleicoes.Where(e => e.Funcionarios.Any(f => f.Login == User.Identity.Name)).ToList(); } return(Ok(eleicoes .Select((Eleicao x) => { EleicaoQtdaRepresentantesDTO representantes = eleicoesService.GetQtdaRepresentantes(x.Codigo); QtdaEleicaoDTO qtda = new QtdaEleicaoDTO { TotalFuncionarios = eleicoesService.GetQtdaFuncionarios(x.Codigo), Efetivos = representantes.Efetivos, Suplentes = representantes.Suplentes, TotalCandidatos = candidatosService.GetQtdaCandidatos(x.Codigo) }; return new EleicaoDTO(x, qtda); }).ToList())); } catch { return(Content(HttpStatusCode.InternalServerError, "Ocorreu um erro desconhecido. Por favor, entre em contato com o suporte.")); } }
private QtdaEleicaoDTO GetQtda(Eleicao eleicao) { EleicaoQtdaRepresentantesDTO qtda = GetQtdaRepresentantes(eleicao.Codigo); return(new QtdaEleicaoDTO { TotalFuncionarios = eleicao.Funcionarios?.Count ?? 0, TotalCandidatos = eleicao.Candidatos?.Count ?? 0, Efetivos = qtda.Efetivos, Suplentes = qtda.Suplentes }); }
public Eleicao ProximaEtapa(Eleicao eleicao, Usuario user) { PrazoEtapa etapaAtual = db.PrazosEtapas.Find(eleicao.Codigo, eleicao.CodigoEtapa); PrazoEtapa proxima = GetProximaEtapa(eleicao); // Verifica se a data atual é maior que a data prevista para o encerramento do período de candidatura, // se há candidatos suficientes e se não existem candidaturas pendentes de aprovação if (etapaAtual.CodigoEtapa == 4 || etapaAtual.CodigoEtapa == 19) { EleicaoQtdaRepresentantesDTO qtda = GetQtdaRepresentantes(eleicao.Codigo); int qtdaCandidatos = eleicao.Candidatos.Count(); //if (proxima.DataProposta.GetValueOrDefault().Date > DateTime.Today) // throw new AntesDataPrevistaException(proxima.DataProposta.GetValueOrDefault()); if (etapaAtual.Eleicao.Candidatos.Count(x => x.Validado == null) > 0) { throw new CandidaturasPendentesException(); } if ((qtda.Efetivos + qtda.Suplentes) > qtdaCandidatos) { throw new CandidatosInsuficientesException(qtdaCandidatos, qtda.Efetivos, qtda.Suplentes); } } // Verifica se a data atual é maior que a data prevista para o encerramento do período de votação e // se há votos suficientes para o encerramento desse período if (etapaAtual.CodigoEtapa == 9 || etapaAtual.CodigoEtapa == 24) { VotosService votosService = new VotosService(); ResultadoDTO todos = votosService.GetResultado(eleicao.Codigo); int qtdaTotal = GetQtdaFuncionarios(eleicao.Codigo); int qtdaVotos = votosService.GetQtdaVotos(eleicao.Codigo); if (((float)qtdaVotos / (float)qtdaTotal) < 0.5) { throw new VotosInsuficientesException(qtdaTotal % 2 == 1 ? (int)((qtdaTotal + 1) / 2) : (int)(qtdaTotal / 2)); } } PassarParaProximaEtapa(eleicao, user); return(eleicao); }
public EleicaoQtdaRepresentantesDTO GetQtdaRepresentantes(int codEleicao) { Eleicao eleicao = GetEleicao(codEleicao); float total = GetQtdaFuncionarios(eleicao.Codigo); EleicaoQtdaRepresentantesDTO retorno = null; if (eleicao.CodigoModulo == 1) { //CIPA QtdaGrupo qtEfetivos = db.QtdasGrupos .Where(x => x.CodigoGrupo == eleicao.Unidade.CodigoGrupo && x.QtdaMin <= total && x.Efetivo) .OrderByDescending(x => x.QtdaMin) .FirstOrDefault(); QtdaGrupo qtSuplentes = db.QtdasGrupos .Where(x => x.CodigoGrupo == eleicao.Unidade.CodigoGrupo && x.QtdaMin <= total && !x.Efetivo) .OrderByDescending(x => x.QtdaMin) .FirstOrDefault(); if (qtEfetivos == null || qtSuplentes == null) { throw new QtdaMinCipeiroGrupoNaoEncontradaException(eleicao.Unidade.CodigoGrupo, GetQtdaFuncionarios(eleicao.Codigo)); } int acrescimo = total > qtEfetivos.AcrescimoLimite.QtdaLimite ? (int)Math.Floor(((total - qtEfetivos.AcrescimoLimite.QtdaLimite) / qtEfetivos.AcrescimoLimite.IntervaloLimite) * qtEfetivos.AcrescimoLimite.QtdaAcrescimo) : 0; retorno = new EleicaoQtdaRepresentantesDTO(eleicao, qtEfetivos.Valor + acrescimo, qtSuplentes.Valor + acrescimo); } else //COMISSÃO { QtdaComissaoInterna q = db.QtdasComissaoInterna.Where(x => x.QtdaMin >= total).FirstOrDefault(); retorno = new EleicaoQtdaRepresentantesDTO(eleicao, q.Valor, 0); } return(retorno); }
public ResultadoDTO GetResultado(int codEleicao) { EleicoesService eleicoesService = new EleicoesService(); EleicaoQtdaRepresentantesDTO qtda = eleicoesService.GetQtdaRepresentantes(codEleicao); IEnumerable <CandidatoEleitoDTO> query = db.Candidatos.Where(x => x.CodigoEleicao == codEleicao).ToList() .Select(x => new CandidatoEleitoDTO(x, db.Votos.Count(y => y.FuncionarioIdCandidato == x.FuncionarioId && y.CodigoEleicao == codEleicao))) .OrderByDescending(x => x.QtdaVotos).ThenBy(x => x.DataAdmissao).ThenBy(x => x.DataNascimento).ThenBy(x => x.Nome).Take(qtda.Efetivos + qtda.Suplentes); if (query.Count() < (qtda.Suplentes + qtda.Efetivos)) { throw new CandidatosInsuficientesException(query.Count(), qtda.Efetivos, qtda.Suplentes); } ResultadoDTO resultado = new ResultadoDTO { Efetivos = query.Take(qtda.Efetivos).ToList(), Suplentes = query.Reverse().Take(qtda.Suplentes).Reverse().ToList() }; return(resultado); }