public IHttpActionResult PutPrazoEtapa(int codEleicao, PrazoEtapa prazo)
        {
            if (prazo.CodigoEleicao != codEleicao)
            {
                return(Content(HttpStatusCode.BadRequest, "Código de Eleição inconsistente"));
            }

            try
            {
                eleicoesService.AtualizaPrazoEtapa(prazo);
            }
            catch (CronogramaInconsistenteException e)
            {
                return(Content(HttpStatusCode.BadRequest, e.Message));
            }
            catch (EleicaoNaoEncontradaException)
            {
                return(Content(HttpStatusCode.NotFound, "Eleição não cadastrada!"));
            }
            catch
            {
                return(Content(HttpStatusCode.InternalServerError, "Ocorreu um erro desconhecido. Por favor, entre em contato com o suporte."));
            }

            return(Ok());
        }
Exemple #2
0
        private void PassarParaProximaEtapa(Eleicao eleicao, Usuario user)
        {
            PrazoEtapa etapaAtual = db.PrazosEtapas.Find(eleicao.Codigo, eleicao.CodigoEtapa);

            PrazoEtapa proxima = GetProximaEtapa(eleicao);

            PrazoEtapa ultima = eleicao.PrazosEtapas.Where(x => x.Etapa.CodigoModulo == eleicao.CodigoModulo)
                                .OrderByDescending(x => x.Ordem).FirstOrDefault();

            if (proxima == null && etapaAtual != ultima)
            {
                throw new EleicaoEncerradaException(eleicao);
            }

            if (proxima != null)
            {
                proxima.DataRealizada = DateTime.Today;
            }
            else
            {
                eleicao.DataFechamento = DateTime.Today;
                SalvaResultado(eleicao.Codigo);
            }

            eleicao.CodigoEtapa = proxima?.CodigoEtapa;

            db.SaveChanges();
        }
Exemple #3
0
        private PrazoEtapa GetProximaEtapa(Eleicao eleicao)
        {
            PrazoEtapa etapaAtual = db.PrazosEtapas.Find(eleicao.Codigo, eleicao.CodigoEtapa);

            return(eleicao.PrazosEtapas
                   .Where(x => x.Ordem > etapaAtual.Ordem)
                   .OrderBy(x => x.Ordem).FirstOrDefault());
        }
Exemple #4
0
        private PrazoEtapa GetEtapaAnterior(PrazoEtapa prazoEtapa)
        {
            Eleicao eleicao = GetEleicao(prazoEtapa.CodigoEleicao);

            return(eleicao.PrazosEtapas
                   .Where(x => x.Ordem < prazoEtapa.Ordem)
                   .OrderByDescending(x => x.Ordem).FirstOrDefault());
        }
Exemple #5
0
        private PrazoEtapa GetProximaEtapa(PrazoEtapa prazoEtapa)
        {
            Eleicao eleicao = GetEleicao(prazoEtapa.CodigoEleicao);

            return(eleicao.PrazosEtapas
                   .Where(x => x.Ordem > prazoEtapa.Ordem)
                   .OrderBy(x => x.Ordem).FirstOrDefault());
        }
Exemple #6
0
        private void Load(Eleicao e)
        {
            EtapasService etapasService = new EtapasService();

            PrazosEtapasObj = new HashSet <PrazosEtapasDTO>();

            if (e == null)
            {
                return;
            }
            Codigo          = e.Codigo;
            Gestao          = e.Gestao;
            DataInicio      = e.DataInicio;
            DataFechamento  = e.DataFechamento;
            CodigoEtapa     = e.CodigoEtapa;
            CodigoUnidade   = e.CodigoUnidade;
            CodigoModulo    = e.CodigoModulo;
            CodigoSindicato = e.CodigoSindicato;
            if (e.Modulo != null)
            {
                NomeModulo = e.Modulo.NomeModulo;
            }
            if (e.EtapaAtual != null)
            {
                NomeEtapa = e.EtapaAtual.NomeEtapa;
            }
            if (e.Unidade != null)
            {
                UnidadeObj = new UnidadeDTO(e.Unidade);
            }
            if (e.Sindicato != null)
            {
                SindicatoObj = new SindicatoDTO(e.Sindicato);
            }

            foreach (Etapa etapa in etapasService.GetEtapas(CodigoModulo))
            {
                PrazoEtapa prazo = e.PrazosEtapas?.FirstOrDefault(x => x.CodigoEtapa == etapa.CodigoEtapa);

                if (e.CodigoEtapa == prazo.CodigoEtapa)
                {
                    OrdemEtapa = prazo.Ordem ?? etapa.Ordem.Value;
                }

                ((HashSet <PrazosEtapasDTO>)PrazosEtapasObj).Add(new PrazosEtapasDTO
                {
                    CodigoEtapa    = etapa.CodigoEtapa,
                    CodigoEleicao  = Codigo,
                    NomeEtapa      = etapa.NomeEtapa,
                    DataRealizada  = prazo?.DataRealizada,
                    DataProposta   = prazo?.DataProposta,
                    Ordem          = prazo.Ordem ?? etapa.Ordem.Value,
                    CodigoTemplate = etapa.CodigoTemplate
                });
            }
        }
Exemple #7
0
        public Eleicao SalvarComCronograma(EleicaoDTO eleicao)
        {
            if (!unidadesService.UnidadeExiste(eleicao.CodigoUnidade))
            {
                throw new UnidadeNaoEncontradaException(eleicao.CodigoUnidade);
            }

            if (eleicao.CodigoSindicato.HasValue && !sindicatosService.SindicatoExiste(eleicao.CodigoSindicato.Value) && eleicao.CodigoModulo == 1)
            {
                throw new SindicatoNaoEncontradoException(eleicao.CodigoSindicato.Value);
            }

            Eleicao nova = new Eleicao
            {
                CodigoEtapa     = db.Etapas.Where(x => x.CodigoEtapa == db.Etapas.Where(y => y.CodigoModulo == eleicao.CodigoModulo).Min(y => y.CodigoEtapa)).FirstOrDefault()?.CodigoEtapa,
                CodigoUnidade   = eleicao.CodigoUnidade,
                CodigoModulo    = eleicao.CodigoModulo,
                Gestao          = eleicao.Gestao,
                CodigoSindicato = eleicao.CodigoSindicato == 0 ? null : eleicao.CodigoSindicato,
                DataInicio      = eleicao.DataInicio
            };

            db.Eleicoes.Add(nova);

            PrazoEtapa EtapaAnterior = null;

            foreach (PrazosEtapasDTO pe in eleicao.PrazosEtapasObj.OrderBy(x => x.Ordem))
            {
                if (EtapaAnterior != null && pe.DataProposta < EtapaAnterior.DataProposta)
                {
                    throw new CronogramaInconsistenteException(pe.GetPrazoEtapa(), EtapaAnterior);
                }
                PrazoEtapa p = new PrazoEtapa
                {
                    CodigoEleicao = nova.Codigo,
                    CodigoEtapa   = pe.CodigoEtapa,
                    DataProposta  = pe.DataProposta,
                    DataRealizada = pe.DataRealizada,
                    Ordem         = pe.Ordem
                };

                if (pe.CodigoEtapa == 1)
                {
                    p.DataRealizada = DateTime.Today;
                }

                db.PrazosEtapas.Add(p);
                EtapaAnterior = p;
            }

            db.SaveChanges();

            return(nova);
        }
        public PrazoEtapa GetPrazoEtapa()
        {
            PrazoEtapa p = new PrazoEtapa
            {
                CodigoEleicao = CodigoEleicao,
                CodigoEtapa   = CodigoEtapa,
                DataRealizada = DataRealizada,
                DataProposta  = DataProposta
            };

            return(p);
        }
Exemple #9
0
        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 PrazosEtapasDTO(PrazoEtapa p)
 {
     if (p == null)
     {
         return;
     }
     CodigoEleicao = p.CodigoEleicao;
     CodigoEtapa   = p.CodigoEtapa;
     DataRealizada = p.DataRealizada;
     DataProposta  = p.DataProposta;
     if (p.Etapa != null)
     {
         Ordem          = p.Etapa.CodigoEtapa;
         NomeEtapa      = p.Etapa.NomeEtapa;
         CodigoTemplate = p.Etapa.CodigoTemplate;
     }
 }
Exemple #11
0
        public void AtualizaPrazoEtapa(PrazoEtapa prazo)
        {
            PrazoEtapa anterior = GetEtapaAnterior(prazo);

            if (anterior != null && prazo.DataProposta.GetValueOrDefault().Date < anterior.DataProposta.GetValueOrDefault().Date)
            {
                throw new CronogramaInconsistenteException("A data deve ser maior que a data proposta para a etapa anterior (" + anterior.DataProposta.Value.ToString("dd/MM/yy") + ")");
            }

            PrazoEtapa proximo = GetProximaEtapa(prazo);

            if (proximo != null && prazo.DataProposta.GetValueOrDefault().Date > proximo.DataProposta.GetValueOrDefault().Date)
            {
                throw new CronogramaInconsistenteException("A data deve ser menor que a data proposta para a próxima etapa (" + proximo.DataProposta.Value.ToString("dd/MM/yy") + ")");
            }


            db.PrazosEtapas.AddOrUpdate(prazo);
            db.SaveChanges();
        }
Exemple #12
0
 public CronogramaInconsistenteException(PrazoEtapa etapaAnterior, PrazoEtapa etapaPosterior) : base()
 {
     EtapaAnterior  = etapaAnterior;
     EtapaPosterior = EtapaPosterior;
 }