From 6227c05e9d510e63fff5a9ec31342423a2444781 Mon Sep 17 00:00:00 2001 From: "Roberto.silva" Date: Thu, 26 Mar 2026 16:10:07 -0600 Subject: [PATCH] =?UTF-8?q?Que=20se=20valide=20que=20al=20cambiar=20de=20c?= =?UTF-8?q?iclo=20un=20prerrequisito=20no=20quede=20inv=C3=A1lida=20fix=20?= =?UTF-8?q?#79?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20260326220813_Rules_seriacion.sql | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 supabase/migrations/20260326220813_Rules_seriacion.sql 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(); + + -- 2.52.0