create or replace PROCEDURE INS_IMPARQXMLNFCE
(
	P_NRACESSONFCE VARCHAR2,
   P_DSNOMEARQUIVO VARCHAR2,
   P_DSARQXMLNFCE CLOB,
   P_DTENTRVENDA DATE,
   P_CDFILIAL VARCHAR2,
   P_CDCAIXA VARCHAR2,
   P_NRORG NUMBER,
   P_CDOPERADOR VARCHAR2,
   P_NRIMPARQXMLNFCE OUT NUMBER,
   P_IDSTATUSIMPARQ OUT VARCHAR2,
   P_IDTIPOARQ IN VARCHAR2
)
AS
	PRAGMA AUTONOMOUS_TRANSACTION;
	V_NRIMPARQXMLNFCE NUMBER;
	V_IDSTATUSIMPARQ VARCHAR2(1);
BEGIN
	
	/* Verifica se o arquivo informado ja foi persistido no banco */
	SELECT MAX(NRIMPARQXMLNFCE), MAX(IDSTATUSIMPARQ) 
	  INTO V_NRIMPARQXMLNFCE, V_IDSTATUSIMPARQ
	  FROM IMPARQXMLNFCE
	 WHERE NRACESSONFCE = P_NRACESSONFCE;

	IF V_NRIMPARQXMLNFCE IS NOT NULL THEN
		/* Se arquivo ja importado, nao o modifica no banco */
		IF V_IDSTATUSIMPARQ = 'S' THEN
			P_NRIMPARQXMLNFCE := V_NRIMPARQXMLNFCE;
			P_IDSTATUSIMPARQ := V_IDSTATUSIMPARQ;
			RETURN;
		ELSE

			UPDATE IMPARQXMLNFCE
			   SET DSNOMEARQUIVO = P_DSNOMEARQUIVO,
                DSARQXMLNFCE = P_DSARQXMLNFCE,
                DTENTRVENDA = P_DTENTRVENDA,
                CDFILIAL = P_CDFILIAL,
                CDCAIXA = P_CDCAIXA,
                NRORGULTATU = P_NRORG,
                DTULTATU = SYSDATE,
                CDOPERULTATU = P_CDOPERADOR
          WHERE NRIMPARQXMLNFCE = V_NRIMPARQXMLNFCE;

         /* Se arquivo ja importado, apaga mensagens da ultima importacao do mesmo */
         DELETE FROM MSGIMPARQXMLNFCE
          WHERE NRIMPARQXMLNFCE = V_NRIMPARQXMLNFCE; 

		END IF;

	ELSE
		/* Se arquivo ainda nao importado, gera o sequencial e insere no banco de dados */
		
		V_NRIMPARQXMLNFCE := TO_NUMBER(RETORNA_NOVO_CODIGO('IMPARQXMLNFCE',1));
		V_IDSTATUSIMPARQ := 'N';
		INSERT INTO IMPARQXMLNFCE
		( 
		   NRIMPARQXMLNFCE, NRACESSONFCE, 
		   DSNOMEARQUIVO, DSARQXMLNFCE,
		   IDSTATUSIMPARQ, DTENTRVENDA,
		   CDFILIAL, CDCAIXA,
		   NRORG, NRORGINCLUSAO, NRORGULTATU,
		   DTINCLUSAO, DTULTATU,
		   CDOPERINCLUSAO, CDOPERULTATU,
		   IDTIPOARQ 
		)
		VALUES
		(
			V_NRIMPARQXMLNFCE, P_NRACESSONFCE,
			P_DSNOMEARQUIVO, P_DSARQXMLNFCE, 
		   'N', P_DTENTRVENDA, 
		   P_CDFILIAL, P_CDCAIXA,
		   P_NRORG, P_NRORG, P_NRORG,
		   SYSDATE, SYSDATE,
		   P_CDOPERADOR, P_CDOPERADOR,
		   P_IDTIPOARQ
		);
	END IF;
	
	P_NRIMPARQXMLNFCE := V_NRIMPARQXMLNFCE;
	P_IDSTATUSIMPARQ := V_IDSTATUSIMPARQ;

	COMMIT;
END;
/