[SOLUCIONADO]Duda sobre parámetros en Regla

Gente buenos días, les escribo para consultarles lo siguiente, cuando damos de alta una nueva regla en requisitos, en la última pestaña se deben agregar los “Puntos de Control asociados al Requisito General”, y seleccionamos una opción.

  • Primer consulta, en ese punto se puede seleccionar más de un punto de control?
  • Segunda, según lo que seleccionemos en el punto de control, son los parámetros que podemos levantar en el php de la regla? es así o estoy confundiendo las cosas?
  • Tercera, si lo de antes no aplica, dónde puedo ver los parámetros disponibles que se tienen para utilizar en las reglas?

Gracias!!!

Hola Javier,

- Primer consulta, en ese punto se puede seleccionar más de un punto de control?
Si, se pueden seleccionar varios.
- Segunda, según lo que seleccionemos en el punto de control, son los parámetros que podemos levantar en el php de la regla? es así o estoy confundiendo las cosas?
Exacto, cada punto de control tiene un conjunto de parámetros asociado. Los podés consultar en la tabla 'par_parametros_x_punto_control'.

Saludos, Florencia.

Florencia, muchas gracias!!!

Florencia, perdón que insista con el tema, pero nos esta pasando lo siguiente, dimos de alta una regla la cual recibe como parámetro el año académico y la misma funcionaba de manera correcta, pero necesitamos pasarle también la propuesta, por lo que agregamos el punto de control 18, así la recuperábamos en el php de la regla.

Realizamos los cambios y cuando queremos verificar el funcionamiento de la regla nos muestra el error en pantalla (adjunto).

Esto podemos ver en el log

[DEBUG][guarani] Controlando Punto de Control: 18
[DEBUG][guarani] SQL con perfil de datos: SELECT 		sga_reglas.regla,
	                       	sga_reglas.nombre,
	                       	sga_reglas.descripcion,
	                       	sga_reglas.regla_tipo,
	                       	sga_reglas.mensaje_usuario,
	                       	sga_reglas.php_clase,
	                       	sga_reglas_tipos.nombre AS regla_tipo_nombre,
	                       	sga_reglas.nombre || ' (' || sga_reglas.regla || ' - ' || sga_reglas.php_clase || ')' AS regla_descr
  				FROM 		sga_reglas,
  							sga_reglas_tipos
  				WHERE 		sga_reglas_tipos.regla_tipo = sga_reglas.regla_tipo
  							 AND sga_reglas.regla = '1004' 
        		ORDER BY 	sga_reglas.nombre
  				
[DEBUG][guarani] SQL con perfil de datos: SELECT 	sga_reglas_mensajes.interfaz,
						sga_reglas_mensajes.mensaje_validacion,
						sga_reglas_mensajes.mensaje_validacion_not as mensaje_validacion_negado
  				FROM 	sga_reglas_mensajes
  				WHERE   sga_reglas_mensajes.regla = '1004' 
        		
  						;
[DEBUG][guarani] SQL con perfil de datos: SELECT	   	sga_reglas.regla,
			                    sga_reglas_parametros.parametro,
		                       	sga_reglas_parametros.tipo_de_dato,
		                       	sga_reglas_parametros.orden,
		                       	sga_reglas_parametros.descripcion,
		                       	sga_reglas_parametros.etiqueta,
		                       	sga_reglas_parametros.valor_desde,
		                       	sga_reglas_parametros.valor_hasta 
	                  FROM     	sga_reglas,
								sga_reglas_parametros
	                  WHERE     sga_reglas.regla = '1004' 
	                  AND     	sga_reglas_parametros.regla = sga_reglas.regla 
	                  ORDER BY 	sga_reglas_parametros.orden
	  				
[DEBUG][guarani] SQL con perfil de datos: select get_regla_mensaje('1004', '') as mensaje
[DEBUG][guarani] SQL con perfil de datos: SELECT	   	sga_reglas.regla,
		                    sga_reglas_param_contexto.parametro,
	                       	par_puntos_control_parametros.tipo_de_dato,
	                       	par_puntos_control_parametros.descripcion
                  FROM     	sga_reglas,
							sga_reglas_param_contexto,
							par_puntos_control_parametros
                  WHERE     sga_reglas.regla = '1004'
                  AND     	sga_reglas_param_contexto.regla = sga_reglas.regla
				  AND		par_puntos_control_parametros.parametro = sga_reglas_param_contexto.parametro
							;
[ERROR][guarani] No se encuentra el par�metro de contexto: anio_academico.
[ERROR][toba] guarani_error: No se encuentra el par�metro de contexto: anio_academico. 

[TRAZA]exception 'guarani_error' with message 'No se encuentra el par�metro de contexto: anio_academico.' in /u/proyectos/guarani/php/nucleo/_lib/reglas/regla_nucleo.php:117
Stack trace:
#0 /u/proyectos/guarani/php/nucleo/_lib/controles/guarani_control_nucleo.php(78): regla_nucleo->set_parametros_contexto(Array)
#1 /u/proyectos/guarani/php/nucleo/_lib/controles/guarani_control_nucleo.php(47): guarani_control_nucleo->set_parametros_contexto(Array)
#2 /u/proyectos/guarani/php/nucleo/_lib/controles/guarani_punto_de_control_nucleo.php(166): guarani_control_nucleo->__construct(Array, Array)
#3 /u/proyectos/guarani/php/nucleo/_lib/controles/guarani_punto_de_control_nucleo.php(193): guarani_punto_de_control_nucleo->crear_control(Array)
#4 /u/proyectos/guarani/php/nucleo/_lib/controles/validador_puntos_de_control_nucleo.php(178): guarani_punto_de_control_nucleo->controlar()
#5 /u/proyectos/guarani/php/nucleo/cursadas/inscripciones/cn_man_inscripcion_cursadas.php(693): validador_puntos_de_control_nucleo->controlar()
#6 /u/proyectos/guarani/php/nucleo/cursadas/inscripciones/cn_man_inscripcion_cursadas.php(480): cn_man_inscripcion_cursadas->validar_puntos_de_control(Array, Array)
#7 /u/proyectos/guarani/php/nucleo/cursadas/inscripciones/cn_man_inscripcion_cursadas.php(49): cn_man_inscripcion_cursadas->validar_alumno(18468)
#8 /u/proyectos/guarani/php/operaciones/cursadas/inscripciones/ci_nav_inscripcion_cursada.php(137): cn_man_inscripcion_cursadas->set_alumno(18468)
#9 /u/proyectos/guarani/php/operaciones/_lib/ci_navegacion_wizard.php(40): ci_nav_inscripcion_cursada->validar_alumno()
#10 /u/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ci.php(282): ci_navegacion_wizard->evt__cambiar_tab__siguiente('undefined')
#11 /u/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ci.php(204): toba_ci->disparar_evento_propio()
#12 /u/proyectos/guarani/php/extension_toba/componentes/interface/guarani_ci.php(28): toba_ci->disparar_eventos()
#13 /u/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php(135): guarani_ci->disparar_eventos()
#14 /u/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php(55): toba_solicitud_web->procesar_eventos()
#15 /u/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/toba_nucleo.php(97): toba_solicitud_web->procesar()
#16 /u/proyectos/guarani/www/aplicacion.php(27): toba_nucleo->acceso_web()
#17 {main}
[DEBUG][toba] Mensaje a usuario: No se encuentra el par�metro de contexto: anio_academico.

Y cuando ejecutamos la consulta

SELECT	   	sga_reglas.regla,
		                    sga_reglas_param_contexto.parametro,
	                       	par_puntos_control_parametros.tipo_de_dato,
	                       	par_puntos_control_parametros.descripcion
                  FROM     	sga_reglas,
							sga_reglas_param_contexto,
							par_puntos_control_parametros
                  WHERE     sga_reglas.regla = '1004'
                  AND   sga_reglas_param_contexto.regla = sga_reglas.regla
		  AND	par_puntos_control_parametros.parametro = sga_reglas_param_contexto.parametro

La base me tira
1004;“alumno”;“E”;“Id de Alumno”
1004;“anio_academico”;“E”;“Año Académico”
1004;“elemento”;“E”;“Actividad/Modulo”
1004;“propuesta”;“E”;“Propuesta”

Saludos


error.png

error.png

requisito.png

requisito.png

Hola Javier,

El punto de control 18 requiere un tratamiento especial. Tiene dos requisitos asociados por defecto: “Que el alumno tenga alguna de las opciones de propuestas vinculadas aprobadas” y “Que el alumno tenga alguna de las opciones de propuestas vinculadas aprobadas en un x%”. Si mirás la clase PHP de cualquiera de las dos reglas correspondientes a esos requisitos (‘regla_cumple_propuesta_vinculada’ y ‘regla_cumple_porc_propuesta_vinculada.php’) vas a ver que tiene redefinido el método ‘set_parametros_contexto’. Esto es porque desde la operación “MATRÍCULA » INSCRIPCIONES »INSCRIBIR A PROPUESTAS”, que ejecuta este punto de control, no se pueden obtener el año académico y el plan-versión del alumno (todavía no existe). En todos los demás casos sí, y por eso la distinción. Deberías simplemente replicar ese método en tu clase PHP.

Saludos, Florencia.

Florencia, replique el método que comentaste en mi clase y me sigue dando error, ahora me dice que no encuentra el parámetro elemento, para realizar la validación necesito los tres parámetros. Perdón lo cabeza dura pero si se pueden poner dos puntos de control para un requisito, no entiendo porque deja de andar el punto de control que ya trae los datos inicialmente. No se si me explico?

Espero tus comentarios y gracias por la paciencia!!!

Javier,

Es que el punto de control 18 no incluye el parámetro ‘elemento’ y veo que en tu regla lo tenés. Ahí está el problema.

Saludos, Florencia.

Si , tal cual, pero yo antes de agregar el 18 tenia el punto 8 y no me daba problemas, me llega el elemento. Por eso la consulta, yo agregue el 18 al 8 que ya tenia la regla… Tengo alguna otra opción? Probé también agregan el punto de control 2 y también me da inconvenientes.

Saludos

Javier,

Tenés commiteada la regla en Colab? Cuál es?

Saludos, Florencia.

No lo tengo subido ya que no estaba completo, no se si te sirve que te lo pase por aquí…

<?php

//"Recibe el alumno y el anio academico"
class regla_inscripciones_a_cursada_con_mesa_especial extends regla
{
    	/**
	 * Se redefine el set de parámetros de contexto para considerar el caso especial de la operación "Inscripción a Propuestas",
	 * donde se pasan dos parámetros adicionales que en el resto de las operaciones se obtienen del alumno.
	 */
	function set_parametros_contexto($parametros_contexto=array())
	{
		if (! isset($parametros_contexto['anio_academico']) || ! isset($parametros_contexto['plan_version'])) {
			$datos_alumno = toba::consulta_php('co_alumnos')->get_datos_inscripcion($parametros_contexto['persona'], $parametros_contexto['propuesta']);
			$parametros_contexto['anio_academico'] = $datos_alumno['anio_academico'];
			$parametros_contexto['plan_version'] = $datos_alumno['plan_version'];
		}
		parent::set_parametros_contexto($parametros_contexto);
	}
        
	function validar()
	{
            
            $alumno = $this->get_parametro('alumno');
            $elemento = $this->get_parametro('elemento');
            $fecha = '\''.$this->get_parametro('fecha').'\'';
            $anio_academico = $this->get_parametro('anio_academico');
            $propuesta = $this->get_parametro('propuesta');
            $plan_version = $this->get_parametro('plan_version');
            $sql = "SELECT * FROM negocio.unt_f_mesa_especial_y_cursando($alumno, $anio_academico, $elemento);";
            $rs = toba::db()->consultar_fila($sql);
            $sql2 = "SELECT apellido_nombres FROM vw_personas WHERE persona in(SELECT persona FROM sga_alumnos WHERE alumno=$alumno)";
            $rs2 = toba::db()->consultar_fila($sql2);
            if ($rs['unt_f_mesa_especial_y_cursando']==0){
                    $this->set_parametros_mensaje_validacion(array($rs2['apellido_nombres']), true);
                    return false;
            }else{
                    return true;
            }

        }
}

?>

Javier,

Hoy no existe ningún punto de control que incluya los parámetros ‘año académico’ y ‘elemento’ a la vez. El elemento no lo vas a poder deducir a partir de otros parámetros pero sí el año académico y la propuesta. Entonces te sugiero que:

  1. Quites los parámetros ‘anio_academico’ y ‘propuesta’ de la tabla ‘sga_reglas_param_contexto’ para la regla 1004.
  2. Edites el requisito desde la operación “REQUISITOS »ADMINISTRAR REQUISITOS”, lo saques de los puntos de control 8 y 18 y lo asocies al 3.
  3. Modifiques la clase PHP de la regla borrando el método ‘set_parametros_contexto’ y agregando en el método ‘validar’ el código necesario para recuperar el año académico y la propuesta que necesitás a partir del identificador del alumno.

Saludos, Florencia.

Florencia, una vez más, gracias por la ayuda. Hicimos los cambios que sugeriste y recuperamos lo que necesitamos.

Muchas gracias y saludos!!