Merge pull request 'Que se valide que al cambiar de ciclo un prerrequisito no quede inválida #79' (#85) from issue/79-que-se-valide-que-al-cambiar-de-ciclo-un-prerrequi into main
Deploy Function / deploy (push) Successful in 32s
Deploy Migrations to Production / deploy (push) Successful in 12s
Update database types / deploy (push) Successful in 26s

Reviewed-on: AlexRG/genesis-2#85
This commit was merged in pull request #85.
This commit is contained in:
2026-03-26 22:11:37 +00:00
@@ -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();