SIU-Guarani/Version3.22.0/personalizaciones/requisito proceso
Sumario
Pasos para crear un requisito de tipo proceso
A continuación se detallan los pasos para crear un requisito de tipo proceso. A lo largo de los mismos se deberá reemplazar:
- <path proyecto Guaraní> por el path donde está instalado el proyecto SIU-Guaraní Gestión
Crear la regla
Se define regla al proceso que contiene la lógica para resolver el caso propuesto.
Cuando se define un nuevo requisito se puede reutilizar una regla ya existente o crear una nueva.
En el caso de crear una nueva regla se debe dar de alta la misma definiéndola en un conjunto de tablas que se detallan a continuación.
Se deben ejecutar los inserts en las siguientes tablas:
Tabla | Observaciones |
---|---|
sga_reglas | Registro de la Regla El dato de regla_tipo = 3 (Tipo Proceso) IMPORTANTE: el id de la regla debe comenzar en 1000. El SIU se reserva los números del 1 al 999. |
sga_reglas_parametros | Se indica con qué parámetros se ejecuta la regla. Para los casos donde el usuario que utiliza el requisito que contiene esta regla lleve parámetros, como por ejemplo la regla que controla si un módulo está cumplido teniendo una cierta cantidad de actividades aprobadas o habiendo obtenido una cantidad de créditos de materias aprobadas. En este caso la regla tendrá dos parámetros: Parametro 1: cantidad de actividades aprobadas Parámetro 2: cantidad de créditos de materias aprobadas |
sga_reglas_param_contexto | Son los parámetros relacionados con los puntos de control donde se ejecutará el requisito que use la regla. Se indica a quién se le aplicará la regla (a qué alumno, sobre qué actividad, en qué fecha, etc..) Los parámetros disponibles son los que estén definidos en la tabla par_puntos_control_parametros |
sga_reglas_mensajes | Se definirá el mensaje correspondiente según interfaz -> gestion /autogestion web / autogestion wap Si se quieren mostrar datos de parámetros en el mensaje se deben insertar en orden creciente con el formato $nro_parametro$ Ejemplo: El alumno $1$ con legajo nro $2$ debe actualizar sus datos personales. donde $1$ será reemplazado por el nombre del alumno y $2$ será reemplazado por el número de legajo Si la regla tuviere parámetros, por ejemplo la regla que el alumno tenga x materias cursadas sin final, entonces ese parámetro puede mostrarse en el mensaje insertando %nro_parametro% (son los parámetros definidos en la tabla sga_reglas_parametros). Ejemplo: El alumno $1$ ya superó la cantidad de actividades (%1%) cursadas sin final. donde %1% será reemplazado por la cantidad de materias cursadas definida para el requisito que usa esta regla. |
Para catalogar la regla, se debe crear un archivo por cada regla en la carpeta <path proyecto Guaraní>/personalizacion/BD/Datos/_nucleo/Controles/Reglas
Ejemplo: Encuestas de la Comisión
Archivo Regla_326_EncuestasComision.dca
-- Tabla: sga_reglas, sga_reglas_parametros, sga_reglas_param_contexto
-- Versión: 3.0.0
-- Control: Que el alumno haya contestado las encuestas definidas para la comision
-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
INSERT INTO sga_reglas (regla, regla_tipo, nombre, descripcion, mensaje_usuario, mensaje_validacion, php_clase)
VALUES (326,
3,
'Encuestas Contestadas',
'Que el alumno haya contestado todas las encuestas de la comisión',
'Que el alumno haya contestado todas las encuestas de la comisión',
'El alumno no contestó encuestas de la comisión',
'regla_encuestas_comision');
-- Mensajes
-- $1$ = Nombre del Alumno
INSERT INTO sga_reglas_mensajes (regla, interfaz, mensaje_validacion, mensaje_validacion_not)
VALUES (326, 1, 'El alumno $1$ tiene encuestas obligatorias de la comisión por contestar', 'El alumno $1$ contestó todas las encuestas de la comisión');
INSERT INTO sga_reglas_mensajes (regla, interfaz, mensaje_validacion, mensaje_validacion_not)
VALUES (326, 2, 'Tenes encuestas de la comisión sin contestar', 'Contestaste todas las encuestas de la comisión');
-- Parametros
-- Parámetros de Contexto
INSERT INTO sga_reglas_param_contexto (regla, parametro) VALUES (326, 'alumno');
INSERT INTO sga_reglas_param_contexto (regla, parametro) VALUES (326, 'actividad');
INSERT INTO sga_reglas_param_contexto (regla, parametro) VALUES (326, 'comision');
INSERT INTO sga_reglas_param_contexto (regla, parametro) VALUES (326, 'fecha');
Crear el archivo php que contiene la clase que corresponde a la regla
El archivo se debe guardar en <path proyecto Guaraní>/personalizacion/php/nucleo/_lib/reglas, hereda de la clase regla e implementa el método validar el cual realizará la validación.
Luego se debe agregar la nueva clase personalizada a los archivos de autoload correspondientes utilizados por Gestión y Autogestión.
Ejemplo:
class regla_alumno_no_sancionado extends regla
{
function validar()
{
$esta_sancionado = guarani::co('co_personas')->persona_sancionada($this->get_parametro('persona'));
return $this->resultado_final(! $esta_sancionado);
}
}
?>
Configurar regla en autogestión
Para que la regla del nuevo requisito sea reconocida en autogestión se debe agregar la nueva clase personalizada en el archivo de autoload (/php/guarani_autoload.php y php/nucleo/g3w_autoload.php).
Además hay que actualizar el SVN (svn update).
Agregar el requisito
El requisito puede darse de alta por sistema o ingresarse directamente a la base.
El tipo de requisito es el Proceso relacionado con actividades. (Nro 6)
Tablas involucradas:
Tabla | Descripción |
---|---|
sga_requisitos | Define el requisito identificando el tipo de requisito y la regla que contiene la lógica de lo que el requisito define. IMPORTANTE: el id del requisito debe comenzar en 1000. El SIU se reserva los números del 1 al 999 |
sga_requisitos_validos | Define, para el caso de requisitos usados como controles configurables, las acciones del sistema donde es válido el requisito. Ejemplo: Inscripción a Actividades, Inscripción a Examenes, etc... La tabla de acciones es sga_acciones |
sga_requisitos_x_punto_control | Para el caso de requisito de tipo "Procesos" define los puntos de control donde puede vincularse el requisito. |
Configurar el requisito
Luego de asociar un requisito a una acción, el mismo está disponible para ser configurado. Hasta este momento el requisito aún no está activo en ninguna operación del sistema.
El usuario deberá agregar el requisito a la acción que corresponda por la operación Requisitos por Acción (Acciones del punto anterior).
Una vez agregado estará disponible en las operaciones de la acción seleccionada permitiendo activar/desactivar el control, indicar cómo actúa el mismo y para qué interfaces del sistema estará activo.
Es en esta operación donde el requisito se podrá configurar por niveles (Para toda la institución, por Responsable Académica, por Tipo de Propuesta, por Propuesta o por Plan de estudios).
Tablas involucradas:
Tabla | Descripción |
---|---|
sga_requisitos_grupos | Aquí se registran los diferentes grupos de configuración de un requisito en una acción. |
sga_requisitos_accion | Asocia al requisito en las acciones del sistema. |
sga_requisitos_aplanado | Se registra cada requisito para cada versión de plan de estudios que está alcanzado segun la configuración del mismo en una acción |
sga_requisitos_conf_x_oper | Asocia al requisito a las diferentes operaciones de la acción a la cual se asoció. Aqui se configura el estado del requisito en la operación en cada interfaz del sistema y la forma en que actúa el mismo. |
Ejemplo
Objetivo:
- Crear un nuevo requisito para correlativas que verifique que el alumno haya aprobado x cantidad de actividades de 1er año.
- Dejar libre la definición de cantidad de actividades aprobadas que se le requerirá al alumno dependiendo de a qué atividad se le agrega este requisito como correlativa.
Alta de la regla
Definimos la regla que se utilizará para el requisito que se necesita agregar en las correlativas de alguna actividad.
Archivo Regla_1300_ActividadesAprobadas1erAnio.dca
VALUES (1300,
3,
'Tener aprobadas n actividades de 1er año',
'Que el alumno tenga aprobadas n actividades de 1er año',
'Que el alumno tenga aprobadas n actividades de 1er año',
'El alumno no aprobó la cantidad de %1% actividades de 1er año',
'regla_actividades_aprobadas_1er_anio');
-- Mensajes
-- $1$ = Nombre del Alumno
-- %1% = Cantidad de actividades aprobadas de 1er año
INSERT INTO sga_reglas_mensajes (regla, interfaz, mensaje_validacion, mensaje_validacion_not)
VALUES (1300, 1, 'El alumno $1$ no tiene aprobadas al menos %1% actividades de 1er año', 'El alumno $1$ aprobó al menos %1% actividades de 1er año');
INSERT INTO sga_reglas_mensajes (regla, interfaz, mensaje_validacion, mensaje_validacion_not)
VALUES (1300, 2, 'Debés tener aprobadas al menos %1% actividades de 1er año', 'Aprobaste al menos %1% actividades de 1er año');
-- Parametros de la regla.
INSERT INTO sga_reglas_parametros (regla, parametro, etiqueta, tipo_de_dato, orden, valor_desde, valor_hasta)
VALUES (1300,'actividades', 'Actividades aprobadas de 1er año', 'E', 1, '1', '100');
-- Parámetros de Contexto
INSERT INTO sga_reglas_param_contexto (regla, parametro) VALUES (1300, 'alumno');
INSERT INTO sga_reglas_param_contexto (regla, parametro) VALUES (1300, 'actividad');
INSERT INTO sga_reglas_param_contexto (regla, parametro) VALUES (1300, 'fecha');
Crear el archivo php de la regla
Se crea el archivo <path proyecto Guaraní>/personalizacion/php/nucleo/_lib/reglas/regla_actividades_aprobadas_1er_anio.php
Archivo: regla_actividades_aprobadas_1er_anio.php
class regla_actividades_aprobadas_1er_anio extends regla
{
function validar()
{
// Obtiene los parámetros
$alumno = $this->get_parametro('alumno');
$cant_minima_materias_aprobadas = $this->get_parametro('actividades');
// Recupero cantidad de materias aprobadas de primer año por el alumno
$cant_materias_aprobadas_1er_anio = guarani::co('co_alumnos_XXX')->get_cantidad_materias_aprobadas($alumno, 1);
// Verifico si llegó al minimo de materias aprobadas
$resultado = $this->resultado_final($cant_materias_aprobadas_1er_anio < $cant_minima_materias_aprobadas);
if (! $resultado) {
// No llegó al mínimo requerido de actividades aprobdas de 1er año.
// Seteo los parámetros del mensaje (Los parámetros $x$)
// El parámetro de la regla "actividades" se setea automáticamente (%1%).
$nombre_alumno = toba::consulta_php('co_alumnos_XXX')->get_alumno_nombre($alumno);
$this->set_parametros_mensaje_validacion(array($nombre_alumno), true);
}
// Devuelvo el resultado del control
Return $resultado;
}
}
?>
Archivo: co_alumnos_XXX.php (clase de consulta personalizada, donde XXX es el nodo de institución otorgado por el SIU)
function get_cantidad_materias_aprobadas($alumno, $anio_cursada)
{
// Cantidad de actividades aprobadas de 1er año del Plan del Alumno.
$sql = "SELECT count(*) as cant_aprobadas
FROM sga_alumnos as a,
vw_elementos_plan as ep,
vw_hist_academica as v
WHERE a.alumno = $alumno
AND ep.plan_version = a.plan_version
AND ep.anio_de_cursada = $anio_cursada
AND v.alumno = a.alumno
AND v.elemento = ep.elemento
AND v.estado = 'A'
";
// Ejecuto la consulta en la base
$rs = guarani_db::consultar_fila($sql);
// Retorno el resultado
return $rs['cant_aprobadas'];
}
.......
Prueba de la regla
Ingresando por el editor de Toba se puede probar la regla desde la operación Prueba >> Reglas
Alta del requisito
El requisito puede darse de alta generando los inserts en las tablas relacionadas con requisitos.
Para ello se generará un archivo para catalogar el requisito personalizado asociando la regla creada en el anterior.
Archivo: Requisito_1300_ActiviadesAprobadas1erAnio.dca
-- Tabla: sga_requisitos, sga_requisitos_validos
-- Versión: 3.7.0
-- Control: Verificar si el alumno tiene aprobada n actividades de 1er año
--
-- Usa la regla nro 1300 - Tener aprobadas n actividades de 1er año
-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
INSERT INTO sga_requisitos (requisito, requisito_tipo, nombre, requisito_subordinado_de, descripcion, regla)
VALUES (1300, 6, 'Tener aprobadas n actividades de 1er año', NULL, 'Tener aprobadas n actividades de 1er año', 1300);
-- En el caso que el requisito sea usado como un control configurable, se debe definir para que acciones se usa el requisito:
-- INSERT INTO sga_requisitos_validos (accion, requisito) VALUES (1, 1300); -- Inscripción a Cursadas
-- INSERT INTO sga_requisitos_validos (accion, requisito) VALUES (2, 1300); -- Inscripción a Examen
-- En el caso que el requisito sea usado como un control configurable, se debe definir en qué puntos de control se puede vincular el requisito:
-- INSERT INTO sga_requisitos_x_punto_control (pto_control, requisito, orden) VALUES (1, 1300, 5); -- Persona - Operación
Requisitos relacionados con instancias de las mesas de examen
Si se desea controlar un requisito solo en una o mas instancia de una mesa de examen, estos requisitos se deben agregar en los puntos de control asociados a cada instancia de la mesa de examen.
Por ejemplo si se necesita controlar un requisito solo en la instancia Libre, entonces se debe agregar el requisito en el punto de control nro 11.
Punto de Control | Instancia |
---|---|
10 | Regular |
11 | Libre |
12 | Reválida de Cursada |
13 | Reválida de Examen |
19 | Examen complementario |
25 | Tesis |
Requisitos usados como correlativas
Si desarrollan requisitos que se usarán como correlativas de actividades, deben tener en cuenta que el parámetro que recibe el id de la actividad relacionada con la comisión o mesa de examen es el parámetro elemento_inscripcion.
El parámetro requisito será el id del requisito definido como correlativa.
El parámetro elemento será el id de actividad que esta como correlativa.
Es decir que cuando se controla una correlativa, se va a controlar el estado de una actividad o el cumplimiento de un requisito.
Ademas, a la regla que implementa el requisito deben definirla como que es válida para correlativas (sga_reglas.valido_en_correlativas = 'S'), para que el requisito este disponible para seleccionarlo en la edición de correlativas.
Puntos de control
En el caso que quieran agregar nuevos puntos de control, comenzar desde el 1000.
El SIU se reserva los números del 1 al 999.
Agregar control de nuevos requisitos de ingreso de tipo "documental"
Si agregaron nuevos requisitos de tipo documental (tipo de requisito = 4) como requisitos de ingreso restrictivos y necesitan que se controle a través del requisito Cumplir con los requisitos de ingreso restrictivos entonces deben agregar estos nuevos requisitos documentales al punto de control nro 1.
Pueden agregar el requisito documental con el siguiente insert:
O si agregaron mas de uno y quieren agregar todos estos requisitos de tipo "documental" para que se controlen a través del control mencionado anteriormente, entonces ejecuten el siguiente codigo:
DECLARE
cur_requisitos RECORD;
_orden INTEGER;
BEGIN
SELECT MAX(sga_requisitos_x_punto_control.orden) INTO _orden
FROM sga_requisitos_x_punto_control
WHERE sga_requisitos_x_punto_control.pto_control = 1;
FOR cur_requisitos IN (SELECT sga_requisitos.requisito
FROM sga_requisitos
WHERE sga_requisitos.requisito_tipo = 4
AND sga_requisitos.requisito NOT IN (SELECT sga_requisitos_x_punto_control.requisito
FROM sga_requisitos_x_punto_control
WHERE sga_requisitos_x_punto_control.pto_control = 1)
ORDER BY sga_requisitos.requisito)
LOOP
_orden := _orden + 1;
INSERT INTO sga_requisitos_x_punto_control (pto_control, requisito, orden) VALUES (1, cur_requisitos.requisito, _orden);
END LOOP;
END $$;