-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- SIU-GUARANI 3 -- Version 3.0.0 -- Function: f_generar_comision -- -- Genera una comision. -- * Datos de la comision, instancias, propuestas, docentes y modalidades de cursada -- * No genera subcomisiones. -- -- Recibe: -- 1. Nombre por defecto -- 2. ID del periodo lectivo destino -- 3. ID del elemento -- 4. ID del turno de cursada -- 5. ID de la catedra -- 6. Caracter que representa si la inscripción esta habilitada (S o N) -- 7. ID de la ubicación -- 8. IDs de la instancias -- 9. IDs de las escala de notas -- 10. Porcentajes de asistencia -- 11. IDs de los planes -- 12. IDs de las modalidades (separados por el pipe |) -- 13. Utiliza Docentes? (Boolean) -- -- Retorna: -- 1. La estructura "type_comision_copiado_generacion" -- -- -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- DROP FUNCTION f_generar_comision (varchar, integer, integer, integer, integer, char, integer, integer[], integer[], real[], integer[], char(1)[], boolean); CREATE OR REPLACE FUNCTION f_generar_comision(_nombre varchar(100),_per_lectivo_destino integer,_elemento integer,_turno integer,_catedra integer,_inscripcion_habilitada char(1),_ubicacion integer,_instancia integer[],_escala integer[],_porc_asistencia real[],_plan integer[],_modalidad char(1)[], _utilizar_docentes BOOLEAN) RETURNS SETOF type_comision_copiado_generacion AS $BODY$ DECLARE comision_nueva integer; docentes record; _fecha_desde date; _fecha_hasta date; i smallint; n integer; cur_retorno type_comision_copiado_generacion; -- para retornar datos de la comision creada BEGIN -- Creo el registro en la tabla de Comisiones INSERT INTO sga_comisiones (nombre, periodo_lectivo, elemento, turno, catedra, ubicacion, letra_desde, letra_hasta, cupo, inscripcion_habilitada) VALUES (_nombre, _per_lectivo_destino, _elemento, _turno, _catedra, _ubicacion, null, null, null, _inscripcion_habilitada); -- Recupero el Serial de la comisión comision_nueva := (SELECT currval('sga_comisiones_seq')); cur_retorno.codigo_retorno := 0; -- OK. (comision generada) cur_retorno.comision := comision_nueva; cur_retorno.nombre_comision := _nombre; -- Creo el registro en la tabla de Instancias de la Comisión -- Cuando se pase a 8.4 o superior usar la funcion array_lenght(array[]) para sacar el valor n. n := (select array_upper( _instancia, 1) - array_lower( _instancia ,1) + 1); FOR i IN 1 .. n LOOP INSERT INTO sga_comisiones_instancias (comision, instancia, escala_nota, porc_asistencia) VALUES (comision_nueva, _instancia[i], _escala[i], _porc_asistencia[i]); END LOOP; -- Creo el registro en la tabla de Propuestas de la Comisión INSERT INTO sga_comisiones_propuestas (comision, propuesta, plan) SELECT DISTINCT comision_nueva, propuesta, plan FROM vw_actividades_plan WHERE elemento = _elemento AND plan = ANY (_plan); -- Modalidad de Cursada. (Analizar si solo se registran las modalidades de los planes asociados a la comision) INSERT INTO sga_comisiones_modalidad (comision, modalidad) SELECT DISTINCT comision_nueva, sga_elementos_plan_modalidad.modalidad FROM vw_actividades_plan, sga_elementos_plan_modalidad WHERE vw_actividades_plan.elemento = _elemento AND vw_actividades_plan.plan = ANY (_plan) AND vw_actividades_plan.elemento_plan = sga_elementos_plan_modalidad.elemento_plan AND sga_elementos_plan_modalidad.modalidad = ANY (_modalidad); IF _utilizar_docentes THEN -- Recupero los docentes de la cátedra FOR docentes IN SELECT docente, responsabilidad FROM sga_catedras_docentes WHERE sga_catedras_docentes.catedra = _catedra AND sga_catedras_docentes.estado = 'A' LOOP -- Recupero las Fechas de Inicio y Fin dictado del período lectivo SELECT sga_periodos_lectivos.fecha_inicio_dictado, sga_periodos_lectivos.fecha_fin_dictado INTO _fecha_desde,_fecha_hasta FROM sga_periodos_lectivos WHERE sga_periodos_lectivos.periodo_lectivo = _per_lectivo_destino; -- Inserto el Docente INSERT INTO sga_docentes_comision (comision, docente, responsabilidad, fecha_desde, fecha_hasta) VALUES (comision_nueva, docentes.docente, docentes.responsabilidad, _fecha_desde, _fecha_hasta); END LOOP; END IF; -- Retorno la comision RETURN NEXT cur_retorno; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; -- ++++++++++++++++++++++++++++++ Fin Function f_generar_comision() ++++++++++++++++ -- REVOKE EXECUTE ON FUNCTION f_generar_comision (varchar, integer, integer, integer, integer, char, integer, integer[], integer[], real[], integer[], char(1)[], boolean) FROM public; GRANT EXECUTE ON FUNCTION f_generar_comision (varchar, integer, integer, integer, integer, char, integer, integer[], integer[], real[], integer[], char(1)[], boolean) TO public;