Se divide en dos migraciones para manejar el orden
This commit is contained in:
@@ -1,10 +1,8 @@
|
|||||||
|
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION public.suma_porcentajes(jsonb)
|
CREATE OR REPLACE FUNCTION public.suma_porcentajes(jsonb)
|
||||||
RETURNS numeric
|
RETURNS numeric
|
||||||
LANGUAGE plpgsql
|
LANGUAGE plpgsql
|
||||||
IMMUTABLE
|
IMMUTABLE
|
||||||
AS $function$
|
AS $$
|
||||||
declare
|
declare
|
||||||
total numeric;
|
total numeric;
|
||||||
begin
|
begin
|
||||||
@@ -14,65 +12,4 @@ begin
|
|||||||
|
|
||||||
return total;
|
return total;
|
||||||
end;
|
end;
|
||||||
$function$
|
$$;
|
||||||
;
|
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION public.validar_prerrequisito_asignatura()
|
|
||||||
RETURNS trigger
|
|
||||||
LANGUAGE plpgsql
|
|
||||||
AS $function$
|
|
||||||
declare
|
|
||||||
v_plan uuid;
|
|
||||||
v_ciclo integer;
|
|
||||||
begin
|
|
||||||
|
|
||||||
if new.prerrequisito_asignatura_id is null then
|
|
||||||
return new;
|
|
||||||
end if;
|
|
||||||
|
|
||||||
select
|
|
||||||
plan_estudio_id,
|
|
||||||
numero_ciclo
|
|
||||||
into
|
|
||||||
v_plan,
|
|
||||||
v_ciclo
|
|
||||||
from public.asignaturas
|
|
||||||
where id = new.prerrequisito_asignatura_id;
|
|
||||||
|
|
||||||
if not found then
|
|
||||||
raise exception
|
|
||||||
'La asignatura prerrequisito no existe';
|
|
||||||
end if;
|
|
||||||
|
|
||||||
if v_plan <> new.plan_estudio_id then
|
|
||||||
raise exception
|
|
||||||
'El prerrequisito debe pertenecer al mismo plan de estudio';
|
|
||||||
end if;
|
|
||||||
|
|
||||||
if new.numero_ciclo is null then
|
|
||||||
raise exception
|
|
||||||
'La asignatura debe tener numero_ciclo definido';
|
|
||||||
end if;
|
|
||||||
|
|
||||||
if v_ciclo is null then
|
|
||||||
raise exception
|
|
||||||
'El prerrequisito debe tener numero_ciclo definido';
|
|
||||||
end if;
|
|
||||||
|
|
||||||
if v_ciclo >= new.numero_ciclo then
|
|
||||||
raise exception
|
|
||||||
'El prerrequisito debe pertenecer a un ciclo menor';
|
|
||||||
end if;
|
|
||||||
|
|
||||||
return new;
|
|
||||||
|
|
||||||
end;
|
|
||||||
$function$
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
alter table "public"."asignaturas" add constraint "asignaturas_criterios_porcentaje_max_100" CHECK ((public.suma_porcentajes(criterios_de_evaluacion) <= (100)::numeric)) not valid;
|
|
||||||
|
|
||||||
alter table "public"."asignaturas" validate constraint "asignaturas_criterios_porcentaje_max_100";
|
|
||||||
|
|
||||||
set check_function_bodies = off;
|
|
||||||
Reference in New Issue
Block a user