Commit 169ef5beccf9255cea57a00ce8469980dbe89bd4

Authored by Lucas Schmoeller da Silva
1 parent c20ca40f
Exists in master

Criado função para cálculo de falta do aluno

portabilis/ieducar#98
ieducar/misc/database/deltas/portabilis/64_cria_function_frequencia_geral.sql 0 → 100644
... ... @@ -0,0 +1,69 @@
  1 + -- //
  2 +
  3 + --
  4 + -- Cria função que retorna a frequencia geral de um aluno, independente da regra de avaliação
  5 + --
  6 + -- @author Lucas Schmoeller da Silva <lucas@portabilis.com.br>
  7 + -- @license @@license@@
  8 + -- @version $Id$
  9 +
  10 + CREATE OR REPLACE FUNCTION modules.frequencia_da_matricula(p_matricula_id integer)
  11 + RETURNS FLOAT AS
  12 + $BODY$
  13 + DECLARE
  14 + v_regra_falta integer;
  15 + v_falta_aluno_id integer;
  16 + v_qtd_dias_letivos_serie integer;
  17 + v_total_faltas integer;
  18 + v_qtd_horas_serie integer;
  19 + v_hora_falta FLOAT;
  20 + begin
  21 +
  22 + /*
  23 + regra_falta:
  24 + 1- Global
  25 + 2- Por componente
  26 + */
  27 + v_regra_falta:= (SELECT rg.tipo_presenca FROM modules.regra_avaliacao rg
  28 + INNER JOIN pmieducar.serie s ON (rg.id = s.regra_avaliacao_id)
  29 + INNER JOIN pmieducar.matricula m ON (s.cod_serie = m.ref_ref_cod_serie)
  30 + where m.cod_matricula = p_matricula_id);
  31 +
  32 + v_falta_aluno_id := ( SELECT id FROM modules.falta_aluno WHERE matricula_id = p_matricula_id ORDER BY id DESC LIMIT 1 );
  33 +
  34 + IF (v_regra_falta = 1) THEN
  35 +
  36 + v_qtd_dias_letivos_serie := (SELECT s.dias_letivos
  37 + FROM pmieducar.serie s
  38 + INNER JOIN pmieducar.matricula m ON (m.ref_ref_cod_serie = s.cod_serie)
  39 + WHERE m.cod_matricula = p_matricula_id);
  40 +
  41 + v_total_faltas := ( SELECT SUM(quantidade) FROM falta_geral WHERE falta_aluno_id = v_falta_aluno_id);
  42 +
  43 + RETURN (((v_qtd_dias_letivos_serie - v_total_faltas) * 100 ) / v_qtd_dias_letivos_serie );
  44 +
  45 + ELSE
  46 +
  47 + v_qtd_horas_serie := ( SELECT s.carga_horaria
  48 + FROM pmieducar.serie s
  49 + INNER JOIN pmieducar.matricula m ON (m.ref_ref_cod_serie = s.cod_serie)
  50 + WHERE m.cod_matricula = p_matricula_id);
  51 +
  52 + v_total_faltas := ( SELECT SUM(quantidade) FROM falta_componente_curricular WHERE falta_aluno_id = v_falta_aluno_id);
  53 +
  54 + v_hora_falta := (SELECT hora_falta FROM pmieducar.curso c
  55 + INNER JOIN pmieducar.matricula m ON (c.cod_curso = m.ref_cod_curso)
  56 + WHERE m.cod_matricula = p_matricula_id);
  57 +
  58 + RETURN (100 - ((v_total_faltas * (v_hora_falta*100))/v_qtd_horas_serie));
  59 +
  60 + END IF;
  61 +
  62 + end;$BODY$
  63 + LANGUAGE 'plpgsql' VOLATILE;
  64 +
  65 + -- //@UNDO
  66 +
  67 + DROP function modules.frequencia_da_matricula(integer);
  68 +
  69 + -- //
0 70 \ No newline at end of file
... ...