CREATE OR REPLACE FUNCTION par.naturezainteresse( iniciomandato date, fimmandato date, iniciovigencia date, fimvigencia date, programa varchar(10) default 'par' ) RETURNS text AS $$ DECLARE natureza TEXT; data_final_pc date; data_corte date; BEGIN SELECT case 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( iniciomandato date, fimmandato date, iniciovigencia date, fimvigencia date, programa varchar(10) )