Ejemplo n.º 1
0
        /// <summary>
        /// O método deleta uma orientação curricular e todas as outras ligadas a esse.
        /// </summary>
        /// <param name="ORC_OrientacaoCurricular">Entidade da orientação curricular inicial.</param>
        /// <returns></returns>
        public static bool DeletarHierarquia(ORC_OrientacaoCurricular entity)
        {
            TalkDBTransaction banco = new ORC_OrientacaoCurricularDAO()._Banco.CopyThisInstance();

            banco.Open(IsolationLevel.ReadCommitted);

            try
            {
                List <ORC_OrientacaoCurricularNivelAprendizado> ltOrientacaoNivel       = ORC_OrientacaoCurricularNivelAprendizadoBO.SelectTodosNivelAprendizadoByOcrId(entity.ocr_id);
                List <ORC_OrientacaoCurricularNivelAprendizado> ltOrientacaoNivelAtivos = ltOrientacaoNivel.Where(p => p.ocn_situacao != 3).ToList();

                // Apaga os níveis de aprendizado da orientação curricular
                foreach (ORC_OrientacaoCurricularNivelAprendizado orientacaoNivel in ltOrientacaoNivelAtivos)
                {
                    orientacaoNivel.ocn_situacao = 3;
                    ORC_OrientacaoCurricularNivelAprendizadoBO.Save(orientacaoNivel, banco);
                }

                if (VerificaIntegridade(SelecionaUltimoNivel(entity.ocr_id), banco))
                {
                    throw new ValidationException("Não é possível excluir a orientação curricular pois possui outros registros ligados a ele.");
                }

                return(new ORC_OrientacaoCurricularDAO().DeletarHierarquia(entity.ocr_id));
            }
            catch (Exception ex)
            {
                banco.Close(ex);
                throw ex;
            }
            finally
            {
                if (banco.ConnectionIsOpen)
                {
                    banco.Close();
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Função recursiva para replicar a orientação curricular e as filhas
        /// </summary>
        /// <param name="rows"></param>
        /// <param name="dtOrientacoes"></param>
        /// <param name="dtNiveisReplica"></param>
        /// <param name="tds_id"></param>
        /// <param name="ocr_idPai"></param>
        /// <param name="banco"></param>
        /// <returns></returns>
        public static bool SalvaFilhos
        (
            DataRow[] rows,
            DataTable dtOrientacoes,
            List <sNivelOrientacaoCurricular> dtNiveisReplica,
            DataTable dtOrientacoesNova,
            int tds_id,
            long ocr_idPai,
            long mat_id,
            TalkDBTransaction banco
        )
        {
            ORC_OrientacaoCurricular orientacao;
            ORC_OrientacaoCurricularNivelAprendizado orientacaoNivelApr;

            try
            {
                string ocr_ids = string.Join(";", rows.GroupBy(p => p["ocr_id"].ToString()).Select(p => p.Key).ToArray());

                List <sOrientacaoNivelAprendizado> dtNiveisAprendizado = ORC_OrientacaoCurricularNivelAprendizadoBO.SelecionaPorOrientacaoNivelAprendizado(ocr_ids, 0, banco, GestaoEscolarUtilBO.MinutosCacheLongo);

                var orientacaoNivelAprendizado = from row in dtNiveisAprendizado
                                                 group row by row.ocr_id
                                                 into grupo
                                                 select new
                {
                    ocr_id = grupo.Key
                    ,
                    ltNiveisAprendizado = grupo.GroupBy(p => p.nap_id).Select(p => p.Key).ToList()
                };

                foreach (DataRow rowFilho in rows)
                {
                    List <int> ltNiveisAprendizado = orientacaoNivelAprendizado.Any(p => p.ocr_id == Convert.ToInt64(rowFilho["ocr_id"])) ?
                                                     orientacaoNivelAprendizado.ToList().Find(p => p.ocr_id == Convert.ToInt64(rowFilho["ocr_id"])).ltNiveisAprendizado :
                                                     new List <int>();

                    string nvl_id = dtNiveisReplica.Where(p => p.nvl_ordem == Convert.ToInt32(rowFilho["nvl_ordem"]))
                                    .Select(p => p.nvl_id.ToString()).FirstOrDefault();

                    if (!string.IsNullOrEmpty(nvl_id))
                    {
                        bool existe = dtOrientacoesNova.Rows.Cast <DataRow>().Any(p => p["ocr_codigo"].ToString().Equals(rowFilho["ocr_codigo"].ToString()) &&
                                                                                  p["ocr_descricao"].ToString().Equals(rowFilho["ocr_descricao"].ToString()) &&
                                                                                  p["nvl_id"].ToString().Equals(nvl_id));

                        /* Salva as orientações filhas */

                        orientacao = new ORC_OrientacaoCurricular
                        {
                            ocr_id            = -1,
                            nvl_id            = Convert.ToInt32(nvl_id),
                            tds_id            = tds_id,
                            mat_id            = mat_id,
                            ocr_idSuperior    = ocr_idPai,
                            ocr_codigo        = rowFilho["ocr_codigo"].ToString(),
                            ocr_descricao     = rowFilho["ocr_descricao"].ToString(),
                            ocr_situacao      = 1,
                            ocr_dataAlteracao = DateTime.Now,
                            IsNew             = true
                        };

                        if (existe)
                        {
                            string ocr_id_existente = dtOrientacoesNova.Rows.Cast <DataRow>()
                                                      .Where(p => p["ocr_codigo"].ToString().Equals(rowFilho["ocr_codigo"].ToString()) &&
                                                             p["ocr_descricao"].ToString().Equals(rowFilho["ocr_descricao"].ToString()) &&
                                                             p["nvl_id"].ToString().Equals(nvl_id))
                                                      .Select(p => p["ocr_id"].ToString()).FirstOrDefault();

                            orientacao.IsNew = false;
                            if (!string.IsNullOrEmpty(ocr_id_existente))
                            {
                                orientacao.ocr_id = Convert.ToInt64(ocr_id_existente);
                            }
                        }

                        Save(orientacao, banco);

                        // Verifica se os filhos possuem mais filhos, se sim, chama a função recursivamente
                        DataRow[] rowsNetos = dtOrientacoes.Select("ocr_idSuperior = " + rowFilho["ocr_id"].ToString());

                        if (rowsNetos.Length > 0)
                        {
                            SalvaFilhos(rowsNetos, dtOrientacoes, dtNiveisReplica, dtOrientacoesNova, tds_id, orientacao.ocr_id, mat_id, banco);
                        }
                        else
                        {
                            //Remove os níveis de aprendizado já existentes
                            if (existe)
                            {
                                DataTable dtOcn = ORC_OrientacaoCurricularNivelAprendizadoBO.SelectNivelAprendizadoByOcrId(orientacao.ocr_id, 0, banco);
                                foreach (DataRow row in dtOcn.Rows)
                                {
                                    ORC_OrientacaoCurricularNivelAprendizado ocn = new ORC_OrientacaoCurricularNivelAprendizado
                                    {
                                        ocr_id = orientacao.ocr_id,
                                        nap_id = Convert.ToInt32(row["nap_id"]),
                                        ocn_id = Convert.ToInt32(row["ocn_id"])
                                    };
                                    ORC_OrientacaoCurricularNivelAprendizadoBO.GetEntity(ocn, banco);

                                    if (!ocn.IsNew)
                                    {
                                        ocn.ocn_situacao      = 3; //Excluido
                                        ocn.ocn_dataAlteracao = DateTime.Now;

                                        ORC_OrientacaoCurricularNivelAprendizadoBO.Save(ocn, banco);
                                    }
                                }
                            }

                            // Replicar os níveis de aprendizado
                            foreach (int nap_id in ltNiveisAprendizado)
                            {
                                orientacaoNivelApr = new ORC_OrientacaoCurricularNivelAprendizado
                                {
                                    ocr_id            = orientacao.ocr_id,
                                    nap_id            = ORC_NivelAprendizadoBO.SelectCursoPeriodoBy_nap_id(nap_id, Convert.ToInt32(nvl_id), banco),
                                    ocn_id            = -1,
                                    ocn_situacao      = 1,
                                    ocn_dataCriacao   = DateTime.Now,
                                    ocn_dataAlteracao = DateTime.Now,
                                    IsNew             = true
                                };
                                ORC_OrientacaoCurricularNivelAprendizadoBO.Save(orientacaoNivelApr, banco);
                            }
                        }
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                //banco.Close(ex);
                throw ex;
            }
            //finally
            //{
            //    if (banco.ConnectionIsOpen)
            //        banco.Close();
            //}
        }