function atualiza_diario($aluno, $diario_id, $motivo_matricula = 0) { global $conn; // RECUPERA INFORMACOES DO DIARIO $qryDisc = " SELECT DISTINCT\n\t\t\t\tprof.ref_professor, o.ref_disciplina, o.ref_periodo \n\t\t\t\tFROM \n\t\t\t\tdisciplinas_ofer o, disciplinas_ofer_prof prof\n \tWHERE\n o.id = " . $diario_id . " AND \n\t\t\t\t o.is_cancelada = '0' AND\n\t\t\t\t o.id = prof.ref_disciplina_ofer ;"; $diario_info = $conn->get_all($qryDisc); // A DISCIPLINA EXISTE if (count($diario_info) > 0) { foreach ($diario_info as $linha) { $getdisciplina = @$linha['ref_disciplina']; $getperiodo = @$linha['ref_periodo']; $id = @$linha['ref_professor']; } } // ^ A DISCIPLINA EXISTE $grupo = $id . "-" . $getperiodo . "-" . $getdisciplina . "-" . $diario_id; $grupo_novo = "%-" . $getperiodo . "-%-" . $diario_id; $flag_pendencia = 0; $qryDiario = 'BEGIN;'; $getcurso = get_curso($diario_id); // VERIFICA PENDENCIAS RELACIONADAS AO LANCAMENTO DE NOTAS $sql1 = "SELECT\n\tCOUNT(grupo)\n\tFROM diario_formulas\n\tWHERE\n\tgrupo ILIKE '{$grupo_novo}';"; $num_formula = $conn->get_one($sql1); if ($num_formula == 6) { $qryNotas = 'SELECT m.ref_pessoa, id_ref_pessoas FROM matricula m LEFT JOIN ( SELECT DISTINCT d.id_ref_pessoas FROM diario_notas d WHERE d.d_ref_disciplina_ofer = ' . $diario_id . ' AND id_ref_pessoas = ' . $aluno . ' ) tmp ON ( m.ref_pessoa = id_ref_pessoas ) WHERE m.ref_disciplina_ofer = ' . $diario_id . ' AND m.ref_pessoa = ' . $aluno . ' AND id_ref_pessoas IS NULL AND (m.dt_cancelamento is null) AND (m.ref_motivo_matricula = ' . $motivo_matricula . ') ORDER BY id_ref_pessoas;'; $alunos_sem_registro_notas = $conn->get_all($qryNotas); $num_registros = count($alunos_sem_registro_notas); $num_notas = 6; if ($num_registros > 0) { foreach ($alunos_sem_registro_notas as $registro) { $ref_pessoa = $registro['ref_pessoa']; for ($i = 1; $i <= $num_notas; $i++) { $qryDiario .= ' INSERT INTO diario_notas(ra_cnec, '; $qryDiario .= ' ref_diario_avaliacao,nota,peso,id_ref_pessoas,'; $qryDiario .= ' id_ref_periodos,id_ref_curso,d_ref_disciplina_ofer,'; $qryDiario .= ' rel_diario_formulas_grupo)'; $qryDiario .= " VALUES({$ref_pessoa},{$i},0,0,{$ref_pessoa},'{$getperiodo}',{$getcurso},"; $qryDiario .= " {$diario_id}, '{$grupo}');"; } $qryDiario .= ' INSERT INTO diario_notas(ra_cnec, '; $qryDiario .= ' ref_diario_avaliacao,nota,peso,id_ref_pessoas,'; $qryDiario .= ' id_ref_periodos,id_ref_curso,d_ref_disciplina_ofer,'; $qryDiario .= ' rel_diario_formulas_grupo)'; $qryDiario .= " VALUES({$ref_pessoa},7,-1,0,{$ref_pessoa},'{$getperiodo}',{$getcurso},"; $qryDiario .= " {$diario_id} ,'{$grupo}');"; } $flag_pendencia = 1; // $msg .= $num_registros .' alunos com problemas no lancamento de notas\n'; } // ^ VERIFICA PENDENCIAS RELACIONADAS AO LANCAMENTO DE NOTAS ^ // VERIFICA PENDENCIAS RELACIONADAS AO SOMATORIO DE FALTAS $sqlDiarioFaltas = "\n\t\tSELECT * FROM\n\t\t(\n\t\tSELECT DISTINCT\n\t\tregistro_id,\n\t\tCASE\n\t\tWHEN num_faltas IS NULL THEN '0'\n\t\tELSE num_faltas\n\t\tEND AS num_faltas,\n\t\tCASE\n\t\tWHEN faltas_diario IS NULL THEN '0'\n\t\tELSE faltas_diario\n\t\tEND AS faltas_diario\n\t\tFROM\n\t\t(\n\t\tSELECT DISTINCT\n\t\tCAST(a.ref_pessoa AS INTEGER) AS registro_id, a.num_faltas\n\t\tFROM\n\t\tmatricula a\n\t\tWHERE\n\t\ta.ref_periodo = '{$getperiodo}' AND\n\t\ta.ref_disciplina_ofer = {$diario_id} AND\n\t\ta.ref_pessoa = {$aluno}\n\t\t) AS T1\n\t\tFULL OUTER JOIN\n\t\t(\n\t\tSELECT\n\t\tCAST(a.ra_cnec AS INTEGER) AS registro_id, count(CAST(a.ra_cnec AS INTEGER)) AS faltas_diario\n\t\tFROM\n\t\tdiario_chamadas a\n\t\tWHERE\n\t\t(a.ref_periodo = '{$getperiodo}') AND\n\t\t(a.ref_disciplina_ofer = {$diario_id}) AND\n\t\ta.ra_cnec = '{$aluno}'\n\t\tGROUP BY ra_cnec\n\t\t) AS T4\n\n\t\tUSING (registro_id)\n\n\t\t) AS TB\n\n\t\tWHERE\n\t\t(num_faltas <> faltas_diario);"; $diario_faltas = $conn->get_all($sqlDiarioFaltas); $numFalta = count($diario_faltas); if ($numFalta != 0) { foreach ($diario_faltas as $registro) { $ref_pessoa = $registro['registro_id']; $faltas = $registro['faltas_diario']; $num_faltas = $registro['num_faltas']; $qryDiario .= ' UPDATE matricula SET num_faltas = ' . $faltas; $qryDiario .= ' WHERE ref_pessoa = ' . $ref_pessoa . ' AND'; $qryDiario .= " ref_periodo = '{$getperiodo}' AND "; $qryDiario .= ' ref_disciplina_ofer = ' . $diario_id . ';'; } $flag_pendencia = 1; $msg_atualiza .= 'Atualizado somatório de faltas\\n'; // $msg .= $numFalta . ' alunos com problemas no somatorio de faltas\n'; } // ^ VERIFICA PENDENCIAS RELACIONADAS AO SOMATORIO DE FALTAS ^ // VERIFICA PENDENCIAS RELACIONADAS AO SOMATORIO DE NOTAS *** CONSIDERA NOTA EXTRA *** $sqlNotas = "\n\t\tSELECT DISTINCT\n\t\tregistro_id, nota_diario, nota_extra, nota_final\n\t\tFROM\n\t\t(\n\t\tSELECT\n\t\tDISTINCT\n\t\tCAST(b.id AS INTEGER) AS registro_id, CAST(SUM(c.nota) AS NUMERIC) AS nota_diario\n\t\tFROM\n\t\tmatricula a, pessoas b, diario_notas c\n\t\tWHERE\n\t\ta.ref_periodo = '{$getperiodo}' AND\n\t\ta.ref_disciplina_ofer = {$diario_id} AND\n\t\tb.ra_cnec = c.ra_cnec AND\n\t\tc.d_ref_disciplina_ofer = {$diario_id} AND\n\t\ta.ref_pessoa = b.id AND\n\t\tb.ra_cnec = '{$aluno}' AND\n\t\tref_diario_avaliacao < 7\n\t\tGROUP BY b.id\n\t\t) AS T1\n\n\t\tINNER JOIN (\n\t\tSELECT DISTINCT\n\t\tCAST(b.id AS INTEGER) AS registro_id, CAST(c.nota AS NUMERIC) AS nota_extra\n\t\tFROM\n\t\tmatricula a, pessoas b, diario_notas c\n\t\tWHERE\n\t\ta.ref_periodo = '{$getperiodo}' AND\n\t\ta.ref_disciplina_ofer = {$diario_id} AND\n\t\tb.ra_cnec = c.ra_cnec AND\n\t\tc.d_ref_disciplina_ofer = {$diario_id} AND\n\t\ta.ref_pessoa = b.id AND\n\t\tb.ra_cnec = '{$aluno}' AND\n\t\tref_diario_avaliacao = 7\n\t\t) AS T2\n\n\t\tUSING (registro_id)\n\t\tINNER JOIN\n\n\t\t(\n\t\tSELECT DISTINCT\n\t\tCAST(a.ref_pessoa AS INTEGER) AS registro_id, CAST(a.nota_final AS NUMERIC)\n\t\tFROM\n\t\tmatricula a\n\t\tWHERE\n\t\ta.ref_periodo = '{$getperiodo}' AND\n\t\ta.ref_disciplina_ofer = {$diario_id} AND\n\t\ta.ref_pessoa = {$aluno}\n\t\t) AS T3\n\n\t\tUSING (registro_id)\n\n\t\tWHERE\n\t\tnota_diario <> nota_final;"; $diario_notas = $conn->get_all($sqlNotas); $numNotas = count($diario_notas); //print_r($diario_notas); if ($numNotas != 0) { $numNotas = 0; foreach ($diario_notas as $registro) { $ref_pessoa = $registro['registro_id']; $nota_diario = $registro['nota_diario']; $nota_final = $registro['nota_final']; $nota_extra = $registro['nota_extra']; //print_r($registro); if ($nota_extra == -1 && $nota_diario != $nota_final) { // NOTA EXTRA NAO LANCADA E SOMATORIO ERRADO $qryDiario .= ' UPDATE matricula SET nota_final = ' . $nota_diario; $qryDiario .= ' WHERE ref_pessoa = ' . $ref_pessoa . ' AND'; $qryDiario .= " ref_periodo = '{$getperiodo}' AND "; $qryDiario .= ' ref_disciplina_ofer = ' . $diario_id . ';'; $numNotas++; } else { // NOTA EXTRA LANCADA if ($nota_diario < 60 || $nota_final < 60) { // CALCULA NOTA FINAL E VERIFICA NOTA EXTRA SOMENTE COM NOTA < 60 // NOTA < 60 RATIFICA O LANCAMENTO DA NOTA EXTRA $nota_final_calculada = calcula_nota_reavaliacao($diario_id, $nota_diario, $nota_extra); if ($nota_final_calculada != $nota_final) { // NOTA EXTRA LANCADA E SOMATORIO ERRADO $qryDiario .= ' UPDATE matricula SET nota_final = ' . $nota_final_calculada; $qryDiario .= ' WHERE ref_pessoa = ' . $ref_pessoa . ' AND'; $qryDiario .= " ref_periodo = '{$getperiodo}' AND "; $qryDiario .= ' ref_disciplina_ofer = ' . $diario_id . ';'; $numNotas++; } } } } if ($numNotas > 0) { $flag_pendencia = 1; $msg_atualiza .= 'Atualizado somatório de faltas\\n'; // $msg .= $numNotas . ' alunos com problemas no somatorio de notas\n'; } } // VERIFICA PENDENCIAS RELACIONADAS AO SOMATORIO DE NOTAS *** CONSIDERA NOTA EXTRA *** // APLICA A RESOLUCAO DE PENDENCIAS CASO EXISTA ALGUMA if ($flag_pendencia == 1) { $qryDiario .= "COMMIT;"; // GRAVA AS ALTERACOES $conn->Execute($qryDiario); /* if($res === FALSE) { // MENSAGEM DE ERRO AO GRAVAR AS ALTERACOES OU ENVIA EMAIL AVISANDO ALGUEM $msg_erro = ""; envia_erro($res ."\n\n". $qryDiario); //^ MENSAGEM DE ERRO AO GRAVAR AS ALTERACOES OU ENVIA EMAIL AVISANDO ALGUEM } else { // MENSAGEM PENDENCIAS RESOLVIDAS COM SUCESSO $msg_sucesso = ""; //^ MENSAGEM PENDENCIAS RESOLVIDAS COM SUCESSO } */ } else { // MENSAGEM NENHUMA PENDENCIA A RESOLVER $msg_sem_pendencias = ""; //^ MENSAGEM NENHUMA PENDENCIA A RESOLVER } // ^ APLICA A RESOLUCAO DE PENDENCIAS CASO EXISTA ALGUMA } }
if ($nota_extra > -1) { $flag_extra = 1; } else { $flag_extra = 0; } // NOTA DIFERENTE if ($nota != $nota_extra) { $flag_diff = 1; } else { $flag_diff = 0; } // CALCULA NOTA TOTAL // TODO: Selecionar método de cálculo da nota final com base em parâmetros do sistema // SE FOR NOTA DE RECUPERACAO / REAVALIACAO CALCULA CONFORME CRITERIOS DE CADA CURSO if ($nota != -1) { $NotaFinal = calcula_nota_reavaliacao($diario_id, $nota_parcial, $nota); } else { $NotaFinal = $nota_parcial; } if ($nota_parcial >= 60) { $flag_media = 1; } else { $flag_media = 0; } if ($NotaFinal > 100 || $nota > 100) { $flag_maior = 1; } else { $flag_maior = 0; } $NotaReal = number::numeric2decimal_br($nota, 1); // VERIFICA CONDICOES PARA REGISTRAR A NOTA