Пример #1
0
        public static bool DeletarPorEletivasAlunos
        (
            ACA_CurriculoDisciplina entity
            , TalkDBTransaction banco
            , Guid ent_id
        )
        {
            if (VerificaCurriculoDisciplina(entity.cur_id, entity.crr_id, entity.crp_id, entity.dis_id, banco))
            {
                ACA_CurriculoPeriodo crp = new ACA_CurriculoPeriodo {
                    cur_id = entity.cur_id, crr_id = entity.crr_id, crp_id = entity.crp_id
                };
                ACA_CurriculoPeriodoBO.GetEntity(crp, banco);

                ACA_Disciplina dis = new ACA_Disciplina {
                    dis_id = entity.dis_id
                };
                ACA_DisciplinaBO.GetEntity(dis, banco);

                throw new ValidationException("Não é possível excluir o(a) " + GestaoEscolarUtilBO.nomePadraoPeriodo(ent_id).ToLower() + " " + crp.crp_descricao + " do(a) " +
                                              CustomResource.GetGlobalResourceObject("Mensagens", "MSG_DISCIPLINA") + " eletiva " + dis.dis_nome + ", pois possui outros registros ligados a ele(a).");
            }

            ACA_CurriculoDisciplinaDAO dao = new ACA_CurriculoDisciplinaDAO {
                _Banco = banco
            };

            return(dao.Update_Situacao_By_EletivasAlunos(entity.cur_id, entity.crr_id, entity.crp_id, entity.dis_id));
        }
Пример #2
0
        /// <summary>
        /// Valida dados necessários para salvar a entidade. Dispara um ValidationException caso não
        /// esteja válida.
        /// </summary>
        /// <param name="entity">Entidade a validar</param>
        /// <param name="banco">Transação com banco do Gestão - obrigatório</param>
        /// <param name="ent_id">Id da entidade do usuário logado.</param>
        private static void ValidaDados(ACA_AlunoCurriculo entity, TalkDBTransaction banco, Guid ent_id)
        {
            //Validação feita no BO devido a alteração de nome dos campos para os diferentes clientes
            if (entity.cur_id <= 0)
            {
                throw new ACA_AlunoCurriculo_ValidationException(GestaoEscolarUtilBO.nomePadraoCurso(ent_id) + " é obrigatório.");
            }

            if (entity.crr_id <= 0)
            {
                throw new ACA_AlunoCurriculo_ValidationException(GestaoEscolarUtilBO.nomePadraoCurso(ent_id) + " é obrigatório.");
            }

            if (entity.crp_id <= 0)
            {
                throw new ACA_AlunoCurriculo_ValidationException(GestaoEscolarUtilBO.nomePadraoPeriodo(ent_id) + " é obrigatório.");
            }

            if (!string.IsNullOrEmpty(entity.alc_matriculaEstadual) && entity.alc_matriculaEstadual.Length > 50)
            {
                throw new ACA_AlunoCurriculo_ValidationException(GestaoEscolarUtilBO.nomePadraoMatriculaEstadual(ent_id) + " pode conter até 50 caracteres.");
            }

            //Se for uma nova matrícula e se a situação dela for 'Ativa' ou 'Em matrícula'
            //Verifica se já existe uma matrícula cadastrada com os mesmos dados
            if (entity.IsNew &&
                (entity.alc_situacao == Convert.ToByte(ACA_AlunoCurriculoSituacao.Ativo) ||
                 entity.alc_situacao == Convert.ToByte(ACA_AlunoCurriculoSituacao.EmMatricula)))
            {
                if (Existe_AlunoCurriculo(entity.alu_id, entity.cur_id, entity.crr_id, entity.crp_id, banco))
                {
                    ESC_Escola esc = new ESC_Escola {
                        esc_id = entity.esc_id
                    };
                    ESC_EscolaBO.GetEntity(esc, banco);

                    ACA_Curso cur = new ACA_Curso {
                        cur_id = entity.cur_id
                    };
                    ACA_CursoBO.GetEntity(cur, banco);

                    ACA_CurriculoPeriodo crp = new ACA_CurriculoPeriodo {
                        cur_id = entity.cur_id, crr_id = entity.crr_id, crp_id = entity.crp_id
                    };
                    ACA_CurriculoPeriodoBO.GetEntity(crp, banco);

                    throw new ACA_AlunoCurriculo_ValidationException("Já existe uma matrícula 'Ativa' ou 'Em matrícula' cadastrada com os mesmos dados: <BR/>" +
                                                                     "Escola: " + esc.esc_nome + "<BR/>" +
                                                                     GestaoEscolarUtilBO.nomePadraoCurso(ent_id) + ": " + cur.cur_nome + "<BR/>" +
                                                                     GestaoEscolarUtilBO.nomePadraoPeriodo(ent_id) + ": " + crp.crp_descricao);
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Verifica se o curso da turma possui avaliação do tipo seriado.
        /// </summary>
        /// <param name="entTurma">Entidade da turma.</param>
        /// <param name="EntFormatoAvaliacao">Entidade do formato de avaliação da turma.</param>
        /// <param name="banco">Transação.</param>
        /// <param name="entCurriculoPeriodo">Entidade do grupamento da turma (parâmatro de sáida)</param>
        /// <param name="Seriado">Flag que indica se o curso ~possui avaliação do tipo seriado (parâmatro de sáida)</param>
        /// <returns></returns>
        public static bool ValidaCursoSeriadoAvaliacao(TUR_Turma entTurma, ACA_FormatoAvaliacao EntFormatoAvaliacao, TalkDBTransaction banco, out ACA_CurriculoPeriodo entCurriculoPeriodo, out bool Seriado)
        {
            Seriado = false;

            List <TUR_TurmaCurriculo> listCurriculos = TUR_TurmaCurriculoBO.GetSelectBy_Turma(entTurma.tur_id, banco, GestaoEscolarUtilBO.MinutosCacheLongo);

            if (listCurriculos.Count == 0)
            {
                throw new Exception("A turma (tur_id: " + entTurma.tur_id + ") não possui nenhum curriculoPeriodo cadastrado.");
            }

            ACA_Curriculo entCurriculo = new ACA_Curriculo
            {
                cur_id = listCurriculos[0].cur_id
                ,
                crr_id = listCurriculos[0].crr_id
            };

            ACA_CurriculoBO.GetEntity(entCurriculo, banco);

            // Se curso for seriado por avaliações - EJA.
            if (entCurriculo.crr_regimeMatricula ==
                (byte)ACA_CurriculoRegimeMatricula.SeriadoPorAvaliacoes)
            {
                Seriado = true;

                if ((EntFormatoAvaliacao.fav_tipo != (byte)ACA_FormatoAvaliacaoTipo.ConceitoGlobal) &&
                    (EntFormatoAvaliacao.fav_tipo != (byte)ACA_FormatoAvaliacaoTipo.GlobalDisciplina))
                {
                    // Curso do EJA não pode efetivar notas por disciplina - não possui ligação
                    // com lançamento por disciplina.
                    throw new ValidationException("O formato de avaliação \"" + EntFormatoAvaliacao.fav_nome +
                                                  "\" deve ser do tipo \"Conceito global\" ou " +
                                                  "\"Conceito global e nota por " + CustomResource.GetGlobalResourceObject("Mensagens", "MSG_DISCIPLINA") + "\", " +
                                                  "pois o curso da turma é seriado por avaliações.");
                }
            }

            entCurriculoPeriodo = new ACA_CurriculoPeriodo
            {
                cur_id = entCurriculo.cur_id
                ,
                crr_id = entCurriculo.crr_id
                ,
                crp_id = listCurriculos[0].crp_id
            };
            ACA_CurriculoPeriodoBO.GetEntity(entCurriculoPeriodo, banco);

            return(true);
        }
Пример #4
0
        /// <summary>
        /// Método que verifica se o turno selecionado é valido com o
        /// currículo do curso.
        /// </summary>
        /// <param name="entTurmaCurriculo">entidade com dados Turma currículo</param>
        /// <param name="trn_id">id do turno</param>
        /// <param name="msgErro">Mensagem de erro</param>
        /// <param name="ent_id">Id da entidade do usuário logado.</param>
        /// <returns>True - caso é compatível o turno com Curriculo Período / False - caso não seja compatível</returns>
        public static bool VerificaTurno(TUR_TurmaCurriculo entTurmaCurriculo, int trn_id, out string msgErro, Guid ent_id)
        {
            msgErro = "";

            ACA_CurriculoPeriodo entity = new ACA_CurriculoPeriodo
            {
                cur_id = entTurmaCurriculo.cur_id
                ,
                crr_id = entTurmaCurriculo.crr_id
                ,
                crp_id = entTurmaCurriculo.crp_id
            };

            ACA_CurriculoPeriodoBO.GetEntity(entity);

            if (ACA_TurnoHorarioBO.GetSelectDiasSemana(trn_id).Rows.Count !=
                entity.crp_qtdeDiasSemana)
            {
                msgErro = "A quantidade de dias da semana que possui aula do(a) " + GestaoEscolarUtilBO.nomePadraoPeriodo(ent_id) + " deve ser o mesmo do turno.";
                return(true);
            }

            // Verifica o tipo de controle de tempo (TemposAula/Horas).
            if (entity.crp_controleTempo == Convert.ToInt32(ACA_CurriculoPeriodoControleTempo.TemposAula))
            {
                //Compara a quantidade de aulas lançadas no currículo período com a quantidades de aulas lançadas no turno.
                if (!(entity.crp_qtdeTemposSemana == ACA_TurnoBO.QuantidadeTemposAulaTurno(trn_id)))
                {
                    msgErro = "A quantidade de tempos de aula de uma semana do(a) " + GestaoEscolarUtilBO.nomePadraoPeriodo(ent_id) + " deve ser o mesmo do turno.";
                    return(true);
                }
            }
            else
            {
                //Faz o calculo da horas de aula na semana definido no currículo período e compara com as horas lançadas no turno.
                if (!((entity.crp_qtdeHorasDia * 60 + entity.crp_qtdeMinutosDia) * entity.crp_qtdeDiasSemana == ACA_TurnoBO.QuantidadeHorasTurno(trn_id)))
                {
                    msgErro = "A quantidade de tempos de aula de uma semana do(a) " + GestaoEscolarUtilBO.nomePadraoPeriodo(ent_id) + " deve ser o mesmo do turno.";
                    return(true);
                }
            }

            return(false);
        }
Пример #5
0
        /// <summary>
        /// Verifica se o tipo de movimentação gera transferencia de matricula do aluno.
        /// </summary>
        /// <param name="tipoMovimento">Tipo do movimento</param>
        /// <returns></returns>
        public static bool VerificarMovimentacaoTransferenciaMatriculaAluno(MTR_Movimentacao_Cadastro cadMov)
        {
            MTR_MovimentacaoDAO daoMov      = new MTR_MovimentacaoDAO();
            TalkDBTransaction   bancoGestao = daoMov._Banco;

            MTR_TipoMovimentacao tmo;

            if (cadMov.listasFechamentoMatricula.listTipoMovimentacao != null)
            {
                // Se os dados do fechamento de matrícula forem alimentados, pegar dados do fechamento.
                tmo = cadMov.listasFechamentoMatricula.listTipoMovimentacao.
                      Find(p => p.tmo_id == cadMov.entMovimentacao.tmo_id) ?? new MTR_TipoMovimentacao();
            }
            else
            {
                tmo = new MTR_TipoMovimentacao {
                    tmo_id = cadMov.entMovimentacao.tmo_id
                };
                MTR_TipoMovimentacaoBO.GetEntity(tmo, daoMov._Banco);
            }

            switch ((MTR_TipoMovimentacaoTipoMovimento)tmo.tmo_tipoMovimento)
            {
            case MTR_TipoMovimentacaoTipoMovimento.MudancaTurma:
            case MTR_TipoMovimentacaoTipoMovimento.MudancaBlocoPEJA:
            case MTR_TipoMovimentacaoTipoMovimento.RenovacaoMatricula:
                return(true);

            case MTR_TipoMovimentacaoTipoMovimento.Adequacao:
                bool isCurriculoPeriodoEJA = ACA_CurriculoPeriodoBO.VerificaCurriculoPeriodoEJA(new ACA_CurriculoPeriodo {
                    cur_id = cadMov.entAluCurNovo.cur_id, crr_id = cadMov.entAluCurNovo.crr_id, crp_id = cadMov.entAluCurNovo.crp_id
                }, bancoGestao);
                return(!(cadMov.entAluCurAnterior.cur_id == cadMov.entAluCurNovo.cur_id &&
                         cadMov.entAluCurAnterior.crr_id == cadMov.entAluCurNovo.crr_id &&
                         cadMov.entAluCurAnterior.crp_id == cadMov.entAluCurNovo.crp_id &&
                         isCurriculoPeriodoEJA) &&
                       cadMov.entAluCurAnterior.esc_id == cadMov.entAluCurNovo.esc_id &&
                       cadMov.entAluCurAnterior.uni_id == cadMov.entAluCurNovo.uni_id);

            case MTR_TipoMovimentacaoTipoMovimento.MudancaModalidaeEnsino:
                return(cadMov.entAluCurAnterior.esc_id == cadMov.entAluCurNovo.esc_id &&
                       cadMov.entAluCurAnterior.uni_id == cadMov.entAluCurNovo.uni_id);

            case MTR_TipoMovimentacaoTipoMovimento.Reclassificacao:
                ACA_CurriculoPeriodo entCurPerAnterior = new ACA_CurriculoPeriodo
                {
                    cur_id = cadMov.entAluCurAnterior.cur_id,
                    crr_id = cadMov.entAluCurAnterior.crr_id,
                    crp_id = cadMov.entAluCurAnterior.crp_id
                };
                ACA_CurriculoPeriodoBO.GetEntity(entCurPerAnterior, bancoGestao);

                ACA_CurriculoPeriodo entCurPerNovo = new ACA_CurriculoPeriodo
                {
                    cur_id = cadMov.entAluCurNovo.cur_id,
                    crr_id = cadMov.entAluCurNovo.crr_id,
                    crp_id = cadMov.entAluCurNovo.crp_id
                };
                ACA_CurriculoPeriodoBO.GetEntity(entCurPerNovo, bancoGestao);

                // Alterado para pegar os cursos/períodos equivalentes com o curso de destino.
                List <ACA_CurriculoPeriodo> listPeriodosEquivalentes = ACA_CurriculoPeriodoBO.Seleciona_PeriodosRelacionados_Equivalentes(cadMov.entAluCurNovo.cur_id, cadMov.entAluCurNovo.crr_id, cadMov.entAluCurNovo.crp_id);

                return(((entCurPerAnterior.cur_id == entCurPerNovo.cur_id && entCurPerAnterior.crr_id == entCurPerNovo.crr_id) ||
                        (listPeriodosEquivalentes.Count > 0 && listPeriodosEquivalentes.Exists(p => p.cur_id == entCurPerNovo.cur_id && p.crr_id == entCurPerNovo.crr_id))) &&
                       !(entCurPerAnterior.crp_ordem == entCurPerNovo.crp_ordem &&
                         ACA_CurriculoPeriodoBO.VerificaCurriculoPeriodoEJA(entCurPerNovo, bancoGestao) &&
                         entCurPerNovo.crp_turmaAvaliacao) &&
                       entCurPerAnterior.crp_ordem == entCurPerNovo.crp_ordem - 1 &&
                       cadMov.entAluCurAnterior.esc_id == cadMov.entAluCurNovo.esc_id &&
                       cadMov.entAluCurAnterior.uni_id == cadMov.entAluCurNovo.uni_id);

            default:
                return(false);
            }
        }
Пример #6
0
        /// <summary>
        /// Valida e configura se a turma destino possui a mesma avaliação turma atual do aluno.
        /// </summary>
        /// <param name="cadMov">Estrutura de movimentação</param>
        /// <param name="progressaoPEJA">Verifica se o método é chamado pela tela de progressão</param>
        /// <param name="bancoGestao">Transação com banco Gestão - obrigatório</param>
        public static void ConfiguraTurmaAvaliacao(MTR_Movimentacao_Cadastro cadMov, bool progressaoPEJA, TalkDBTransaction bancoGestao)
        {
            List <ACA_CurriculoPeriodo> listPeriodosEquivalentes = ACA_CurriculoPeriodoBO.
                                                                   Seleciona_PeriodosRelacionados_Equivalentes(cadMov.entAluCurAnterior.cur_id, cadMov.entAluCurAnterior.crr_id, cadMov.entAluCurAnterior.crp_id);

            // Apenas valida a avaliação da turma caso seja o mesmo Curso/Período.
            // Também verifica se os cursos são equivalentes
            if (
                ((cadMov.entAluCurAnterior.cur_id == cadMov.entAluCurNovo.cur_id) &&
                 (cadMov.entAluCurAnterior.crr_id == cadMov.entAluCurNovo.crr_id) &&
                 (cadMov.entAluCurAnterior.crp_id == cadMov.entAluCurNovo.crp_id)) ||
                (listPeriodosEquivalentes.Count > 0 && listPeriodosEquivalentes.Exists(p => p.cur_id == cadMov.entAluCurNovo.cur_id &&
                                                                                       p.crr_id == cadMov.entAluCurNovo.crr_id &&
                                                                                       p.crp_id == cadMov.entAluCurNovo.crp_id)))
            {
                // Apenas valida a avaliação da turma caso definido a turma destino.
                if (cadMov.entMatTurNovo.tur_id > 0)
                {
                    ACA_CurriculoPeriodo entityCurriculoPeriodo = new ACA_CurriculoPeriodo {
                        cur_id = cadMov.entAluCurAnterior.cur_id, crr_id = cadMov.entAluCurAnterior.crr_id, crp_id = cadMov.entAluCurAnterior.crp_id
                    };
                    ACA_CurriculoPeriodoBO.GetEntity(entityCurriculoPeriodo, bancoGestao);

                    TUR_TurmaCurriculoAvaliacao entityTurmaCurriculoAvaliacaoAtual = new TUR_TurmaCurriculoAvaliacao {
                        tur_id = cadMov.entAluCurAvaAnterior.tur_id, cur_id = cadMov.entAluCurAvaAnterior.cur_id, crr_id = cadMov.entAluCurAvaAnterior.crr_id, crp_id = cadMov.entAluCurAvaAnterior.crp_id, tca_id = cadMov.entAluCurAvaAnterior.tca_id
                    };
                    TUR_TurmaCurriculoAvaliacaoBO.GetEntity(entityTurmaCurriculoAvaliacaoAtual, bancoGestao);
                    if (entityTurmaCurriculoAvaliacaoAtual.tca_id > 0)
                    {
                        TUR_TurmaCurriculoAvaliacao entityTurmaCurriculoAvaliacaoDestino;
                        string msg;

                        if (!progressaoPEJA)
                        {
                            // Verifica se a turma destino possui a avaliação da turma origem.
                            entityTurmaCurriculoAvaliacaoDestino =
                                TUR_TurmaCurriculoAvaliacaoBO.SelecionaAvaliacaoExistenteParaTurma(cadMov.entMatTurNovo.tur_id,
                                                                                                   cadMov.entAluCurNovo.cur_id,
                                                                                                   cadMov.entAluCurNovo.crr_id,
                                                                                                   cadMov.entAluCurNovo.crp_id,
                                                                                                   entityTurmaCurriculoAvaliacaoAtual.tca_numeroAvaliacao);
                            msg = "A turma destino do aluno deve possuir o(a) mesmo(a) " +
                                  GestaoEscolarUtilBO.nomePadraoPeriodoAvaliacao(entityCurriculoPeriodo.crp_nomeAvaliacao) + " atual do aluno.";
                        }
                        else
                        {
                            entityTurmaCurriculoAvaliacaoDestino = new TUR_TurmaCurriculoAvaliacao
                            {
                                tur_id = cadMov.entMatTurNovo.tur_id
                                ,
                                cur_id = cadMov.entAluCurAvaNovo.cur_id
                                ,
                                crr_id = cadMov.entAluCurAvaNovo.crr_id
                                ,
                                crp_id = cadMov.entAluCurAvaNovo.crp_id
                                ,
                                tca_id = cadMov.entAluCurAvaNovo.tca_id
                            };
                            TUR_TurmaCurriculoAvaliacaoBO.GetEntity(entityTurmaCurriculoAvaliacaoDestino, bancoGestao);
                            msg = "A turma destino do aluno não possui o(a) " +
                                  GestaoEscolarUtilBO.nomePadraoPeriodoAvaliacao(entityCurriculoPeriodo.crp_nomeAvaliacao) + " configurada para o aluno.";
                        }

                        if ((entityTurmaCurriculoAvaliacaoDestino != null) && (entityTurmaCurriculoAvaliacaoDestino.tca_id > 0))
                        {
                            // Configura o currículo avaliação novo com mesma avaliação, caso necessário.
                            if (cadMov.entAluCurAvaNovo.tca_id <= 0)
                            {
                                cadMov.entAluCurAvaNovo.alu_id = cadMov.entAluCurNovo.alu_id;
                                cadMov.entAluCurAvaNovo.tur_id = entityTurmaCurriculoAvaliacaoDestino.tur_id;
                                cadMov.entAluCurAvaNovo.cur_id = entityTurmaCurriculoAvaliacaoDestino.cur_id;
                                cadMov.entAluCurAvaNovo.crr_id = entityTurmaCurriculoAvaliacaoDestino.crr_id;
                                cadMov.entAluCurAvaNovo.crp_id = entityTurmaCurriculoAvaliacaoDestino.crp_id;
                                cadMov.entAluCurAvaNovo.tca_id = entityTurmaCurriculoAvaliacaoDestino.tca_id;
                            }
                        }
                        else
                        {
                            throw new ValidationException(msg);
                        }
                    }
                    else
                    {
                        throw new ValidationException("Não é possível realizar essa movimentação, pois o aluno não possui " +
                                                      GestaoEscolarUtilBO.nomePadraoPeriodoAvaliacao(entityCurriculoPeriodo.crp_nomeAvaliacao) + " ativo(a) na turma.");
                    }
                }
            }
        }
Пример #7
0
        public new static bool Delete
        (
            MTR_ParametroTipoMovimentacaoCurriculoPeriodo entity
            , Data.Common.TalkDBTransaction banco
            , Guid ent_id
        )
        {
            MTR_ParametroTipoMovimentacaoCurriculoPeriodoDAO dao = new MTR_ParametroTipoMovimentacaoCurriculoPeriodoDAO();

            if (banco == null)
            {
                dao._Banco.Open(IsolationLevel.ReadCommitted);
            }
            else
            {
                dao._Banco = banco;
            }

            try
            {
                // Verifica se o curso período do parâmetro de movimentação pode ser deletado
                if (GestaoEscolarUtilBO.VerificaIntegridadaChaveDupla("tmo_id", "tmp_id", entity.tmo_id.ToString(), entity.tmp_id.ToString(), "MTR_TipoMovimentacaoCurriculoPeriodo,MTR_ParametroTipoMovimentacaoCurriculoPeriodo", dao._Banco))
                {
                    MTR_TipoMovimentacaoCurriculoPeriodo tmp = new MTR_TipoMovimentacaoCurriculoPeriodo {
                        tmo_id = entity.tmo_id, tmp_id = entity.tmp_id
                    };
                    MTR_TipoMovimentacaoCurriculoPeriodoBO.GetEntity(tmp, dao._Banco);

                    ACA_Curso cur = new ACA_Curso {
                        cur_id = tmp.cur_id
                    };
                    ACA_CursoBO.GetEntity(cur, dao._Banco);

                    ACA_CurriculoPeriodo crp = new ACA_CurriculoPeriodo {
                        cur_id = tmp.cur_id, crr_id = tmp.crr_id, crp_id = tmp.crp_id
                    };
                    ACA_CurriculoPeriodoBO.GetEntity(crp, dao._Banco);

                    throw new ValidationException("Não é possível excluir o(a) " + GestaoEscolarUtilBO.nomePadraoCurso(ent_id).ToLower() + " " + cur.cur_nome + " e " + GestaoEscolarUtilBO.nomePadraoPeriodo(ent_id).ToLower() + " " + crp.crp_descricao + " pois possui outros registros ligados a ele(a).");
                }

                // Deleta logicamente o parâmetro do curso período para parâmetro de movimentação
                dao.Delete(entity);

                return(true);
            }
            catch (Exception err)
            {
                if (banco == null)
                {
                    dao._Banco.Close(err);
                }

                throw;
            }
            finally
            {
                if (banco == null)
                {
                    dao._Banco.Close();
                }
            }
        }
Пример #8
0
        /// <summary>
        /// Validar idade do aluno de acordo com o CurriculoPeriodo no qual ele está inserido.
        /// Valida a idade máxima ideal + a amplitude do parâmetro acadêmico ou o valor informado
        /// no parâmetro amplitude.
        /// Valida a idade mínima ideal quando informado através da flag validarIdadeMinima - quando
        /// informada sempre valida usando a amplitudo passada por parâmetro na função.
        /// </summary>
        /// <param name="entity">Entidade AlunoCurriculo carregada</param>
        /// <param name="bancoGestao">Transação com banco Gestão - obrigatório</param>
        /// <param name="bancoCore">Transação com banco CoreSSO - opcional</param>
        /// <param name="validarIdadeMinima">Flag que indica se é pra validar idade mínima também</param>
        /// <param name="amplitude">Amplitude, se > 0, substitui a amplitude do parâmetro acadêmico</param>
        /// <param name="ent_id">Id da entidade do usuário logado.</param>
        /// <returns>Se idade válida</returns>
        internal static bool ValidarIdadeIdeal
        (
            ACA_AlunoCurriculo entity
            , TalkDBTransaction bancoGestao
            , TalkDBTransaction bancoCore
            , bool validarIdadeMinima
            , int amplitude
            , Guid ent_id
        )
        {
            ACA_Aluno entAluno = new ACA_Aluno {
                alu_id = entity.alu_id
            };

            ACA_AlunoBO.GetEntity(entAluno, bancoGestao);

            if (entAluno.alu_situacao != Convert.ToByte(ACA_AlunoSituacao.Inativo))
            {
                if (entity.alc_situacao == Convert.ToByte(ACA_AlunoCurriculoSituacao.Ativo) ||
                    entity.alc_situacao == Convert.ToByte(ACA_AlunoCurriculoSituacao.EmMatricula))
                {
                    ACA_CurriculoPeriodo entCurPer = new ACA_CurriculoPeriodo {
                        cur_id = entity.cur_id, crr_id = entity.crr_id, crp_id = entity.crp_id
                    };
                    ACA_CurriculoPeriodoBO.GetEntity(entCurPer, bancoGestao);

                    PES_Pessoa entPessoa = new PES_Pessoa {
                        pes_id = entAluno.pes_id
                    };
                    if (bancoCore == null)
                    {
                        PES_PessoaBO.GetEntity(entPessoa);
                    }
                    else
                    {
                        PES_PessoaBO.GetEntity(entPessoa, bancoCore);
                    }

                    // Quantidade de meses da idade máxima da criança cadastrada no CurrPeriodo.
                    int idadeMaxima = (entCurPer.crp_idadeIdealAnoFim * 12) + entCurPer.crp_idadeIdealMesFim;

                    if (amplitude > 0)
                    {
                        idadeMaxima += amplitude;
                    }
                    else
                    {
                        int pac_valor = ACA_ParametroAcademicoBO.ParametroValorInt32PorEntidade(eChaveAcademico.AMPLITUDE_IDADE_ALERTA, ent_id);

                        // Soma quantidade em meses do parâmetro de amplitude.
                        idadeMaxima += (pac_valor > 0 ? (pac_valor * 12) : 0);
                    }

                    // Valida a quantidade de meses da idade da criança.
                    int anos, meses, dias;
                    GestaoEscolarUtilBO.CalculaAniversarioCompleto(DateTime.Now, entPessoa.pes_dataNascimento, out anos, out meses, out dias);

                    int idade = (anos * 12) + meses;

                    if (idade > idadeMaxima)
                    {
                        anos  = idadeMaxima / 12;
                        meses = idadeMaxima % 12;

                        string sAnos  = anos > 0 ? (anos + (anos > 1 ? " anos" : " ano")) : string.Empty;
                        string sMeses = meses > 0 ? (anos > 0 ? " e " : "") + meses + (meses > 1 ? " meses" : " mês") : string.Empty;
                        throw new ACA_Aluno_ValidationException("A idade do aluno não pode ser maior que " + sAnos + sMeses + ".");
                    }

                    ACA_Curriculo curso = ACA_CurriculoBO.GetEntity(new ACA_Curriculo {
                        cur_id = entity.cur_id, crr_id = entity.crr_id
                    });

                    if (validarIdadeMinima &&
                        curso.crr_regimeMatricula == 3 &&
                        ACA_ParametroAcademicoBO.ParametroValorBooleanoPorEntidade(eChaveAcademico.VALIDAR_IDADE_MINIMA_PEJA, ent_id))
                    {
                        // Quantidade de meses da idade máxima da criança cadastrada no CurrPeriodo.
                        int idadeMinima = (entCurPer.crp_idadeIdealAnoInicio * 12) + entCurPer.crp_idadeIdealMesInicio;

                        idadeMinima -= amplitude;

                        if (idade < idadeMinima)
                        {
                            anos  = idadeMinima / 12;
                            meses = idadeMinima % 12;

                            string sAnos  = anos > 0 ? (anos + (anos > 1 ? " anos" : " ano")) : string.Empty;
                            string sMeses = meses > 0 ? (anos > 0 ? " e " : "") + meses + (meses > 1 ? " meses" : " mês") : string.Empty;
                            throw new ACA_Aluno_ValidationException("A idade do aluno não pode ser menor que " + sAnos + sMeses + ".");
                        }
                    }
                }
            }

            return(true);
        }