-- drop function if exists par.get_responsaveis_termo_par(varchar, varchar, integer, integer, date, date, varchar) create or replace function par.get_responsaveis_termo_par( i_muncod varchar, i_processo varchar, i_prpid integer, i_dopid integer, i_datainiciovigencia date, i_datafimvigencia date, i_tipoprograma varchar(45) ) returns table ( _rrpid int, _cpf varchar, _nomeprefeito varchar, _dtiniciomandato date, _dtfimmandato date, _naturezainteresse varchar ) language plpgsql as $$ declare responsavel record; tem_ex_dirigente boolean := FALSE; ref_mandat_anter_inicio date; ref_mandat_anter_fim date; BEGIN with prefeitos as( select rrpid, usucpf, rrpnomeprefeito, rrpdtiniciomandato, rrpdtfimmandato, trim(par.naturezainteresse_v2( rrpdtiniciomandato, rrpdtfimmandato, i_datainiciovigencia, i_datafimvigencia, i_tipoprograma)) as naturezainteresse from par.rollresponsaveisprefeitos where muncod in(i_muncod) ) select (rrpdtiniciomandato - 31), (rrpdtiniciomandato - 1) into ref_mandat_anter_inicio, ref_mandat_anter_fim from prefeitos where trim(naturezainteresse) IN('Atual Gestor', 'Atual Gestor /Responsável /Corresponsável', 'Atual Gestor /Corresponsável'); for responsavel in( with prefeitos as( select rrpid, usucpf, rrpnomeprefeito, rrpdtiniciomandato, rrpdtfimmandato, trim(par.naturezainteresse_v2( rrpdtiniciomandato, rrpdtfimmandato, i_datainiciovigencia, i_datafimvigencia, i_tipoprograma)) as naturezainteresse from par.rollresponsaveisprefeitos where muncod in(i_muncod) ) select distinct rrpid, usucpf, rrpnomeprefeito, rrpdtiniciomandato, rrpdtfimmandato, naturezainteresse from prefeitos where trim(naturezainteresse) IN('Ex-dirigente') and rrpdtfimmandato between ref_mandat_anter_inicio and ref_mandat_anter_fim order by rrpdtiniciomandato asc ) loop if trim(responsavel.naturezainteresse) = 'Ex-dirigente' then if exists( select usucpf from par.get_gestor_ciencia_par(responsavel.usucpf, i_processo, i_dopid, i_prpid) ) then _rrpid := responsavel.rrpid; _cpf := responsavel.usucpf; _nomeprefeito := responsavel.rrpnomeprefeito; _dtiniciomandato := responsavel.rrpdtiniciomandato; _dtfimmandato := responsavel.rrpdtfimmandato; _naturezainteresse := 'Responsável'; tem_ex_dirigente = TRUE; return next; end if; end if; end loop; for responsavel in( with prefeitos as( select rrpid, usucpf, rrpnomeprefeito, rrpdtiniciomandato, rrpdtfimmandato, trim(par.naturezainteresse_v2( rrpdtiniciomandato, rrpdtfimmandato, i_datainiciovigencia, i_datafimvigencia, i_tipoprograma)) as naturezainteresse from par.rollresponsaveisprefeitos where muncod in(i_muncod) ) select distinct rrpid, usucpf, rrpnomeprefeito, rrpdtiniciomandato, rrpdtfimmandato, naturezainteresse from prefeitos where trim(naturezainteresse) NOT IN('Ex-dirigente') order by rrpdtiniciomandato asc ) loop if tem_ex_dirigente and (trim(responsavel.naturezainteresse) = 'Atual Gestor') or (trim(responsavel.naturezainteresse) = 'Atual Gestor /Responsável /Corresponsável') or (trim(responsavel.naturezainteresse) = 'Atual Gestor /Corresponsável') then if tem_ex_dirigente and exists( select usucpf from par.get_gestor_ciencia_par(responsavel.usucpf, i_processo, i_dopid, i_prpid) ) then _rrpid := responsavel.rrpid; _cpf := responsavel.usucpf; _nomeprefeito := responsavel.rrpnomeprefeito; _dtiniciomandato := responsavel.rrpdtiniciomandato; _dtfimmandato := responsavel.rrpdtfimmandato; _naturezainteresse := trim(responsavel.naturezainteresse); return next; end if; else _rrpid := responsavel.rrpid; _cpf := responsavel.usucpf; _nomeprefeito := responsavel.rrpnomeprefeito; _dtiniciomandato := responsavel.rrpdtiniciomandato; _dtfimmandato := responsavel.rrpdtfimmandato; _naturezainteresse := trim(responsavel.naturezainteresse); return next; end if; end loop; end; $$