diff --git a/declaracao_omissao/2-function-par_get_responsaveis_termo.sql b/declaracao_omissao/2-function-par_get_responsaveis_termo.sql new file mode 100644 index 0000000..e47252b --- /dev/null +++ b/declaracao_omissao/2-function-par_get_responsaveis_termo.sql @@ -0,0 +1,158 @@ +-- 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; $$ + + + + + \ No newline at end of file