2-function-par_get_responsaveis_termo.sql 4.2 KB
Newer Older
1 2 3 4 5 6 7
-- 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
8 9 10
		responsavel record;

	BEGIN		    				
11 12 13 14 15 16 17 18 19 20 21
		IF i_itrid = 2 THEN
			FOR responsavel IN(
				WITH prefeitos as(
					SELECT  
						rrpid, 
						rrpdtiniciomandato,
						rrpdtfimmandato,
						usucpf,
						rrpnomeprefeito,
						trim(par.naturezainteresse_v2(
												rrpdtiniciomandato, 
22
												rrpdtfimmandato, 
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
												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
54 55 56 57 58
				_rrpid := responsavel.rrpid;
				_cpf := responsavel.usucpf;
				_nomeprefeito := responsavel.rrpnomeprefeito;
				_dtiniciomandato := responsavel.rrpdtiniciomandato;
				_dtfimmandato := responsavel.rrpdtfimmandato;
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
				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$;