Que se valide que al cambiar de ciclo un prerrequisito no quede inválida fix #79
This commit is contained in:
@@ -0,0 +1,35 @@
|
|||||||
|
set check_function_bodies = off;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION public.fn_ajustar_seriacion_por_cambio_ciclo()
|
||||||
|
RETURNS trigger
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $function$
|
||||||
|
BEGIN
|
||||||
|
-- 1. Validar materias que DEPENDEN de esta (Hijas)
|
||||||
|
-- Si muevo 'Mate 1' al ciclo 3, y 'Cálculo' está en el ciclo 3,
|
||||||
|
-- la relación se rompe porque el prerrequisito debe ser de un ciclo menor.
|
||||||
|
UPDATE public.asignaturas
|
||||||
|
SET prerrequisito_asignatura_id = NULL
|
||||||
|
WHERE prerrequisito_asignatura_id = NEW.id
|
||||||
|
AND numero_ciclo <= NEW.numero_ciclo;
|
||||||
|
|
||||||
|
-- 2. Validar si la materia que estoy moviendo (la actual)
|
||||||
|
-- ahora rompe la regla con SU PROPIO prerrequisito (Padre)
|
||||||
|
IF NEW.prerrequisito_asignatura_id IS NOT NULL THEN
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT 1 FROM public.asignaturas
|
||||||
|
WHERE id = NEW.prerrequisito_asignatura_id
|
||||||
|
AND numero_ciclo >= NEW.numero_ciclo
|
||||||
|
) THEN
|
||||||
|
NEW.prerrequisito_asignatura_id := NULL;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$function$
|
||||||
|
;
|
||||||
|
|
||||||
|
CREATE TRIGGER trg_limpiar_seriacion_conflictiva BEFORE UPDATE OF numero_ciclo ON public.asignaturas FOR EACH ROW EXECUTE FUNCTION public.fn_ajustar_seriacion_por_cambio_ciclo();
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user