Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        /// <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);
        }