Buenos días.
Acabo de crear una regla personalizada que impacta sobre la inscripción a exámenes pero, al momento de inscribir a un alumno, el formulario queda en blanco con el error "Class ‘regla_bloqueos_ucel.php’ not found ".
Cuando corro el ./guarani pers_autoload no recibo ningún error.
La regla está creada correctamente.
¿Alguien puede darma una mano con esto?
Pude solucionar ese error. En la tabla sga_reglas estaba definido el nombre de la regla con .php. Pero ahora el formulario me devuelve el siguiente error Call to undefined method regla_bloqueos_ucel::set_operador_not()
podes adjuntar el codigo del php que implementa la regla y los inserts en las tablas sga_reglas, sga_reglas_param_contexto, sga_reglas_mensajes, sga_requisitos, sga_requisitos_validos yen que punto de control agregaste ese requisito (sga_requisitos_x_punto_control)
Hola Pablo,
La clase ‘regla_bloqueos_ucel’ extiende de ‘regla’?
Siguieron el instructivo correspondiente a este tipo de personalizaciones?
Saludos, Florencia.
Buen día Alejandro. Te paso lo solicitado:
INSERT INTO sga_reglas (regla, regla_tipo, nombre, descripcion, mensaje_usuario, mensaje_validacion, php_clase) VALUES (1002, 3, ‘Bloqueo financiero’, ‘Bloqueo financiero’, ‘Bloqueo financiero’, ‘Bloqueo financiero’, ‘regla_bloqueos_ucel’);
INSERT INTO sga_reglas_mensajes (regla, interfaz, mensaje_validacion, mensaje_validacion_not) VALUES (1002, 2, ‘Bloqueo’, ‘Bloqueo’);
INSERT INTO sga_reglas_mensajes (regla, interfaz, mensaje_validacion, mensaje_validacion_not) VALUES (1002, 1, ‘Bloqueo financiero’, ‘Bloqueo financiero’);
INSERT INTO sga_reglas_parametros (regla, parametro, etiqueta, tipo_de_dato, orden, valor_desde, valor_hasta) VALUES (1002,‘alumno’, ‘Bloqueo financiero’, ‘E’, 1, ‘0’, ‘1’);
INSERT INTO sga_reglas_param_contexto (regla, parametro) VALUES (1002, ‘alumno’);
INSERT INTO sga_requisitos_validos (accion, requisito) VALUES (1, 1002);
INSERT INTO sga_requisitos_validos (accion, requisito) VALUES (2, 1002);
INSERT INTO sga_requisitos_x_punto_control (pto_control, requisito, orden) VALUES (10, 1002, 1);
INSERT INTO sga_requisitos_x_punto_control (pto_control, requisito, orden) VALUES (11, 1002, 2);
en cuanto al código del PHP:
<?php class regla_bloqueos_ucel extends regla { function validar() { $alumno = $this->get_parametro('alumno'); $actividad = $this->get_parametro('elemento'); $datos_alumno = current(guarani::alumno()->get_datos_alumno($alumno['alumno'])); //$plan = $datos_alumno['plan']; //$fecha = date('Y-m-d'); // Obtengo la fecha del examen para buscar regular desaprobados anteriores a la fecha $cant_alumnos = guarani::co('co_alumnos')->get_bloqueo_fin($datos_alumno); $resultado = $this->resultado_final($cant_alumnos == 0); if (!$resultado) { $nombre_alumno = guarani::alumno()->get_alumno_nombre($alumno); $this->set_parametros_mensaje_validacion(array($nombre_alumno, $cant_alumnos), true); } return $resultado; } } ?>Saludos.
Hola Pablo, hay algunas inconsistencias en la regla que implementa el requisito.
Estas recuperando la actividad, pero no la usas. Hay un comentario de que buscas la fecha de examen, pero no estas pasando el dato “llamado_mesa” que es con el que podes recuperar la fecha del examen.
¿Que es lo que necesitas controlar?
Porque segun lo que hace la regla alcanza con que el requisito este configurado en el punto de control 2 (este se ejecuta cuando ela lumno selecciona en el menu la operacion “Inscribir a Examen”, ya que por lo que veo no necesita el dato de actividad ni mesa de examen.
Si podes comentarnos que necesitas controlar, vemos que hay que cambiar de la configuracion del requisito y del codigo que implementa la regla del requisito.
O carga una solicitud agregando el archivo php de la regla y el metodo “get_bloqueo_fin” y vemos de ayudarlos con la personalizaciòn.
Saludos.
Alejandro… fijate que esas hay varias líneas comentadas (no se usan)… quedaron en el archivo porque en realidad lo copié de otra regla.
Te paso el código limpio:
Yo necesito solo ‘alumno’. Con ese dato hago un JOIN con la tabla sga_personas y traigo el legajo. Luego busco en una tabla personalizada ese legajo y, si existe, bloqueo la inscripción a la mesa de examen.
El error que devuelve el formulario es una llama a un método no definido.
Ok, entonces definilo en el punto de control 2. El control se ejecutara cuando el alumno seleccione la opcion de mun Inscribir a Examen o Inscribir a Materia. Ya que no interesa a que materia se quiera inscribir, el control se evalua siempre.
Respecto al error, corrieron el comando guarani pers_autolad ?. Verifiquen la siguiente documentacion: https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.21.0/personalizaciones/requisito_proceso#Crear_el_archivo_php_de_la_regla
Este comando se debe correr en gestion y autogestiòn.
guarani pers_autoload lo corro cada vez que hago una modificación a alguno de los archivos.
Tengo definido un punto de control personalizado. En el punto de control 2 falla (vuelvo a tener el primer error).
La documentación la leí por lo menos 25 veces y sigo sin encontrar el error.
Ahora logré que el formulario no me devuelva ningún error pero la regla falla (si inscribo a un alumno a examen que debería estar bloqueado lo inscribe igual) y si pruebo la regla desde toba directamente falla.
Respecto a falla te referias a que el control funciona y no se cumple, o que da un error?
El primer error es "Class ‘regla_bloqueos_ucel.php’ not found " ?
Si ubicas el archivo en la carpeta \php\nucleo\ _lib\reglas, da el mismo error que no encuentra la clase? (Aca debes correr el comando guarani autoload)
Renegando pude hacer que la regla funcionara (borré todos los datos que había insertado y volví a hacer los insert)… no sé si había basura en algún campo pero ahora la prueba no devuelve error.
De todos modos, no funciona bien:
Cuando ejecuto la regla, en el resultado de ejecución de la prueba sobre un alumno bloqueado el valor es FALSE pero el mensaje de validación lo devuelve OK; por el contrario, si pruebo con un alumno sin deuda (que no está en la tabla de bloqueos) el valor es TRUE.
Obviamente, cuando quiero inscribir al examen la regla no se ejecuta correctamente.
No tengo subidas las personalizaciones al SVN porque todavía tengo la instalación en “desarrollo” …
Pablo,
Pueden commitear la personalización en su nodo de Colab para que podamos chequearla?
Saludos, Florencia.
No tengo subidas las personalizaciones al SVN porque todavía tengo la instalación en “desarrollo” …
Segun esto, el control se cumple si $cant_alumnos es igual a 0, para otro valor de esa variable el control no se cumple.
Esto si el requisito no esta negado cuando lo definieron en la acciòn donde quieren controlarlo.
Buen día Marcelo…
es cierto lo que decís… pero probé de varias formas y el comportamiento en el mismo.
Cambié la línea por $resultado = $this->resultado_final($cant_alumnos != 0) y agregué echo "Valor de cant_alumnos: " . $cant_alumnos . “\n”;
echo "Resultado final: " . ($resultado ? ‘true’ : ‘false’) . “\n”;
para ver los valores por consola… en la prueba del formulario obtengo:
Valor de cant_alumnos: 1 Resultado final: true
pero en el resultado de la prueba sigo viendo Valor: Falso - Bloqueo Financiero
Donde definiste este requisito, tal vez seleccionaste la opcion “Negar”?
Proba la regla del requisito accediendo al editor de toba, desde la operacion Reglas. Alli te va a solicitar un id de alumno y fecha. Podras probar el resultado que da para diferentes alumnos.
[https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.21.0/personalizaciones/requisito_proceso#Prueba_de_la_regla]
¿A qué te referis con la opción Negar? Ahí sí que me perdí. Puede ser ese el problema.
La regla la estoy probando desde Toba —> Reglas ----> Pruebas y el único parámetro que me pide es el alumno porque es el único parámetro definido en la regla.
El que dice “Negar” que es un check. Si seleccionas ese campo, la regla se comporta al reves.
Adjunto imagen
Buenos días.
Ya puede hacer funciona la regla.
Gracias por la ayuda.