-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- SIU-GUARANI 3 -- Version 3.0.0 -- Function: f_actividades_con_comisiones_vigentes -- -- Chequea si existe un período de inscripción vigente para la fecha actual -- -- Recibe: -- 1. Propuesta del alumno -- 2. Plan del alumno -- 3. ID de la Version de Plan (del alumno) -- 4. Dentro de un período de inscripción activo: true - Si / false - No -- 5. Si parámetro "cur_rinde_en_cualquier_ubicacion" = 'N' entonces recibe la ubicacion del alumno (sga_alumnos.ubicacion) -- -- Retorna: Lista de Actividades -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- Recibe plan_version -- DROP FUNCTION f_actividades_con_comisiones_vigentes(integer, integer, integer, boolean, integer); CREATE OR REPLACE FUNCTION f_actividades_con_comisiones_vigentes(_propuesta integer, _plan integer, _plan_version integer, _en_periodo_insc boolean, _ubicacion integer) RETURNS SETOF integer AS $BODY$ DECLARE cur_actividad RECORD; BEGIN /* Parametros: 1. Propuesta del Alumno 2. Plan del Alumno 3. Version de Plan del Alumno 4. Si debe estar dentro de un período de inscripción activo de mesas futuras 5. Si solo rinde en la ubicacion del alumno, recibe la ubicacion. */ -- Creo tabla temporal CREATE TEMP TABLE tmp_comisiones ( comision integer, periodo_insc integer, periodo_inscripcion integer, fecha_inicio timestamp, fecha_fin timestamp, elemento integer); -- lleno tabla temporal con actividades que tienen comisiones: -- Con inscripción habilitada -- Con períodos de inscripcion definidos y habilitados -- Con la misma ubicacion del alumno, si el parametro indica que solo puede cursar en su ubicación. INSERT INTO tmp_comisiones (comision, elemento, periodo_insc, fecha_inicio, fecha_fin, periodo_inscripcion) SELECT DISTINCT sga_comisiones.comision, sga_comisiones.elemento, sga_periodos_inscripcion_fechas.periodo_insc, sga_periodos_inscripcion_fechas.fecha_inicio, sga_periodos_inscripcion_fechas.fecha_fin, sga_periodos_inscripcion_fechas.periodo_inscripcion FROM sga_comisiones, sga_comisiones_propuestas, sga_periodos_lectivos, sga_periodos, sga_periodos_inscripcion, sga_periodos_inscripcion_fechas, sga_periodos_inscripcion_aplanado, sga_per_insc_ubicacion WHERE sga_comisiones.inscripcion_habilitada = 'S' AND sga_comisiones_propuestas.comision = sga_comisiones.comision AND sga_comisiones_propuestas.propuesta = _propuesta AND sga_comisiones_propuestas.plan = _plan AND sga_periodos_lectivos.periodo_lectivo = sga_comisiones.periodo_lectivo AND sga_periodos.periodo = sga_periodos_lectivos.periodo AND sga_periodos.fecha_fin >= CURRENT_DATE AND sga_periodos_inscripcion.periodo = sga_periodos_lectivos.periodo AND sga_periodos_inscripcion_fechas.periodo_inscripcion = sga_periodos_inscripcion.periodo_inscripcion AND sga_periodos_inscripcion_fechas.habilitado = 'S' AND sga_periodos_inscripcion_aplanado.periodo_insc = sga_periodos_inscripcion_fechas.periodo_insc AND sga_periodos_inscripcion_aplanado.plan_version = _plan_version AND sga_per_insc_ubicacion.periodo_inscripcion = sga_periodos_inscripcion.periodo_inscripcion AND sga_per_insc_ubicacion.ubicacion = sga_comisiones.ubicacion AND (_ubicacion IS NULL OR (_ubicacion IS NOT NULL AND sga_comisiones.ubicacion = _ubicacion)); FOR cur_actividad IN ( SELECT t.elemento as elemento FROM tmp_comisiones as t LEFT JOIN sga_comisiones_excep_perinsc as e ON e.periodo_insc = t.periodo_insc AND e.comision = t.comision WHERE ((-- fecha y hora actual se encuentre en un período de inscripcion _en_periodo_insc = true AND CURRENT_TIMESTAMP BETWEEN COALESCE(e.fecha_inicio, t.fecha_inicio) AND COALESCE(e.fecha_fin, t.fecha_fin) ) OR (-- fecha y hora actual fuera del período de inscripcion _en_periodo_insc = false AND CURRENT_TIMESTAMP > COALESCE(e.fecha_fin, t.fecha_fin) ) ) -- Modalidad de cursada AND EXISTS (SELECT 1 FROM sga_per_insc_modalidad WHERE sga_per_insc_modalidad.periodo_inscripcion = t.periodo_inscripcion AND sga_per_insc_modalidad.modalidad IN (SELECT modalidad FROM sga_comisiones_modalidad WHERE sga_comisiones_modalidad.comision = t.comision) ) ) LOOP -- Retorno la actividad que tiene mesa con periodo de insc vigente en este momento. RETURN NEXT cur_actividad.elemento; END LOOP; -- Borro tabla temporal DROP TABLE tmp_comisiones; END $BODY$ LANGUAGE 'plpgsql' VOLATILE; -- ++++++++++++++++++++++++++ Fin Function f_actividades_con_comisiones_vigentes +++++++++++++++++++++++++++++++++++++++ -- REVOKE EXECUTE ON FUNCTION f_actividades_con_comisiones_vigentes FROM public; GRANT EXECUTE ON FUNCTION f_actividades_con_comisiones_vigentes(integer, integer, integer, boolean, integer) TO public;