Пример #1
0
        private void subReportEstudos_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
        {
            string estudos = ACA_AlunoHistoricoBO.GerarEsturosHistPedagogico(Convert.ToInt64(this.GetCurrentColumnValue("alu_id").ToString()), new Guid());

            if (string.IsNullOrEmpty(estudos))
            {
                ((SubHistoricoEscolarEstudos)((XRSubreport)sender).ReportSource).Visible = false;
            }
            ((SubHistoricoEscolarEstudos)((XRSubreport)sender).ReportSource).ESTUDOS.Value = estudos;
        }
Пример #2
0
        private void subReportGrade_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
        {
            string grade = ACA_AlunoHistoricoBO.GerarGradeHistPedagogico(Convert.ToInt64(this.GetCurrentColumnValue("alu_id").ToString()), new Guid());

            if (string.IsNullOrEmpty(grade))
            {
                ((SubHistoricoEscolarGrade)((XRSubreport)sender).ReportSource).Visible = false;
            }
            ((SubHistoricoEscolarGrade)((XRSubreport)sender).ReportSource).GRADE.Value = grade;
        }
Пример #3
0
        public void Carregar(int anoLetivo, int tcp_id, int tne_id)
        {
            try
            {
                dtDados = ACA_AlunoHistoricoBO.Seleciona_TipoCurriculoPeriodoAnoLetivo(tcp_id, anoLetivo, tne_id);
                dtDados.Columns.Add("ahd_id");
                dtDados.Columns.Add("grade", typeof(bool));
                dtDados.Columns.Add("alu_id", typeof(int));
                dtDados.Columns.Add("ahd_avaliacao", typeof(string));
                dtDados.Columns.Add("ahd_frequencia", typeof(int));

                foreach (DataRow row in dtDados.Rows)
                {
                    if (Convert.ToInt32(row["tds_id"]) > 0)
                    {
                        row["grade"] = true;
                    }
                    else
                    {
                        row["grade"] = false;
                    }
                }

                if (dtDados.Rows.Count == 0)
                {
                    lblMessage.Text = UtilBO.GetErroMessage((string)GetGlobalResourceObject("UserControl", "UCAddResultadoFinal.NenhumDadoParaInserir"),
                                                            UtilBO.TipoMensagem.Informacao);
                }
                else
                {
                    ACA_FormatoAvaliacao fav = new ACA_FormatoAvaliacao {
                        fav_id = Convert.ToInt32(dtDados.Rows[0]["fav_id"])
                    };
                    ACA_FormatoAvaliacaoBO.GetEntity(fav);

                    VS_fav_tipo = fav.fav_tipo;

                    esa_id = fav.esa_idPorDisciplina > 0 ? fav.esa_idPorDisciplina : fav.esa_idConceitoGlobal;

                    ACA_EscalaAvaliacao esa = new ACA_EscalaAvaliacao {
                        esa_id = esa_id
                    };
                    ACA_EscalaAvaliacaoBO.GetEntity(esa);
                    tipo = esa.esa_tipo;
                }
            }
            catch (Exception ex)
            {
                ApplicationWEB._GravaErro(ex);
                lblMessage.Text = UtilBO.GetErroMessage((string)GetGlobalResourceObject("UserControl", "UCAddResultadoFinal.ErroCarregar"),
                                                        UtilBO.TipoMensagem.Erro);
            }
        }
Пример #4
0
        private void subReportTransferencia_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
        {
            string dataTransferencia = "";
            string transferencia     = ACA_AlunoHistoricoBO.GerarTransferenciaHistPedagogico(Convert.ToInt64(this.GetCurrentColumnValue("alu_id").ToString()),
                                                                                             Convert.ToInt32(this.GetCurrentColumnValue("mtu_id").ToString()),
                                                                                             out dataTransferencia);

            if (string.IsNullOrEmpty(transferencia))
            {
                ((SubHistoricoEscolarTransferencia)((XRSubreport)sender).ReportSource).Visible = false;
            }
            ((SubHistoricoEscolarTransferencia)((XRSubreport)sender).ReportSource).TRANSFERENCIA.Value = transferencia;
            ((SubHistoricoEscolarTransferencia)((XRSubreport)sender).ReportSource).DATATRANSF.Value    = dataTransferencia;
        }
Пример #5
0
        public void CarregarDados(SortedList <int, ACA_AlunoHistoricoBO.StructHistorico> alh, bool permiteEditar)
        {
            if (dtDados.Rows.Count > 0)
            {
                CarregarNovo(permiteEditar, alh.FirstOrDefault().Value.ltDisciplina);
            }
            {
                #region COMPONENTE CURRICULAR

                foreach (GridViewRow row in grvResFinalCompCurricular.Rows)
                {
                    TextBox      txtNota      = (TextBox)row.FindControl("txtNota");
                    DropDownList ddlPareceres = (DropDownList)row.FindControl("ddlPareceres");
                    HiddenField  hdnAhdId     = (HiddenField)row.FindControl("hdnAhdId");

                    int ahdId;
                    int.TryParse(hdnAhdId.Value, out ahdId);

                    if (ahdId == 0)
                    {
                        hdnAhdId.Value = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                          where dados.entDisciplina.tds_id == Convert.ToInt32(grvResFinalCompCurricular.DataKeys[row.RowIndex]["tds_id"])
                                          select dados.entDisciplina.ahd_id).FirstOrDefault().ToString();
                    }

                    if (ahdId < 0)
                    {
                        hdnAhdId.Value = "-1";
                    }

                    if (ahdId > 0 || Convert.ToInt32(grvResFinalCompCurricular.DataKeys[row.RowIndex]["tds_id"]) > 0)
                    {
                        if (txtNota.Visible)
                        {
                            if (ahdId <= 0)
                            {
                                txtNota.Text = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                                where dados.entDisciplina.tds_id == Convert.ToInt32(grvResFinalCompCurricular.DataKeys[row.RowIndex]["tds_id"])
                                                select dados.entDisciplina.ahd_avaliacao).FirstOrDefault();
                            }
                            else
                            {
                                txtNota.Text = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                                where dados.entDisciplina.ahd_id == Convert.ToInt32(grvResFinalCompCurricular.DataKeys[row.RowIndex]["ahd_id"])
                                                select dados.entDisciplina.ahd_avaliacao).FirstOrDefault();
                            }
                        }
                        else if (ddlPareceres.Visible)
                        {
                            string valor;
                            if (ahdId <= 0)
                            {
                                valor = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                         where dados.entDisciplina.tds_id == Convert.ToInt32(grvResFinalCompCurricular.DataKeys[row.RowIndex]["tds_id"])
                                         select dados.entDisciplina.ahd_avaliacao).FirstOrDefault();
                            }
                            else
                            {
                                valor = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                         where dados.entDisciplina.ahd_id == Convert.ToInt32(grvResFinalCompCurricular.DataKeys[row.RowIndex]["ahd_id"])
                                         select dados.entDisciplina.ahd_avaliacao).FirstOrDefault();
                            }
                            valor = (from par in LtPareceresNota
                                     where par.eap_valor.Equals(valor)
                                     select par.eap_valor + ";" + par.eap_ordem.ToString()).FirstOrDefault();
                            if (ddlPareceres.Items.FindByValue(valor) != null)
                            {
                                ddlPareceres.SelectedValue = valor;
                            }
                        }

                        TextBox      txtFrequencia = (TextBox)row.FindControl("txtFrequencia");
                        DropDownList ddlFrequencia = (DropDownList)row.FindControl("ddlFrequencia");

                        if (txtFrequencia.Visible)
                        {
                            if (ahdId <= 0)
                            {
                                txtFrequencia.Text = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                                      where dados.entDisciplina.tds_id == Convert.ToInt32(grvResFinalCompCurricular.DataKeys[row.RowIndex]["tds_id"])
                                                      select dados.entDisciplina.ahd_frequencia).FirstOrDefault();
                            }
                            else
                            {
                                txtFrequencia.Text = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                                      where dados.entDisciplina.ahd_id == Convert.ToInt32(grvResFinalCompCurricular.DataKeys[row.RowIndex]["ahd_id"])
                                                      select dados.entDisciplina.ahd_frequencia).FirstOrDefault();
                            }
                        }
                        else if (ddlFrequencia.Visible)
                        {
                            string valor;
                            if (ahdId <= 0)
                            {
                                valor = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                         where dados.entDisciplina.tds_id == Convert.ToInt32(grvResFinalCompCurricular.DataKeys[row.RowIndex]["tds_id"])
                                         select dados.entDisciplina.ahd_frequencia).FirstOrDefault();
                            }
                            else
                            {
                                valor = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                         where dados.entDisciplina.ahd_id == Convert.ToInt32(grvResFinalCompCurricular.DataKeys[row.RowIndex]["ahd_id"])
                                         select dados.entDisciplina.ahd_frequencia).FirstOrDefault();
                            }

                            if (ddlFrequencia.Items.FindByValue(valor) != null)
                            {
                                ddlFrequencia.SelectedValue = valor;
                            }
                        }
                    }
                }

                #endregion

                #region ENRIQUECIMENTO CURRICULAR
                foreach (GridViewRow row in grvResFinalEnrCurricular.Rows)
                {
                    TextBox      txtFrequencia = (TextBox)row.FindControl("txtFrequencia");
                    DropDownList ddlFrequencia = (DropDownList)row.FindControl("ddlFrequencia");
                    HiddenField  hdnAhdId      = (HiddenField)row.FindControl("hdnAhdId");

                    hdnAhdId.Value = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                      where dados.entDisciplina.tds_id == Convert.ToInt32(grvResFinalEnrCurricular.DataKeys[row.RowIndex]["tds_id"])
                                      select dados.entDisciplina.ahd_id).FirstOrDefault().ToString();

                    if (txtFrequencia.Visible)
                    {
                        txtFrequencia.Text = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                              where dados.entDisciplina.tds_id == Convert.ToInt32(grvResFinalEnrCurricular.DataKeys[row.RowIndex]["tds_id"])
                                              select dados.entDisciplina.ahd_frequencia).FirstOrDefault();
                    }
                    else if (ddlFrequencia.Visible)
                    {
                        string valor = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                        where dados.entDisciplina.tds_id == Convert.ToInt32(grvResFinalEnrCurricular.DataKeys[row.RowIndex]["tds_id"])
                                        select dados.entDisciplina.ahd_resultado.ToString()).FirstOrDefault();
                        if (ddlFrequencia.Items.FindByValue(valor) != null)
                        {
                            ddlFrequencia.SelectedValue = valor;
                        }
                    }
                }
                #endregion
            }
            #region PORJ/ATIV COMPLEMENTAR
            foreach (GridViewRow row in grvResFinalProjAtivCompl.Rows)
            {
                TextBox      txtFrequencia = (TextBox)row.FindControl("txtFrequencia");
                DropDownList ddlFrequencia = (DropDownList)row.FindControl("ddlFrequencia");
                HiddenField  hdnAhdId      = (HiddenField)row.FindControl("hdnAhdId");

                hdnAhdId.Value = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                  where dados.entDisciplina.ahp_id == Convert.ToInt32(grvResFinalProjAtivCompl.DataKeys[row.RowIndex]["ahp_id"])
                                  select dados.entDisciplina.ahd_id).FirstOrDefault().ToString();

                if (txtFrequencia.Visible)
                {
                    txtFrequencia.Text = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                          where dados.entDisciplina.ahp_id == Convert.ToInt32(grvResFinalProjAtivCompl.DataKeys[row.RowIndex]["ahp_id"])
                                          select dados.entDisciplina.ahd_frequencia).FirstOrDefault();
                }
                else if (ddlFrequencia.Visible)
                {
                    string valor = (from dados in alh.FirstOrDefault().Value.ltDisciplina
                                    where dados.entDisciplina.ahp_id == Convert.ToInt32(grvResFinalProjAtivCompl.DataKeys[row.RowIndex]["ahp_id"])
                                    select dados.entDisciplina.ahd_resultado.ToString()).FirstOrDefault();
                    if (ddlFrequencia.Items.FindByValue(valor) != null)
                    {
                        ddlFrequencia.SelectedValue = valor;
                    }
                }
            }
            #endregion

            #region PARECER CONCLUSIVO
            foreach (GridViewRow row in grvResFinalConclusivo.Rows)
            {
                DropDownList ddlParecerConclusivo = (DropDownList)row.FindControl("ddlParecerConclusivo");

                if (ddlParecerConclusivo.Items.FindByValue(ACA_AlunoHistoricoBO.HistoricoRes(alh.FirstOrDefault().Value.entHistorico.alh_resultado).ToString()) != null)
                {
                    ddlParecerConclusivo.SelectedValue = ACA_AlunoHistoricoBO.HistoricoRes(alh.FirstOrDefault().Value.entHistorico.alh_resultado).ToString();
                }
            }
            #endregion
        }
        /// <summary>
        /// O método salva as observações para conselho pedagógico.
        /// </summary>
        /// <param name="tur_id">ID da turma.</param>
        /// <param name="alu_id">ID do aluno.</param>
        /// <param name="mtu_id">ID da matrícula turma do aluno.</param>
        /// <param name="fav_id">ID do formato de avaliação.</param>
        /// <param name="ava_id">ID da avaliação.</param>
        /// <param name="ltObservacao">Lista de observações.</param>
        /// <param name="banco">Banco</param>
        /// <param name="ent_id">Id da entidade do usuário logado.</param>
        /// <returns></returns>
        public static bool SalvarObservacao
        (
            long tur_id,
            long alu_id,
            int mtu_id,
            long[] tud_ids,
            List <CLS_AlunoAvaliacaoTurmaObservacao> listaObservacao,
            List <CLS_AlunoAvaliacaoTurma> listaAlunoAvaliacaoTurma,
            List <CLS_AlunoAvaliacaoTurmaDisciplina> listaAlunoAvaliacaoTurmaDisciplina,
            List <ACA_AlunoAnotacao> listaAlunoAnotacao,
            bool permiteEditarResultadoFinal,
            Guid usu_idLogado,
            byte resultado,
            DateTime dataUltimaAlteracaoObservacao,
            DateTime dataUltimaAlteracaoNotaFinal,
            ACA_FormatoAvaliacao entFormatoAvaliacao,
            List <CLS_AvaliacaoTurDisc_Cadastro> listaDisciplina,
            List <MTR_MatriculaTurmaDisciplina> listaMatriculaTurmaDisciplina,
            int tamanhoMaximoKB,
            string[] TiposArquivosPermitidos,
            ref List <CLS_AlunoAvaliacaoTurmaDisciplina> listaAtualizacaoEfetivacao,
            Guid ent_id,
            IDictionary <int, int> dicAvaTpc,
            List <CLS_AlunoAvaliacaoTurmaObservacaoBO.DadosAlunoObservacao> listaDadosPeriodo
        )
        {
            TalkDBTransaction banco = new CLS_AlunoAvaliacaoTurmaObservacaoDAO()._Banco.CopyThisInstance();

            banco.Open(IsolationLevel.ReadCommitted);

            List <AlunoFechamentoPendencia> FilaProcessamento = new List <AlunoFechamentoPendencia>();
            int tpc_idUltimoPeriodo = (dicAvaTpc.Count() > 0 ? dicAvaTpc.Max(p => p.Value) : 0);

            try
            {
                foreach (CLS_AlunoAvaliacaoTurmaObservacao observacao in listaObservacao)
                {
                    observacao.usu_idAlteracao = usu_idLogado;
                    Save(observacao, banco);
                }

                foreach (CLS_AlunoAvaliacaoTurma alunoAvaliacaoTurma in listaAlunoAvaliacaoTurma)
                {
                    CLS_AlunoAvaliacaoTurmaBO.Save(alunoAvaliacaoTurma, banco);
                }


                object lockObject = new object();

                DataTable dtAlunoAvaliacaoTurmaDisciplina = CLS_AlunoAvaliacaoTurmaDisciplina.TipoTabela_AlunoAvaliacaoTurmaDisciplina();
                if (listaAlunoAvaliacaoTurmaDisciplina.Any())
                {
                    Parallel.ForEach
                    (
                        listaAlunoAvaliacaoTurmaDisciplina,
                        alunoAvaliacaoTurmaDisciplina =>
                    {
                        lock (lockObject)
                        {
                            DataRow drAlunoAvaliacaoTurmaDisciplina = dtAlunoAvaliacaoTurmaDisciplina.NewRow();
                            dtAlunoAvaliacaoTurmaDisciplina.Rows.Add(
                                CLS_AlunoAvaliacaoTurmaDisciplinaBO.EntityToDataRow(alunoAvaliacaoTurmaDisciplina, drAlunoAvaliacaoTurmaDisciplina));
                        }
                    }
                    );
                }

                if (dtAlunoAvaliacaoTurmaDisciplina.Rows.Count > 0)
                {
                    CLS_AlunoAvaliacaoTurmaDisciplinaBO.SalvarEmLotePosConselho(dtAlunoAvaliacaoTurmaDisciplina, banco);

                    if (entFormatoAvaliacao.fav_fechamentoAutomatico && listaAlunoAvaliacaoTurmaDisciplina.Any())
                    {
                        FilaProcessamento.AddRange(listaAlunoAvaliacaoTurmaDisciplina
                                                   .Select(p => new AlunoFechamentoPendencia {
                            tud_id         = p.tud_id,
                            tpc_id         = (p.tpc_id > 0 ? p.tpc_id : tpc_idUltimoPeriodo),
                            afp_frequencia = true,
                            afp_nota       = true,
                            afp_processado = (Byte)(p.atd_id <= 0 ? 0 : 2)
                        }).ToList());
                    }
                }


                foreach (ACA_AlunoAnotacao alunoAnotacao in listaAlunoAnotacao)
                {
                    ACA_AlunoAnotacaoBO.Save(alunoAnotacao, banco);
                }

                CLS_AlunoAvaliacaoTurmaDisciplinaBO.SaveAvaliacaoFinal(
                    tur_id
                    , entFormatoAvaliacao
                    , listaDisciplina
                    , tamanhoMaximoKB
                    , TiposArquivosPermitidos
                    , dataUltimaAlteracaoNotaFinal
                    , listaMatriculaTurmaDisciplina
                    , ref listaAtualizacaoEfetivacao
                    , banco);

                if (entFormatoAvaliacao.fav_fechamentoAutomatico && listaMatriculaTurmaDisciplina.Any() && (tpc_idUltimoPeriodo > 0))
                {
                    FilaProcessamento.AddRange(listaMatriculaTurmaDisciplina
                                               .Select(p => new AlunoFechamentoPendencia {
                        tud_id         = p.tud_id,
                        tpc_id         = tpc_idUltimoPeriodo,
                        afp_frequencia = true,
                        afp_nota       = true,
                        afp_processado = (Byte)(p.mtd_id <= 0 ? 0 : 2)
                    }).ToList());
                }

                if (permiteEditarResultadoFinal)
                {
                    // Se for passado o resultado, salva na MTR_MatriculaTurma.
                    MTR_MatriculaTurma entMatr = new MTR_MatriculaTurma
                    {
                        alu_id = alu_id
                        ,
                        mtu_id = mtu_id
                    };
                    MTR_MatriculaTurmaBO.GetEntity(entMatr, banco);

                    // So registra a alteracao do parecer conclusivo (resultado)
                    // se for um registro novo e tem valor selecionado, ou se houve alteracao do valor.
                    if ((entMatr.IsNew && entMatr.mtu_resultado > 0) || entMatr.mtu_resultado != resultado)
                    {
                        // Se o registro foi alterado depois da data da alteração mais recente no momento em que os dados foram carregados,
                        // interrompe o salvamento e alerta o usuário de que é necessário atualizar os dados
                        if (entMatr != null && !entMatr.IsNew && Convert.ToDateTime(entMatr.mtu_dataAlteracao.ToString()) > dataUltimaAlteracaoObservacao)
                        {
                            throw new ValidationException("Existe registro alterado mais recentemente, é necessário atualizar os dados.");
                        }
                        else
                        {
                            entMatr.usu_idResultado = usu_idLogado;
                            entMatr.mtu_resultado   = resultado;
                            MTR_MatriculaTurmaBO.Save(entMatr, banco);

                            if (ACA_ParametroAcademicoBO.ParametroValorBooleanoPorEntidade(eChaveAcademico.GERAR_HISTORICO_SALVAR_PARECER_CONCLUSIVO, ent_id))
                            {
                                ACA_AlunoHistoricoBO.GeracaoHistoricoPedagogicoPorAluno(entMatr.alu_id, entMatr.mtu_id, banco);
                            }

                            if (entFormatoAvaliacao.fav_fechamentoAutomatico)
                            {
                                FilaProcessamento.Add(new AlunoFechamentoPendencia {
                                    tud_id         = tud_ids.FirstOrDefault(),
                                    tpc_id         = tpc_idUltimoPeriodo,
                                    afp_frequencia = true,
                                    afp_nota       = true,
                                    afp_processado = (Byte)(entMatr.IsNew == true ? 0 : 2)
                                });
                            }
                        }
                    }
                }

                // Limpa cache do fechamento, para atualizar o check, as notas pos-conselho, o parecer e a sintese final.
                string chave = string.Empty;
                int    tpcId = -1;
                listaDadosPeriodo.ForEach(q =>
                {
                    // Fechamento de bimestre
                    chave = MTR_MatriculaTurmaBO.RetornaChaveCache_GetSelectBy_Turma_Periodo(tur_id, entFormatoAvaliacao.fav_id, q.ava_id);
                    if (HttpContext.Current != null)
                    {
                        HttpContext.Current.Cache.Remove(chave);
                    }
                    chave = MTR_MatriculaTurmaDisciplinaBO.RetornaChaveCache_GetSelect_ComponentesRegencia_By_TurmaFormato(tur_id, entFormatoAvaliacao.fav_id, q.ava_id);
                    CacheManager.Factory.Remove(chave);

                    // Fechamento final
                    chave = MTR_MatriculaTurmaBO.RetornaChaveCache_GetSelectBy_Turma_Final(tur_id, entFormatoAvaliacao.fav_id, q.ava_id);
                    if (HttpContext.Current != null)
                    {
                        HttpContext.Current.Cache.Remove(chave);
                    }
                    chave = MTR_MatriculaTurmaDisciplinaBO.RetornaChaveCache_GetSelect_ComponentesRegencia_By_TurmaFormato_Final(tur_id, entFormatoAvaliacao.fav_id, q.ava_id);
                    CacheManager.Factory.Remove(chave);

                    // Fechamento automatico de bimestre
                    if (dicAvaTpc.TryGetValue(q.ava_id, out tpcId))
                    {
                        chave = String.Format(ModelCache.FECHAMENTO_AUTO_BIMESTRE_COMPONENTES_REGENCIA_MODEL_KEY, tur_id, tpcId);
                        CacheManager.Factory.Remove(chave);
                    }

                    // Fechamento automatico final
                    chave = String.Format(ModelCache.FECHAMENTO_AUTO_FINAL_COMPONENTES_REGENCIA_MODEL_KEY, tur_id);
                    CacheManager.Factory.Remove(chave);
                });
                List <TUR_TurmaDisciplina> listaDisciplinas = TUR_TurmaDisciplinaBO.GetSelectBy_Turma(tur_id, null, GestaoEscolarUtilBO.MinutosCacheLongo);
                listaDisciplinas.ForEach(p =>
                {
                    // Fechamento de bimestre
                    chave = String.Format("{0}_{1}_{2}", ModelCache.FECHAMENTO_BIMESTRE_PATTERN_KEY, p.tud_id, entFormatoAvaliacao.fav_id);
                    CacheManager.Factory.RemoveByPattern(chave);
                    chave = String.Format("{0}_{1}_{2}", ModelCache.FECHAMENTO_BIMESTRE_FILTRO_DEFICIENCIA_PATTERN_KEY, p.tud_id, entFormatoAvaliacao.fav_id);
                    CacheManager.Factory.RemoveByPattern(chave);

                    // Fechamento final
                    chave = String.Format("{0}_{1}_{2}", ModelCache.FECHAMENTO_FINAL_PATTERN_KEY, p.tud_id, entFormatoAvaliacao.fav_id);
                    CacheManager.Factory.RemoveByPattern(chave);
                    chave = String.Format("{0}_{1}_{2}", ModelCache.FECHAMENTO_FINAL_FILTRO_DEFICIENCIA_PATTERN_KEY, p.tud_id, entFormatoAvaliacao.fav_id);
                    CacheManager.Factory.RemoveByPattern(chave);

                    // Fechamento automatico final
                    chave = String.Format(ModelCache.FECHAMENTO_AUTO_FINAL_MODEL_KEY, p.tud_id);
                    CacheManager.Factory.Remove(chave);
                    chave = String.Format(ModelCache.FECHAMENTO_AUTO_FINAL_FILTRO_DEFICIENCIA_MODEL_KEY, p.tud_id);
                    CacheManager.Factory.Remove(chave);

                    listaDadosPeriodo.ForEach(q =>
                    {
                        // Fechamento automatico de bimestre
                        if (dicAvaTpc.TryGetValue(q.ava_id, out tpcId))
                        {
                            chave = String.Format(ModelCache.FECHAMENTO_AUTO_BIMESTRE_MODEL_KEY, p.tud_id, tpcId);
                            CacheManager.Factory.Remove(chave);
                            chave = String.Format(ModelCache.FECHAMENTO_AUTO_BIMESTRE_FILTRO_DEFICIENCIA_MODEL_KEY, p.tud_id, tpcId);
                            CacheManager.Factory.Remove(chave);
                        }
                    });
                });
                //

                //Adiciona tuds para processamento de pendência de notas (quando salva o parecer final
                foreach (long tud in tud_ids.Where(t => !FilaProcessamento.Any(f => f.tud_id == t)))
                {
                    FilaProcessamento.Add(new AlunoFechamentoPendencia
                    {
                        tud_id                = tud,
                        tpc_id                = tpc_idUltimoPeriodo,
                        afp_frequencia        = false,
                        afp_frequenciaExterna = false,
                        afp_nota              = true,
                        afp_processado        = (byte)2
                    });
                }

                if (entFormatoAvaliacao.fav_fechamentoAutomatico && FilaProcessamento.Any(a => a.tpc_id > 0))
                {
                    CLS_AlunoFechamentoPendenciaBO.SalvarFilaPendencias(
                        FilaProcessamento
                        .GroupBy(g => new { g.tud_id, g.tpc_id })
                        .Select(p => new AlunoFechamentoPendencia {
                        tud_id         = p.FirstOrDefault().tud_id,
                        tpc_id         = p.FirstOrDefault().tpc_id,
                        afp_frequencia = p.FirstOrDefault().afp_frequencia,
                        afp_nota       = p.FirstOrDefault().afp_nota,
                        afp_processado = FilaProcessamento
                                         .Where(w => w.tud_id == p.FirstOrDefault().tud_id&& w.tpc_id == p.FirstOrDefault().tpc_id)
                                         .Min(m => m.afp_processado)
                    })
                        .Where(w => w.tpc_id > 0 && w.tpc_id != ACA_ParametroAcademicoBO.ParametroValorInt32PorEntidade(eChaveAcademico.TIPO_PERIODO_CALENDARIO_RECESSO, ent_id))
                        .ToList()
                        , banco);
                }

                return(true);
            }
            catch (ValidationException ex)
            {
                banco.Close(ex);
                throw;
            }
            catch (Exception ex)
            {
                banco.Close(ex);
                throw;
            }
            finally
            {
                if (banco.ConnectionIsOpen)
                {
                    banco.Close();
                }
            }
        }
        /// <summary>
        /// O método salva as observações para conselho pedagógico.
        /// </summary>
        /// <param name="tur_id">ID da turma.</param>
        /// <param name="alu_id">ID do aluno.</param>
        /// <param name="mtu_id">ID da matrícula turma do aluno.</param>
        /// <param name="fav_id">ID do formato de avaliação.</param>
        /// <param name="ava_id">ID da avaliação.</param>
        /// <param name="ltObservacao">Lista de observações.</param>
        /// <param name="banco">Banco</param>
        /// <param name="ent_id">Id da entidade do usuário logado.</param>
        /// <returns></returns>
        public static bool SalvarObservacao
        (
            long tur_id,
            long alu_id,
            int mtu_id,
            int fav_id,
            int ava_id,
            CLS_AlunoAvaliacaoTur_Observacao observacao,
            Guid usu_idLogado,
            byte resultado,
            string justificativaResultado,
            DateTime dataUltimaAlteracaoObservacao,
            DateTime dataUltimaAlteracaoNotaFinal,
            ACA_FormatoAvaliacao entFormatoAvaliacao,
            List <CLS_AvaliacaoTurDisc_Cadastro> listaDisciplina,
            List <MTR_MatriculaTurmaDisciplina> listaMatriculaTurmaDisciplina,
            int tamanhoMaximoKB,
            string[] TiposArquivosPermitidos,
            ref List <CLS_AlunoAvaliacaoTurmaDisciplina> listaAtualizacaoEfetivacao,
            Guid ent_id,
            int tpc_id
        )
        {
            TalkDBTransaction banco = new CLS_AlunoAvaliacaoTurmaObservacaoDAO()._Banco.CopyThisInstance();

            banco.Open(IsolationLevel.ReadCommitted);

            List <AlunoFechamentoPendencia> FilaProcessamento = new List <AlunoFechamentoPendencia>();

            try
            {
                if (observacao.entityObservacao != null && observacao.entityObservacao != new CLS_AlunoAvaliacaoTurmaObservacao())
                {
                    Save(observacao.entityObservacao, banco);
                }
                int tpc_idUtilizado = -1;

                List <CLS_AvaliacaoTurDisc_Cadastro> listaDisciplinasUltimoPeriodo = new List <CLS_AvaliacaoTurDisc_Cadastro>();
                listaDisciplinasUltimoPeriodo = listaDisciplina.Where(d => d.entity.ava_id != ava_id).ToList();
                if (listaDisciplinasUltimoPeriodo.Count > 0)
                {
                    tpc_idUtilizado = ACA_AvaliacaoBO.SelecionaMaiorBimestre_ByFormatoAvaliacao(entFormatoAvaliacao.fav_id, banco);
                }

                CLS_AlunoAvaliacaoTurmaDisciplinaBO.SaveAvaliacaoFinal(
                    tur_id
                    , entFormatoAvaliacao
                    , listaDisciplina
                    , tamanhoMaximoKB
                    , TiposArquivosPermitidos
                    , dataUltimaAlteracaoNotaFinal
                    , listaMatriculaTurmaDisciplina
                    , ref listaAtualizacaoEfetivacao
                    , banco);

                tpc_idUtilizado = tpc_idUtilizado > 0 ? tpc_idUtilizado : tpc_id;
                if (entFormatoAvaliacao.fav_fechamentoAutomatico && listaMatriculaTurmaDisciplina.Any())
                {
                    FilaProcessamento.AddRange(listaMatriculaTurmaDisciplina
                                               .Select(p => new AlunoFechamentoPendencia {
                        tud_id         = p.tud_id,
                        tpc_id         = tpc_idUtilizado,
                        afp_frequencia = true,
                        afp_nota       = true,
                        afp_processado = (Byte)(p.mtd_id <= 0 ? 0 : 2)
                    }).ToList());
                }

                // Se for passado o resultado, salva na MTR_MatriculaTurma.
                if (!usu_idLogado.Equals(Guid.Empty))
                {
                    MTR_MatriculaTurma entMatr = new MTR_MatriculaTurma
                    {
                        alu_id = alu_id
                        ,
                        mtu_id = mtu_id
                    };
                    MTR_MatriculaTurmaBO.GetEntity(entMatr, banco);

                    // Se o registro foi alterado depois da data da alteração mais recente no momento em que os dados foram carregados,
                    // interrompe o salvamento e alerta o usuário de que é necessário atualizar os dados
                    if (entMatr != null && !entMatr.IsNew && Convert.ToDateTime(entMatr.mtu_dataAlteracao.ToString()) > dataUltimaAlteracaoObservacao)
                    {
                        throw new ValidationException("Existe registro alterado mais recentemente, é necessário atualizar os dados.");
                    }
                    else
                    {
                        entMatr.usu_idResultado = usu_idLogado;
                        entMatr.mtu_resultado   = resultado;
                        entMatr.mtu_relatorio   = justificativaResultado;
                        MTR_MatriculaTurmaBO.Save(entMatr, banco);

                        if (ACA_ParametroAcademicoBO.ParametroValorBooleanoPorEntidade(eChaveAcademico.GERAR_HISTORICO_SALVAR_PARECER_CONCLUSIVO, ent_id))
                        {
                            ACA_AlunoHistoricoBO.GeracaoHistoricoPedagogicoPorAluno(entMatr.alu_id, entMatr.mtu_id, banco);
                        }

                        if (entFormatoAvaliacao.fav_fechamentoAutomatico)
                        {
                            FilaProcessamento.Add(new AlunoFechamentoPendencia {
                                tud_id         = listaMatriculaTurmaDisciplina.FirstOrDefault().tud_id,
                                tpc_id         = tpc_id,
                                afp_frequencia = true,
                                afp_nota       = true,
                                afp_processado = (Byte)(entMatr.IsNew == true ? 0 : 2)
                            });
                        }
                    }
                }

                // Limpa cache do fechamento, para atualizar o check.
                GestaoEscolarUtilBO.LimpaCache(MTR_MatriculaTurmaBO.RetornaChaveCache_GetSelectBy_Turma_Periodo(tur_id, fav_id, ava_id));
                List <TUR_TurmaDisciplina> listaDisciplinas = TUR_TurmaDisciplinaBO.GetSelectBy_Turma(tur_id, null, GestaoEscolarUtilBO.MinutosCacheLongo);
                listaDisciplinas.ForEach(p =>
                {
                    GestaoEscolarUtilBO.LimpaCache(MTR_MatriculaTurmaDisciplinaBO.RetornaChaveCache_GetSelectBy_TurmaDisciplinaPeriodo(p.tud_id, fav_id, ava_id, string.Empty));
                    GestaoEscolarUtilBO.LimpaCache(MTR_MatriculaTurmaDisciplinaBO.RetornaChaveCache_GetSelectBy_TurmaDisciplinaPeriodoFiltroDeficiencia(p.tud_id, fav_id, ava_id, string.Empty));

                    // Chaves do fechamento automatico
                    string chave = string.Empty;
                    chave        = String.Format(ModelCache.FECHAMENTO_AUTO_BIMESTRE_MODEL_KEY, p.tud_id, tpc_id);
                    CacheManager.Factory.RemoveByPattern(chave);

                    chave = String.Format(ModelCache.FECHAMENTO_AUTO_BIMESTRE_FILTRO_DEFICIENCIA_MODEL_KEY, p.tud_id, tpc_id);
                    CacheManager.Factory.RemoveByPattern(chave);

                    chave = String.Format(ModelCache.FECHAMENTO_AUTO_FINAL_MODEL_KEY, p.tud_id);
                    CacheManager.Factory.RemoveByPattern(chave);

                    chave = String.Format(ModelCache.FECHAMENTO_AUTO_FINAL_FILTRO_DEFICIENCIA_MODEL_KEY, p.tud_id);
                    CacheManager.Factory.RemoveByPattern(chave);

                    chave = String.Format(ModelCache.FECHAMENTO_AUTO_BIMESTRE_COMPONENTES_REGENCIA_MODEL_KEY, tur_id, tpc_id);
                    CacheManager.Factory.RemoveByPattern(chave);

                    chave = String.Format(ModelCache.FECHAMENTO_AUTO_FINAL_COMPONENTES_REGENCIA_MODEL_KEY, tur_id, tpc_id);
                    CacheManager.Factory.RemoveByPattern(chave);
                    //
                });

                if (entFormatoAvaliacao.fav_fechamentoAutomatico && FilaProcessamento.Any(a => a.tpc_id > 0))
                {
                    CLS_AlunoFechamentoPendenciaBO.SalvarFilaPendencias(
                        FilaProcessamento
                        .GroupBy(g => new { g.tud_id, g.tpc_id })
                        .Select(p => new AlunoFechamentoPendencia {
                        tud_id         = p.FirstOrDefault().tud_id,
                        tpc_id         = p.FirstOrDefault().tpc_id,
                        afp_frequencia = p.FirstOrDefault().afp_frequencia,
                        afp_nota       = p.FirstOrDefault().afp_nota,
                        afp_processado = FilaProcessamento
                                         .Where(w => w.tud_id == p.FirstOrDefault().tud_id&& w.tpc_id == p.FirstOrDefault().tpc_id)
                                         .Min(m => m.afp_processado)
                    })
                        .Where(w => w.tpc_id > 0 && w.tpc_id != ACA_ParametroAcademicoBO.ParametroValorInt32PorEntidade(eChaveAcademico.TIPO_PERIODO_CALENDARIO_RECESSO, ent_id))
                        .ToList()
                        , banco);
                }

                return(true);
            }
            catch (ValidationException ex)
            {
                banco.Close(ex);
                throw;
            }
            catch (Exception ex)
            {
                banco.Close(ex);
                throw;
            }
            finally
            {
                if (banco.ConnectionIsOpen)
                {
                    banco.Close();
                }
            }
        }