-- CREATE OR REPLACE FUNCTION sp_seleccionar_solicitudes_a_ponderar(ponderacion_ejecutada integer, estado integer) CREATE OR REPLACE FUNCTION sp_seleccionar_solicitudes_a_ponderar(integer, integer) RETURNS integer AS $BODY$ -- Parametros -- 1: ponderacion_ejecutada -- 2: estado (2- Confimado, 4- Evaluado) DECLARE TIPOBECA INT4; EVALUACION INT4; ENTREGO_DOC CHAR; WHERE_TIPO_BECA VARCHAR; FROM_TIPO_BECA VARCHAR; WHERE_EVALUACION VARCHAR; FROM_EVALUACION VARCHAR; WHERE_ENTREGO_DOC VARCHAR; BEGIN /* Verifico si pondera algún tipo de beca */ TIPOBECA = (SELECT COUNT(*) FROM sbc_tipo_beca_x_ponderacion WHERE ponderacion_ejecutada = $1); WHERE_TIPO_BECA = ' '; FROM_TIPO_BECA = ' '; IF (TIPOBECA > 0) THEN WHERE_TIPO_BECA = 'AND ss.solicitud = ssb.solicitud AND ssb.tipo_beca = stbxp.tipo_beca'; FROM_TIPO_BECA = ', sbc_solicitudes_becas ssb, sbc_tipo_beca_x_ponderacion stbxp'; END IF; /*Verifico si pondera alguna evaluación*/ EVALUACION = (SELECT COUNT(*) FROM sbc_evaluaciones_x_ponderacion WHERE ponderacion_ejecutada = $1); WHERE_EVALUACION = ' '; FROM_EVALUACION = ' '; IF (EVALUACION > 0) THEN WHERE_EVALUACION = 'AND ss.solicitud = ses.solicitud AND ses.tipo_evaluacion = sexp.tipo_evaluacion'; FROM_EVALUACION = ', sbc_evaluacion_solicitudes ses, sbc_evaluaciones_x_ponderacion sexp'; END IF; IF ($2 = 4) THEN WHERE_EVALUACION = ' '; FROM_EVALUACION = ' '; END IF; /* Verifico la documentación entregada*/ ENTREGO_DOC = (SELECT doc_entregada FROM sbc_ponderaciones_ejecutadas WHERE ponderacion_ejecutada = $1); WHERE_ENTREGO_DOC = ' '; IF (ENTREGO_DOC = 'S') THEN WHERE_ENTREGO_DOC = ' AND ss.entrego_doc = ''S'' '; END IF; IF (ENTREGO_DOC = 'N') THEN WHERE_ENTREGO_DOC = ' AND ss.entrego_doc IS NULL '; END IF; EXECUTE 'CREATE TEMP TABLE tmp_solicitudes_a_ponderar AS SELECT DISTINCT ss.solicitud FROM sbc_solicitud ss, sbc_ponderaciones_ejecutadas spe '||FROM_TIPO_BECA||' '||FROM_EVALUACION||' WHERE spe.ponderacion_ejecutada = '||$1||' AND ss.convocatoria = spe.convocatoria AND ss.estado_solicitud = '||$2||' AND ss.version IS NULL '||WHERE_ENTREGO_DOC||' '||WHERE_TIPO_BECA||' '||WHERE_EVALUACION||' ;'; EXECUTE 'INSERT INTO sbc_ejecuciones_x_solicitud ( ponderacion_ejecutada, solicitud, valor_ponderacion, valor_segundo_ordenamiento) SELECT '||$1||', solicitud, 0, 0 FROM tmp_solicitudes_a_ponderar; '; EXECUTE 'DROP TABLE tmp_solicitudes_a_ponderar;'; RETURN 1; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; --ALTER FUNCTION sp_seleccionar_solicitudes_a_ponderar(integer, integer) OWNER TO dba; CREATE OR REPLACE FUNCTION sp_ponderar(integer) RETURNS integer AS $BODY$ DECLARE NRO_SOLICITUD VARCHAR; NRO_REGLA VARCHAR; SQL VARCHAR; PONDERACION VARCHAR; -- Cursor que recupera las solicitudes a ponderar SOLICITUDES CURSOR FOR SELECT solicitud FROM sbc_ejecuciones_x_solicitud WHERE ponderacion_ejecutada = $1; -- Cursor que recupera las reglas de ponderación SQLs CURSOR FOR SELECT sre.nro_regla_ponderacion, srp.sql_variable FROM sbc_reglas_x_ejecucion sre, sbc_reglas_ponderacion srp WHERE sre.nro_regla_ponderacion = srp.nro_regla_ponderacion AND ponderacion_ejecutada = $1 ORDER BY sre.orden; BEGIN -- Si existen datos para la ponderación los borro DELETE FROM sbc_reglas_x_ejecuciones_x_solicitud WHERE ponderacion_ejecutada = $1; PONDERACION = $1; OPEN SOLICITUDES; FETCH SOLICITUDES INTO NRO_SOLICITUD; WHILE FOUND LOOP OPEN SQLs; FETCH SQLs INTO NRO_REGLA, SQL; WHILE FOUND LOOP SQL = replace(SQL, '$nro_regla', NRO_REGLA); SQL = replace(SQL, '$solicitud', NRO_SOLICITUD); SQL = replace(SQL, '$ponderacion_ejecutada', PONDERACION); EXECUTE SQL; FETCH SQLs INTO NRO_REGLA, SQL; END LOOP; CLOSE SQLs; FETCH SOLICITUDES INTO NRO_SOLICITUD; END LOOP; CLOSE SOLICITUDES; RETURN 1; END; $BODY$ LANGUAGE plpgsql VOLATILE; --ALTER FUNCTION sp_ponderar(integer) OWNER TO postgres;