URGENTE - Error al imprimir actas de Examen guarani 3.16.1

Buen dia, tenemos un problema al querer imprimir actas sale un mensaje que no se puede imprimir porque hay alumnos pendientes.
la situacion es la siguiente Los inscriptos a examen los ingresamos a todos como pendientes para verificar que estuvieran en condiciones de rendir.
Luego, si no estan en condiciones se lo rechazó a alguno o se los deja ausente .
Llega a generarla pero cuando tiene que imprimir dice que tiene alumnos en estado pendiente. Y no es así.
si en los siguientes llamados hay alumnos pendientes, es como que no esta tomando solo ese llamado
adjunto imagen en la segunda se ve que hay un pendiente en el llamado 2

Que puedo hacer?


error.png

error.png

Reporte de Inscripciones a ExAmenes.png

Reporte de Inscripciones a ExAmenes.png

Hola Esteban,

Puede ser que las capturas corresponden a actividades diferentes? El acta es de “Toxicología y Química Legal” y el reporte es de “Farmacología”.

Saludos, Florencia.

si pero es el mismo caso

Esteban,

El control que se hace está en el método ‘validar_inscripciones_pendientes’ de la clase ‘cn_ent_cerrar_acta_examen’. Fijate que invoca a 'toba::consulta_php(‘co_inscripciones_examenes’)->get_cant_inscripciones_para_un_llamado_mesa($llamado_mesa, $filtro); '. Deberías ver en los logs la consulta SQL:

SELECT	count(sga_insc_examen.inscripcion) as cant_inscripciones
FROM	sga_insc_examen
		JOIN	sga_llamados_mesa ON (sga_llamados_mesa.llamado_mesa = sga_insc_examen.llamado_mesa)
WHERE	sga_insc_examen.llamado_mesa = <ID del llamado-mesa> AND
		sga_insc_examen.estado = 'P'

Podrían probar de ejecutarla para ver cuál es el alumno que tiene problemas y por qué?

Saludos, Florencia.
2

de aca seco el id llamado mesa y luego use tu query como resultado me dio 0
/*********************/
SELECT sga_actas.id_acta,
sga_actas.nro_acta,
sga_actas.origen,
sga_actas.estado,
sga_actas_estados.nombre AS estado_descr,
sga_actas.tipo_acta,
sga_actas.version_impresa,
sga_actas.renglones_folio,
sga_actas.observaciones,
sga_actas.acta_referencia,
rectificada.nro_acta as rectifica_a,
sga_actas.version,
sga_actas.evaluacion,
sga_actas.llamado_mesa,
sga_actas.cerrada_por_docente,
vw_mesas_examen.mesa_examen,
vw_mesas_examen.anio_academico,
vw_mesas_examen.llamado_mesa_entidad,
vw_mesas_examen.mesa_examen_fecha AS fecha,
vw_mesas_examen.mesa_examen_elemento AS elemento,
sga_ubicaciones.nombre AS ubicacion_nombre,
sga_elementos.codigo AS codigo_actividad,
sga_elementos.nombre AS nombre_actividad,
vw_mesas_examen.mesa_examen_nombre AS mesa_nombre,
vw_mesas_examen.turno_examen_nombre AS turno_nombre,
vw_mesas_examen.llamado_nombre AS llamado_nombre,
f_libros_acta(sga_actas.id_acta, 2) AS libro_nombre,
‘(’ || sga_elementos.codigo || ') ’ || sga_elementos.nombre AS cod_nombre_actividad,
CASE WHEN sga_actas.tipo_acta = ‘N’ THEN ‘Normal’ WHEN sga_actas.tipo_acta = ‘R’ THEN ‘Rectificativa’ END as tipo_acta_descr,
to_char(vw_mesas_examen.mesa_examen_fecha,‘DD/MM/YYYY’) AS fecha_formato_visual,
CASE
WHEN (SELECT COUNT(1)
FROM sga_actas as sub_sga_actas
WHERE sub_sga_actas.tipo_acta = ‘R’ AND
sub_sga_actas.estado = ‘A’ AND
sub_sga_actas.acta_referencia = sga_actas.id_acta) > 0
THEN 1
ELSE 0
END AS tiene_rectificativas_abiertas,
CASE
WHEN (sga_actas.estado = ‘A’)
THEN
– Alumnos en eval_detalles_examenes con acta no cerrada
( SELECT count(1)
FROM sga_eval_detalle_examenes
WHERE sga_eval_detalle_examenes.id_acta = sga_actas.id_acta
)
WHEN (sga_actas.estado IN (‘C’,‘B’))
THEN
– Alumnos en sga_actas_detalle con acta cerrada
( SELECT COUNT(1)
FROM sga_actas_detalle
WHERE sga_actas_detalle.id_acta = sga_actas.id_acta
)
END AS cant_alumnos,
sga_actas.cerrada_por_docente AS cerrada_por_docente
FROM vw_mesas_examen,
sga_actas
LEFT JOIN sga_actas AS rectificada ON sga_actas.acta_referencia = rectificada.id_acta,
sga_actas_estados,
sga_elementos,
sga_ubicaciones

            WHERE        sga_actas.llamado_mesa = vw_mesas_examen.llamado_mesa
            AND    sga_actas.estado = sga_actas_estados.estado
            AND    vw_mesas_examen.mesa_examen_elemento = sga_elementos.elemento
            AND    vw_mesas_examen.mesa_examen_ubicacion = sga_ubicaciones.ubicacion
             AND sga_actas.id_acta = 43535 
            ORDER BY     sga_actas.nro_acta;

/*********************/
SELECT count(sga_insc_examen.inscripcion) as cant_inscripciones
FROM sga_insc_examen
JOIN sga_llamados_mesa ON (sga_llamados_mesa.llamado_mesa = sga_insc_examen.llamado_mesa)
WHERE sga_insc_examen.llamado_mesa = 42091 AND
sga_insc_examen.estado = ‘P’

Habia un problema en ese control respecto a los alumnos con inscripcion pendiente en la mesa, pero veo que fue resuelto en version 3.16.0 por ticket 22793.

¿Que valor devuelven estas dos consultas?

SELECT   count(1) as cant_inscripciones_pendientes
FROM  sga_actas 
JOIN sga_eval_detalle_examenes as d on d.evaluacion = a.evaluacion
JOIN sga_insc_examen as i ON i.llamado_mesa = a.llamado_mesa 
WHERE   a.id_acta = 43535
i.estado = 'P';

SELECT   count(1) as cant_inscripciones_pendientes
FROM  sga_actas as a
JOIN sga_eval_detalle_examenes as d on d.id_acta = a.id_acta
JOIN sga_evaluaciones as e ON e.evaluacion = d.evaluacion
JOIN sga_llamados_mesa as m ON m.entidad = e.entidad
JOIN sga_insc_examen as i ON i.llamado_mesa = e.llamado_mesa 
WHERE   a.id_acta = 43535
i.estado = 'P';

¿Esta consulta devuelve filas?

SELECT   *
FROM  sga_actas as a
JOIN sga_eval_detalle_examenes as d on d.id_acta = a.id_acta
JOIN sga_evaluaciones as e ON e.evaluacion = d.evaluacion
JOIN sga_llamados_mesa as m ON m.entidad = e.entidad
WHERE   a.id_acta = 43535
AND m.llamado_mesa <> a.llamado_mesa

2

esta es la la salida de la query del acta te adjunto imagen actaerror.png . en las otras esta cuando da el error y la ultima donde se ve que en otro llamado que hay un pendiente, si a ese pendiente lo rechazas o lo aceptas no da el error. es como que esta tomando todos los llamados del turno.
te agrego al final de las query el mensaje en el log de apache

todas las querys dan resultado 0;

SELECT count(sga_insc_examen.inscripcion) as cant_inscripciones
FROM sga_insc_examen
JOIN sga_llamados_mesa ON (sga_llamados_mesa.llamado_mesa = sga_insc_examen.llamado_mesa)
WHERE sga_insc_examen.llamado_mesa = 42091 AND
sga_insc_examen.estado = ‘P’

SELECT count(sga_insc_examen.inscripcion) as cant_inscripciones
FROM sga_insc_examen
JOIN sga_llamados_mesa ON (sga_llamados_mesa.llamado_mesa = sga_insc_examen.llamado_mesa)
WHERE sga_insc_examen.llamado_mesa = 42091 AND
sga_insc_examen.estado = ‘P’

devuelve 0

SELECT count(1) as cant_inscripciones_pendientes
FROM sga_actas as a
JOIN sga_eval_detalle_examenes as d on d.evaluacion = a.evaluacion
JOIN sga_insc_examen as i ON i.llamado_mesa = a.llamado_mesa
WHERE a.id_acta = 43535 and
i.estado = ‘P’;

devuelve 0;

SELECT count(1) as cant_inscripciones_pendientes
FROM sga_actas as a
JOIN sga_eval_detalle_examenes as d on d.id_acta = a.id_acta
JOIN sga_evaluaciones as e ON e.evaluacion = d.evaluacion
JOIN sga_llamados_mesa as m ON m.entidad = e.entidad
JOIN sga_insc_examen as i ON i.llamado_mesa = a.llamado_mesa
WHERE a.id_acta = 43535 and
i.estado = ‘P’;

devuelve 0;

SELECT *
FROM sga_actas as a
JOIN sga_eval_detalle_examenes as d on d.id_acta = a.id_acta
JOIN sga_evaluaciones as e ON e.evaluacion = d.evaluacion
JOIN sga_llamados_mesa as m ON m.entidad = e.entidad
WHERE a.id_acta = 43535
AND m.llamado_mesa <> a.llamado_mesa

/*********************************/

#10 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php(55): toba_solicitud_web->procesar_eventos()
#11 /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/nucleo/toba_nucleo.php(96): toba_solicitud_web->procesar()
#12 /usr/local/proyectos/guarani/www/aplicacion.php(33): toba_nucleo->acceso_web()
#13 {main}
[DEBUG][toba] Mensaje a usuario: No se puede cerrar el acta ya que existen inscripciones en estado pendiente.
[DEBUG][toba] [SECCION] Configurando dependencias para responder al servicio…
[INFO][guarani] PUNTO MONTAJE: se cargó la clase extension_toba/componentes/guarani_pers_ei_filtro.php del punto de montaje personalizacion. El path del mismo es /usr/local/proyectos/guarani/personalizacion/php
[DEBUG][toba] componente(38000483): [ callback ] ‘conf__filtro’
[DEBUG][toba] componente(38000483): Pantalla de servicio: ‘’
[DEBUG][toba] componente(38000483): [ callback ] ‘conf__edicion’


actaerror.png

actaerror.png

Screenshot_2020-08-29 Guarani - Imprimir Actas de Examen(1).png

Screenshot_2020-08-29 Guarani - Imprimir Actas de Examen(1).png

Screenshot_2020-08-29 Guarani - Reporte de Inscripciones a ExAmenes.png

Screenshot_2020-08-29 Guarani - Reporte de Inscripciones a ExAmenes.png

esta es la que esta mal consulta la mesa no el llamado_mesa y es una personalizacion que seguro como decis al principio fue corregida en la version 3.16 y nos quedo mal
el parametro que le pasa a la co esta mal y la co donde deberia buscarla?

function validar_inscripciones_pendientes($mesa_examen) {
    $multiples_actas_examen = guarani::parametros()->get_valor('exa_multiples_actas_examen');

    if ($multiples_actas_examen == comunes::no) {
        $filtro = " sga_insc_examen.estado = '" . inscripcion_examen::estado_pendiente . "'";
        $cant_inscripciones_pendientes = toba::consulta_php('co_inscripciones_examenes')->get_cant_inscripciones_para_llamados_mesa($mesa_examen, $filtro);

        if ($cant_inscripciones_pendientes > 0) {
            $this->set_error('800_inscripciones_pendientes');
        }
    }
}

Hola Esteban,

En su nodo de Colab para la versión 3.16.1 (https://colab.siu.edu.ar/trac/guarani3/browser/nodos/uba-ffyb/gestion/trunk/3.16.1/php/nucleo/examenes/actas/cerrar_acta/cn_ent_cerrar_acta_examen.php) yo veo otro código PHP para ese método y es el correcto:

	function validar_inscripciones_pendientes($llamado_mesa)
	{
		$multiples_actas_examen = guarani::parametros()->get_valor('exa_multiples_actas_examen');

		if ($multiples_actas_examen == comunes::no) {
			$filtro = " sga_insc_examen.estado = '" . inscripcion_examen::estado_pendiente . "'";
			$cant_inscripciones_pendientes = toba::consulta_php('co_inscripciones_examenes')->get_cant_inscripciones_para_un_llamado_mesa($llamado_mesa, $filtro);

			if ($cant_inscripciones_pendientes > 0) {
				$this->set_error('800_inscripciones_pendientes');
			}
		}
	}

Tampoco veo que tengan personalizadas las clases ‘cn_ent_cerrar_acta_examen’ ni ‘co_inscripciones_examenes’. No entiendo a qué personalización te referís.

Saludos, Florencia.

Buen dia Florencia, esto esta en la personalizacion, yo hice los cambios para probar el funcionamiento y resulto bien.
No tengo todavia adquirido el ejercicio de personalizar. ni del concentrador en ese puento comienzo ahora a informarme ya que la persona que realizaba esto ya no esta con nosotros. aprovecho la ocacion para pedirles al “SIU” su apoyo y paciencia.