PLpgSQLFunction-etiqNaturezaInteresse-REQ000000329189.sql 2.25 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

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;

	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;
		IF data_final_pc >= iniciomandato THEN
			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;
		
		IF data_final_pc >= iniciomandato AND data_final_pc <= fimmandato THEN
			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)
)