-- DROP FUNCTION par.get_responsaveis(integer , varchar, varchar, date, date, date, varchar); CREATE OR REPLACE FUNCTION par.get_responsaveis(i_itrid integer ,i_cnpj character varying, i_muncod character varying, i_datainiciovigencia date, i_datafimvigencia date, i_datafimpc date, i_tipoprograma character varying) RETURNS TABLE(_rrpid integer, _cpf character varying, _nomeprefeito character varying, _dtiniciomandato date, _dtfimmandato date, _naturezainteresse character varying) LANGUAGE plpgsql AS $function$ DECLARE responsavel record; BEGIN IF i_itrid = 2 THEN FOR responsavel IN( WITH prefeitos as( SELECT rrpid, rrpdtiniciomandato, rrpdtfimmandato, usucpf, rrpnomeprefeito, trim(par.naturezainteresse_v2( rrpdtiniciomandato, rrpdtfimmandato, i_datainiciovigencia, i_datafimvigencia, i_tipoprograma) ) as naturezainteresse FROM par.rollresponsaveisprefeitos WHERE muncod in(i_muncod) and (i_datainiciovigencia between rrpdtiniciomandato and rrpdtfimmandato or i_datafimpc between rrpdtiniciomandato and rrpdtfimmandato ) UNION SELECT * FROM ( SELECT rrpid, rrpdtiniciomandato, rrpdtfimmandato, usucpf, rrpnomeprefeito, trim(par.naturezainteresse_v2( rrpdtiniciomandato, rrpdtfimmandato, i_datainiciovigencia, i_datafimvigencia, i_tipoprograma)) as naturezainteresse FROM par.rollresponsaveisprefeitos where muncod in(i_muncod) ) AS subquery WHERE TRIM(subquery.naturezainteresse) IN('Atual Gestor', 'Atual Gestor /Responsável /Corresponsável', 'Atual Gestor /Corresponsável') )SELECT DISTINCT rrpid, rrpdtiniciomandato, rrpdtfimmandato, usucpf, rrpnomeprefeito, naturezainteresse FROM prefeitos order by rrpdtiniciomandato desc ) LOOP _rrpid := responsavel.rrpid; _cpf := responsavel.usucpf; _nomeprefeito := responsavel.rrpnomeprefeito; _dtiniciomandato := responsavel.rrpdtiniciomandato; _dtfimmandato := responsavel.rrpdtfimmandato; IF TRIM(responsavel.naturezainteresse) = 'Ex-dirigente' THEN _naturezainteresse := 'Responsável'; ELSE _naturezainteresse := TRIM(responsavel.naturezainteresse); END IF; return next; END LOOP; ELSE FOR responsavel IN( WITH secretarios as( SELECT rrsid, rrsdtiniciomandato, rrsdtfimmandato, usucpf, rrsnomesecretario, trim(par.naturezainteresse_v2( rrsdtiniciomandato, rrsdtfimmandato, i_datainiciovigencia, i_datafimvigencia, i_tipoprograma) ) as naturezainteresse FROM par.rollresponsaveissecretarios WHERE rrscnpj in(i_cnpj) and (rrsdtfimmandato between i_datainiciovigencia and i_datafimpc or rrsdtiniciomandato between i_datainiciovigencia and i_datafimpc ) UNION SELECT * FROM ( SELECT rrsid, rrsdtiniciomandato, rrsdtfimmandato, usucpf, rrsnomesecretario, trim(par.naturezainteresse_v2( rrsdtiniciomandato, rrsdtfimmandato, i_datainiciovigencia, i_datafimvigencia, i_tipoprograma) ) as naturezainteresse FROM par.rollresponsaveissecretarios WHERE rrscnpj in(i_cnpj) ) AS subquery WHERE TRIM(subquery.naturezainteresse)IN('Atual Gestor', 'Atual Gestor /Responsável /Corresponsável', 'Atual Gestor /Corresponsável') )SELECT DISTINCT rrsid, rrsdtiniciomandato, rrsdtfimmandato, usucpf, rrsnomesecretario, naturezainteresse FROM secretarios order by rrsdtfimmandato desc ) LOOP _rrpid := responsavel.rrsid; _cpf := responsavel.usucpf; _nomeprefeito := responsavel.rrsnomesecretario; _dtiniciomandato := responsavel.rrsdtiniciomandato; _dtfimmandato := responsavel.rrsdtfimmandato; IF TRIM(responsavel.naturezainteresse) = 'Ex-dirigente' THEN _naturezainteresse := 'Responsável'; ELSE _naturezainteresse := TRIM(responsavel.naturezainteresse); END IF; return next; END LOOP; END IF; END; $function$;