Files
genesis-2/supabase/migrations/20260326220813_Rules_seriacion.sql
T
roberto.silva 6227c05e9d
Deploy Function / deploy (pull_request) Successful in 42s
Deploy Migrations to Production / deploy (pull_request) Successful in 12s
Que se valide que al cambiar de ciclo un prerrequisito no quede inválida fix #79
2026-03-26 16:10:07 -06:00

36 lines
1.2 KiB
PL/PgSQL

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();