CREATE OR REPLACE FUNCTION par.naturezainteresse_v2( iniciomandato date, fimmandato date, iniciovigencia date, fimvigencia date, programa varchar(10) default 'AUSENTE' ) RETURNS text AS $$ DECLARE natureza TEXT; data_final_pc date; data_corte date; BEGIN IF programa = 'AUSENTE' THEN RETURN 'ERRO - Falta paramentro-programa'; EXIT; END IF; -- raise notice 'iniciomandato %, fimmandato %, iniciovigencia %, fimvigencia %, programa %', iniciomandato, fimmandato, iniciovigencia, fimvigencia, programa; SELECT case UPPER(programa) when 'PAC' then (dpcdatainiciocontagem2 + interval '60 day')::date when 'PAR3' then (dpcdatainiciocontagem3 + interval '60 day')::date else (dpcdatainiciocontagem1 + interval '60 day')::date end into data_corte FROM par.datasprestacaocontas WHERE dpcid = '1'; IF fimvigencia < data_corte THEN data_final_pc := data_corte + 60; ELSE data_final_pc := fimvigencia + 60; END IF; -- raise notice 'data_final_pc %', data_final_pc; IF fimmandato IS NULL THEN natureza := 'Atual Gestor /'; IF ((iniciomandato >= iniciovigencia) AND (iniciomandato <= fimvigencia)) THEN natureza := concat(natureza,'Responsável /'); ELSEIF iniciovigencia >= iniciomandato THEN natureza := concat(natureza,'Responsável /'); END IF; IF data_corte >= iniciomandato OR data_final_pc >= iniciomandato THEN natureza := concat(natureza,'Corresponsável /'); END IF; ELSE <> BEGIN IF iniciomandato >= iniciovigencia AND iniciomandato <= fimvigencia THEN natureza := concat(natureza,' Responsável /'); exit bloco_resp; ELSEIF fimmandato >= iniciovigencia AND fimmandato <= fimvigencia THEN natureza := concat(natureza, 'Responsável /'); exit bloco_resp; ELSEIF iniciovigencia >= iniciomandato AND iniciovigencia <= fimmandato THEN natureza := concat(natureza, 'Responsável /'); exit bloco_resp; ELSEIF fimvigencia >= iniciomandato AND fimvigencia <= fimmandato THEN natureza := concat(natureza, 'Responsável /'); exit bloco_resp; END IF; END; IF data_final_pc >= iniciomandato AND data_final_pc <= fimmandato AND data_corte <= fimmandato THEN natureza := concat(natureza, 'Corresponsável /'); END IF; END IF; natureza := substring(natureza, 1, length(natureza)-2); IF natureza IS NULL THEN natureza := concat(natureza, 'Ex-dirigente'); END IF; RETURN natureza::text; END; $$ language PLPGSQL; /* * Excluir objeto */ /* drop FUNCTION par.naturezainteresse_v2( iniciomandato date, fimmandato date, iniciovigencia date, fimvigencia date, programa varchar(10) ) */ /* Testes para chamada direta. select * from par.naturezainteresse_v2('2017-01-01', '2023-11-07', '2018-05-15', '2019-05-15','par3'); select * from par.naturezainteresse_v2('2017-01-01', '2023-11-07', '2018-05-15', '2019-05-15'); select * from par.naturezainteresse_v2('2023-11-08',null, '2018-05-15', '2019-05-15','par3'); select * from par.naturezainteresse_v2('2023-11-08',null, '2018-05-15', '2019-05-15'); */