inscripción a examen desde autogestión

Hola, estamos trabajando con la versión 3.17.0 y un usuario nos reportó que creó una mesa de examen para un propuesta de tipo curso, pero cuando ingresa desde autogestión (con perfil curso) en la sección de inscripción a examen no aparece la actividad. Probé crear otra mesa de examen y tampoco apareció. Revisando la consulta que genera el listado de materias a inscribirse veo que:

SELECT	vw_actividades_plan.elemento as id,
							vw_actividades_plan.codigo as codigo,
							vw_actividades_plan.nombre as nombre,
							'(' || vw_actividades_plan.codigo || ') ' || vw_actividades_plan.nombre as descr,
							vw_actividades_plan.entidad_subtipo_nombre,
							sga_elementos_plan.creditos,
							vw_actividades_plan.plan_version as plan_version,
							vw_actividades_plan.plan, 
							'PLAN_ACTUAL' as tipo_plan
					FROM	vw_actividades_plan
							JOIN sga_elementos_plan ON (vw_actividades_plan.plan_version = sga_elementos_plan.plan_version	AND	vw_actividades_plan.elemento_revision = sga_elementos_plan.elemento_revision)
					WHERE	vw_actividades_plan.plan_version = 1114
							AND	vw_actividades_plan.estado = 'A'
							
							-- Se obvian las actividades aprobadas
							AND	vw_actividades_plan.elemento
								NOT IN (SELECT	vw_hist_academica_basica.elemento
										FROM	vw_hist_academica_basica
										WHERE	vw_hist_academica_basica.alumno = '68871'
										AND		vw_hist_academica_basica.resultado = 'A')
					  
				UNION
					SELECT	vw_regularidades_basica.elemento as id,
							vw_actividades_plan.codigo as codigo,
							vw_actividades_plan.nombre as nombre,
							'(' || vw_actividades_plan.codigo || ') ' || vw_actividades_plan.nombre as descr,
							vw_actividades_plan.entidad_subtipo_nombre as entidad_subtipo_nombre,
							vw_regularidades_basica.creditos as creditos,
							vw_actividades_plan.plan_version as plan_version,
							sga_planes_versiones.plan, 
							'PLAN_ANTERIOR' as tipo_plan
					FROM	vw_regularidades_basica
							JOIN sga_planes_versiones ON sga_planes_versiones.plan_version = vw_regularidades_basica.plan_version
							JOIN sga_elementos_revision ON sga_elementos_revision.elemento = vw_regularidades_basica.elemento
							JOIN vw_actividades_plan ON (vw_actividades_plan.elemento_revision = sga_elementos_revision.elemento_revision AND 
							                             vw_actividades_plan.plan_version      = vw_regularidades_basica.plan_version)

					WHERE	
							vw_regularidades_basica.alumno     = '68871' 
					AND		vw_regularidades_basica.resultado  = 'A'
					AND		vw_regularidades_basica.es_vigente = 1
					AND		vw_regularidades_basica.origen_otra_propuesta = false
					AND		vw_actividades_plan.estado  = 'A'
					-- No se listan las que esten en el plan actual
					AND		vw_actividades_plan.elemento NOT IN (SELECT	elemento FROM vw_actividades_plan WHERE plan_version = 1114)
				
					-- No se listan las que esten aprobadas
					AND		vw_actividades_plan.elemento NOT IN (SELECT vw_hist_academica_basica.elemento
																FROM vw_hist_academica_basica
																WHERE vw_hist_academica_basica.alumno = '68871'
																	AND vw_hist_academica_basica.resultado = 'A')
					ORDER BY nombre;

El id de alumno por el que busca está bien, pero el ID de plan version por el que busca NO. El alumno esta isncripto en 3 carreras de tipo posgrado y en una de tipo curso. Aparentemente está buscando por el plan versión de alguna de las otras 3 carerras y NO por el plan_version del curso. Es por eso que no figuran las activdades en el listado.

Saludos,
Naimid.

Hola pudieron ver esto?

Gracias,
Naimid.

Hola Naimid,

Observo que la query que devuelve las actividades en la operación Inscripción a exámenes del perfil Cursos es otra, seria la función actividades_propuestas_administran_cursos_con_comisiones_vigentes de la clase src/siu/modelo/datos/db/cursos.php.

Es estraño que filtre por un plan de una propuesta que no sea de tipo curso, ya que la propuesta la toma de la selección del combo de la izquierda (combo de propuestas tipo cursos).

Te pediría que nos envíes los logs que se generan en la operación Inscripción a exámenes del perfil Cursos, están en la carpeta instalacion/log.

saludos.

Hola, estuvimos debugeando un poco el código y lo que notamos lo siguiente, para una persona que tiene perfil de alumno y de cursos, al ingresar a este último nunca se setea en la sesión el ID de propuesta que corresponde, siempre queda guardado en la sesión la última propuesta seleccionada en el perfil de alumno, En la operación de inscripción a exámenes, estando en el perfil de cursos, permite seleccionar la propuesta en un combo de selección, pero nunca queda seteado, como dije antes siempre queda el ID seleccionado en el perfil de alumno por medio del combo que está en la esquina superior derecha.

Vimos que el listado de actividades posibles para la inscripción a examen lo busca del catalogo inscripcioń_examen/lista_materias. Esa función busca el plan_versión de guarani::persona()->get_id_plan_version_activo();

Esa función :

function get_id_plan_version_activo()
	{
		$id = $this->get_id_propuesta_activa();
		foreach ($this->datos_propuestas as $propuesta) {
			if ($propuesta['propuesta'] == $id) {
				return $propuesta['plan_version'];
			}
		}
	}

busca el plan depenediendo de la propuesta activa:

function get_id_propuesta_activa()
	{
		if (kernel::sesion()->esta_seteada('__persona_carrera')) {
			return kernel::sesion()->get('__persona_carrera');
		}
		return $this->get_propuesta_defecto();
	}

y la propuesta la toma de la sesión. Es ahí que nunca se setea la propuesta de tipo curso que se selecciona en el combo de la parte superior izquierda. Tal vez, debería aparecer para el perfil de cursos la opción de seleccion de propuesta (igual que como está en el perfil Alumno)

Espero haber sido clara.

Gracias,
Naimid.

Hola Naimid, antes que nada gracias por la descripción del problema!!!

Igualmente te pido los logs (carpeta instalacion/log de 3W) que se generan al seleccionar una propuesta de tipo curso de la izquierda, ya que en los mismos podremos encontrar donde se pierde este valor.

La cadena de llamados es la siguiente:

  1. Función accion__actividades_curso de la clase src/siu/operaciones/inscripcion_cursos/controlador.php.
  2. Función set_propuesta de la clase src/siu/operaciones/inscripcion_cursos/controlador.php.

En esta ultima se guarda en la sesión.

saludos.

Hola Leonel, disculpame pero tal vez no fui muy clara, el problema está en la inscripción a una mesa de exámen usando el perfil de cursos, y no en la inscripción a cursos, por eso la cadena de llamados es diferente a la que nos planteas en la respuesta. En breve les adjuntamos los logs para que lo vean. Muchas gracias,

Saludos,
Naimid.

Hola Naimid,

Igualmente hace dichas llamadas para “settear” la propuesta de tipo curso en cuestión.

Quedo a la espera de los logs.

saludos.

Hola Leonel, adjunto el archivo de log.

Saludos,
Naimid.


20200226_140316___6119.txt (66.2 KB)

Hola Naimid, antes que nada gracias por los logs, en los mismos observo lo siguiente:


--  sesion__propuesta  ---------------------------------------------------------

337
--  sesion __alumno  -----------------------------------------------------------

68871

--  sesion __plan  -------------------------------------------------------------

420

--  sesion __plan_version  -----------------------------------------------------

578

¿son correctos esos IDs?, de ser así debería cargar bien los datos.

saludos.

Leonel, los ID que se ven en el log están bien, pero no se está levantando bien. Te cuento que fue lo que hicimos nosotros, pusimos un die($sql) al final del método “listar_materias()” del archivo src/siu/modelo/datos/db/inscripcion_examen.php, y vemos que está recibiendo bien el id del alumno y MAL el id del plan_version.

$plan_version_act = guarani::persona()->get_id_plan_version_activo();


SELECT
  vw_actividades_plan.elemento as id,
  vw_actividades_plan.codigo as codigo,
  vw_actividades_plan.nombre as nombre,
  '(' || vw_actividades_plan.codigo || ') ' || vw_actividades_plan.nombre as descr,
  vw_actividades_plan.entidad_subtipo_nombre,
  sga_elementos_plan.creditos,
  vw_actividades_plan.plan_version as plan_version,
  vw_actividades_plan.plan,
  'PLAN_ACTUAL' as tipo_plan
FROM
  vw_actividades_plan
  JOIN sga_elementos_plan ON (
    vw_actividades_plan.plan_version = sga_elementos_plan.plan_version
    AND vw_actividades_plan.elemento_revision = sga_elementos_plan.elemento_revision
  )
WHERE
  vw_actividades_plan.plan_version = 1114
  AND vw_actividades_plan.estado = 'A' -- Se obvian las actividades aprobadas AND vw_actividades_plan.elemento NOT IN (SELECT vw_hist_academica_basica.elemento FROM vw_hist_academica_basica WHERE vw_hist_academica_basica.alumno = '68871' AND vw_hist_academica_basica.resultado = 'A') UNION SELECT vw_regularidades_basica.elemento as id, vw_actividades_plan.codigo as codigo, vw_actividades_plan.nombre as nombre, '(' || vw_actividades_plan.codigo || ') ' || vw_actividades_plan.nombre as descr, vw_actividades_plan.entidad_subtipo_nombre as entidad_subtipo_nombre, vw_regularidades_basica.creditos as creditos, vw_actividades_plan.plan_version as plan_version, sga_planes_versiones.plan, 'PLAN_ANTERIOR' as tipo_plan FROM vw_regularidades_basica JOIN sga_planes_versiones ON sga_planes_versiones.plan_version = vw_regularidades_basica.plan_version JOIN sga_elementos_revision ON sga_elementos_revision.elemento = vw_regularidades_basica.elemento JOIN vw_actividades_plan ON (vw_actividades_plan.elemento_revision = sga_elementos_revision.elemento_revision AND vw_actividades_plan.plan_version = vw_regularidades_basica.plan_version) WHERE vw_regularidades_basica.alumno = '68871' AND vw_regularidades_basica.resultado = 'A' AND vw_regularidades_basica.es_vigente = 1 AND vw_regularidades_basica.origen_otra_propuesta = false AND vw_actividades_plan.estado = 'A' -- No se listan las que esten en el plan actual AND vw_actividades_plan.elemento NOT IN (SELECT elemento FROM vw_actividades_plan WHERE plan_version = 1114) -- No se listan las que esten aprobadas AND vw_actividades_plan.elemento NOT IN (SELECT vw_hist_academica_basica.elemento FROM vw_hist_academica_basica WHERE vw_hist_academica_basica.alumno = '68871' AND vw_hist_academica_basica.resultado = 'A') ORDER BY nombre;
  Ese m é todo invocado dentro del listar_materias,
  est á devolviendo mal el id de plan_version,
  es lo que habiamos explicado mas arriba (
    busca el plan depenediendo de la propuesta activa.
  ) y es ah í donde la est á tomando mal.


Ese método invocado dentro del listar_materias, está devolviendo mal el id de plan_version, es lo que habiamos explicado mas arriba (busca el plan depenediendo de la propuesta activa.) y es ahí donde la está tomando mal.

Saludos,
Naimid

Hola Naimid,

Viendo el código observo lo siguiente:

Para obtener la lista de actividades llama a la función info__actividades_propuesta_curso_por_persona de la clase src/siu/modelo/transacciones/inscripcion_examen.php, esta ultima a su vez llama a la función info__lista_materias de la clase src/siu/modelo/datos/estrategias/inscripcion_examen.php. Esta ultimo hace lo siguiente:


		//si no es curso tomo el plan activo 
		if (!kernel::persona()->es_perfil_cursos()) {
			$plan = guarani::persona()->get_id_plan_activo();
			$plan_version = guarani::persona()->get_id_plan_version_activo();
		}

Pero solo debería entrar en ese if si NO es perfil curso, osea, no debería entrar allí.

Los datos de la propuesta y el plan los trae de sesión, en la función set_propiedades_curso de la clase src/siu/modelo/transacciones/inscripcion_examen.php, los cuales son previamente cargados en set_propuesta de la clase src/siu/operaciones/inscripcion_examen/controlador.php.

Viendo en los logs que me enviaste, los datos se cargan bien:


--  sesion__propuesta  ---------------------------------------------------------

337

get_plan_y_plan_version_propuesta_cursos

--  SQL  -----------------------------------------------------------------------

SELECT 
					sga_planes.plan,
					sga_planes_versiones.plan_version
				FROM 
					sga_planes,
					sga_planes_versiones
				WHERE
					sga_planes.propuesta = '337'
					AND sga_planes_versiones.plan = sga_planes.plan
					AND sga_planes.estado IN ('A','V')

--  ## datos ##  ---------------------------------------------------------------

Array
(
    [plan] => 420
    [plan_version] => 578
)


--  sesion __alumno  -----------------------------------------------------------

68871

--  sesion __plan  -------------------------------------------------------------

420

--  sesion __plan_version  -----------------------------------------------------

578

Luego:


--  CATALOGO: inscripcion_examen/lista_materias | cache [true] - tipo [memoria]  

Array
(
    [parametros] => Array
        (
            [propuesta] => '337'
            [alumno] => '68871'
            [persona] => '45796'
            [plan] => '420'
            [tipo_plan] => ''
            [plan_version] => '578'
            [ubicacion] => '26'
            [param_exa_filtro_actividades_con_mesas] => N
            [param_exa_rinde_en_cualquier_ubicacion] => N
            [param_exa_rendir_regularizada_plan_anterior] => S
            [param_exa_multiples_actas_examen] => S
        )

¿que valor estaría llegando mal?

saludos.

Hola Leonel, estoy revisando las funciones que me comentaste y veo que en la función info__lista_materias de la clase src/siu/modelo/datos/estrategias/inscripcion_examen.php no está el IF que mencionás. Te copio la función:

function info__lista_materias($propuesta, $alumno, $persona, $plan, $plan_version, $ubicacion)
	{
		$param_exa_filtro_actividades_con_mesas = parametro::get_valor('exa_filtro_actividades_con_mesas', array($propuesta));
		$param_exa_rinde_en_cualquier_ubicacion = parametro::get_valor('exa_rinde_en_cualquier_ubicacion', array($plan));
		$param_exa_rendir_regularizada_plan_anterior = parametro::get_valor('exa_rendir_regularizada_plan_anterior', array($propuesta) ,false);
		$param_exa_multiples_actas_examen = parametro::get_valor('exa_multiples_actas_examen', array($propuesta), false);

		//-[1]- Elige entre el caché DURO y la base
		$lista_actividades = catalogo::consultar('inscripcion_examen', 'lista_materias', array(
					'propuesta' => $propuesta,
					'alumno' => $alumno,
					'persona' => $persona,
					'plan' => $plan,
					'tipo_plan' => '',
					'plan_version' => $plan_version,
					'ubicacion' => $ubicacion,
					'param_exa_filtro_actividades_con_mesas' => $param_exa_filtro_actividades_con_mesas,
					'param_exa_rinde_en_cualquier_ubicacion' => $param_exa_rinde_en_cualquier_ubicacion,
					'param_exa_rendir_regularizada_plan_anterior' => $param_exa_rendir_regularizada_plan_anterior,
					'param_exa_multiples_actas_examen' => $param_exa_multiples_actas_examen
						)
		);

		//-[2]- Suma información de estado: inscripciones realizadas
		$actividades_inscripto = guarani::persona()->examenes()->get_ids_materias_inscripto();
		kernel::log()->add_debug('actividades inscripto', $actividades_inscripto);
		foreach ($lista_actividades as $id_act => $actividad) {
			$lista_actividades[$id_act]['E_INSCRIPCION'] = 0;
			if (in_array($actividad['id'], $actividades_inscripto)) {
				$lista_actividades[$id_act]['E_INSCRIPCION'] = 1;
			}
		}
		return $lista_actividades;
	}

Nosotros NO tenemos personalizada esta operación.

Saludos,
Naimid.

Hola Naimid,

Esto se arreglo para la 3.17.1 hace 7 meses, te dejo las URLs de sus nodos de COLAB:

3.17.0:
https://colab.siu.edu.ar/trac/guarani3/browser/nodos/unlp/3w/trunk/3.17.0/src/siu/modelo/datos/estrategias/inscripcion_examen.php#L16

3.17.1:
https://colab.siu.edu.ar/trac/guarani3/browser/nodos/unlp/3w/trunk/3.17.1/src/siu/modelo/datos/estrategias/inscripcion_examen.php#L16

saludos.
1

Hola Leonel, nos podrían pasar un parche con la solución en las versión 3.17.0 ? Por el momento no tenemos planificado pasar a la última versión.

Gracias.
Naimid.

Hola Naimid,

El parche no se los puedo pasar por acá. Creen un GDS que se los paso (avísenme por acá el numero de dicho GDS).

saludos.

1

Hola Leonel, creé el GDS 45522

Gracias.
Naimid.

Hola Naimid,

Ya te envié la solución por GDS. Cualquier otra cosa lo seguimos por ahí.

REFERENCIA: Se solucionó en el Ticket #24085.

saludos.
1