correlativas especiales

Buenos Dias
Necesitamos que cuando un alumno se inscriba a examen en una materia ( por ejemplo la materia A) en una instancia regular, controle que tenga la materia B regular, pero que si se inscribe en una instancia libre tenga la materia B aprobada. Lo que hicimos es para la materia A agregar como correlativa de aprobación a B regular, y agregamos una correlativa especial para que controle si se inscribio en una instancia libre controle que tenga aprobada B y sino no haga nada. El problema esta en como hacer para que en la correlativa especial pueda saber la instancia en la que se inscribió el alumno, o si existe otra forma de resolver este problema.
Saludos

Hola Yanina.

El problema esta en como hacer para que en la correlativa especial pueda saber la instancia en la que se inscribió el alumno, o si existe otra forma de resolver este problema.
En la definición de correlativas no hay posibilidad de indicar diferentes opciones de correlativas según instancia de examen, para las correlativas de aprobación.

El requisito de correlativa de aprobación se evalúa una vez que se selecciona la mesa de examen, en este momento ya se sabe como se inscribe el alumno (regular o libre).

  • Si el alumno se inscribe como regular, se ejecutan los requisitos del punto de control nro 10 (Examen Instancia Regular). Aqui esta configurado el requisito nro 98 Correlativas de Aprobación - Examen Regular

  • Si el alumno se inscribe como libre, se ejecutan los requisitos del punto de control nro 11 (Examen Instancia Libre). Aqui esta configurado el requisito nro 99 Correlativas de Aprobación - Examen Libre

Los dos requisitos, ejecutan la regla 308 de Correlativas de Aprobación.

Lo que pueden hacer es generar una regla personalizada basandose en la nro 308, pero que reciba el parámetro instancia. Que este parámetro se pase como parámetro a los requisitos que estén configurados como correlativas.
Entonces, en ese requisito de la correlativa especial que uds crearon, va a recibir el parámetro “instancia”, y segun que instancia reciba, realizan el control de que la actividad B este cursada y vigente o que este aprobada por examen final, promocion, equivalencia…

Luego, en los requisitos 98 y 99 deberán cambiar la regla 308 por la que Uds crearon. (Tabla: sga_requisitos, campo: regla). Recuerden que los ids de requisitos y reglas personalizados comienzan a partir del nro 1000.

2

Buenos Días
Estamos retomando este tema, te cuento que realizamos lo que nos comentaste adjunto los pasos, pero me sale error “no se encuentra el parámetro de contexto instancia”, me gustaría saber que otra cosa necesito realizar, o si algo estoy realizando mal. Aclaro que esto lo necesitamos para una sola materia, de una propuesta de una determinada facultad.

[ol]- CREAR UNA NUEVA REGLA (1102) IGUAL A LA 308
INSERT INTO sga_reglas VALUES(1102, ‘Correlativas de aprobación con instancia - Personalizacion’, ‘Controla que el alumno tenga las correlativas para aprobar (por examen final, promocion, equivalencia total) una actividad’, 3,‘El alumno no tiene las correlativas para aprobar la actividad’,‘No tenes cumplidas las correlativas para aprobar la actividad %1%. Correlativas faltantes: %2%’, null, ‘regla_correlativas_de_aprobacion_unsa’, ‘N’ )

  • AGREGAMOS LOS PARAMETROS DE CONTEXTO

INSERT INTO sga_reglas_param_contexto SELECT 1102, parametro FROM sga_reglas_param_contexto WHERE regla=308
INSERT INTO sga_reglas_param_contexto VALUES(1102, ‘instancia’)

  • AGREGAMOS LOS MENSAJES DE VALIDACION

insert into sga_reglas_mensajes values(1102, 1, ‘El alumno $1$ debe las siguientes correlativas de aprobación: $2$’, ‘El alumno $1$ cumplió con las correlativas de aprobación’)
insert into sga_reglas_mensajes values(1102, 2, ‘Debés las siguientes correlativas de aprobación: $2$’, ‘Cumpliste con las correlativas de aprobación’)

  • MODIFICAR REQUISITO INSCRIPCION A EXAMEN
    UPDATE sga_requisitos SET regla=1102 WHERE requisito IN (98,99)

  • CREACION DEL ARCHIVO PHP [/ol]

<?php

class regla_correlativas_de_aprobacion_unsa extends regla_correlativas_de_aprobacion
{

function validar()
{ 
	$alumno = $this->get_parametro('alumno');
	$elemento = $this->get_parametro('elemento');
	$fecha = $this->get_parametro('fecha');
	// Personalizacion UNSa
	[b]$instancia = $this->get_parametro('instancia');[/b]
	// Fin de personalizacion UNSa


	// $activ_otorgadas = $this->get_parametro('equivalencias_otorgadas');
	$activ_otorgadas = $this->existe_parametro('equivalencias_otorgadas') ? $this->get_parametro('equivalencias_otorgadas') : '';
	
	$datos_alumno = current(guarani::alumno()->get_datos_alumno($alumno));
	$propuesta = $datos_alumno['propuesta'];
	$persona = $datos_alumno['persona'];

	if (guarani::parametros()->get_valor_en_reglas('exa_controla_correlativas_actuales', $propuesta) == comunes::si) {
		$plan_version = guarani::alumno()->get_plan_version($alumno, $fecha);
	} else {
		$plan_version_ultima_cursada = toba::consulta_php('co_alumnos')->get_ultima_cursada_plan_version($alumno, $elemento);
		$plan_version = empty($plan_version_ultima_cursada) ? guarani::alumno()->get_plan_version($alumno) : $plan_version_ultima_cursada;
	}

	$grupos = guarani::condiciones()->get_opciones_elemento_plan_version_tipo($elemento, $plan_version, condicion::tipo_rendir);

	$grupo_cumplido = true;
	$cant_requisitos_no_cumplidos = 0;
	$txt_requisitos_no_cumplidos = '';
	foreach ($grupos as $grupo) {
		$requisitos = guarani::condiciones()->get_requisitos_opcion($grupo['grupo_condicion']);
		$grupo_cumplido = true;
		foreach ($requisitos as $requisito) {
			$req_valido  = false;
			/** Si la regla a controlar es Actividad Aprobada ó Actividad Cursada se verifica en primer 
			 *  instancia si la actividad se está dando como aprobada ó cursada, según corresponda, dentro 
			 *  de las actividades otorgadas en caso de Equivalencias.
			 */
			if (!empty($activ_otorgadas)) {
				if ($requisito['regla'] == regla::regla_actividad_aprobada) {
					$req_valido = $this->actividad_aprobada_en_otorgadas($requisito['elemento'], $activ_otorgadas);
				} elseif ($requisito['regla'] == regla::regla_actividad_cursada) {
					$req_valido = $this->actividad_cursada_en_otorgadas($requisito['elemento'], $activ_otorgadas);
				}
			} 
			
			// Si se está controlando otra regla, o si la actividad no estaba cursada o aprobada dentro
			// de las mismas actividades otorgadas en el trámite de equivalencias, se valida la regla.
			if (!$req_valido) {
				$regla = guarani::regla($requisito['regla']);
				$regla->set_parametros($requisito['parametros']);
				$regla->set_operador_not($requisito['operador_not']);
				$regla->set_parametros_contexto(array(
													'alumno' => $alumno,
													'persona' => $persona,
													'propuesta' => $propuesta,
													// Personalizacion UNSa
													[b]'instancia' => $instancia,[/b]
													// Fin de personalizacion UNSa
													'plan_version' => $plan_version,
													'elemento' => $requisito['elemento'],
													'elemento_inscripcion' => $elemento,  
													'requisito' => $requisito['requisito'],
													'fecha' => $fecha));
				// Valido el requisito.
				$req_valido = $regla->validar();
				
				// ---------------------------------------------------------------------------------------------
				// Si no se cumplio la regla y es la regla de tener la actividad regularizada (regla = 2).
				// Verifico si tiene una equivalencia de regularidad solo para correlativas (instancia 14)
				// ---------------------------------------------------------------------------------------------
				if (!$req_valido && $requisito['regla'] == regla::regla_actividad_cursada) {
					$req_valido = toba::consulta_php('co_alumnos')->actividad_regularizada_en_equivalencia_para_correlativas($alumno, $requisito['elemento'], $fecha);
				}	
			}

			if (!$req_valido) {
				// La regla evaluada no se cumplió. Informo el mensaje de la regla.
				$grupo_cumplido = false;
				$cant_requisitos_no_cumplidos++;
				// Se detallan hasta 5 requisitos no cumplidos...
				if ($cant_requisitos_no_cumplidos <= 5) {
					if ($requisito['tipo'] == condicion::requisito_entidad) {
						$datos_basicos_elemento = guarani::elementos()->get_datos_basicos_elemento_en_plan_version($requisito['elemento'], $plan_version);

						$estado_actividad_desc = current(toba::consulta_php('co_g3entidades')->get_estados("estado = '" . $requisito['estado'] . "'"));
						$requisito_mensaje = $datos_basicos_elemento['nombre'] . " (" . $estado_actividad_desc['estado_nombre'] . ")";
					} else {                            
						// Obtengo el mensaje que informo al usuario dependiendo de la interfaz y si esta negado o no el requisito.
                        $requisito_mensaje = toba::consulta_php('co_reglas')->get_mensaje_usuario($requisito['regla'], $requisito['parametros']);                            
						if ($requisito_mensaje == '' || !$requisito_mensaje) {
                            $requisito_mensaje = $regla->get_mensaje_validacion()[1]['mensaje'];                                
                        }
					}
					$txt_requisitos_no_cumplidos .= ($cant_requisitos_no_cumplidos == 1) ? $requisito_mensaje : ", $requisito_mensaje";
				} else {
					$txt_requisitos_no_cumplidos .= ' y otras...';
					break;
				}
			}
		}
		if ($grupo_cumplido) {
			break;
		}
	}

	$resultado = $this->resultado_final($grupo_cumplido);

	if (!$resultado) {
		$nombre_alumno = $datos_alumno['apellido_y_nombre'];
		$this->set_parametros_mensaje_validacion(array($nombre_alumno, $txt_requisitos_no_cumplidos), true);
	}
	return $resultado;
}

}

El problema es que deberias pasar el dato instancia como parámetro al llamar al punto de control que evalúa requisitos de correlativas (en este caso el requisito de correlativas se controla en el punto de control 17 y este solo recibe dato alumno + actividad + fecha…).
Este dato no se esta pasando a ningún punto de control.
Las correlativas se evaluan cuando se selecciona la materia, con lo cual no se sabe aun a que mesa el alumno se esta inscribiendo y en consecuencia si se está inscribiendo como Regular o Libre.

Tal vez deban agregar un requisito para la instancia 3 (Regular), y para ello debes configurar el requisito para el punto de control 10 (Alumno - Examen Regular). Esta definición la realizas en la tabla sga_requisitos_x_punto_control
Y otro requisito para la instancia 4 (Examen Libre), y para ello debes configurar el requisito para el punto de control 11 (Alumno - Examen Libre)
Cada requisito tendrá su regla correspondiente que controlará lo relacionado a esa instancia.

Perdon, no me di cuenta de este detalle de que el dato instancia no se esta pasando a ningún punto de control, pero estan estos puntos de control asociados a instancias de cursadas, examenes y equivalencias. Es decir que si el alumno se inscribe como libre, se controlaran todos los requisitos asociados a esa instancia (ademas del resto de requistos relacionados con el punto de control 17 y otros )

Buenos Días
Para entender un poco, todo lo que hicimos esta mal, lo que deberíamos hacer ahora es tener dos correlativas especiales (una para cada instancia) y asociarlas al punto de control correspondiente 10 y 11 en la tabla sga_requisitos_x_punto_control ? y lo que no me queda claro es si también deberíamos agregar el parámetro instancia al punto de control 17.
Saludos.

 lo que no me queda claro es si también deberíamos agregar el parámetro instancia al punto de control 17.

No por lo siguiente:
El control de correlativas actual se corre en el punto de control 10 (requisito 98 = Correlativas de Aprobación - Examen Regular) o punto de contor 11 (requisito 99 = Correlativas de Aprobación - Examen Libre)

Me confundi’en el mensaje anterior cuando comente:

Las correlativas se evaluan cuando se selecciona la materia, con lo cual no se sabe aun a que mesa el alumno se esta inscribiendo y en consecuencia si se está inscribiendo como Regular o Libre.
Asi se evaluan las correlativas en la inscripcion a cursadas, de ahi mi confusión

El tema que estos puntos de control en su definición no estan recibiendo el dato de instancia, porque el punto de control ya esta asociado a una instancia.
Entonces, se que el requisito 98 se ejecuta si el alumno se inscribe como Regular, y que el requisito 99 se controla si el alumno se inscribe como libre.

Volviendo a tu consulta, esta mal que pases la instancia pero no esta tan mal lo que hiciste…
Tenes que crear una regla por cada requisito que se evalue en cada instancia. Una para regulares idem requisito 98 y otra para libres idem requisito 99. Ahora estos dos requisitos tienen la misma regla porque no hay diferencia en lo que controla, no importa en que condición se inscriba el alumno, controla igual las correlativas.

Esto no debes hacer, ya que el dato no lo necesitas porque tendras un requisito/regla diferente por cada instancia:

INSERT INTO sga_reglas_param_contexto VALUES(1102, 'instancia')

Esto:

UPDATE sga_requisitos SET regla=1102 WHERE requisito IN (98,99)

Debieras cambiarlo seteando una regla diferente para cada requisito:

UPDATE sga_requisitos SET regla=1102 WHERE requisito =98;
UPDATE sga_requisitos SET regla=1103 WHERE requisito =99;

Buenos días
Logramos resolverlo, remplazamos la regla 308 utilizadas en los requisitos 98,92,99,58,93,104 por las siguientes reglas (copias exactas de la regla 308 pero se le agrega el parámetro instancia (un parámetro dado por nosotros) en la función validar() para luego desde la correlativa especial saber en que instancia se inscribió el alumno):

En requisito 99 (Correlativas de Aprobación - Examen Libre) remplazado por la regla 1102
En requisito 98 (Correlativas de Aprobación - Examen Regular) remplazado por la regla 1103
En requisitos 92 (Correlativas de Aprobación - Equivalencia Total), 93(Correlativas de Aprobación - Equivalencia Parcial), 58(Correlativas de Aprobación), 104(Correlativas de Aprobación - Tesis) remplazado por la regla 1104 

Ahora, hay otra propuesta donde se requiere que para inscribirse a cursar (instancia promoción y regular) cumpla unos requisitos (para los que debemos crear una correlativa especial), pero si se inscribe para finalizar por examen libre regular no debe controlar ese requisito. ¿ Solo debe modificarse el requisito 58?

Saludos

El requisito de Correlativas de Aprobación que esta asociado a la instancia de mesa de examen Regular (Punto de Control 10), es el requisito 98
Ajunto una consulta para que veas que requisitos estan asociados a cada punto de control relacionada con cada instancia de mesas de examen (Regular / Libre / Examen Complementario / Tesis / Revalida de Cursada…)


requisitos_configurados_x_instancia_y_pto_de_control.sql (955 Bytes)