USANDO GATILHO FICA MUITO TOSCO RESULTADO:
[code]-- Function: sigi.solicitacao_to_status_solicitacao_5_4_status()
– DROP FUNCTION sigi.solicitacao_to_status_solicitacao_5_4_status();
CREATE OR REPLACE FUNCTION sigi.solicitacao_to_status_solicitacao_5_4_status()
RETURNS trigger AS
$BODY$
BEGIN
IF TG_OP=‘INSERT’ THEN
INSERT INTO sigi.status_solicitacao (stat_nome, stat_fk_solicitacao_id, stat_cod) VALUES (‘CAC’, NEW.soli_pk_id, 1);
ELSE
IF TG_OP=‘UPDATE’ THEN
IF (OLD.soli_pk_id <> NEW.soli_pk_id OR NEW.soli_fk_status_solicitacao_id <> OLD.soli_fk_status_solicitacao_id) THEN
RAISE EXCEPTION ‘Não é permitido alterar campos Id’;
END IF;
IF OLD.soli_status_solicitacao_nome = ‘FINALIZADO’ OR OLD.soli_status_solicitacao_nome = ‘CANCELADO’ THEN
RAISE EXCEPTION ‘SOLICITAÇÃO FINALIZADA OU CANCELADA. Não é permitido alterar solicitações encerradas.’;
END IF;
–
IF OLD.soli_status_solicitacao_nome = NEW.soli_status_solicitacao_nome AND OLD.soli_status_solicitacao_cod = NEW.soli_status_solicitacao_cod THEN
–
IF (select extract(mons from age(now(), (select soli_data_solicitacao from sigi.solicitacao WHERE soli_pk_id = NEW.soli_pk_id)) ) >= 1) THEN
IF (SELECT stat_local FROM sigi.status_solicitacao WHERE stat_fk_solicitacao_id = NEW.soli_pk_id) IS NULL THEN
UPDATE sigi.status_solicitacao SET stat_nome = ‘CANCELADO’, stat_motivo_cancelamento = 'Cancelado por exceder o prazo de 1(um) mês. Local: ’ || stat_nome, stat_cod = 7, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
ELSE
UPDATE sigi.status_solicitacao SET stat_nome = ‘CANCELADO’, stat_motivo_cancelamento = 'Cancelado por exceder o prazo de 1(um) mês. Local: ’ || stat_nome || ': ’ || stat_local, stat_cod = 7, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
END IF;
ELSE
IF NEW.soli_status_solicitacao_cod = 2 THEN
UPDATE sigi.status_solicitacao SET stat_nome = ‘DIVISÃO 1’, stat_local = (SELECT divi_nome FROM sigi.divisoes WHERE NEW.soli_fk_divisoes1_id = divi_pk_id), stat_cod = 2 , stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
END IF;
IF NEW.soli_status_solicitacao_cod = ‘2.1’ THEN
IF NEW.soli_fk_divisoes2_id IS NULL THEN
UPDATE sigi.status_solicitacao SET stat_nome = ‘CAC2’, stat_cod = 3, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
ELSE
UPDATE sigi.status_solicitacao SET stat_nome = ‘DIVISÃO 2’, stat_local = (SELECT divi_nome FROM sigi.divisoes WHERE NEW.soli_fk_divisoes2_id = divi_pk_id), stat_cod = ‘2.1’ WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
END IF;
END IF;
IF NEW.soli_status_solicitacao_cod = ‘2.2’ THEN
IF NEW.soli_fk_divisoes3_id IS NULL THEN
UPDATE sigi.status_solicitacao SET stat_nome = ‘CAC2’, stat_cod = 3, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
ELSE
UPDATE sigi.status_solicitacao SET stat_nome = ‘DIVISÃO 3’, stat_local = (SELECT divi_nome FROM sigi.divisoes WHERE NEW.soli_fk_divisoes3_id = divi_pk_id), stat_cod = ‘2.2’ WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
END IF;
END IF;
IF NEW.soli_status_solicitacao_cod = ‘2.3’ THEN
IF NEW.soli_fk_divisoes4_id IS NULL THEN
UPDATE sigi.status_solicitacao SET stat_nome = ‘CAC2’, stat_cod = 3, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
ELSE
UPDATE sigi.status_solicitacao SET stat_nome = ‘DIVISÃO 4’, stat_local = (SELECT divi_nome FROM sigi.divisoes WHERE NEW.soli_fk_divisoes4_id = divi_pk_id), stat_cod = ‘2.3’ WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
END IF;
END IF;
IF NEW.soli_status_solicitacao_cod = ‘2.4’ THEN
IF NEW.soli_fk_divisoes5_id IS NULL THEN
UPDATE sigi.status_solicitacao SET stat_nome = ‘CAC2’, stat_cod = 3, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
ELSE
UPDATE sigi.status_solicitacao SET stat_nome = ‘DIVISÃO 5’, stat_local = (SELECT divi_nome FROM sigi.divisoes WHERE NEW.soli_fk_divisoes5_id = divi_pk_id), stat_cod = ‘2.4’ WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
END IF;
END IF;
IF NEW.soli_status_solicitacao_cod = 3 THEN
UPDATE sigi.status_solicitacao SET stat_nome = ‘CAC2’, stat_cod = 3, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
END IF;
IF NEW.soli_status_solicitacao_cod = 4 THEN
UPDATE sigi.status_solicitacao SET stat_nome = ‘JUR’, stat_cod = 4, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
END IF;
IF NEW.soli_status_solicitacao_cod = 5 THEN
UPDATE sigi.status_solicitacao SET stat_nome = ‘CAC3’, stat_cod = 5, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
END IF;
END IF;
END IF;
IF OLD.soli_status_solicitacao_cod <> NEW.soli_status_solicitacao_cod THEN
IF NEW.soli_status_solicitacao_cod = 7 THEN
IF (SELECT stat_local FROM sigi.status_solicitacao WHERE stat_fk_solicitacao_id = NEW.soli_pk_id) IS NULL THEN
UPDATE sigi.status_solicitacao SET stat_nome = ‘CANCELADO’, stat_motivo_cancelamento = 'Cancelado pelo usuário. Local: ’ || stat_nome, stat_cod = 7, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
ELSE
UPDATE sigi.status_solicitacao SET stat_nome = ‘CANCELADO’, stat_motivo_cancelamento = 'Cancelado pelo usuário. Local: ’ || stat_nome || ': ’ || stat_local, stat_cod = 7, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
END IF;
END IF;
IF NEW.soli_status_solicitacao_cod = 6 THEN
UPDATE sigi.status_solicitacao SET stat_nome = ‘FINALIZADO’, stat_cod = 6, stat_fk_solicitacao_id = NEW.soli_pk_id WHERE stat_fk_solicitacao_id = NEW.soli_pk_id;
END IF;
END IF;
END IF;
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION sigi.solicitacao_to_status_solicitacao_5_4_status() OWNER TO root;
[/code]