Operación para cambiar fecha de exámenes históricos

En Guarani2 disponemos ya de una personalización que hace lo que voy a exponer, intento averiguar la mejor manera de implementar algo parecido en Guarani3.

Por cuestiones de migración de datos, se necesita tener la capacidad de modificar la fecha de examen de aprobación de un examen que le figura/n a un/os alumno/s.

Dicho cambio en Guarani2 consiste en modificar el campo fecha_examen de la tabla sga_detalle_acta, y permitir hacerlo en actas cerradas desactivando previamente (temporalmente) los triggers que lo evitan.

Ahora bien, en Guarani3 veo que ya hay una operación que permite cambiar, entre otras cosas, la fecha de una mesa de examen (exámenes>mesas de examen>modificar mesas de examen) y entiendo, se podría en ese mismo momento actualizar la fecha de examen del detalle del acta por medio de un trigger, sin necesidad de tocar la operación (php/toba).

¿Ven algún inconveniente en resolverlo por medio de un trigger de update?
¿El trigger puede ser afectado por las actualizaciones?

Lo que sí, una mínima personalización quizás se deberá hacer para verificar que las actas que se quieran actualizar sean anteriores a 2012 (2012 en adelante no corresponde).

Si no fui claro pregunten lo que crean que haga falta. Muchas Gracias.-

Ahora bien, en Guarani3 veo que ya hay una operación que permite cambiar, entre otras cosas, la fecha de una mesa de examen (exámenes>mesas de examen>modificar mesas de examen) y entiendo, se podría en ese mismo momento actualizar la fecha de examen del detalle del acta por medio de un trigger, sin necesidad de tocar la operación (php/toba).
Si, podrias tener un trigger personalizado en la tabla [b]sga_llamados_mesa[/b] que en el caso que se cambie la fecha cambie esta fecha en los alumnos de las actas que ese llamado podria tener. Acta normal y rectificativas (sga_actas_detalle.fecha). Esto solo serviría si es que en el acta de examen a todos los alumnos registran siempre la misma fecha de la mesa de examen, es decir que no tienen mesas de examen donde el docente tome el examen en varios dias. Para este caso el nombre del trigger personalizado debería ser: tua_sga_llamados_mesa_ y que llame a una funcion con el mismo nombre ftua_sga_llamados_mesa_. Aqui es donde verificaras si se esta cambiando la fecha de la mesa y en tal caso verificar si hay actas de examen cerradas y si lo hay actualizar esa fecha.
¿Ven algún inconveniente en resolverlo por medio de un trigger de update?
Creeria que no. Si lo que tenes que hacer es desactivar el trigger de la tabla sga_actas_detalle (Trigger [b]tub_sga_actas_detalle[/b]) antes de la actualizacion y activarlo luego de la actualizacion, ya que aqui se controla que no se hagan cambios en el acta entre ellos la fecha si el acta esta cerrada.
¿El trigger puede ser afectado por las actualizaciones?
Este trigger se ejecutarà siempre que realices algun update sobre la tabla sga_llamados_mesa, y solo tendrá efecto cuando cambies la fecha del examen y en el caso de que tengas acta de examen creada y este cerrada.

Si necesitas que revisemos la personalizacion ingresa una solicitud y envianos el trigger y lo vemos.
Saludos.

¿El trigger puede ser afectado por las actualizaciones?

En realidad me refería a futuras actualizaciones del sistema, cambios en el modelo de la base de datos.

De cualquier manera se agradecen todos los tips y en cuanto tenga el trigger lo comparto por este mismo medio para cerrar el hilo.

No se veria afectado porque vas a crear el trigger y la funcion asociada al trigger con un nombre que no se va a pisar con ninguno que nosotros vayamos a crear en algun momento porque tendra como posfijo el nombre o sigla de tu institución.
La unica forma que podria verse afectado es si borramos la tabla, pero esto no lo hacemos ya que si debemos hacer alguna modificacion a la tabla lo hacemos con el comando “alter table”.

Recién terminé de escribirlo…


CREATE OR REPLACE FUNCTION negocio_unlam.ftua_sga_llamados_mesa_unlam() RETURNS trigger LANGUAGE plpgsql AS $function$
BEGIN

  -- si editamos la fecha de la mesa
  IF (NEW.fecha <> OLD.fecha AND DATE_PART('YEAR', OLD.fecha)<2012) THEN

    ALTER TABLE negocio.sga_actas_detalle DISABLE TRIGGER tub_sga_actas_detalle; 

    -- actualizamos la fecha del examen
    UPDATE negocio.sga_actas_detalle ad
       SET fecha = NEW.fecha
      FROM negocio.sga_actas a 
     WHERE a.id_acta = ad.id_acta 
       AND a.llamado_mesa = NEW.llamado_mesa
       AND ad.fecha = OLD.fecha;

    ALTER TABLE negocio.sga_actas_detalle ENABLE TRIGGER tub_sga_actas_detalle; 

  END IF;     
     
  RETURN NEW;

END;
$function$;

CREATE TRIGGER tua_sga_llamados_mesa_unlam AFTER UPDATE ON negocio.sga_llamados_mesa FOR EACH ROW EXECUTE PROCEDURE negocio_unlam.ftua_sga_llamados_mesa_unlam();

Editado para hacer unos pequeños FIX, cambié:

  • YEAR(…) por DATE_PART(‘YEAR’, …)
  • “SET ad.fecha = NEW.fecha” por “SET fecha = NEW.fecha”

No hice comprobaciones de estado porque si no está cerrada no actualizará nada (la junta no traerá registros)…

Y no validé que el origen sea ‘E’, ni que sea ‘R’ de una acta original cuyo origen sea ‘E’ porque las actas de promoción (origen ‘P’) no joinean con llamado…

Si esta bien.
Eso actualizara todas las actas de examen que haya en esa mesa y llamado. Si el acta original tuviera una o mas actas rectificativas, tambien estas se van a actualizar… Esta bien?

Buenas tardes a todos, tenemos un problema similar, utilizamos guarani 3.20.0 y por alguna razon se creo e imprimió y se cerro un acta de examen final con fecha 13/06/202
no sabemos como pudo pasar ya que esta dentro de un calendario académico.
el encabezado lo modificamos y se imprimió nuevamente pero el dato del alumno queda con esa fecha en la historia académica.
como puedo solucionarlo?
saludos Esteban

El paso correcto es realizar una rectificativa del acta de examen y cambiar la fecha del examen en el alumno.
Sino es actualizar ese dato por la base en el acta.

ok gracias alejandro, vi que en sga_acta_detalle esta el dato a modificar pero tiene un trigger, me podrias indicar como hacerlo en la tabla
saludos Esteban

Carga una solicitud y te indicamos por alli.

continua via gds 65265