/// <summary> /// Carrega repeaters do boletim do aluno. /// </summary> /// <param name="idAluno">ID do aluno</param> /// <param name="mtu_idBuscar">Id da matrícula do aluno</param> private void CarregaBoletim(long idAluno, int mtu_idBuscar) { BoletimDados = CLS_AlunoAvaliacaoTurmaBO.RetornaBoletimAluno(idAluno, mtu_idBuscar); fdsBoletim.Visible = BoletimDados.Count > 0; if (fdsBoletim.Visible) { var periodos = from BoletimAluno item in BoletimDados orderby item.tpc_ordem group item by item.tpc_id into g select new { tpc_id = g.Key , g.First().tpc_nome , g.First().tpc_ordem , g.First().ava_idRec , g.First().ava_nomeRec , MatriculaPeriodo = g.First().mtu_id > 0 ? "Responsável pelo lançamento no " + g.First().tpc_nome + ": Turma " + g.First().tur_codigo + " (" + (ACA_ParametroAcademicoBO.ParametroValorBooleanoPorEntidade(eChaveAcademico.ORDENAR_ESCOLAS_POR_CODIGO, __SessionWEB.__UsuarioWEB.Usuario.ent_id) ? g.First().esc_codigo + " - " + g.First().esc_nome : g.First().esc_nome) + ")" : "Aluno não matriculado no " + g.First().tpc_nome }; var disciplinas = from BoletimAluno item in BoletimDados orderby item.tud_global descending group item by item.Disciplina into g select new { g.First().nomeDisciplina , totalFaltas = g.First().dda_id > 0 ? "-" : g.Sum(p => p.numeroFaltas).ToString() , g.First().tud_global , mostrarDisciplina = g.Count(p => p.MostrarLinhaDisciplina) , NotaRecEsp = g.First().dda_id > 0 ? "-" : g.First().NotaRecEsp , notas = ( from per in periodos.ToList() orderby per.tpc_ordem select new { per.tpc_id , nota = ( from BoletimAluno bNota in BoletimDados where bNota.Disciplina == g.Key && bNota.tpc_id == per.tpc_id select new { Nota = ( // bNota.dda_id > 0 ? "-" : // !bNota.mostraNota ? "-" : (bNota.NotaNumerica ? bNota.avaliacao ?? "-" : (bNota. NotaAdicionalNumerica ? bNota. avaliacaoAdicional ?? "-" : bNota.esa_tipo == (byte)EscalaAvaliacaoTipo.Pareceres ? bNota.avaliacao ?? "-" : "-") ) ).Replace(".", ",") , Conceito = ( // bNota.dda_id > 0 ? "-" : // bNota.mostraConceito ? (bNota.NotaNumerica ? "-" : bNota.avaliacao) : "-") , bNota.tpc_id , bNota.NotaRP , numeroFaltas = ( // bNota.dda_id > 0 ? "-" : // (bNota.mostraFrequencia && bNota.NotaID > 0) ? bNota.numeroFaltas. ToString() : "-") }).FirstOrDefault() }) }; // Se o último período do boletim possui avaliação de recuperação relacionada, mostra a coluna de 5º COC. mostra5COC = (BoletimDados.Count() > 0 ? BoletimDados.Max(p => p.ava_idRecEsp) : 0) > 0; coluna5COC.Visible = coluna5COCNota.Visible = mostra5COC; // coluna5COCConceito.Visible = coluna5COCNota.Visible = coluna5COCFaltas.Visible = mostra5COC; rptPeriodosNomes.DataSource = periodos; rptPeriodosColunasFixas.DataSource = periodos; rptPeriodosNomes.DataBind(); rptPeriodosColunasFixas.DataBind(); rptDisciplinas.DataSource = disciplinas.Where(p => p.mostrarDisciplina > 0); rptDisciplinas.DataBind(); // Buscar última frequência acumulada lançada no conceito global. if (BoletimDados.Where(p => p.tud_global && (p.NotaID > 0 || p.frequenciaAcumulada > 0)).Count() > 0) { decimal freq = BoletimDados .Where(p => p.tud_global && (p.NotaID > 0 || p.frequenciaAcumulada > 0)) .OrderBy(p => p.tpc_ordem) .LastOrDefault() .frequenciaAcumulada; decimal variacao = BoletimDados.FirstOrDefault().fav_variacao; litFrequenciaAcumulada.Text = freq.ToString( GestaoEscolarUtilBO.CriaFormatacaoDecimal( variacao > 0 ? GestaoEscolarUtilBO.RetornaNumeroCasasDecimais(variacao) : 2 ) ); } else { litFreqFrase.Visible = false; litFreqPorc.Visible = false; } } }
/// <summary> /// Carrega repeaters da avaliação da secretaria. /// </summary> /// <param name="idAluno">ID do aluno</param> /// <param name="mtu_idBuscar">Id da matrícula do aluno</param> private void CarregaAvaliacoesSecretaria(long idAluno, int mtu_idBuscar) { BoletimAvaliacoesDados = CLS_AlunoAvaliacaoTurmaBO.RetornaBoletimAlunoAvaliacoesSecretaria(idAluno, mtu_idBuscar); divAvaliacoesSecretaria.Visible = BoletimAvaliacoesDados.Count > 0; if (BoletimAvaliacoesDados.Count > 0) { var periodos = from BoletimAlunoAvaliacoesSecretaria item in BoletimAvaliacoesDados orderby item.tpc_ordem group item by item.tpc_id into g select new { tpc_id = g.Key , g.First().tpc_nome , g.First().tpc_ordem }; var avaliacoes = from BoletimAlunoAvaliacoesSecretaria item in BoletimAvaliacoesDados group item by item.chaveAvaliacao into g select new { chaveAvaliacao = g.Key , g.First().avs_nome , notas = ( from per in periodos.ToList() orderby per.tpc_ordem select new { per.tpc_id , per.tpc_ordem , nota = ( from BoletimAlunoAvaliacoesSecretaria bNota in BoletimAvaliacoesDados where bNota.chaveAvaliacao == g.Key && bNota.tpc_id == per.tpc_id select new { Nota = (bNota.Nota ?? "").Replace(".", ",") } ).FirstOrDefault() } ) }; rptPeridosSecretaria.DataSource = periodos; rptPeridosSecretaria.DataBind(); rptAvaliacoesSecretaria.DataSource = avaliacoes; rptAvaliacoesSecretaria.DataBind(); } }
/// <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(); } } }