-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- SIU-GUARANI 3 -- Version 3.0.0 -- Function: f_generar_legajo_alumno -- -- Genera una comision. -- * Datos de la comision, instancias, propuestas, docentes y modalidades de cursada -- * No genera subcomisiones. -- -- Recibe: -- f_generar_legajo_alumno(varchar, integer, integer, integer, integer) -- 1. Código del Parámetro mat_generar_legajo_alumno_unico -- 2. ID de la Inscripción a Propuesta -- 3. ID de la Persona -- 4. ID de la Propuesta -- 5. ID de la Ubicación -- -- Retorna: -- 1. varchar(20) - Nuevo Nro de Legajo. -- -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- DROP FUNCTION f_generar_legajo_alumno (varchar, integer, integer, integer, integer); CREATE OR REPLACE FUNCTION f_generar_legajo_alumno(_unico_legajo varchar(255),_inscripcion integer, _persona integer,_propuesta integer,_ubicacion integer) RETURNS varchar(20) AS $BODY$ DECLARE otras_propuestas record; cursa_otra_propuesta boolean; nuevo_legajo varchar(20); BEGIN nuevo_legajo := NULL; cursa_otra_propuesta := false; -- Si el parametro dice que el legajo se repite por cada propuesta del alumno. IF _unico_legajo = 'S' THEN -- busco otras propuestas en las que este la persona, recupero la primera que encuentre y tomo el nro de legajo FOR otras_propuestas IN SELECT legajo FROM sga_alumnos WHERE persona = _persona AND propuesta <> _propuesta AND legajo IS NOT NULL LOOP nuevo_legajo := otras_propuestas.legajo; cursa_otra_propuesta := true; EXIT; END LOOP; END IF; -- Genero un nuevo número de legajo. IF _unico_legajo = 'N' OR NOT cursa_otra_propuesta THEN nuevo_legajo := (SELECT nextval('nro_legajo_alumno_seq'))::varchar; IF nuevo_legajo IS NULL THEN nuevo_legajo := '1'; END IF; END IF; -- Retorno el Nro de Legajo de Alumno. RETURN nuevo_legajo; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; -- ++++++++++++++++++++++++++++++ Fin Function f_generar_legajo_alumno() ++++++++++++++++ -- REVOKE EXECUTE ON FUNCTION f_generar_legajo_alumno (varchar, integer, integer, integer, integer) FROM public; GRANT EXECUTE ON FUNCTION f_generar_legajo_alumno (varchar, integer, integer, integer, integer) TO public; /* Ejemplos: begin work; select * from f_generar_legajo_alumno('S', 4, 5, 1000, 1); rollback work; select (SELECT nextval('nro_legajo_alumno_seq'))::varchar select * from sga_catedras select * from sga_alumnos where persona = 5; update sga_alumnos set legajo = null where alumno = 4; select * from sga_propuestas_aspira where persona = 5; */