PLpgSQLFunction-etiqNaturezaInteresse-REQ000000329189.sql 3.03 KB
Newer Older
1

2 3

CREATE OR REPLACE FUNCTION par.naturezainteresse_v2(
4 5 6 7
	iniciomandato date, 
	fimmandato date, 
	iniciovigencia date, 
	fimvigencia date, 
8
	programa varchar(10) default 'AUSENTE'
9 10 11 12 13 14 15 16 17 18
)
 RETURNS text
AS $$

DECLARE
	natureza TEXT;
  	data_final_pc date;
  	data_corte date;
	
BEGIN
19 20 21 22 23 24 25

	IF programa = 'AUSENTE' THEN
		RETURN 'ERRO - Falta paramentro-programa';
		EXIT;
	END IF;

	-- raise notice 'iniciomandato %, fimmandato %, iniciovigencia %, fimvigencia %, programa %', iniciomandato, fimmandato, iniciovigencia, fimvigencia, programa;
26
   	SELECT  	
27 28 29
			case UPPER(programa) 
			 when 'PAC' then (dpcdatainiciocontagem2 + interval '60 day')::date
			 when 'PAR3' then  (dpcdatainiciocontagem3 + interval '60 day')::date
30 31 32 33 34 35 36 37 38 39
			 else
			 	(dpcdatainiciocontagem1 + interval '60 day')::date
			 end into data_corte
	FROM par.datasprestacaocontas WHERE dpcid = '1';
 	
	IF fimvigencia < data_corte THEN 
		data_final_pc := data_corte + 60;
	ELSE
		data_final_pc := fimvigencia + 60;
	END IF;
40
-- raise notice 'data_final_pc %', data_final_pc;
41 42 43 44 45 46 47
	IF fimmandato IS NULL THEN
		natureza := 'Atual Gestor /';
		IF ((iniciomandato >= iniciovigencia) AND (iniciomandato <= fimvigencia)) THEN
			natureza := concat(natureza,'Responsável /');	
		ELSEIF iniciovigencia >= iniciomandato THEN
			natureza := concat(natureza,'Responsável /');
		END IF;
48
		IF data_corte >= iniciomandato OR data_final_pc >= iniciomandato THEN
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
			natureza := concat(natureza,'Corresponsável /');
		END IF;
	ELSE
	      <<bloco_resp>>
			BEGIN	
				IF iniciomandato >= iniciovigencia AND iniciomandato <= fimvigencia THEN
					natureza := concat(natureza,' Responsável /');
					exit bloco_resp;
				ELSEIF fimmandato >= iniciovigencia AND fimmandato <= fimvigencia THEN
					natureza := concat(natureza, 'Responsável /');
					exit bloco_resp;
				ELSEIF iniciovigencia >= iniciomandato AND iniciovigencia <= fimmandato THEN
					natureza := concat(natureza, 'Responsável /');
					exit bloco_resp;
				ELSEIF fimvigencia >= iniciomandato AND fimvigencia <= fimmandato THEN
					natureza := concat(natureza, 'Responsável /');
					exit bloco_resp;
				END IF;
			 END;
		
69
		IF data_final_pc >= iniciomandato AND data_final_pc <= fimmandato AND data_corte <= fimmandato THEN
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
			natureza := concat(natureza, 'Corresponsável /');
		END IF;

	END IF;
 
	natureza := substring(natureza, 1, length(natureza)-2);

	IF natureza IS NULL THEN
		natureza := concat(natureza, 'Ex-dirigente');
	END IF;
 
	RETURN natureza::text;

END;

$$ language PLPGSQL;


/*
 * Excluir objeto
 */
/*
92
drop FUNCTION par.naturezainteresse_v2(
93 94 95 96 97 98
	iniciomandato date, 
	fimmandato date, 
	iniciovigencia date, 
	fimvigencia date, 
	programa varchar(10)
)
99 100 101 102 103 104 105 106 107 108 109 110 111

*/
/* Testes para chamada direta.

select * from par.naturezainteresse_v2('2017-01-01', '2023-11-07', '2018-05-15', '2019-05-15','par3');

select * from par.naturezainteresse_v2('2017-01-01', '2023-11-07', '2018-05-15', '2019-05-15');

select * from par.naturezainteresse_v2('2023-11-08',null, '2018-05-15', '2019-05-15','par3');

select * from par.naturezainteresse_v2('2023-11-08',null, '2018-05-15', '2019-05-15');

*/