public static bool Save ( CLS_TurmaNota entity, TUR_Turma entTurma, DateTime cal_dataInicio, DateTime cal_dataFim, DateTime cap_dataInicio, DateTime cap_dataFim, Guid ent_id, List <CLS_TurmaNotaOrientacaoCurricular> lstHabilidades, bool fav_permiteRecuperacaoForaPeriodo, CLS_TurmaAula entityTurmaAula = null, CLS_TurmaNotaRegencia entityTurmaNotaRegencia = null, bool validarDataAula = true, Guid usu_id = new Guid(), byte origemLogNota = 0, byte tipoLogNota = 0 ) { TalkDBTransaction banco = new CLS_TurmaNotaDAO()._Banco.CopyThisInstance(); banco.Open(IsolationLevel.ReadCommitted); try { bool bRetorno = false; // Caso tenha selecionado uma aula para vincular à atividade. if (validarDataAula && entity.tnt_data == new DateTime()) { CLS_TurmaAula entityAula = new CLS_TurmaAula { tud_id = entity.tud_id, tau_id = entity.tau_id }; CLS_TurmaAulaBO.GetEntity(entityAula, banco); // Verifica se o usuário logado tem uma posição compatível à da aula. if ((entity.tdt_posicao > 0) && (entity.tdt_posicao != entityAula.tdt_posicao)) { throw new ValidationException("Você não tem permissão para vincular a nova atividade à esta data da aula."); } // Caso o usuário logado tenha selecionado uma aula para vincular e // não seja um docente, copia a posição da aula. entity.tdt_posicao = entityAula.tdt_posicao; entity.usu_id = entityAula.usu_id; } // Caso o usuário logado não seja um docente, grava como posição 1. if (entity.tdt_posicao < 1) { entity.tdt_posicao = 1; } if (entity.Validate()) { // Verifica se a atividade foi alterada/excluída por outra pessoa enquanto o usuário tentava alterar a mesma. CLS_TurmaNota entityAtividadeAuxiliar = new CLS_TurmaNota { tud_id = entity.tud_id, tnt_id = entity.tnt_id }; GetEntity(entityAtividadeAuxiliar, banco); if (!entityAtividadeAuxiliar.IsNew) { entity.tdt_posicao = entityAtividadeAuxiliar.tdt_posicao; entity.usu_id = entityAtividadeAuxiliar.usu_id; } if (entityAtividadeAuxiliar.tnt_dataAlteracao != entity.tnt_dataAlteracao) { throw new EditarAtividade_ValidationException("Esta atividade já foi alterada recentemente."); } string nomeAtividade = GestaoEscolarUtilBO.nomePadraoAtividadeAvaliativa(ent_id); if (entity.tav_id <= 0 && string.IsNullOrEmpty(entity.tnt_nome) && ACA_ParametroAcademicoBO.ParametroValorPorEntidade(eChaveAcademico.NOME_TODAS_ATIVIDADES_AVALIATIVAS, ent_id) == "False") { throw new ArgumentException(string.Format("Outro tipo de {0} é obrigatório.", nomeAtividade.ToLower())); } CLS_TipoAtividadeAvaliativa entityAtividade = new CLS_TipoAtividadeAvaliativa(); if (entity.tav_id <= 0) { if (entity.tnt_nome.Length > 100) { throw new ArgumentException(nomeAtividade + " pode conter até 100 caracteres."); } } else { entityAtividade.tav_id = entity.tav_id; CLS_TipoAtividadeAvaliativaBO.GetEntity(entityAtividade, banco); } if (entity.tnt_situacao != Convert.ToByte(CLS_TurmaNotaSituacao.AtividadeCancelada) || (entityAtividadeAuxiliar.tnt_situacao == entity.tnt_situacao)) { if ((entityAtividade.tav_situacao == Convert.ToByte(CLS_TipoAtividadeAvaliativaSituacao.Inativo)) && (entityAtividade.tav_id != entityAtividadeAuxiliar.tav_id)) { throw new ArgumentException(string.Format("Tipo de {0} está inativo.", nomeAtividade.ToLower())); } } CLS_TurmaNota avaRecuperacao = CLS_TurmaNotaBO.GetSelectRelacionadaFilho(entity.tud_id, entity.tnt_id, banco); if (entity.tnt_data != new DateTime()) { if (entTurma.tur_id <= 0) { entTurma = new TUR_Turma { tur_id = entity.tur_id }; TUR_TurmaBO.GetEntity(entTurma, banco); } // Compara as datas das avaliacoes relacionadas bool relacionadaPai = false; CLS_TurmaNota avaRelacionada = CLS_TurmaNotaBO.GetSelectRelacionadaFilho(entity.tud_id, entity.tnt_id, banco); if (avaRelacionada.tnt_id > 0) { // se a data da recuperacao filho eh menor que a data da avaliacao pai... if (avaRecuperacao.tnt_data != new DateTime() && avaRecuperacao.tnt_data < entity.tnt_data) { throw new ArgumentException(CustomResource.GetGlobalResourceObject("Academico", "LancamentoAvaliacao.UCCadastroAvaliacao.lblMessageAtividade.ValidacaoDataFilho").ToString()); } } else { avaRelacionada = CLS_TurmaNotaBO.GetSelectRelacionadaPai(entity.tud_id, entity.tnt_id); relacionadaPai = avaRelacionada.tnt_id > 0; avaRelacionada = CLS_TurmaNotaBO.GetSelectRelacionadaPai(entity.tud_id, entity.tnt_id, banco); // se a data da avaliacao pai eh maior que a data da recuperacao filho... if (avaRelacionada.tnt_id > 0 && avaRelacionada.tnt_data != new DateTime() && avaRelacionada.tnt_data > entity.tnt_data) { throw new ArgumentException(CustomResource.GetGlobalResourceObject("Academico", "LancamentoAvaliacao.UCCadastroAvaliacao.lblMessageAtividade.ValidacaoDataPai").ToString()); } } if (!(fav_permiteRecuperacaoForaPeriodo && relacionadaPai) && (entity.tnt_data > cal_dataFim || entity.tnt_data < cal_dataInicio)) { throw new ArgumentException("A data da atividade deve estar dentro do período do calendário escolar (" + cal_dataInicio.ToString("dd/MM/yyyy") + " - " + cal_dataFim.ToString("dd/MM/yyyy") + ")."); } if (!(fav_permiteRecuperacaoForaPeriodo && relacionadaPai) && (entity.tnt_data > cap_dataFim || entity.tnt_data < cap_dataInicio)) { throw new ArgumentException("A data da atividade deve estar dentro do período do calendário (" + cap_dataInicio.ToString("dd/MM/yyyy") + " - " + cap_dataFim.ToString("dd/MM/yyyy") + ")."); } } // Valida se existe aluno com habilidade nao selecionada na avaliacao if (entity.tnt_id > 0 && !CLS_TurmaNotaAlunoOrientacaoCurricularBO.ValidarHabilidadesAvaliacao(lstHabilidades, banco)) { throw new ArgumentException(CustomResource.GetGlobalResourceObject("Academico", "LancamentoAvaliacao.UCCadastroAvaliacao.lblMessageAtividade.ValidaHabilidadesAluno").ToString()); } // Valida se existe aluno na avaliacao de recuperacao, com habilidade // que nao esta mais selecionada na avaliacao normal if (avaRecuperacao.tnt_id > 0 && !CLS_TurmaNotaAlunoOrientacaoCurricularBO.ValidarHabilidadesAvaliacao(lstHabilidades, banco, avaRecuperacao.tnt_id)) { throw new ArgumentException(CustomResource.GetGlobalResourceObject("Academico", "LancamentoAvaliacao.UCCadastroAvaliacao.lblMessageAtividade.ValidaHabilidadesAlunoRecuperacao").ToString()); } CLS_ConfiguracaoAtividadeQualificador configQualificador = new CLS_ConfiguracaoAtividadeQualificador(); CLS_TurmaNotaDAO dao = new CLS_TurmaNotaDAO { _Banco = banco }; if (entity.IsNew && entity.tav_id > 0 && entityAtividade.qat_id > 0) { CLS_ConfiguracaoAtividadeQualificadorDAO configQualificadorDao = new CLS_ConfiguracaoAtividadeQualificadorDAO(); configQualificadorDao._Banco = banco; configQualificador = configQualificadorDao.GetSelectByTudQualificador(entity.tud_id, entityAtividade.qat_id); // Valida a quantidade configurada para o qualificador if (configQualificador.caa_id > 0 && configQualificador.caq_quantidade >= 0) { if (dao.ValidaQuantidadeMaxima(entity.tud_id, entityAtividade.qat_id, entity.tpc_id, configQualificador.caq_quantidade)) { throw new ArgumentException(CustomResource.GetGlobalResourceObject("Academico", "LancamentoAvaliacao.UCCadastroAvaliacao.lblMessageAtividade.ValidacaoQuantidade").ToString()); } } } bRetorno = dao.Salvar(entity); if (entity.IsNew && configQualificador.caa_id > 0 && configQualificador.caq_possuiRecuperacao) { int tavIdRelacionado = CLS_TipoAtividadeAvaliativaBO.SelecionaTipoAtividadeAvaliativaRelacionado(configQualificador.caa_id, configQualificador.qat_id, banco); if (tavIdRelacionado > 0) { CLS_TurmaNota entityRelacionada = new CLS_TurmaNota(); entityRelacionada.tud_id = entity.tud_id; entityRelacionada.IsNew = true; entityRelacionada.tpc_id = entity.tpc_id; entityRelacionada.tnt_situacao = 1; entityRelacionada.tav_id = tavIdRelacionado; entityRelacionada.tdt_posicao = entity.tdt_posicao; entityRelacionada.tnt_exclusiva = false; entityRelacionada.usu_id = entity.usu_id; entityRelacionada.usu_idDocenteAlteracao = entity.usu_idDocenteAlteracao; dao.Salvar(entityRelacionada); CLS_TurmaNotaRelacionada entityRelacionamento = new CLS_TurmaNotaRelacionada(); entityRelacionamento.IsNew = true; entityRelacionamento.tud_id = entity.tud_id; entityRelacionamento.tnt_id = entity.tnt_id; entityRelacionamento.tud_idRelacionada = entityRelacionada.tud_id; entityRelacionamento.tnt_idRelacionada = entityRelacionada.tnt_id; CLS_TurmaNotaRelacionadaBO.Save(entityRelacionamento, banco); avaRecuperacao = entityRelacionada; } } #region Salva as Orientacoes curriculares ligadas a avaliacao if (bRetorno && lstHabilidades.Any()) { lstHabilidades.ForEach(x => x.tnt_id = entity.tnt_id); bRetorno = CLS_TurmaNotaOrientacaoCurricularBO.SalvarEmLote(lstHabilidades, banco); // Copia as habilidades na avaliacao de recuperacao if (avaRecuperacao.tnt_id > 0) { // Salva as Orientacoes curriculares ligadas a avaliacao - específico para recuperação. lstHabilidades.ForEach(x => x.tnt_id = avaRecuperacao.tnt_id); CLS_TurmaNotaOrientacaoCurricularBO.SalvarEmLote(lstHabilidades, banco); } } #endregion Salva as Orientacoes curriculares ligadas a avaliacao #region Salva a turma Aula if (entityTurmaAula != null) { bRetorno = CLS_TurmaAulaBO.Save(entityTurmaAula, banco); } #endregion Salva a turma Aula // Salva o vinculo com a aula, caso seja regência if (entityTurmaNotaRegencia != null) { entityTurmaNotaRegencia.tnt_id = entity.tnt_id; bRetorno = CLS_TurmaNotaRegenciaBO.Save(entityTurmaNotaRegencia, banco); } if (origemLogNota > 0 && tipoLogNota > 0) { DateTime dataLogNota = DateTime.Now; LOG_TurmaNota_Alteracao entLogNota = new LOG_TurmaNota_Alteracao { tud_id = entity.tud_id, tnt_id = entity.tnt_id, usu_id = usu_id, ltn_origem = origemLogNota, ltn_tipo = tipoLogNota, ltn_data = dataLogNota }; LOG_TurmaNota_AlteracaoBO.Save(entLogNota, banco); } return(bRetorno); } throw new ValidationException(GestaoEscolarUtilBO.ErrosValidacao(entity)); } catch (Exception err) { banco.Close(err); throw; } finally { banco.Close(); } }
/// <summary> /// Salva anotações e recursos para os alunos. /// </summary> /// <param name="entity"></param> /// <param name="listTurmaAulaRecursoRegencia"></param> /// <param name="banco"></param> /// <param name="ent_id">Id da entidade do usuário logado.</param> /// <param name="turmaIntegral">Indica se a turma é integral.</param> /// <param name="fechamentoAutomatico">Indica se o fechamento é automático.</param> /// <param name="salvarFaltasAlunos"></param> /// <returns></returns> private static bool SalvarAulaAnotacoesRecursos ( CLS_TurmaAulaRegencia entity , List <CLS_TurmaAulaRecursoRegencia> listTurmaAulaRecursoRegencia , TalkDBTransaction banco , Guid ent_id , bool turmaIntegral , bool fechamentoAutomatico , List <VigenciaCriacaoAulas> vigenciasCriacaoAulas , bool salvarFaltasAlunos = false , List <CLS_TurmaAulaOrientacaoCurricular> listOriCurTurAula = null , Guid usu_id = new Guid() , byte origemLogAula = 0 , byte tipoLogAula = 0 ) { string mensagemInfo; if (entity.tuf_data == new DateTime()) { throw new ValidationException("Data da aula é obrigatório."); } // Chama método padrão para salvar a aula if (entity.Validate()) { Save(entity, banco); } else { throw new ValidationException(GestaoEscolarUtilBO.ErrosValidacao(entity)); } if (origemLogAula > 0) { DateTime dataLogAula = DateTime.Now; LOG_TurmaAula_Alteracao entLogAula = new LOG_TurmaAula_Alteracao { tud_id = entity.tud_id, tau_id = entity.tau_id, usu_id = usu_id, lta_origem = origemLogAula, lta_tipo = tipoLogAula, lta_data = dataLogAula }; LOG_TurmaAula_AlteracaoBO.Save(entLogAula, banco); } // regravo a CLS_TurmaAula apenas para atualizar o campo usu_idDocenteAlteracao, quando preenchido if (entity.usu_idDocenteAlteracao != null) { CLS_TurmaAula entityAula = new CLS_TurmaAula { tud_id = entity.tud_id , tau_id = entity.tau_id }; CLS_TurmaAulaBO.GetEntity(entityAula); if (!entityAula.IsNew) { entityAula.usu_idDocenteAlteracao = entity.usu_idDocenteAlteracao; CLS_TurmaAulaBO.Save(entityAula, banco, out mensagemInfo, ent_id, turmaIntegral, fechamentoAutomatico, vigenciasCriacaoAulas); } } //Carrega Recursos gravados no banco List <CLS_TurmaAulaRecursoRegencia> listaBanco = CLS_TurmaAulaRecursoRegenciaBO.GetSelectBy_Turma_Aula_DisciplinaComponente(entity.tud_id , entity.tau_id , entity.tud_idFilho); //busca registros que devem ser excluidos IEnumerable <Int32> dadosTela = (from CLS_TurmaAulaRecursoRegencia dr in listTurmaAulaRecursoRegencia.AsEnumerable() orderby dr.rsa_id descending select dr.rsa_id).AsEnumerable(); IEnumerable <Int32> dadosExcluir = (from CLS_TurmaAulaRecursoRegencia t in listaBanco.AsEnumerable() orderby t.rsa_id descending select t.rsa_id).Except(dadosTela); IList <Int32> dadosDif = dadosExcluir.ToList(); //deleta registros que foram desmarcados for (int i = 0; i < dadosDif.Count; i++) { CLS_TurmaAulaRecursoRegenciaBO.Delete_Byrsa_id(entity.tud_id, entity.tau_id, dadosDif[i]); } //busca registro que devem ser alterados IEnumerable <Int32> dadosBanco = (from CLS_TurmaAulaRecursoRegencia t in listaBanco.AsEnumerable() orderby t.rsa_id descending select t.rsa_id).AsEnumerable(); IEnumerable <Int32> dadosAlterar = (from CLS_TurmaAulaRecursoRegencia t in listTurmaAulaRecursoRegencia.AsEnumerable() orderby t.rsa_id descending select t.rsa_id).Intersect(dadosBanco); IList <Int32> dadosAlte = dadosAlterar.ToList(); CLS_TurmaAulaRecursoRegencia entityAltera; for (int i = 0; i < dadosAlte.Count; i++) { entityAltera = listTurmaAulaRecursoRegencia.Find(p => p.rsa_id == dadosAlte[i]); entityAltera.trr_dataAlteracao = DateTime.Now; CLS_TurmaAulaRecursoRegenciaBO.Update_Byrsa_id(entityAltera); listTurmaAulaRecursoRegencia.Remove(entityAltera); } // Salva as recursos utilizados na aula foreach (CLS_TurmaAulaRecursoRegencia aux in listTurmaAulaRecursoRegencia) { aux.tau_id = entity.tau_id; if (aux.Validate()) { CLS_TurmaAulaRecursoRegenciaBO.Salvar(aux, banco); } else { throw new ValidationException(GestaoEscolarUtilBO.ErrosValidacao(aux)); } } return(true); }