PLpgSQLFunction-etiqNaturezaInteresse-REQ000000329189.sql 3.7 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
)
 RETURNS text
AS $$

DECLARE
	natureza TEXT;
  	data_final_pc date;
  	data_corte date;
17 18
	msg_err TEXT := 'ERRO: Falta(m) parametro(s) ';
	count_err int := 0;
19 20
	
BEGIN
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
	
	IF iniciomandato IS NULL THEN
		msg_err :=  concat(msg_err,' inicio_mandato ');
		count_err := count_err + 1;
	END IF;

	IF iniciovigencia IS NULL THEN
		msg_err :=  concat(msg_err,' inicio_vigencia ');
		count_err := count_err + 1;
	END IF;

	IF fimvigencia IS NULL THEN
		msg_err :=  concat(msg_err,' fim_vigencia ');
		count_err := count_err + 1;
	END IF;

	
	IF programa = 'AUSENTE'  THEN
		msg_err :=  concat(msg_err,' programa ');
		count_err := count_err + 1;
	END IF;
42

43 44
	IF  count_err > 0 THEN
		RETURN msg_err::text;
45 46 47
		EXIT;
	END IF;

48
   	SELECT  	
49 50 51
			case UPPER(programa) 
			 when 'PAC' then (dpcdatainiciocontagem2 + interval '60 day')::date
			 when 'PAR3' then  (dpcdatainiciocontagem3 + interval '60 day')::date
52 53 54 55 56 57 58 59 60 61
			 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;
62

63 64 65 66 67 68 69
	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;
70
		IF data_corte >= iniciomandato OR data_final_pc >= iniciomandato THEN
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
			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;
		
91
		IF data_final_pc >= iniciomandato AND data_final_pc <= fimmandato AND data_corte <= fimmandato THEN
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
			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
 */
/*
114
drop FUNCTION par.naturezainteresse_v2(
115 116 117 118 119 120
	iniciomandato date, 
	fimmandato date, 
	iniciovigencia date, 
	fimvigencia date, 
	programa varchar(10)
)
121 122 123 124 125 126

*/
/* Testes para chamada direta.

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

127 128 129 130 131 132 133 134 135 136 137 138

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


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


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

select * from par.naturezainteresse_v2(null, '2023-11-07', null, null,'par3');


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

141
select * from par.naturezainteresse_v3('2023-11-08',null, '2018-05-15', '2019-05-15','par3');
142 143 144 145

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

*/