/**
 * Faz a cópia de uma versão (simulação) da proposta comercial na íntegra
 * @param {Number} P_NRVERSAOPROPCOM Número da versão a ser duplicada
 * @param {Number} P_NRNOVAVERSAOPROPCOM Número da versão de destino
 * @param {Number} P_NRORG Número da organização logada
 * @param {Varchar2} P_CDOPERADOR Operador logado
 * revisada
 */
CREATE OR REPLACE PROCEDURE DUPLICA_VERSAOPROPCOM
(	
	P_NRVERSAOPROPCOM NUMBER,
	P_NRORG NUMBER,
	P_CDOPERADOR VARCHAR2
)
AS
	V_NRPROPOSTACOMERCIAL NUMBER;	
	V_NRVERSAOPROPCOM NUMBER;
	V_CDVERSAOPROPCOM VARCHAR2(10);
BEGIN
	SELECT MAX(NRPROPOSTACOMERCIAL)
	  INTO V_NRPROPOSTACOMERCIAL
	  FROM VERSAOPROPCOM
	 WHERE NRVERSAOPROPCOM = P_NRVERSAOPROPCOM;

	IF(SIT_PROPCOMERCIAL(V_NRPROPOSTACOMERCIAL) = 'PENDENTE') THEN
		-- Busca o último número de versão
		SELECT MAX(CDVERSAOPROPCOM)
		  INTO V_CDVERSAOPROPCOM
		  FROM VERSAOPROPCOM
		 WHERE NRPROPOSTACOMERCIAL = V_NRPROPOSTACOMERCIAL;

		BEGIN
			V_CDVERSAOPROPCOM := LPAD(TO_CHAR(TO_NUMBER(NVL(V_CDVERSAOPROPCOM, 0)) + 1), 3, '0');
		EXCEPTION			
			WHEN OTHERS THEN
			   V_CDVERSAOPROPCOM := '001';
		END;

		-- Insere nova versão
		V_NRVERSAOPROPCOM := TO_NUMBER(RETORNA_NOVO_CODIGO('VERSAOPROPCOM', 1));
		INSERT INTO VERSAOPROPCOM
		(
			NRVERSAOPROPCOM, NRPROPOSTACOMERCIAL, CDVERSAOPROPCOM, 
			NRORG, NRORGINCLUSAO, NRORGULTATU,
			DTINCLUSAO, DTULTATU,
			CDOPERINCLUSAO, CDOPERULTATU
		)
		VALUES
		(
			V_NRVERSAOPROPCOM, V_NRPROPOSTACOMERCIAL, V_CDVERSAOPROPCOM,
			P_NRORG, P_NRORG, P_NRORG,
			SYSDATE, SYSDATE,
			P_CDOPERADOR, P_CDOPERADOR
		);
		
		-- Percorre os serviços da versão de origem
		FOR C_SERV IN
		(
			SELECT NRSERVICOPROPCOM, 
			       CASE WHEN NRSERVICOPROPCOMCOMPL IS NULL THEN 0 ELSE 1 END AS ORDEM
			  FROM SERVICOPROPCOM
			 WHERE NRVERSAOPROPCOM = P_NRVERSAOPROPCOM
			 ORDER BY ORDEM
		) LOOP
			-- Cria cópia dos serviços dentro 
			DUPLICA_SERVICOPROPCOM(C_SERV.NRSERVICOPROPCOM, V_NRVERSAOPROPCOM, P_NRORG, P_CDOPERADOR);
		END LOOP;
	END IF;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('DUPLICA_VERSAOPROPCOM','6.35.009'); END;
/
