

CREATE OR REPLACE FUNCTION par.naturezainteresse_v2(
	iniciomandato date, 
	fimmandato date, 
	iniciovigencia date, 
	fimvigencia date, 
	programa varchar(10) default 'AUSENTE'
)
 RETURNS text
AS $$

DECLARE
	natureza TEXT;
  	data_final_pc date;
  	data_corte date;
	
BEGIN

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

	-- raise notice 'iniciomandato %, fimmandato %, iniciovigencia %, fimvigencia %, programa %', iniciomandato, fimmandato, iniciovigencia, fimvigencia, programa;
   	SELECT  	
			case UPPER(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;
-- raise notice 'data_final_pc %', data_final_pc;
	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_corte >= iniciomandato OR 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 AND data_corte <= 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_v2(
	iniciomandato date, 
	fimmandato date, 
	iniciovigencia date, 
	fimvigencia date, 
	programa varchar(10)
)

*/
/* 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');

*/
