SIU-Guarani/Version3.20.0/personalizaciones/requisito proceso

De SIU
Revisión del 14:33 27 jun 2022 de Adelu (discusión | contribuciones)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

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. Para autogestión además hay que actaulizar el SVN (svn update).
Ejecutar el comando
 guarani pers_autoload


Ejemplo:

<?php
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);
        }
}
?>

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

INSERT INTO sga_reglas (regla, regla_tipo, nombre, descripcion, mensaje_usuario,  mensaje_validacion, php_clase)
   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

A continuación ejecutar el comando
 guarani pers_autoload
que agregará la clase nueva personalizada a los archivos de autoload correspondientes utilizados por Gestión y Autogestión.

Archivo: regla_actividades_aprobadas_1er_anio.php

 <?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.

INSERT INTO sga_requisitos_x_punto_control (pto_control, requisito, orden) VALUES (11, 1300, 1);


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:

INSERT INTO sga_requisitos_x_punto_control (pto_control, requisito, orden) VALUES (1,  <ID REQUISITO>, <ORDEN>);

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:

DO $$
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 $$;