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()); }
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(); }
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()); }
private PrazoEtapa GetEtapaAnterior(PrazoEtapa prazoEtapa) { Eleicao eleicao = GetEleicao(prazoEtapa.CodigoEleicao); return(eleicao.PrazosEtapas .Where(x => x.Ordem < prazoEtapa.Ordem) .OrderByDescending(x => x.Ordem).FirstOrDefault()); }
private PrazoEtapa GetProximaEtapa(PrazoEtapa prazoEtapa) { Eleicao eleicao = GetEleicao(prazoEtapa.CodigoEleicao); return(eleicao.PrazosEtapas .Where(x => x.Ordem > prazoEtapa.Ordem) .OrderBy(x => x.Ordem).FirstOrDefault()); }
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 }); } }
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); }
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; } }
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(); }
public CronogramaInconsistenteException(PrazoEtapa etapaAnterior, PrazoEtapa etapaPosterior) : base() { EtapaAnterior = etapaAnterior; EtapaPosterior = EtapaPosterior; }