/// <summary> /// Salva as entidades dos docentes para a disciplina. /// </summary> /// <param name="tur_id">ID da turma</param> /// <param name="cad">Estrutura com dados da disciplina e lista de docentes</param> /// <param name="banco">Transação com banco</param> /// <param name="listaDocentesTodasDisciplinas">Lista de todos os docentes cadastrados para todas as disciplinas da turma - para verificar os que irá excluir</param> /// <param name="ent_id">Id da entidade do usuário logado.</param> public static void SalvarDocentesDisciplina(long tur_id , CadastroTurmaDisciplina cad , TalkDBTransaction banco , List <TUR_Turma_Docentes_Disciplina> listaDocentesTodasDisciplinas , Guid ent_id) { // Pegar os docentes que existiam antes na disciplina. List <TUR_Turma_Docentes_Disciplina> docentesCadastrados = (from TUR_Turma_Docentes_Disciplina item in listaDocentesTodasDisciplinas where item.entDocente.tud_id == cad.entTurmaDisciplina.tud_id select item ).ToList(); foreach (TUR_Turma_Docentes_Disciplina docente in cad.listaTurmaDocente) { DateTime VigenciaFinalDocente = docente.entDocente.tdt_vigenciaFim == new DateTime() ? DateTime.MaxValue : docente.entDocente.tdt_vigenciaFim; // Validar se existem vigências com conflito de data. var x = from TUR_Turma_Docentes_Disciplina item in cad.listaTurmaDocente where GestaoEscolarUtilBO.ExisteConflitoDatas (item.entDocente.tdt_vigenciaInicio, item.entDocente.tdt_vigenciaFim == new DateTime() ? DateTime.MaxValue : item.entDocente.tdt_vigenciaFim , docente.entDocente.tdt_vigenciaInicio, VigenciaFinalDocente) && item.indice != docente.indice && item.entDocente.tdt_posicao == docente.entDocente.tdt_posicao select item; if (x.Count() > 0) { throw new ValidationException( "Existe um conflito de datas da vigência do docente \"" + docente.doc_nome + "\"."); } // Verifica se o mesmo docente está vigente em mais de uma posição. var y = from TUR_Turma_Docentes_Disciplina item in cad.listaTurmaDocente where GestaoEscolarUtilBO.ExisteConflitoDatas (item.entDocente.tdt_vigenciaInicio, item.entDocente.tdt_vigenciaFim == new DateTime() ? DateTime.MaxValue : item.entDocente.tdt_vigenciaFim , docente.entDocente.tdt_vigenciaInicio, VigenciaFinalDocente) && item.entDocente.tdt_posicao != docente.entDocente.tdt_posicao && item.entDocente.doc_id == docente.entDocente.doc_id && item.entDocente.coc_id == docente.entDocente.coc_id && item.entDocente.col_id == docente.entDocente.col_id && item.entDocente.crg_id == docente.entDocente.crg_id select item; if (y.Count() > 0) { throw new ValidationException( "O docente \"" + docente.doc_nome + "\" não pode estar vigente em mais de uma posição."); } // Remove do cache as turmas do docente. TUR_TurmaBO.RemoveCacheDocenteControleTurma(ent_id, docente.entDocente.doc_id); TUR_TurmaBO.RemoveCacheDocente_TurmaDisciplina(tur_id, docente.entDocente.doc_id, ent_id); TUR_TurmaDocente entTurmaDocente = docente.entDocente; entTurmaDocente.tud_id = cad.entTurmaDisciplina.tud_id; LimpaCache(entTurmaDocente, ent_id); // Salvar entidade. Save(entTurmaDocente, banco); } // Se remover docente, transfere os lançamentos. if (!cad.listaTurmaDocente.Exists(p => (p.entDocente.tdt_posicao > 1 && p.entDocente.tdt_situacao == 1)) && ACA_ParametroAcademicoBO.ParametroValorBooleanoPorEntidade(eChaveAcademico.ALTERAR_AULAS_PARA_TITULAR_ATRIBUICAO_DOCENTES, ent_id)) { TransferirLancamentos_Posicao(cad.entTurmaDisciplina.tud_id, banco); } foreach (TUR_Turma_Docentes_Disciplina docente in docentesCadastrados) { // Verificar se o docente existia antes e não existe mais. if (!cad.listaTurmaDocente.Exists(p => (p.entDocente.tud_id == docente.entDocente.tud_id && p.entDocente.tdt_id == docente.entDocente.tdt_id))) { // Excluir. Delete(docente.entDocente, banco); } } }
protected void btnSalvar_Click(object sender, EventArgs e) { if (Page.IsValid) { try { List <TUR_Turma_Docentes_Disciplina> list = RetornaDadosGrid(); DateTime vigenciaInicio = Convert.ToDateTime(txtVigenciaIni.Text); DateTime vigenciaFim = string.IsNullOrEmpty(txtVigenciaFim.Text) ? new DateTime() : Convert.ToDateTime(txtVigenciaFim.Text); int tdt_id = string.IsNullOrEmpty(lbltdt_id.Text) ? 0 : Convert.ToInt32(lbltdt_id.Text); // Se for uma alteração deleta do list e adiciona novamente if (!string.IsNullOrEmpty(lblIndice.Text)) { list.Remove(list.Find(p => p.indice == Convert.ToInt32(lblIndice.Text))); } DateTime dtFim2 = vigenciaFim == new DateTime() ? DateTime.MaxValue : vigenciaFim; // Verifica se não existe conflito de datas foreach (TUR_Turma_Docentes_Disciplina item in list) { DateTime dtFim = item.entDocente.tdt_vigenciaFim == new DateTime() ? DateTime.MaxValue : item.entDocente.tdt_vigenciaFim; if (GestaoEscolarUtilBO.ExisteConflitoDatas(item.entDocente.tdt_vigenciaInicio, dtFim, vigenciaInicio, dtFim2)) { throw new ValidationException("Existe conflito entre as vigências."); } } // RF_076 string periodoVigencia; if (!RHU_ColaboradorCargoBO.ValidarVigenciaPorData(uccDocente.Valor, vigenciaInicio, vigenciaFim, out periodoVigencia)) { throw new ValidationException ("A vigência do docente na turma deve estar dentro da vigência do seu cargo (" + periodoVigencia + ")."); } TUR_Turma_Docentes_Disciplina entDoc = new TUR_Turma_Docentes_Disciplina { doc_nome = uccDocente.TextoSelecionado, entDocente = new TUR_TurmaDocente { doc_id = uccDocente.Doc_id, col_id = uccDocente.Valor[1], crg_id = (int)uccDocente.Valor[2], coc_id = (int)uccDocente.Valor[3], tdt_vigenciaInicio = vigenciaInicio, tdt_vigenciaFim = vigenciaFim, tdt_id = tdt_id } }; list.Add(entDoc); AtualizaGrid(list); LimparCampos(); CarregarDocenteVigente(list); } catch (ValidationException ex) { lblMessage.Text = UtilBO.GetErroMessage(ex.Message, UtilBO.TipoMensagem.Alerta); } catch (Exception ex) { ApplicationWEB._GravaErro(ex); lblMessage.Text = UtilBO.GetErroMessage("Erro ao tentar salvar o docente.", UtilBO.TipoMensagem.Erro); } } }