-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- TRIGGER ftdb_sga_insc_cursada_instancias -- BEFORE DELETE -- Tabla: sga_insc_cursada_instancias -- Version 3.0.0 -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- DROP FUNCTION ftdb_sga_insc_cursada_instancias(); CREATE OR REPLACE FUNCTION ftdb_sga_insc_cursada_instancias() RETURNS TRIGGER AS $BODY$ DECLARE _evaluacion integer; DECLARE _cursada smallint; DECLARE _alumno integer; DECLARE _promocion smallint; BEGIN -- Instancias: 1-Cursadas / 2-Promocion -- Recupero la evaluacion automatica de la comision. SELECT sga_insc_cursada.alumno, sga_evaluaciones.evaluacion INTO _alumno, _evaluacion FROM sga_insc_cursada, sga_comisiones, sga_evaluaciones, sga_evaluaciones_tipos WHERE sga_insc_cursada.inscripcion = OLD.inscripcion AND sga_comisiones.comision = sga_insc_cursada.comision AND sga_evaluaciones.entidad = sga_comisiones.entidad AND sga_evaluaciones_tipos.evaluacion_tipo = sga_evaluaciones.evaluacion_tipo AND sga_evaluaciones_tipos.automatica = 'S'; -- Generación Automática IF _evaluacion IS NOT NULL THEN -- Verifico si tiene registro en el detalle de las evaluaciones y si esta inscripto a otra instancia SELECT instancia_cursada, instancia_promocion INTO _cursada, _promocion FROM sga_eval_detalle_cursadas WHERE sga_eval_detalle_cursadas.evaluacion = _evaluacion AND sga_eval_detalle_cursadas.alumno = _alumno; -- Borro el registro del detalle de la evaluacion automática. -- Instancas: 1-Regular / 2-Promocion IF (_cursada IS NULL AND _promocion IS NULL) OR (OLD.instancia = 1 AND _promocion = 0) OR (OLD.instancia = 2 AND _cursada = 0) THEN DELETE FROM sga_eval_detalle_cursadas WHERE evaluacion = _evaluacion AND alumno = _alumno; END IF; -- Cursadas IF OLD.instancia = 1 THEN UPDATE sga_eval_detalle_cursadas SET instancia_cursada = 0, nota_cursada = NULL, resultado_cursada = NULL WHERE evaluacion = _evaluacion AND alumno = _alumno; END IF; -- Promociones IF OLD.instancia = 2 THEN UPDATE sga_eval_detalle_cursadas SET instancia_promocion = 0, nota_promocion = NULL, resultado_promocion = NULL WHERE evaluacion = _evaluacion AND alumno = _alumno; END IF; END IF; -- evaluacion. RETURN OLD; END; $BODY$ LANGUAGE plpgsql; -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- Trigger de DELETE sobre sga_insc_cursada_instancias -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- DROP TRIGGER tdb_sga_insc_cursada_instancias ON sga_insc_cursada_instancias RESTRICT; CREATE TRIGGER tdb_sga_insc_cursada_instancias BEFORE DELETE ON sga_insc_cursada_instancias FOR EACH ROW EXECUTE PROCEDURE ftdb_sga_insc_cursada_instancias();