/// <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();
            }
        }
Exemple #2
0
        /// <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();
            }
        }