PLpgSQLFunction-etiqNaturezaInteresse-REQ000000329189.sql 2.35 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
CREATE OR REPLACE FUNCTION par.naturezainteresse(
	iniciomandato date, 
	fimmandato date, 
	iniciovigencia date, 
	fimvigencia date, 
	programa varchar(10) default 'par'
)
 RETURNS text
AS $$

DECLARE
	natureza TEXT;
  	data_final_pc date;
  	data_corte date;
	
BEGIN
   	SELECT  	
			case programa 
			 when 'pac' then (dpcdatainiciocontagem2 + interval '60 day')::date
			 when 'par3' then  (dpcdatainiciocontagem3 + interval '60 day')::date
			 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;
33
raise notice 'data_final_pc %', data_final_pc;
34 35 36 37 38 39 40
	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;
41
		IF data_corte >= iniciomandato OR data_final_pc >= iniciomandato THEN
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
			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;
		
62
		IF data_final_pc >= iniciomandato AND data_final_pc <= fimmandato and data_corte <= fimmandato THEN
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
			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
 */
/*
drop FUNCTION par.naturezainteresse(
	iniciomandato date, 
	fimmandato date, 
	iniciovigencia date, 
	fimvigencia date, 
	programa varchar(10)
)