예제 #1
0
        private void SalvaResultado(int codEleicao)
        {
            VotosService     votosService = new VotosService();
            ResultadoEleicao resultado    = null;
            ResultadoDTO     todos        = votosService.GetResultado(codEleicao);

            Eleicao eleicao = GetEleicao(codEleicao);

            int qtdaTotal = GetQtdaFuncionarios(codEleicao);
            int qtdaVotos = votosService.GetQtdaVotos(codEleicao);

            if (((float)qtdaVotos / (float)qtdaTotal) < 0.5)
            {
                throw new VotosInsuficientesException(qtdaTotal % 2 == 1 ? (int)((qtdaTotal + 1) / 2) : (int)(qtdaTotal / 2));
            }


            foreach (CandidatoEleitoDTO q in todos.Efetivos)
            {
                resultado = new ResultadoEleicao
                {
                    CodigoEleicao        = codEleicao,
                    CodigoEmpresa        = eleicao.Unidade.CodigoEmpresa,
                    RazaoSocial          = eleicao.Unidade.Empresa.RazaoSocial,
                    MatriculaFuncionario = q.MatriculaFuncionario,
                    Login        = q.Login,
                    Cargo        = q.Cargo,
                    Area         = q.Area,
                    DataAdmissao = q.DataAdmissao,
                    QtdaVotos    = q.QtdaVotos,
                    Thumbnail    = q.Thumbnail,
                    Foto         = db.FuncionariosFotos.Where(x => x.FuncionarioId == q.Id).FirstOrDefault()?.Foto,
                    Efetivo      = true
                };
                db.ResultadosEleicoes.AddOrUpdate(resultado);
            }

            foreach (CandidatoEleitoDTO q in todos.Suplentes)
            {
                resultado = new ResultadoEleicao
                {
                    CodigoEleicao        = codEleicao,
                    CodigoEmpresa        = eleicao.Unidade.CodigoEmpresa,
                    RazaoSocial          = eleicao.Unidade.Empresa.RazaoSocial,
                    MatriculaFuncionario = q.MatriculaFuncionario,
                    Login        = q.Login,
                    Cargo        = q.Cargo,
                    Area         = q.Area,
                    DataAdmissao = q.DataAdmissao,
                    QtdaVotos    = q.QtdaVotos,
                    Thumbnail    = q.Thumbnail,
                    Foto         = db.FuncionariosFotos.Where(x => x.FuncionarioId == q.Id).FirstOrDefault()?.Foto,
                    Efetivo      = false
                };
                db.ResultadosEleicoes.AddOrUpdate(resultado);
            }

            db.SaveChanges();
        }
        /// <summary>
        /// Verifica se o Funcionário é elegível (não pode ter sido eleito duas vezes consecutivas)
        /// </summary>
        /// <param name="c"></param>
        /// <returns></returns>
        private bool Elegivel(Candidato c, Eleicao eleicao, Funcionario func)
        {
            VotosService            votosService = new VotosService();
            List <ResultadoEleicao> resultados   = votosService.VerificarEleicoesPorFuncionario(c.FuncionarioId, func.Login);

            int anoPassado   = eleicao.DataInicio.Year - 1;
            int anoRetrasado = anoPassado - 1;

            return(!resultados.Any(x => x.Eleicao.DataInicio.Year == anoPassado) && !resultados.Any(x => x.Eleicao.DataInicio.Year == anoRetrasado));
        }
예제 #3
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);
        }