Posible bug en Revertir Rechazo de Inscripción a Actividad

Buenas!

Descubrimos que cuando filtramos en la operación Revertir Rechazo de Inscripción a Actividad con algun usuario que tenga perfil de datos el filtro Ubicación se setea como obligatorio. Este filtro mata la query:

SELECT sga_insc_cursada_log.inscripcion,
sga_insc_cursada_log.nro_transaccion_log,
sga_insc_cursada_log.alumno,
sga_alumnos.legajo AS alumno_legajo,
vw_personas.persona,
vw_personas.apellido_nombres AS apellido_y_nombre,
vw_personas.tipo_nro_documento AS documento_principal,
sga_insc_cursada_log.comision,
sga_comisiones.nombre AS comision_nombre,
f_subcomisiones_insc_cursada_log(sga_insc_cursada_log.inscripcion, true, false) AS subcomisiones_nombres,
sga_comisiones.ubicacion,
sga_ubicaciones.nombre AS ubicacion_nombre,
sga_insc_cursada_log.plan_version,
vw_actividades_plan.codigo AS actividad_codigo,
vw_actividades_plan.nombre AS actividad_nombre,
COALESCE('(' || vw_actividades_plan.codigo || ') ', '') || vw_actividades_plan.nombre AS actividad_descr,
sga_insc_cursada_log.fecha_inscripcion,
sga_insc_cursada_log.estado,
sga_insc_cursada_log.operacion,
CASE sga_insc_cursada_log.operacion
WHEN 'B' THEN 'Baja'
WHEN 'R' THEN 'Rechazada'
END AS operacion_descr,
sga_insc_cursada_log.fecha_operacion,
to_char(sga_insc_cursada_log.fecha_operacion,'DD/MM/YYYY HH24:MI:SS') AS fecha_operacion_visual

FROM sga_insc_cursada_log,
vw_actividades_plan,
sga_alumnos,
vw_personas,
sga_comisiones,
vw_periodos_lectivos,
sga_ubicaciones

WHERE sga_insc_cursada_log.plan_version = vw_actividades_plan.plan_version
AND sga_insc_cursada_log.alumno = sga_alumnos.alumno
AND sga_alumnos.persona = vw_personas.persona
AND sga_insc_cursada_log.comision = sga_comisiones.comision
AND sga_comisiones.elemento = vw_actividades_plan.elemento
AND sga_comisiones.periodo_lectivo = vw_periodos_lectivos.periodo_lectivo
AND sga_comisiones.ubicacion = sga_ubicaciones.ubicacion
AND f_limpiar_acentos(vw_personas.nro_documento::varchar) ILIKE '%43380669%' AND sga_comisiones.ubicacion = '12' AND sga_insc_cursada_log.operacion = 'R'
AND vw_periodos_lectivos.fecha_fin >= '2023-08-22'
AND vw_periodos_lectivos.fecha_tope_movimientos >= '2023-08-22'
AND (sga_insc_cursada_log.tipo = 'I' OR
(sga_insc_cursada_log.tipo = 'P' AND sga_insc_cursada_log.prioridad = 1 AND
-- No tiene una inscripcion confirmada en la misma actividad (misma transaccion)
NOT EXISTS (SELECT 1 FROM sga_insc_cursada as i 
			WHERE i.alumno = sga_insc_cursada_log.alumno 
			AND i.nro_transaccion = sga_insc_cursada_log.nro_transaccion 
			AND i.tipo = 'P'))
)

Sin

AND sga_comisiones.ubicacion = '12'

funciona perfecto.

Hola Emiliano,

¿que versión de Guaraní tenes instalada?

¿que perfil de datos tiene el usuario?

Me adjuntarías el log completo de la operación (archivo instalacion/i__desarrollo/p__guarani/logs/sistema.log).

saludos.
2

Hola Emiliano,

A qué te referís con que “mata la query”? La consulta SQL que postearon no tiene errores de sintaxis…
En general, si el perfil de datos del usuario pertenece al dominio “Propuestas” es obligatorio filtrar los conceptos por ubicación.

Saludos, Florencia.

Estamos en la 3.20.1
Esta operacion tiene un parche aplicado por Sergio donde refiere al GDS 62336
Perfil de datos cuya dimension es ug (unidad de gestión)

Que no termina nunca.
Claro, si bien no tiene errores de sintaxis, parece que el query plan que elije no es muy optimo, no lo se.

De cualquier forma. lo parcheamos temporalmente, porque era urgente, modificando la linea 1012 de php/nucleo/cursadas/inscripciones/co_inscripciones_cursadas.php


NOT EXISTS (SELECT 1 FROM sga_insc_cursada as i WHERE i.alumno = sga_insc_cursada_log.alumno AND i.nro_transaccion = sga_insc_cursada_log.nro_transaccion AND i.tipo = '" . inscripcion_cursada::tipo_preinscripcion  . "'))

por


NOT EXISTS (SELECT 1 FROM sga_insc_cursada as i JOIN sga_comisiones as c using (comision) WHERE i.alumno = sga_insc_cursada_log.alumno AND i.nro_transaccion = sga_insc_cursada_log.nro_transaccion AND c.ubicacion = sga_comisiones.ubicacion AND i.tipo = '" . inscripcion_cursada::tipo_preinscripcion  . "'))

No se que opinan ustedes. Tal vez querrian modificarlo para salir en proxima versión.

Hola Emiliano, veo que en el cambio que hiciste agregaste filtro por ubicacion, pero esto esta mal, porque lo que se busca es que el alumno no tenga una inscripción por prioridad en la misma transaccion.

Fijate si creando un indice por esos campos, se optimiza la consulta.

CREATE INDEX id_sga_insc_cursada_alumno_nrotrans_tipo ON sga_insc_cursada (alumno, nro_transaccion, tipo);

Y el otro cambio, es en la query cambiar la vista vw_actividades_plan por las tablas sga_elementos, sga_elementos_revision y sga_elementos_plan.

  1. Cambiar:
		vw_actividades_plan.codigo 		AS actividad_codigo,
			vw_actividades_plan.nombre		AS actividad_nombre,
			COALESCE('(' || vw_actividades_plan.codigo || ') ', '') || vw_actividades_plan.nombre AS actividad_descr,

Por:

		sga_elementos.codigo 		AS actividad_codigo,
			sga_elementos_plan.nombre		AS actividad_nombre,
			COALESCE('(' || sga_elementos.codigo || ') ', '') || sga_elementos_plan.nombre AS actividad_descr,

  1. Cambiar:
	JOIN	vw_actividades_plan ON vw_actividades_plan.plan_version = sga_insc_cursada_log.plan_version            
                                                                AND vw_actividades_plan.elemento		= sga_comisiones.elemento

Por:

	JOIN sga_elementos ON sga_elementos.elemento = sga_comisiones.elemento
		JOIN sga_elementos_revision ON sga_elementos_revision.elemento = sga_elementos.elemento
		JOIN sga_elementos_plan ON sga_elementos_plan.elemento_revision = sga_elementos_revision.elemento_revision AND sga_elementos_plan.plan_version = sga_insc_cursada_log.plan_version