diff --git a/supabase/migrations/20260326220813_Rules_seriacion.sql b/supabase/migrations/20260326220813_Rules_seriacion.sql new file mode 100644 index 0000000..3e31c35 --- /dev/null +++ b/supabase/migrations/20260326220813_Rules_seriacion.sql @@ -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(); + +