/// <summary> /// Salva os registros de TurmaDocente, efetua todas as validações necessárias, se precisar excluir um registro /// do TurmaDocente é necessário mandar esse registro na linha com situação de excluido. /// </summary> /// <param name="listTurmaDocente">Lista de entidade TUR_TurmaDocente</param> /// <param name="ent_id">ID da entidade do usuário logado</param> public static void SalvarTurmaDisciplinaRelacionada(List <TUR_TurmaDisciplinaRelacionada> listTurmaDisciplinaRelacionada, Guid ent_id, string tur_id, string doc_id = "") { TUR_TurmaDisciplinaRelacionadaDAO dao = new TUR_TurmaDisciplinaRelacionadaDAO(); dao._Banco.Open(IsolationLevel.ReadCommitted); try { //Salva a lista de TurmaDisciplinaRelacionada enviada foreach (TUR_TurmaDisciplinaRelacionada turmaDisciplinaRelacionada in listTurmaDisciplinaRelacionada) { if (!turmaDisciplinaRelacionada.Validate()) { throw new ValidationException(GestaoEscolarUtilBO.ErrosValidacao(turmaDisciplinaRelacionada)); } //Verifica se as datas das vigências estão válidas if (turmaDisciplinaRelacionada.tdr_vigenciaFim != new DateTime() && turmaDisciplinaRelacionada.tdr_vigenciaInicio > turmaDisciplinaRelacionada.tdr_vigenciaFim) { throw new ArgumentException("Vigência inicial não pode ser maior que a vigência final."); } if (!dao.Salvar(turmaDisciplinaRelacionada)) { throw new ArgumentException("Erro ao salvar a atribuição de docente."); } } foreach (TUR_TurmaDisciplinaRelacionada turmaDisciplinaRelacionada in listTurmaDisciplinaRelacionada) { TUR_TurmaDocenteBO.LimpaCache(new TUR_TurmaDocente { tud_id = turmaDisciplinaRelacionada.tud_id, doc_id = Convert.ToInt64(doc_id) }, ent_id, Convert.ToInt64(tur_id)); } } catch (SqlException ex) { dao._Banco.Close(ex); throw ex; } catch (ValidationException ex) { dao._Banco.Close(ex); throw ex; } catch (ArgumentException ex) { dao._Banco.Close(ex); throw ex; } catch (Exception ex) { dao._Banco.Close(ex); throw ex; } finally { dao._Banco.Close(); } }
/// <summary> /// O método salva os dados do planejamento anual. /// </summary> /// <param name="ltPlanejamento">Lista de dados do planejamento anual.</param> /// <param name="ltHabilidade">Lista de orientações curriculares da turma.</param> /// <param name="ltDiagnostico">Lista de orientações anteriores.</param> /// <param name="tur_ids">Lista de IDs das turmas para replicar o planejamento.</param> /// <param name="replicarPlanejamento">Flag que indica se o planejamento será replicado.</param> /// <param name="tur_id">Id da turma do planejamento.</param> /// <returns></returns> public static bool SalvaPlanejamentoTurmaDisciplina ( List <CLS_TurmaDisciplinaPlanejamento> ltPlanejamento, List <CLS_PlanejamentoOrientacaoCurricular> ltHabilidade, List <CLS_PlanejamentoOrientacaoCurricularDiagnostico> ltDiagnostico, List <long> tur_ids, bool replicarPlanejamento, long tur_id ) { TalkDBTransaction banco = new CLS_PlanejamentoOrientacaoCurricularDAO()._Banco.CopyThisInstance(); banco.Open(IsolationLevel.ReadCommitted); bool retorno = true; try { #region Gerar dados para replicar o planejamento anual // Verifica se o planejamento será replicado em outras turmas. if (replicarPlanejamento && tur_ids.Any()) { // Busca a lista de turmas e suas disciplinas string turmas = string.Concat(tur_id, ",", string.Join(",", (from turma in tur_ids select Convert.ToString(turma)).ToArray())); List <TurmaRelTurmaDisciplina> listaTurmaRelTurmaDisciplina = TUR_TurmaDisciplinaBO.SelecionaPorTurmas(turmas, banco); // Lista das turmas em que o planejamento será replicado e suas disciplinas. List <TurmaRelTurmaDisciplina> turmasReplicar = listaTurmaRelTurmaDisciplina.FindAll(p => p.tur_id != tur_id); // Lista das disciplinas e posições de docente que serão salvas no planejamento anual. var tudPosicao = ltPlanejamento.GroupBy(p => new { p.tud_id, p.tdt_posicao }).Select(p => new { p.Key.tud_id, p.Key.tdt_posicao }).Union( ltDiagnostico.GroupBy(p => new { p.tud_id, p.tdt_posicao }).Select(p => new { p.Key.tud_id, p.Key.tdt_posicao }).Union( ltHabilidade.GroupBy(p => new { p.tud_id, p.tdt_posicao }).Select(p => new { p.Key.tud_id, p.Key.tdt_posicao }))).Distinct(); List <TurmaRelTurmaDisciplina.DadosTurmaDisciplina> tipoDisciplinas = new List <TurmaRelTurmaDisciplina.DadosTurmaDisciplina>(); foreach (TurmaRelTurmaDisciplina turRelTud in listaTurmaRelTurmaDisciplina) { tipoDisciplinas.AddRange(turRelTud.ltTurmaDisciplina); } string tud_ids = string.Join(",", (from tud in tipoDisciplinas select Convert.ToString(tud.tud_id)).ToArray()); // Busca a lista de docentes dos tud_ids. List <TUR_TurmaDocente> listaTurmaDocente = TUR_TurmaDocenteBO.SelecionaPosicaoPorTudIds(tud_ids); List <TUR_TurmaDocente> listaTurmaDocenteAtivos = listaTurmaDocente.FindAll(p => p.tdt_situacao == (byte)TUR_TurmaDocenteSituacao.Ativo); // Lista de relação disciplina, posição e docente. var docentes = from tud in tudPosicao let docente = listaTurmaDocente.FindAll(p => p.tud_id == tud.tud_id && p.tdt_posicao == tud.tdt_posicao).OrderBy(q => q.tdt_situacao).ThenByDescending(r => r.tdt_vigenciaInicio).FirstOrDefault() where docente != null select new { tud.tud_id , tud.tdt_posicao , docente.doc_id }; // Replicar para cada turma foreach (var turReplicar in turmasReplicar) { /* * Para cada lista que armazena os dados do planejamento anual: * - Buscar os dados referentes o planejamento; * - Buscar turmas disciplinas da turma em que será realizada a replicação com o mesmo tipo de * disciplina da turma disciplina do planejamento original * - Buscar a posição do docente na disciplina de destino ao replicar * - Replicar o planejamento com os dados obtidos * */ ltPlanejamento.AddRange( (from planejamento in ltPlanejamento join tds in tipoDisciplinas on planejamento.tud_id equals tds.tud_id join doc in docentes on new { tds.tud_id, planejamento.tdt_posicao } equals new { doc.tud_id, doc.tdt_posicao } join tudReplicar in turReplicar.ltTurmaDisciplina on tds.tds_id equals tudReplicar.tds_id select new CLS_TurmaDisciplinaPlanejamento { tud_id = tudReplicar.tud_id , tpc_id = planejamento.tpc_id , tdp_diagnostico = planejamento.tdp_diagnostico , tdp_planejamento = planejamento.tdp_planejamento , tdp_avaliacaoTrabalho = planejamento.tdp_avaliacaoTrabalho , tdp_intervencoesPedagogicas = planejamento.tdp_intervencoesPedagogicas , tdp_registroIntervencoes = planejamento.tdp_registroIntervencoes , tdp_recursos = planejamento.tdp_recursos , cur_id = planejamento.cur_id , crr_id = planejamento.crr_id , crp_id = planejamento.crp_id , tdt_posicao = listaTurmaDocenteAtivos.FindAll(p => p.tud_id == tudReplicar.tud_id && p.doc_id == doc.doc_id).FirstOrDefault().tdt_posicao , tdp_situacao = 1 }).ToList()); ltDiagnostico.AddRange( (from dignostico in ltDiagnostico join tds in tipoDisciplinas on dignostico.tud_id equals tds.tud_id join doc in docentes on new { tds.tud_id, dignostico.tdt_posicao } equals new { doc.tud_id, doc.tdt_posicao } join tudReplicar in turReplicar.ltTurmaDisciplina on tds.tds_id equals tudReplicar.tds_id select new CLS_PlanejamentoOrientacaoCurricularDiagnostico { tud_id = tudReplicar.tud_id , ocr_id = dignostico.ocr_id , pod_alcancado = dignostico.pod_alcancado , tdt_posicao = listaTurmaDocenteAtivos.FindAll(p => p.tud_id == tudReplicar.tud_id && p.doc_id == doc.doc_id).FirstOrDefault().tdt_posicao }).ToList()); ltHabilidade.AddRange( (from habilidade in ltHabilidade join tds in tipoDisciplinas on habilidade.tud_id equals tds.tud_id join doc in docentes on new { tds.tud_id, habilidade.tdt_posicao } equals new { doc.tud_id, doc.tdt_posicao } join tudReplicar in turReplicar.ltTurmaDisciplina on tds.tds_id equals tudReplicar.tds_id select new CLS_PlanejamentoOrientacaoCurricular { tud_id = tudReplicar.tud_id , ocr_id = habilidade.ocr_id , tpc_id = habilidade.tpc_id , poc_planejado = habilidade.poc_planejado , poc_trabalhado = habilidade.poc_trabalhado , poc_alcancado = habilidade.poc_alcancado , tdt_posicao = listaTurmaDocenteAtivos.FindAll(p => p.tud_id == tudReplicar.tud_id && p.doc_id == doc.doc_id).FirstOrDefault().tdt_posicao }).ToList()); } } #endregion Gerar dados para replicar o planejamento anual // Salva os dados. retorno = SalvaPlanejamentoTurmaDisciplina(ltPlanejamento, ltHabilidade, ltDiagnostico, banco); return(retorno); } catch (Exception ex) { banco.Close(ex); throw; } finally { banco.Close(); } }