-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- SIU-GUARANI 3
-- Version 3.0.0
-- Function: f_comision_cant_clases
--
-- Retorna la cantidad de clases por cada tipo de clase
--  * Clases Activas
--  * Si hay subcomisiones, clases de las subcomisiones en las que esta inscripto el alumno.
--  
-- Recibe:  f_comision_cant_clases(integer, integer)
--   1. Alumno
--   2. Comision
--
-- Retorna: 
--      1. Cantidad de Clases validas
-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-- DROP FUNCTION f_comision_cant_clases(integer, integer);
CREATE OR REPLACE FUNCTION f_comision_cant_clases(_alumno Integer, _comision integer)
  RETURNS integer AS 
$BODY$
DECLARE 
  _subcom integer;      
  _cantidad_clases integer;      
  
BEGIN
  
  _subcom := 0;
  _cantidad_clases := 0;
  
  -- Si la fecha es nula le paso la fecha actual.
  SELECT COUNT(*) INTO _subcom
    FROM sga_subcomisiones 
    WHERE comision = _comision;
    
  IF _subcom > 0 THEN 
    -- Hay subcomisiones
    -- Recupero cantidad de clases de las bandas horarias de las subcomisiones en donde esta inscripto el alumno.
    SELECT COUNT(*) INTO _cantidad_clases
      FROM sga_insc_cursada,
           sga_subcomisiones,
           sga_insc_subcomision,
           sga_subcomisiones_bh,
           sga_clases
      WHERE sga_insc_cursada.alumno = _alumno
        AND sga_insc_cursada.comision = _comision
        AND sga_insc_subcomision.inscripcion = sga_insc_cursada.inscripcion
        AND sga_subcomisiones_bh.subcomision = sga_insc_subcomision.subcomision
        AND sga_clases.banda_horaria = sga_subcomisiones_bh.banda_horaria
        AND sga_clases.valido = 1;     
  ELSE
    -- Sin subcomisiones
    -- Recupero cantidad de clases de las bandas horarias de la comision
    SELECT COUNT(*) INTO _cantidad_clases
      FROM sga_comisiones_bh,
           sga_clases
      WHERE sga_comisiones_bh.comision = _comision
        AND sga_clases.banda_horaria = sga_comisiones_bh.banda_horaria
        AND sga_clases.valido = 1;     
  END IF;
  
  -- Retorno cantidad de clases que le corresponde al alumno
  RETURN _cantidad_clases;
    
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
-- ++++++++++++++++++++++++++++++ Fin Function f_comision_cant_clases ++++++++++++++++

-- REVOKE EXECUTE ON FUNCTION f_comision_cant_clases (integer, integer) FROM public;
GRANT EXECUTE ON FUNCTION f_comision_cant_clases (integer, integer) to public;

