Que el alu no exista en otra mesa de exa de la act sin estar en acta V3.20

Hola!
Estamos teniendo problemas con ese Control:
Que el alumno no exista en otra mesa de examen de la actividad sin estar en acta de examen cerrada .
Parece que cuando el acta fue anulada o rectificada , la toma como que no esta cerrada y si el alumno estuvo inscripto no lo deja inscribir en un siguiente llamado/turno de la misma actividad, puede ser posible?
No fui a la codificación del control, pero es como que solo verifica que si esta inscripto y el estado del acta es diferente a cerrrada, no lo deja avanzar, les paso?
Para los casos que son de migración y las actas estan anuladas eliminamos las inscripciones pero para los casos de G3, pasamos el control a mensaje durante el momento de la nueva inscripción.
Este control para los casos de alumnos inscriptos y que aun no han sido pasadas las notas y /o que no se cerro el acta funciona bien y lo necesitamos.

MUCHAS GRACIAS

Hola Pilar,

Está teniendo en cuenta sólo actas de tipo normal (no rectificativas) en estado abierta (no cerrada ni anulada):

SELECT		sga_llamados_mesa.fecha
FROM		sga_eval_detalle_examenes
			JOIN sga_alumnos ON sga_eval_detalle_examenes.alumno = sga_alumnos.alumno 
			JOIN sga_evaluaciones ON sga_eval_detalle_examenes.evaluacion = sga_evaluaciones.evaluacion
			JOIN sga_llamados_mesa ON sga_evaluaciones.entidad = sga_llamados_mesa.entidad
			JOIN sga_mesas_examen ON sga_llamados_mesa.mesa_examen = sga_mesas_examen.mesa_examen
			LEFT JOIN sga_actas ON sga_eval_detalle_examenes.id_acta = sga_actas.id_acta			
WHERE		sga_mesas_examen.elemento = <identificador de la actividad> AND
			sga_alumnos.persona = (SELECT alumnos.persona FROM sga_alumnos as alumnos WHERE alumnos.alumno = <identificador del alumno>) AND
			-- Se encuentra en otro llamado de la misma u otra mesa de examen.
			(<identificador del llamado-mesa> IS NULL OR (<identificador del llamado-mesa> IS NOT NULL AND sga_llamados_mesa.llamado_mesa <> <identificador del llamado-mesa>)) AND
			-- Si el alumno está en un acta abierta esta no puede ser rectificativa.
			(sga_eval_detalle_examenes.id_acta IS NULL OR (sga_eval_detalle_examenes.id_acta IS NOT NULL AND sga_actas.estado = 'A' AND sga_actas.tipo_acta <> 'R')) 
ORDER BY	sga_llamados_mesa.fecha
LIMIT		1

Pueden probar cuál de las condiciones es la que está fallando?

Saludos, Florencia.

Hola Florencia
Hice la consulta

SELECT		sga_llamados_mesa.fecha
FROM		sga_eval_detalle_examenes
			JOIN sga_alumnos ON sga_eval_detalle_examenes.alumno = sga_alumnos.alumno
			JOIN sga_evaluaciones ON sga_eval_detalle_examenes.evaluacion = sga_evaluaciones.evaluacion
			JOIN sga_llamados_mesa ON sga_evaluaciones.entidad = sga_llamados_mesa.entidad
			JOIN sga_mesas_examen ON sga_llamados_mesa.mesa_examen = sga_mesas_examen.mesa_examen
			LEFT JOIN sga_actas ON sga_eval_detalle_examenes.id_acta = sga_actas.id_acta			
WHERE		sga_mesas_examen.elemento = 2890 AND
			sga_alumnos.persona = (SELECT alumnos.persona FROM sga_alumnos as alumnos WHERE alumnos.alumno = 52157) AND
			 
		(sga_llamados_mesa.llamado_mesa IS NULL OR (sga_llamados_mesa.llamado_mesa IS NOT NULL 
		AND sga_llamados_mesa.llamado_mesa <> 336292)) AND
		
			(sga_eval_detalle_examenes.id_acta IS NULL OR 
			(sga_eval_detalle_examenes.id_acta IS NOT NULL AND sga_actas.estado = 'A' AND sga_actas.tipo_acta <> 'R'))
ORDER BY	sga_llamados_mesa.fecha
LIMIT		1

Donde 336292 es el id del llamado mesa que se quiere inscribir.
el resultado es “2022-12-12”
Cuando el alumno quiere inscribirse por autogestion el sistema le tira:
“Ya estás inscripto en la mesa de examen del 12/12/2022 en la misma actividad”
Si voy al acta de examen de esa actividad de esa fecha, el alumno esta inscripto y quedo Ausente.
el acta esta cerrada… tambien esta rectificada pero con otros dos alumnos.
si miro sga_insc_examen:
460254 52157 231266 262 4 “2022-11-23 00:46:29.620042-03” “N” 1062981 “N” 2 “A”
si elimino esa inscripcion, el sistema la deja inscribirse. Obviamente eso no queremos hacer y en ese momento levantamos el control para que se inscriba y lo volvemos a poner.
Hasta ahora coincide que el acta de esa actividad de otro llamado/turno falla cuando el acta esta anulada o rectificada, la verdad que no he tenido en cuenta cual es la nota , si son todos casos de ausentes…
Quedo a la espera.
Saludos!

Pilar,

Si en lugar de ‘SELECT sga_llamados_mesa.fecha’ ponés ‘SELECT sga_eval_detalle_examenes.id_acta’ el acta que devuelve es la cerrada?

Saludos, Florencia.

Florencia, si hago el cambio tal cual vos, me devuelve null…
Cambie y puse el *
y me devuelve
id acta null, pero todo lo demas coincide con el llamado mesa, transacción de la inscripción donde quedo ausente.

Florencia esta parte del WHERE
" …sga_eval_detalle_examenes.id_acta IS NULL " OR , estaria bien?? para cual caso correcto seria?

Pilar,

Sería para el caso en que el alumno está inscripto pero aún no incluido en un acta…

Saludos, Florencia.

ok, pero estaria mal para este caso, porque para este caso coincide, y no seria correcto, ya que el alumno esta dentro del acta (Ausente) pero el sistema no cargo el id_acta…
Que hacemos??

Pilar,

Cuando el acta se cierra se elimina el registro en ‘sga_eval_detalle_examenes’ y se inserta en ‘sga_actas_detalle’. El resultado que estás obteniendo con la consulta SQL no corresponde a un acta cerrada, tiene que ser otra inscripción…

Saludos, Florencia.

Si exactamente lo que vos decis, pero entonces porque devuelve una inscripción sin id_acta siendo que la inscripción se realizo en el periodo de ese turno para esa fecha y ya esta cerrado dicho turno, no hay ninguna tupla en sea_eval_detalle… algo esta mal??? yo veo que la inscripción corresponde a la mesa en la que se le cargo el ausente ya que si la elimino no salta el control

Corre esta consulta para ese alumno y actividad. Fijate si devuelve el registro donde se encuentra en otra mesa de esa actividad. Si para esa mesa y llamado el alumno se encuentra en un acta cerrada.

SELECT  (select count(1) 
		 from sga_actas as a join sga_actas_detalle as ad ON ad.id_acta = a.id_acta AND ad.alumno = d.alumno
		where a.origen = 'E' AND a.estado = 'C' AND a.llamado_mesa = me.llamado_mesa
		) as existe_en_acta_cerrada,
  d.id_acta, 
 CASE WHEN d.id_acta is not null then (select tipo_acta from sga_actas where id_acta = d.id_acta) else '' END as tipo_acta_actual,
*
FROM vw_mesas_examen as me
JOIN sga_evaluaciones as e ON e.entidad = me.llamado_mesa_entidad
JOIN sga_eval_detalle_examenes as d ON d.evaluacion = e.evaluacion
JOIN vw_alumnos as alu ON alu.alumno = d.alumno
WHERE me.anio_academico = 2023
  AND me.mesa_examen_elemento = <ID DE ACTIVIDAD>
  AND alu.alumno =  <alumno>
ORDER BY me.mesa_examen_fecha  

Hola Alejandro! Como estas??
Recien puede probar…
me devuelve una inscripcion, que es la del acta ausente según interpreto yo… aca te paso el resultado sin los datos sencibles…

1 |NULL| |2022 |1441| 6887| Dicembre Grado Arte |2022-12-12 |2022-12-16 |2022-11-08 |2022-11-08 |2022-12-16 |2022-12-12 |1 |4721 |6888 |Lunes 12 Diciembre - Grado Arte |2022-12-12 |2022-12-12| 231266 |386981 |A |NULL |2022-12-12 |18:00:00-03:00 |20:00:00-03:00 |130932 |Regulares/Libres |2890 |Realización 1 |NULL |1 |386980 |S |258507 |Regulares/Libres |Evaluación automática para generación de acta de examen |386981 |7 |N |N |2022-11-08 |NULL NULL |NULL |NULL |A |M |258507 |52157 |4 |NULL |2022-12-12 |40 |NULL |U |NULL |S |2022-12-13 12:05:26.401176-03 |262 |XXXXX| 52157 |EST-3005 |42525 |APELLIDO,NOMBRES |DNI XXXXX|XXXXXX |88| C0005 |Realización Integral en Artes Audiovisuales |200 |Grado| 137 2012 |2012 |262 |2 |2012 Versión 2 |1 |Sede Tandil |P |Presencial |A |Activo |S |NULL

Hay otros alumnos en esa tabla para la misma evaluacion?

select * from sga_eval_detalle_examenes where evaluacion = ...

Como indicó Florencia, no deberia estar el alumno en esa tabla si fue incluido en un acta y ya esta cerrada.

Si hay 10 en total, de los cuales uno es este alumno

Y los 9 restantes, estan en el acta de esa mesa de examen? Que resultados tienen?
¿Es un acta migrada? ¿Es un acta cerrada desde G3?

Hay otros alumnos de otras actas cerradas en esta situacion?

SELECT *
FROM sga_eval_detalle_examenes as d
WHERE id_acta IS NULL 
AND EXISTS (SELECT 1 FROM sga_actas as a JOIN sga_actas_detalle as da ON da.id_acta = a.id_acta AND da.id_alumno = d.alumno AND a.estado = 'C' AND a.evaluacion = d.evaluacion)
ORDER BY d.evaluacion, d.alumno

Alejandro…
Recorda que la mesa de examen se realizo el 12-12-2022 pero se rectifico, entonces hay dos alumnos que aparecen en la rectificativa y los demas no, coincide que los que no figuran en la rectificativa son los que aparecen en la siguiente consulta:
select * from sga_eval_detalle_examenes where evaluacion=258507 .
El acta es pura de G3 ya que esa Facultad se migro el 31/10/2022 y el turno es diciembre 2022.
Y la respuesta a la ultima consulta tuya
SELECT *
FROM sga_eval_detalle_examenes as d
WHERE id_acta IS NULL
AND EXISTS (SELECT 1 FROM sga_actas as a JOIN sga_actas_detalle as da ON da.id_acta = a.id_acta AND da.id_alumno = d.alumno AND a.estado = ‘C’ AND a.evaluacion = d.evaluacion)
ORDER BY d.evaluacion, d.alumno

Coincide con la anterior… esa misma evaluación y los 10 alumnos que no fueron incluido en el acta rectificativa.
Es como que deja "en espera " (por mas que el acta rectificada y el acta original esten cerradas), a esos alumnos no?

No se si habias comentado esto de la rectificativa en un mensaje anterior.
Vamos a verificar este control que planteas cuando hay rectificativas, ya que no debería considerar a estos alumnos.

Ahora si te consulto respecto de la recitificativa:

  • ¿Este acta rectificativa esta abierta o cerrada?
  • El parametro exa_multiples_actas_examen como lo tienen configurado?
  • Puede ser que el usuario selecciono a todos los alumnos del acta original aun cuando solo quería rectificar algunos alumnos y no esos 10?

Igualmente el comportamiento es que al rectificar un acta y seleccionar alumnos del acta original, todos estos alumnos quedan asociados al acta rectificativa, con lo cual no deberian tener el dato “id_acta” en nulo. Por algun motivo esos alumnos quedaron en esa tabla. Cuando se cerró el acta original debieron eliminarse esos registros y si luego al rectificar ese acta se seleccionaron esos alumnos, entonces estos deberian tener el dato del id de acta rectificativa en el campo “id_acta”.
El control del requisito esta bien porque no considera los alumnos que estén en actas rectificativas.

La solución es borrar esos alumnos de esa tabla temporal, pero antes buscar la casusa de porque estan alli, cuando fueron agregados, que usuario los agrego, si fue en el mismo momento en que se creó el acta rectificativa. ¿Podras verificar eso y nos avisas?
Buscalo en las tablas de auditoria.

Crea una solicitud y lo seguimos por alli.

¿Este acta rectificativa esta abierta o cerrada?
Cerrada
El parametro exa_multiples_actas_examen como lo tienen configurado
En total hay migradas 7 Facultades de las cuales 5, (incluida la que pertenece este alumno) el valor es: [b]Solo se permite generar un acta de examen[/b] Hay dos Facultades que el valor es [b]se permite generar mas de un acta de examen[/b]
Puede ser que el usuario selecciono a todos los alumnos del acta original aun cuando solo quería rectificar algunos alumnos y no esos 10?
Consulte y me dijo que solo selecciono a los alumnos involucrados, ya que lo que paso fue un intercambio de notas. Si, te entiendo perfecto todo lo que aclaras, pero esta pasando tambien con actas anuladas, y no me parece bien tener que borrar cada vez que sucede ya que hay algo mal en el comportamiento no?

El caso que tenes no esta bien, esos alumnos no deberían estar en esa tabla. Hay que borrarlos. Y detectar cuando fueron agregados a esa tabla. Por eso te decia de que vieras los logs y entender en que momento fueron agregados, si fue cuando se creó el acta rectificativa o antes, cuando se creó el acta original de la mesa. Ademas si estan en el acta original ya cerrada, quiere decir que tenian asignado el id de acta, que luego fue borrado porque por lo que comentas no tienen valor en ese campo ahora.

Si, te entiendo perfecto todo lo que aclaras, pero esta pasando tambien con actas anuladas, y no me parece bien tener que borrar cada vez que sucede ya que hay algo mal en el comportamiento no?
Con actas anuladas es diferente. Solo permitimos anular actas abiertas, eso significa que al anular los alumnos siguen existiendo en la mesa y se les debe dar una solucion. Si en realidad la mesa no se tomó, entonces hay que rechazar las inscripciones o suspender la mesa.

Mientras los alumnos sigan quedando en la mesa, se espera que se les resuelva la situación, es decir registrar la nota del examen o el ausente si no se presentó en el acta (en el caso que se haya tomado el examen). Ahora, si el caso es que la mesa no se tomó por el motivo que fuere, hay que suspender esa mesa mediante la operacion Modificar Mesas de Examen Masivamente
Ver este foro por un tema similar.

Bien Alejandro.
Entonces para actas Anuladas, hay que advertir que cuando se anulan actas y las mesas son suspendidas deben también hacerlo por sistema, eso en G2 no lo hacían.
Y cuando pueda ver el logs y analizar en que momento se insertaron esos alumnos en la tabla que no corresponde, te escribo.
Yo creo que lo mas probable sea cuando se genero el acta rectificativa ya que para los casos en que se inscribieron a mesas anteriores y el acta no fue rectificada no hubo problemas…
Muchas gracias!
Saludos!
Pilar