SIU-Guarani/Version3.21.0/personalizaciones/CriteriosPrioridadInscCursada

De SIU
Saltar a: navegación, buscar

Personalizar criterios de ordenamiento de alumnos para el procesamiento de inscripciones a actividades por prioridad

Crear un nuevo criterio de ordenamiento de alumnos a procesar

Los criterios por los que se va a ordenar los alumnos para procesar sus inscripciones se registran en al tabla sga_criterios_prioridad_cursada,

Alli se debe registrar los siguientes datos:
criterio = id correlativo
nombre = Nombre del Criterio de ordenamiento (El que ve el usuario al procesar inscripciones por prioridad)
descripcion = Descripción detallada del criterio.
orden = Nro de orden en que aparece el criterio listado.
activo = Indica si el criterio esta activo y disponible para el usuario o esta dado de baja. Valores: 1 = Activo / 0 = Inactivo
criterio_base = Código SQL que será agreagdo a la consulta de alumnos inscriptos a las actividades por prioridad que será el que indique en que orden se listan los alumnos. Este codigo se agrega en el ORDER BY de la query que recupera alumnos.


Ejemplo 1:
Agregar el criterio de Coeficiente que tiene asignado el alumno. A mayor coeficiente mayor prioridad para inscribirse. En este caso se debe usar el dato coeficiente de la tabla sga_alumnos.
Como esa tabla ya es consultada en la tabla que recupera lso alumnos, entonces este criterio se define agregando el registro en la tabla:

INSERT INTO sga_criterios_prioridad_cursada (criterio, nombre, descripcion, orden, activo, criterio_base)
  VALUES (10, 'Coeficiente', 'Coeficiente del alumno', 10, 'sga_alumnos.coeficiente DESC');

Ejemplo 2: Agregar el criterio de que el alumno tiene el CUD. Si tiene el CUD tiene prioridad sobre quien no lo tiene.
En este caso, como no es un dato que se encuentra en la query principal, se debe desarrollar una funcion que devuelva 0 si tiene CUD y 1 si no tiene CUD. De esta forma quien tenga CUD se va a listar primero de quien no lo tenga.
Supongamos que la funcion de la base de datos se llama f_alumno_tiene_cud(<ALUMNO>)

INSERT INTO sga_criterios_prioridad_cursada (criterio, nombre, descripcion, orden, activo, criterio_base)
  VALUES (11, 'Tiene CUD', 'Alumno tiene CUD', 11, 'f_alumno_tiene_cud(sga_alumnos.alumno)');


Ejemplo de la función tiene CUD:

CREATE OR REPLACE FUNCTION f_alumno_tiene_cud (pAlumno integer)
  RETURNS integer AS
$BODY$

 -- Variables locales
 DECLARE _tiene_cud smallint;

BEGIN
  /* Valor de retorno:
         0 = Tiene CUD
         1 = NO tiene CUD
  */
           

 _tiene_cud := 1; -- NO tiene CUD
  SELECT CASE WHEN mdp_datos_discapacidad.tiene_cud = 'S' THEN 0 ELSE 1 END INTO _tiene_cud
    FROM sga_alumnos
    JOIN sga_datos_censales ON sga_datos_censales.persona = sga_alumnos.dato_censal
    JOIN mdp_datos_discapacidad.dato_censal = sga_datos_censales.dato_censal
  WHERE sga_alumnos.alumno = pAlumno;

 RETURN _tiene_cud;
 
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
-- ++++++++++++++++++++++++++++++ Fin Function f_alumno_tiene_cud ++++++++++++++++++++++++++++++++++++++++++++++++++++++++

GRANT EXECUTE ON FUNCTION f_alumno_tiene_cud(integer) TO public;