Example #1
0
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&oacute;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&oacute;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