2-function-par_get_responsaveis_termo.sql 4.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 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; $$