From 169ef5beccf9255cea57a00ce8469980dbe89bd4 Mon Sep 17 00:00:00 2001 From: Lucas Schmoeller da Silva Date: Wed, 18 Mar 2015 11:55:47 -0300 Subject: [PATCH] Criado função para cálculo de falta do aluno --- ieducar/misc/database/deltas/portabilis/64_cria_function_frequencia_geral.sql | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+), 0 deletions(-) create mode 100644 ieducar/misc/database/deltas/portabilis/64_cria_function_frequencia_geral.sql diff --git a/ieducar/misc/database/deltas/portabilis/64_cria_function_frequencia_geral.sql b/ieducar/misc/database/deltas/portabilis/64_cria_function_frequencia_geral.sql new file mode 100644 index 0000000..c95a28e --- /dev/null +++ b/ieducar/misc/database/deltas/portabilis/64_cria_function_frequencia_geral.sql @@ -0,0 +1,69 @@ + -- // + + -- + -- Cria função que retorna a frequencia geral de um aluno, independente da regra de avaliação + -- + -- @author Lucas Schmoeller da Silva + -- @license @@license@@ + -- @version $Id$ + + CREATE OR REPLACE FUNCTION modules.frequencia_da_matricula(p_matricula_id integer) + RETURNS FLOAT AS + $BODY$ + DECLARE + v_regra_falta integer; + v_falta_aluno_id integer; + v_qtd_dias_letivos_serie integer; + v_total_faltas integer; + v_qtd_horas_serie integer; + v_hora_falta FLOAT; + begin + + /* + regra_falta: + 1- Global + 2- Por componente + */ + v_regra_falta:= (SELECT rg.tipo_presenca FROM modules.regra_avaliacao rg + INNER JOIN pmieducar.serie s ON (rg.id = s.regra_avaliacao_id) + INNER JOIN pmieducar.matricula m ON (s.cod_serie = m.ref_ref_cod_serie) + where m.cod_matricula = p_matricula_id); + + v_falta_aluno_id := ( SELECT id FROM modules.falta_aluno WHERE matricula_id = p_matricula_id ORDER BY id DESC LIMIT 1 ); + + IF (v_regra_falta = 1) THEN + + v_qtd_dias_letivos_serie := (SELECT s.dias_letivos + FROM pmieducar.serie s + INNER JOIN pmieducar.matricula m ON (m.ref_ref_cod_serie = s.cod_serie) + WHERE m.cod_matricula = p_matricula_id); + + v_total_faltas := ( SELECT SUM(quantidade) FROM falta_geral WHERE falta_aluno_id = v_falta_aluno_id); + + RETURN (((v_qtd_dias_letivos_serie - v_total_faltas) * 100 ) / v_qtd_dias_letivos_serie ); + + ELSE + + v_qtd_horas_serie := ( SELECT s.carga_horaria + FROM pmieducar.serie s + INNER JOIN pmieducar.matricula m ON (m.ref_ref_cod_serie = s.cod_serie) + WHERE m.cod_matricula = p_matricula_id); + + v_total_faltas := ( SELECT SUM(quantidade) FROM falta_componente_curricular WHERE falta_aluno_id = v_falta_aluno_id); + + v_hora_falta := (SELECT hora_falta FROM pmieducar.curso c + INNER JOIN pmieducar.matricula m ON (c.cod_curso = m.ref_cod_curso) + WHERE m.cod_matricula = p_matricula_id); + + RETURN (100 - ((v_total_faltas * (v_hora_falta*100))/v_qtd_horas_serie)); + + END IF; + + end;$BODY$ + LANGUAGE 'plpgsql' VOLATILE; + + -- //@UNDO + + DROP function modules.frequencia_da_matricula(integer); + + -- // \ No newline at end of file -- libgit2 0.21.2