Proyecto

General

Perfil

Bug #378 » script actualizar IA notify_update_status.sql

Script para actualizar la función que manda a ejecutar IA - Aracely Sánchez, 2024-11-29 16:05

 
drop function if exists notify_update_status() cascade;

CREATE FUNCTION public.notify_update_status()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
DECLARE
submodule_exists BOOLEAN;
userprofile_exists BOOLEAN;
notification_payload TEXT;
BEGIN
-- Comprobar si IdModule = 1
IF NEW."IdModule" <> 1 THEN
RAISE NOTICE 'IdModule no es 1';
RETURN NEW;
END IF;

-- Comprobar si el status ha cambiado a 4
IF NEW."Status" <> 4 OR OLD."Status" = 4 THEN
RAISE NOTICE 'El status de la evaluacion no ha cambiado a 4';
RETURN NEW;
END IF;

-- Comprobar si existe un registro en Company_Submodules con IdAccount = IdCompany y IdSubmodule = 13
SELECT EXISTS(SELECT 1
FROM "Company_Submodules"
WHERE "IdCompany" = NEW."IdAccount"
AND "IdSubmodule" = 13)
INTO submodule_exists;

IF NOT submodule_exists THEN
RAISE NOTICE 'No se encontró el registro en Company_Submodules con IdAccount = % y IdSubmodule = 13', NEW."IdAccount";
RETURN NEW;
END IF;

-- Comprobar si existe un registro en UserProfile con IdUser y TI_Requerido = true
SELECT EXISTS(SELECT 1
FROM "UserProfile" up
JOIN "AMPuestos" p on p."Id" = up."jobProfile"
JOIN "AMSRelations" r on p."Id" = r."idPuesto"
WHERE up."id" = NEW."IdUser"
AND up."TI_Requerido" = true
AND r."idSubmodulo" = 13)
INTO userprofile_exists;

IF NOT userprofile_exists THEN
RAISE NOTICE 'No se encontró el registro en UserProfile con IdUser = % y TI_Requerido = true', NEW."IdUser";
RETURN NEW;
END IF;

-- Construir la carga útil para la notificación
notification_payload :=
'{"Id": ' || NEW."Id"::text || ', "IdAccount": ' || NEW."IdAccount"::text ||
',' ||
' "IdUser": ' || NEW."IdUser"::text ||
'}';
PERFORM pg_notify('status_updated', notification_payload);

RETURN NEW;
END;
$BODY$;

ALTER FUNCTION public.notify_update_status()
OWNER TO "MASV";


create trigger update_status_trigger
after update
on "TST_VLTNS"
for each row
execute function notify_update_status();
(5-5/5)