/// <summary> /// Validação da data de movimentação, pois a data atual não pode ser anterior a última. /// </summary> /// <param name="dataMovimentacao">Data da movimentação</param> /// <param name="alu_id">Id do aluno</param> /// <param name="ent_id">Id da entidade</param> /// <param name="tmo_id">Id do tipo de movimentação</param> /// <param name="bancoGestao">Conexão aberta com o banco de dados</param> /// <param name="listasFechamentoMatricula">Listas carregadas com dados do fechamento de matrícula</param> public static void ValidaDataMovimentacao ( DateTime dataMovimentacao, long alu_id, Guid ent_id, int tmo_id, TalkDBTransaction bancoGestao, FormacaoTurmaBO.ListasFechamentoMatricula listasFechamentoMatricula = null ) { dataMovimentacao = dataMovimentacao == new DateTime() ? DateTime.Now : dataMovimentacao; // Recupera o último currículo do aluno, caso exista. ACA_AlunoCurriculo entityUltimoAlunoCurriculo; ACA_AlunoCurriculoBO.CarregaUltimoCurriculo(alu_id, out entityUltimoAlunoCurriculo); MTR_TipoMovimentacao tmo = null; if (listasFechamentoMatricula != null && listasFechamentoMatricula.listTipoMovimentacao != null) { // Se a lista de fechamento de matrícula foi passada, busca o tipo de movimentação dela ao invés de dar GetEntity. tmo = listasFechamentoMatricula.listTipoMovimentacao. Find(p => p.tmo_id == tmo_id); } if (tmo == null) { tmo = new MTR_TipoMovimentacao { tmo_id = tmo_id }; MTR_TipoMovimentacaoBO.GetEntity(tmo, bancoGestao); } // Verifica a data da movimentação, necessário no caso de ações retroativas. if ((entityUltimoAlunoCurriculo.alc_dataPrimeiraMatricula != new DateTime()) && (entityUltimoAlunoCurriculo.alc_dataPrimeiraMatricula.Date > dataMovimentacao.Date) || (entityUltimoAlunoCurriculo.alc_dataSaida != new DateTime()) && (entityUltimoAlunoCurriculo.alc_dataSaida.Date > dataMovimentacao.Date)) { throw new ValidationException("Data da movimentação não pode ser anterior à data da última matrícula do aluno."); } DateTime dataRealizacaoUltimaMovimentacao = MTR_TipoMovimentacaoBO.SelecionaDataRealizacaoUltimaMovimentacao(alu_id, bancoGestao); if (dataRealizacaoUltimaMovimentacao != new DateTime() && dataMovimentacao.Date < dataRealizacaoUltimaMovimentacao.Date) { throw new ValidationException("Data da movimentação não pode ser anterior à data da última movimentação do aluno."); } if ((MTR_TipoMovimentacaoTipoMovimento)tmo.tmo_tipoMovimento == MTR_TipoMovimentacaoTipoMovimento.Falecimento && dataMovimentacao.Date > DateTime.Now.Date) { throw new ValidationException("Data da movimentação deve ser menor ou igual à " + DateTime.Now.ToString("dd/MM/yyyy") + "."); } }
/// <summary> /// Valida os dados necessários para realizar qualquer movimentação. /// Dispara uma ValidationException caso haja algum problema. /// </summary> /// <param name="cadMov">Entidade de cadastro de movimentação</param> /// <param name="alu">Entidade do aluno</param> /// <param name="tmo">Entidade tipo de movimentação</param> /// <param name="bancoGestao">Transação com banco - obrigatório</param> private static void ValidaDadosMovimentacao(MTR_Movimentacao_Cadastro cadMov, MTR_TipoMovimentacao tmo, ACA_Aluno alu, TalkDBTransaction bancoGestao) { bool isValidInicioMovimentacao; bool isValidFechamentoMovimentacao; // Valida se está no momento configurado na movimentação. MTR_TipoMovimentacaoBO.VerificaPeriodoValidoMovimentacao(cadMov.entMatTurAnterior, cadMov.entAluCurAnterior, cadMov.entMovimentacao.tmo_id, bancoGestao, cadMov.entMovimentacao.mov_dataRealizacao, out isValidInicioMovimentacao, out isValidFechamentoMovimentacao, cadMov.listasFechamentoMatricula); if (!isValidInicioMovimentacao) { throw new ValidationException("Não é possível realizar esse tipo de movimentação nesse momento do calendário escolar."); } if ((cadMov.entMatTurNovo != null) && (cadMov.entMatTurNovo.tur_id > 0)) { // Verificar se a turma que o aluno vai entrar é do tipo 1-Normal. TUR_Turma entTurmaDestino = null; if (cadMov.listasFechamentoMatricula.listTurma != null) { // Se a lista de fechamento foi alimentada, buscar entidade da lista. entTurmaDestino = cadMov.listasFechamentoMatricula.listTurma.Find(p => p.tur_id == cadMov.entMatTurNovo.tur_id); } if (entTurmaDestino == null) { entTurmaDestino = new TUR_Turma { tur_id = cadMov.entMatTurNovo.tur_id }; TUR_TurmaBO.GetEntity(entTurmaDestino, bancoGestao); } if (entTurmaDestino.tur_tipo != (byte)TUR_TurmaTipo.Normal) { throw new ValidationException("Não é possível movimentar o aluno para a turma " + entTurmaDestino.tur_codigo + "."); } } }
/// <summary> /// Retorna se a escola de origem vai ser responsável pelo lançamento de notas /// </summary> /// <param name="tur_id"></param> /// <param name="dataMovimentacao"></param> /// <param name="ent_id"></param> /// <returns> /// True: Lançamento de notas será pela escola de origem /// False: Lançamento de notas será definido pelo usuário /// </returns> public static bool VerificaEfetivacaoEscolaOrigem(long tur_id, DateTime dataMovimentacao, Guid ent_id) { TUR_Turma tur = new TUR_Turma { tur_id = tur_id }; TUR_TurmaBO.GetEntity(tur); int tmo_id = MTR_TipoMovimentacaoBO.Retorna_TipoMovimentacaoId((byte)MTR_TipoMovimentacaoTipoMovimento.TransferenciaPropriaRede, ent_id); string sPrazoDias = MTR_ParametroTipoMovimentacaoBO.SelecionaValorParametroTipoMovimentacao(tmo_id, ChaveParametroTipoMovimentacao.PrazoDiasEfetivacaoEscolaOrigem); int PrazoDias = string.IsNullOrEmpty(sPrazoDias) ? 0 : Convert.ToInt32(sPrazoDias); DateTime dataFimPeriodoCalendario = ACA_TipoPeriodoCalendarioBO.SelecionaDataFinalPeriodoCalendarioAtual(tur.cal_id, dataMovimentacao); return(dataFimPeriodoCalendario != new DateTime() && dataFimPeriodoCalendario.AddDays(PrazoDias * -1).Date <= dataMovimentacao); }
/// <summary> /// Calcula o percentual de frequência acumulada do aluno /// </summary> /// <param name="cadMov">Referência a estrutura de cadastro de movimentação</param> /// <param name="tmo_tipoMovimento">Tipo de movimentação</param> private static void CalcularFrequenciaAnterior(ref MTR_Movimentacao_Cadastro cadMov, int tmo_tipoMovimento) { if (MTR_TipoMovimentacaoBO.VerificarMovimentacaoInclusao(tmo_tipoMovimento)) { if ((MTR_TipoMovimentacaoTipoMovimento)tmo_tipoMovimento == MTR_TipoMovimentacaoTipoMovimento.MatriculaInicial) { cadMov.entMovimentacao.mov_frequencia = 0; } else if ((MTR_TipoMovimentacaoTipoMovimento)tmo_tipoMovimento == MTR_TipoMovimentacaoTipoMovimento.TransferenciaDaRedeParticular || (MTR_TipoMovimentacaoTipoMovimento)tmo_tipoMovimento == MTR_TipoMovimentacaoTipoMovimento.TransferenciaDaRedePublicaOutrosEstadosFederal || (MTR_TipoMovimentacaoTipoMovimento)tmo_tipoMovimento == MTR_TipoMovimentacaoTipoMovimento.TransferenciaDaRedePublicaOutrosMunicipios) { if (cadMov.entMovimentacao.mov_frequencia <= 0) { cadMov.entMovimentacao.mov_frequencia = 100; } } else if ((MTR_TipoMovimentacaoTipoMovimento)tmo_tipoMovimento == MTR_TipoMovimentacaoTipoMovimento.Reconducao) { cadMov.entMovimentacao.mov_frequencia = 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); } }