CREATE OR REPLACE PROCEDURE USR_IMPORTA_DEVOLUCOES
IS
V_IDENTRSAID       USR_ENTR_MERC.IDENTRSAID%TYPE;
V_CDFILIAL_EXT     USR_ENTR_MERC.CDFILIAL%TYPE;
V_NRNOTAFISCAL     USR_ENTR_MERC.NRNOTAFISCAL%TYPE;
V_CDEXFORNECED     FORNECEDOR.CDEXFORNECED%TYPE;
V_DTENTRADA        USR_ENTR_MERC.DTENTRADA%TYPE;
V_CDFILIAL_EXT_REC USR_ENTR_MERC.CDFILIRECE%TYPE;
V_CDTIPOOPER       USR_ENTR_MERC.CDTIPOOPER%TYPE;
V_DTEMISSAO        USR_ENTR_MERC.DTEMISSAO%TYPE;
V_NRAUTOFORNE      USR_ENTR_MERC.NRAUTOFORNE%TYPE;
V_LOG_ERRO         USR_ENTR_MERC.LOG_ERRO%TYPE; 
V_DTIMPORTACAO     USR_ENTR_MERC.DTIMPORTACAO%TYPE;
V_CDSERIE          USR_ENTR_MERC.CDSERIE%TYPE;
V_CDMODDOCFISC     USR_ENTR_MERC.CDMODDOCFISC%TYPE;
V_NRLANCTONF       NOTAFISCAL.NRLANCTONF%TYPE;
V_NRLANCTONFORIG   NOTAFISCAL.NRLANCTONF%TYPE;
V_NRLANCESTQORIG   LANCTOESTOQ.NRLANCESTQ%TYPE;
V_NRLANCESTUPDATE  LANCTOESTOQ.NRLANCESTQ%TYPE;
V_NRLANCESTQ       USR_ENTR_MERC.NRLANCESTQ%TYPE;
V_VRQUANTIDADE     USR_ITEM_ENTR_MERC.VRQUANTIDADE%TYPE;
V_VRUNITARIO       USR_ITEM_ENTR_MERC.VRUNITARIO%TYPE;
V_CDPRODINTE       USR_ITEM_ENTR_MERC.CDPRODINTE%TYPE;
V_CDPRODUTO        PRODUTO.CDPRODUTO%TYPE;
V_CDPRODESTO       PRODUTO.CDPRODESTO%TYPE;
V_VRTOTLANCTO      USR_ITEM_ENTR_MERC.VRUNITARIO%TYPE;
V_CDFORNECED       FORNECEDOR.CDFORNECED%TYPE;
V_IDTPIJURFORN     FORNECEDOR.IDTPIJURFORN%TYPE;
V_NRINSJURFORN     FORNECEDOR.NRINSJURFORN%TYPE;
V_CDFILIAL         FILIAL.CDFILIAL%TYPE;
V_CDFILIRECE       FILIAL.CDFILIAL%TYPE;
V_CDEMPRESA        FILIAL.CDEMPRESA%TYPE;
V_CDINSCESTA       FILIAL.CDINSCESTA%TYPE;
V_CDINSCMUNI       FILIAL.CDINSCMUNI%TYPE;
V_DSPRODEMIS       ITEMPRODUTO.DSPRODEMIS%TYPE;
V_CDPRODEMIS       ITEMPRODUTO.CDPRODEMIS%TYPE;
V_CDMARCA          PARASUPRI.CDMARCA%TYPE;
V_NRAUTOFORN       AUTOFORNE.NRAUTOFORN%TYPE;
V_CDFILLANC        AUTOFORNE.CDFILLANC%TYPE;
V_CDFILDEST        AUTOFORNE.CDFILDEST%TYPE;
V_DTPROGENTAF      ITEMAUTF.DTPROGENTAF%TYPE;
V_QTPROGENTAF      ITEMAUTF.QTPROGENTAF%TYPE;
V_VRPREUNIAF       ITEMAUTF.VRPREUNIAF%TYPE;
V_IDBAIXITMAF      ITEMAUTF.IDBAIXITMAF%TYPE;
V_QTEFETENTRAF     ITEMAUTF.QTEFETENTRAF%TYPE;
V_CDARVPROD        PRODUTO.CDARVPROD%TYPE;
V_VRFATOCONVAF     PRODUTO.VRFATOCONV%TYPE;
V_VRFATOCONV     PRODUTO.VRFATOCONV%TYPE;
V_NRSEQUITEM       ITEMPRODUTO.NRSEQITPROD%TYPE;
V_CDOPERADOR       PARAMWEBSERVICE.CDOPERADORWS%TYPE;
V_SEQUENCIAL       NOVOCODIGO.NRSEQUENCIAL%TYPE;
V_SEQUENCIALNOTA   NOVOCODIGO.NRSEQUENCIAL%TYPE;

V_IDPERMESTNEG     PARAMFILIAL.IDPERMESTNEG%TYPE;
V_IDBLQESTFMES     PARAMFILIAL.IDBLQESTFMES%TYPE;
V_NRDIABLOQEST     PARAMFILIAL.NRDIABLOQEST%TYPE;
V_IDORDIMPLANT     PARAMFILIAL.IDORDIMPLANT%TYPE;
V_IDORDAJUINVE     PARAMFILIAL.IDORDAJUINVE%TYPE;
V_IDCTRLESTQ       PARAMFILIAL.IDCTRLESTQ%TYPE;
V_NRDIAFECHMES     PARAMFILIAL.NRDIAFECHMES%TYPE;
V_IDINVROTOK       PARAMFILIAL.IDINVROTOK%TYPE;
V_CDALMOXARIFE     PARAMFILIAL.CDALMOXARIFE%TYPE;
V_CDLOCALESTOQ     PARAMFILIAL.CDLOCALESTOQ%TYPE;
V_IDUTCACALMOX     PARAMFILIAL.IDUTCACALMOX%TYPE;
V_IDUTILALMOX      PARAMFILIAL.IDUTILALMOX%TYPE;
V_IDUTILLCESTQ     PARAMFILIAL.IDUTILLCESTQ%TYPE;
V_IDUTILLOTE       PARAMFILIAL.IDUTILLOTE%TYPE;
V_DTPROCESSA       PARAMFILIAL.DTPROCESSA%TYPE;
V_CDTIPCUSTEST     PARAMFILIAL.CDTIPCUSTEST%TYPE;
V_IDCNTRESTOQ_PROD PRODFILI.IDCNTRESTOQ%TYPE;
V_IDPRODATIV       PRODFILI.IDPRODATIV%TYPE;
V_IDTPIJURNF	     NOTAFISCAL.IDTPIJURNF%TYPE;
V_NRINSJURNF	     NOTAFISCAL.NRINSJURNF%TYPE;
V_QTNENTREGUE      ITEMAUTF.QTPROGENTAF%TYPE;
V_QTDEVOLVIDA      ITEMAUTF.QTPROGENTAF%TYPE;

V_JACADASTRADO     NUMBER;
V_RELACAF          NUMBER;
V_NRSEQDEVOL       VARCHAR2(4);
V_ERROAF           VARCHAR2(1);
V_ERRO             VARCHAR2(30);
V_ERRO_AUX         VARCHAR2(4000);
V_SEQLOG           VARCHAR2(10);
V_DSMETODO         VARCHAR2(20) := 'lancNF';
V_DESC_LOG         VARCHAR2(4000);
V_OPERACAO         VARCHAR2(20);
V_DSLANCESTQ       VARCHAR2(1000);
V_PROD_IRREG       VARCHAR2(1000);
V_DTINICIAL        DATE;
V_DTFINAL          DATE;
V_RESTRICAO        BOOLEAN;
V_RESTRICAO_PROD   BOOLEAN;
V_FORMATO          VARCHAR2(21):= 'DD/MM/YYYY HH24:MI:SS';
V_TIPO             VARCHAR2(6) := 'BINARY';
V_LANGUAGE         VARCHAR2(20):= 'BRAZILIAN PORTUGUESE';
V_COMANDO          VARCHAR2(5000);
V_VRTOTALITEM	     FLOAT(126);
V_IDDEVOLUCAONFIT  VARCHAR2(1);

CURSOR C_CABECALHO IS
SELECT 'DEVOLUCAO' AS IDROTINA, USR.IDENTRSAID, USR.CDFILIAL AS CDFILIAL_EXT, USR.NRNOTAFISCAL, USR.NRINSJURFORN AS CDEXFORNECED, USR.DTENTRADA,
       USR.CDFILIRECE AS CDFILIAL_EXT_REC, USR.CDTIPOOPER, USR.DTEMISSAO, USR.NRAUTOFORNE, USR.LOG_ERRO, USR.DTIMPORTACAO,
       USR.CDSERIE, USR.CDMODDOCFISC, F.CDFILIAL, FIL_REC.CDFILIAL AS CDFILIRECE, FO.CDFORNECED, FO.IDTPIJURFORN, FO.NRINSJURFORN,
       FIL_REC.CDEMPRESA, FIL_REC.CDINSCESTA, FIL_REC.CDINSCMUNI, PS.CDMARCA,  USR.NRLANCESTQ
  FROM USR_DEVO_MERC USR
 INNER JOIN FILIAL F
    ON USR.CDFILIAL = F.CDFILIALEXT
 INNER JOIN FILIAL FIL_REC
    ON USR.CDFILIRECE = FIL_REC.CDFILIALEXT
 INNER JOIN FORNECEDOR FO
    ON USR.NRINSJURFORN = FO.CDEXFORNECED
  LEFT JOIN PARASUPRI PS
    ON NVL(FIL_REC.CDFILCENTCMP,FIL_REC.CDFILIAL) = PS.CDFILIAL
 WHERE ((USR.LOG_ERRO IS NULL)) --OR (USR.LOG_ERRO LIKE 'COM_ERRO%'))
 UNION ALL
SELECT 'ESTORNO' AS IDROTINA, USR.IDENTRSAID, USR.CDFILIAL AS CDFILIAL_EXT, USR.NRNOTAFISCAL, USR.NRINSJURFORN AS CDEXFORNECED, USR.DTENTRADA,
       USR.CDFILIRECE AS CDFILIAL_EXT_REC, USR.CDTIPOOPER, USR.DTEMISSAO, USR.NRAUTOFORNE, USR.LOG_ERRO, USR.DTIMPORTACAO,
       USR.CDSERIE, USR.CDMODDOCFISC, F.CDFILIAL, FIL_REC.CDFILIAL AS CDFILIRECE, FO.CDFORNECED, FO.IDTPIJURFORN, FO.NRINSJURFORN,
       FIL_REC.CDEMPRESA, FIL_REC.CDINSCESTA, FIL_REC.CDINSCMUNI, PS.CDMARCA,  USR.NRLANCESTQ
  FROM USR_ESTORNO_MERC USR
 INNER JOIN FILIAL F
    ON USR.CDFILIAL = F.CDFILIALEXT
 INNER JOIN FILIAL FIL_REC
    ON USR.CDFILIRECE = FIL_REC.CDFILIALEXT
 INNER JOIN FORNECEDOR FO
    ON USR.NRINSJURFORN = FO.CDEXFORNECED
  LEFT JOIN PARASUPRI PS
    ON NVL(FIL_REC.CDFILCENTCMP,FIL_REC.CDFILIAL) = PS.CDFILIAL
 WHERE ((USR.LOG_ERRO IS NULL)); --OR (USR.LOG_ERRO LIKE 'COM_ERRO%'));

CURSOR C_PRODUTOS(C_OPERACAO IN VARCHAR, C_NRNOTAFISCAL IN VARCHAR2, C_NRINSJURFORN IN VARCHAR2, C_CDSERIE IN VARCHAR2, C_DTEMISSAO IN DATE, C_IDENTRSAID IN VARCHAR2) IS
SELECT USR.CDFILIAL AS CDFILIAL_EXT, USR.NRNOTAFISCAL, USR.CDFILIRECE AS CDFILIAL_EXT_REC, USR.NRAUTOFORNE, USR.DTIMPORTACAO,
       USR.VRQUANTIDADE, USR.VRUNITARIO, USR.CDPRODINTE, PROD.CDPRODUTO, F.CDFILIAL, FIL_REC.CDFILIAL AS CDFILIRECE,
       PROD.NMPRODUTO AS DSPRODEMIS,
       TO_CHAR(REPLACE(TO_CHAR(PROD.CDARVPROD, REPLACE((SELECT CDPICTPROD FROM PARAMGERAL), '.', ',')), ',', '.')) AS CDPRODEMIS
  FROM USR_ITEM_DEVO_MERC USR
 INNER JOIN PRODUTO PROD
    ON PROD.CDPRODINTE = USR.CDPRODINTE
 INNER JOIN FILIAL F
    ON USR.CDFILIAL = F.CDFILIALEXT
 INNER JOIN FILIAL FIL_REC
    ON USR.CDFILIRECE = FIL_REC.CDFILIALEXT
 WHERE USR.NRNOTAFISCAL = C_NRNOTAFISCAL
   AND USR.NRINSJURFORN = C_NRINSJURFORN
   AND USR.CDSERIE      = C_CDSERIE
   AND (C_OPERACAO       = 'DEVOLUCAO'
    OR (C_OPERACAO       = 'ESTORNO'
   AND  C_IDENTRSAID    = '2'))
 UNION ALL
SELECT USR.CDFILIAL AS CDFILIAL_EXT, USR.NRNOTAFISCAL, USR.CDFILIRECE AS CDFILIAL_EXT_REC, USR.NRAUTOFORNE, USR.DTIMPORTACAO,
       USR.VRQUANTIDADE, USR.VRUNITARIO, USR.CDPRODINTE, PROD.CDPRODUTO, F.CDFILIAL, FIL_REC.CDFILIAL AS CDFILIRECE,
       PROD.NMPRODUTO AS DSPRODEMIS,
       TO_CHAR(REPLACE(TO_CHAR(PROD.CDARVPROD, REPLACE((SELECT CDPICTPROD FROM PARAMGERAL), '.', ',')), ',', '.')) AS CDPRODEMIS
  FROM USR_ITEM_ENTR_MERC USR
 INNER JOIN PRODUTO PROD
    ON PROD.CDPRODINTE = USR.CDPRODINTE
 INNER JOIN FILIAL F
    ON USR.CDFILIAL = F.CDFILIALEXT
 INNER JOIN FILIAL FIL_REC
    ON USR.CDFILIRECE = FIL_REC.CDFILIALEXT
 WHERE USR.NRNOTAFISCAL = C_NRNOTAFISCAL
   AND USR.NRINSJURFORN = C_NRINSJURFORN
   AND USR.CDSERIE      = C_CDSERIE
   AND USR.DTEMISSAO    = C_DTEMISSAO
   AND C_OPERACAO       = 'ESTORNO';

CURSOR C_PARAMFILIAL(C_CDFILIAL IN VARCHAR2) IS
SELECT IDPERMESTNEG, IDBLQESTFMES, NRDIABLOQEST,
       IDORDIMPLANT, IDORDAJUINVE, IDCTRLESTQ,
       NRDIAFECHMES, IDINVROTOK,
       NVL(CDALMOXARIFE, ' '), NVL(CDLOCALESTOQ, ' '), IDUTCACALMOX,
       IDUTILALMOX,  IDUTILLCESTQ, IDUTILLOTE,
       NVL(DTPROCESSA,SYSDATE), NVL(CDTIPCUSTEST, '3') CDTIPCUSTEST
  FROM PARAMFILIAL PR, FILIAL F
 WHERE PR.CDFILIAL = F.CDFILIAL
 AND F.CDFILIALEXT = C_CDFILIAL;

CURSOR C_ITEMAUTF (C_OPERACAO IN VARCHAR2, V_CDFILLANC IN VARCHAR2, V_CDFILDEST IN VARCHAR2, V_NRAUTOFORN IN VARCHAR2, V_CDPRODESTO IN VARCHAR2) IS
SELECT CDMARCA, DTPROGENTAF, (QTPROGENTAF - NVL(QTEFETENTRAF, 0)) AS QTPROGENTAF,
       VRPREUNIAF, P.CDPRODUTO, P.CDARVPROD, NVL(P.VRFATOCONV, 1) AS VRFATOCONVAF
  FROM ITEMAUTF I, PRODUTO P
 WHERE I.CDFILLANC   = V_CDFILLANC
   AND I.CDFILDEST   = V_CDFILDEST
   AND I.NRAUTOFORN  = V_NRAUTOFORN
   AND P.CDPRODESTO  = V_CDPRODESTO
   AND (IDBAIXITMAF NOT IN ('2','3') OR IDBAIXITMAF IS NULL)
   AND (QTPROGENTAF - NVL(QTEFETENTRAF, 0)) > 0
   AND I.CDPRODUTO = P.CDPRODUTO
   AND C_OPERACAO       = 'DEVOLUCAO'
UNION ALL
 SELECT CDMARCA, DTPROGENTAF, (QTPROGENTAF - NVL(QTEFETENTRAF, 0)) AS QTPROGENTAF,
       VRPREUNIAF, P.CDPRODUTO, P.CDARVPROD, NVL(P.VRFATOCONV, 1) AS VRFATOCONVAF
  FROM ITEMAUTF I, PRODUTO P
 WHERE I.CDFILLANC   = V_CDFILLANC
   AND I.CDFILDEST   = V_CDFILDEST
   AND I.NRAUTOFORN  = V_NRAUTOFORN
   AND P.CDPRODESTO  = V_CDPRODESTO
   AND I.CDPRODUTO = P.CDPRODUTO
   AND C_OPERACAO       = 'ESTORNO';

BEGIN
  V_COMANDO := NULL;
  V_COMANDO := 'ALTER SESSION SET NLS_DATE_FORMAT = '||CHR(39)||V_FORMATO||CHR(39)||' NLS_SORT = '||CHR(39)||V_TIPO||CHR(39)||' NLS_LANGUAGE= '||CHR(39)||V_LANGUAGE||CHR(39);
  EXECUTE IMMEDIATE V_COMANDO;

   OPEN C_CABECALHO;
   LOOP
      FETCH C_CABECALHO INTO V_OPERACAO,     V_IDENTRSAID,   V_CDFILIAL_EXT, V_NRNOTAFISCAL, V_CDEXFORNECED, V_DTENTRADA,    V_CDFILIAL_EXT_REC, V_CDTIPOOPER,
                             V_DTEMISSAO,  V_NRAUTOFORNE,  V_LOG_ERRO,     V_DTIMPORTACAO, V_CDSERIE,      V_CDMODDOCFISC, V_CDFILIAL,         V_CDFILIRECE,
                             V_CDFORNECED, V_IDTPIJURFORN, V_NRINSJURFORN, V_CDEMPRESA,    V_CDINSCESTA,   V_CDINSCMUNI,   V_CDMARCA,          V_NRLANCESTQ;
      EXIT WHEN C_CABECALHO%NOTFOUND;
      
     IF V_OPERACAO = 'DEVOLUCAO' THEN 
        BEGIN
            SELECT COUNT(*)
              INTO V_JACADASTRADO
              FROM USR_DEVO_MERC
             WHERE CDFILIAL     = V_CDFILIAL_EXT
               AND NRNOTAFISCAL = V_NRNOTAFISCAL
               AND NRINSJURFORN = V_NRINSJURFORN
               AND CDSERIE      = V_CDSERIE
               AND DTEMISSAO    = V_DTEMISSAO
               AND NRLANCESTQ IS NOT NULL;         
         EXCEPTION
            WHEN OTHERS THEN
               V_JACADASTRADO := 0;
         END;
      END IF;
      
      IF V_OPERACAO = 'ESTORNO' THEN 
         BEGIN
            SELECT COUNT(*)
              INTO V_JACADASTRADO
              FROM USR_ESTORNO_MERC
             WHERE CDFILIAL     = V_CDFILIAL_EXT
               AND NRNOTAFISCAL = V_NRNOTAFISCAL
               AND NRINSJURFORN = V_NRINSJURFORN
               AND CDSERIE      = V_CDSERIE
               AND DTEMISSAO    = V_DTEMISSAO
               AND NRLANCESTQ IS NOT NULL;         
         EXCEPTION
            WHEN OTHERS THEN
               V_JACADASTRADO := 0;
         END; 
      END IF;         
      

      V_ERRO := '';
      V_ERRO_AUX := '';
      V_VRTOTLANCTO := 0;
      
      IF (V_JACADASTRADO = 0) THEN

         OPEN C_PARAMFILIAL(V_CDFILIAL_EXT_REC);
         CLOSE C_PARAMFILIAL;
            FETCH C_PARAMFILIAL INTO V_IDPERMESTNEG, V_IDBLQESTFMES, V_NRDIABLOQEST, V_IDORDIMPLANT, V_IDORDAJUINVE, V_IDCTRLESTQ, V_NRDIAFECHMES, V_IDINVROTOK,
                                     V_CDALMOXARIFE, V_CDLOCALESTOQ, V_IDUTCACALMOX, V_IDUTILALMOX,  V_IDUTILLCESTQ, V_IDUTILLOTE, V_DTPROCESSA,  V_CDTIPCUSTEST;
            EXIT WHEN C_PARAMFILIAL%NOTFOUND;
         
         CASE WHEN ((V_IDCTRLESTQ  = 'S') AND (V_IDUTILALMOX = 'N') AND (V_IDUTILLOTE  = 'N')) THEN  V_RESTRICAO := TRUE;
              WHEN ((V_IDCTRLESTQ  = 'N') OR (V_IDUTILLOTE  = 'S') OR (V_IDUTILALMOX = 'S'))   THEN  V_RESTRICAO := FALSE;
         END CASE;
         
         /*PROSSEGUE CASO NAO EXISTA
            -> RESTRICAO DE PARAMETRIZACAO POR FILIAL
         */
         IF (V_RESTRICAO) THEN
         
            NOVO_CODIGO_SC('LANCTOEST'||V_CDFILIAL, V_SEQUENCIAL);
            V_NRLANCESTQ := SUBSTR(V_SEQUENCIAL, 11, 10);
         
            CASE WHEN V_OPERACAO = 'DEVOLUCAO' THEN V_DSLANCESTQ := 'Devolução Ref. a NF: '||V_NRNOTAFISCAL;
                 WHEN V_OPERACAO = 'ESTORNO'   THEN V_DSLANCESTQ := 'Estorno Ref. a NF: '  ||V_NRNOTAFISCAL;
            END CASE;
         
            BEGIN
               BEGIN
                  SELECT CDOPERADORWS
                    INTO V_CDOPERADOR
                    FROM PARAMWEBSERVICE
                   WHERE IDSITUACAOWS = 'A';
               EXCEPTION
                  WHEN OTHERS THEN
                    V_ERRO := 'COM_ERRO_OPER';
                    V_ERRO_AUX := SUBSTR(SQLERRM,0,100);
               END;
         
              IF (V_ERRO IS NULL AND V_OPERACAO <> 'ESTORNO') THEN
                  SELECT SUM(VRQUANTIDADE * VRUNITARIO)
                    INTO V_VRTOTLANCTO
                    FROM USR_ITEM_DEVO_MERC
                  WHERE NRNOTAFISCAL = V_NRNOTAFISCAL
                    AND NRINSJURFORN = V_NRINSJURFORN
                    AND CDSERIE      = V_CDSERIE
                    AND DTEMISSAO    = V_DTEMISSAO;
                    
                  SELECT IDTPIJURFORN, NRINSJURFORN
                  INTO V_IDTPIJURNF, V_NRINSJURNF
                  FROM FORNECEDOR
                  WHERE CDFORNECED = V_CDFORNECED;
                    
                  V_NRLANCTONF := NULL;
                  
                  IF V_NRAUTOFORNE IS NOT NULL THEN
                  
                      NOVO_CODIGO_SC('LANCNF/FILIAL'||V_CDFILIAL, V_SEQUENCIALNOTA);
                      V_NRLANCTONF := SUBSTR(V_SEQUENCIALNOTA, 11, 10);
                      
                      INSERT INTO NOTAFISCAL
                          (CDFILIAL, NRLANCTONF, CDFILIRECE, CDEMPRESA, CDINSCESTA, CDSERIE, CDINSCMUNI,
                           IDTPIJURNF, NRINSJURNF, CDFORNECED, IDBLOQUEADO, IDDOCFISCAL, IDDOCFINANC,
                           NRNOTAFISC, DTEMISSAO, DTENTRSAID, VRPRODUTOS, VRNOTAFISC, IDENTRSAIDOP,
                           CDTIPOOPER, CDSERIEENTR, CDCLIENTE, CDFILIEMIT, IDORIGDESTNF, IDSTATUS)
                      VALUES
                          (V_CDFILIAL, V_NRLANCTONF, NULL, V_CDEMPRESA, V_CDINSCESTA, null/*V_CDSERIE*/, V_CDINSCMUNI,
                           V_IDTPIJURNF, V_NRINSJURNF, V_CDFORNECED, 'N', 'N', 'S',
                           LPAD(V_NRNOTAFISCAL, 9, '0'), V_DTEMISSAO, V_DTENTRADA, V_VRTOTLANCTO, V_VRTOTLANCTO, 'S',
                           '10', V_CDSERIE, NULL, V_CDFILIAL, 'F', 'A');
                  END IF;                 
                   
                  INSERT INTO LANCTOESTOQ (CDFILIAL,   CDFILIMOVI,         NRLANCESTQ,   IDTPLANCTO, DTLANCESTQ,  DSLANCESTQ,   NRLANCTONF, CDOPERADOR,   CDALMOXARIFE, CDLOCALESTOQ)
                  VALUES (V_CDFILIAL, V_CDFILIAL, V_NRLANCESTQ, DECODE(V_IDENTRSAID, '2', '4', '2'),        V_DTENTRADA, V_DSLANCESTQ, V_NRLANCTONF,       V_CDOPERADOR, V_CDALMOXARIFE, V_CDLOCALESTOQ);
               END IF;
            EXCEPTION
               WHEN OTHERS THEN
                 V_ERRO := 'COM_ERRO_LANCTOEST';
                 V_ERRO_AUX := SUBSTR(SQLERRM,0,100);
            END;
         
            IF (V_ERRO IS NULL) THEN
            
               BEGIN
                   SELECT DISTINCT MAX(A.NRLANCTONF)
                     INTO V_NRLANCTONFORIG
                     FROM (SELECT DISTINCT NRLANCTONF, NRLANCESTQ
                             FROM USR_ENTR_MERC
                            WHERE CDFILIAL = V_CDFILIAL_EXT
                              AND NRAUTOFORNE = V_NRAUTOFORNE
                              AND NRINSJURFORN = V_NRINSJURFORN
                              AND CDSERIE = V_CDSERIE
                              AND NRLANCTONF IS NOT NULL
                              AND ('1' = V_IDENTRSAID OR V_OPERACAO = 'DEVOLUCAO')
                            UNION ALL
                           SELECT DISTINCT NRLANCTONF, NRLANCESTQ
                             FROM USR_DEVO_MERC
                            WHERE CDFILIAL = V_CDFILIAL_EXT
                               AND NRNOTAFISCAL = V_NRNOTAFISCAL
                               AND NRINSJURFORN = V_NRINSJURFORN
                               AND CDSERIE = V_CDSERIE
                               AND (NRLANCTONF IS NOT NULL OR V_OPERACAO = 'ESTORNO')
                               AND '2' = V_IDENTRSAID AND V_OPERACAO <> 'DEVOLUCAO'
                          ) A;
                         
               EXCEPTION
                   WHEN OTHERS THEN
                      IF ((V_OPERACAO = 'ESTORNO') AND ('1' = V_IDENTRSAID)) THEN
						 V_ERRO := 'LANCAMENTONENCONTRADO';
                         V_ERRO_AUX := SUBSTR(SQLERRM,0,100);
                      END IF;
               END;
               IF V_NRLANCTONFORIG IS NOT NULL AND V_NRAUTOFORNE IS NULL THEN
                    SELECT MAX(NRAUTOFORN) INTO V_NRAUTOFORNE FROM ITEMPRODUTO WHERE NRLANCTONF = V_NRLANCTONFORIG;
                    V_NRAUTOFORN := V_NRAUTOFORNE;
               END IF;
               BEGIN
                   SELECT DISTINCT MAX(A.NRLANCESTQ)
                     INTO V_NRLANCESTQORIG
                     FROM (SELECT DISTINCT NRLANCTONF, NRLANCESTQ
                             FROM USR_ENTR_MERC
                            WHERE CDFILIAL = V_CDFILIAL_EXT
                              AND NRAUTOFORNE = V_NRAUTOFORNE
                              AND NRINSJURFORN = V_NRINSJURFORN
                              AND CDSERIE = V_CDSERIE
                              AND NRLANCTONF IS NOT NULL
                              AND ('1' = V_IDENTRSAID OR V_OPERACAO = 'DEVOLUCAO')
                            UNION ALL
                           SELECT DISTINCT NRLANCTONF, NRLANCESTQ
                             FROM USR_DEVO_MERC
                            WHERE CDFILIAL = V_CDFILIAL_EXT
                               AND NRNOTAFISCAL = V_NRNOTAFISCAL
                               AND NRINSJURFORN = V_NRINSJURFORN
                               AND CDSERIE = V_CDSERIE
                               AND (NRLANCTONF IS NOT NULL OR V_OPERACAO = 'ESTORNO')
                               AND '2' = V_IDENTRSAID AND V_OPERACAO <> 'DEVOLUCAO'
                          ) A;
               EXCEPTION
                   WHEN OTHERS THEN
                      V_ERRO := 'LANCAMENTONENCONTRADO';
                      V_ERRO_AUX := SUBSTR(SQLERRM,0,100);
               END;            
            
               OPEN C_PRODUTOS(V_OPERACAO, V_NRNOTAFISCAL, V_NRINSJURFORN, V_CDSERIE, V_DTEMISSAO, V_IDENTRSAID);
               LOOP
                  FETCH C_PRODUTOS INTO V_CDFILIAL_EXT, V_NRNOTAFISCAL, V_CDFILIAL_EXT_REC, V_NRAUTOFORNE, V_DTIMPORTACAO, V_VRQUANTIDADE,
                                         V_VRUNITARIO,   V_CDPRODINTE,   V_CDPRODUTO,        V_CDFILIAL,    V_CDFILIRECE,   V_DSPRODEMIS,
                                         V_CDPRODEMIS;
                    EXIT WHEN C_PRODUTOS%NOTFOUND;
         
                       V_NRAUTOFORN := LPAD(V_NRAUTOFORNE, 10, '0');
                       
                       SELECT NMPRODUTO, CDARVPROD, NVL(VRFATOCONV, 1), CDPRODESTO
                       INTO V_DSPRODEMIS, V_CDARVPROD, V_VRFATOCONV, V_CDPRODESTO
                       FROM PRODUTO WHERE CDPRODUTO = V_CDPRODUTO;
         
                       BEGIN
                          SELECT IDCNTRESTOQ, IDPRODATIV
                            INTO V_IDCNTRESTOQ_PROD, V_IDPRODATIV
                            FROM PRODFILI F
                           WHERE F.CDFILIAL  = V_CDFILIAL
                             AND F.CDPRODUTO = V_CDPRODUTO;
                       EXCEPTION
                          WHEN OTHERS THEN
                             V_ERRO := 'COM_ERRO_PARPROD';
                             V_ERRO_AUX := ' Util. Contr. Estoque: '||V_IDCNTRESTOQ_PROD||' Ativ/Inat.: '||V_IDPRODATIV;
                       END;
         
                       CASE WHEN (V_IDCNTRESTOQ_PROD = 'S' AND V_IDPRODATIV = 'A') THEN V_RESTRICAO_PROD := TRUE;
                            WHEN (V_IDCNTRESTOQ_PROD = 'N' OR V_IDPRODATIV = 'I' ) THEN V_RESTRICAO_PROD := FALSE;
                       END CASE;
         
                       IF V_RESTRICAO_PROD THEN
                          IF (V_OPERACAO <> 'ESTORNO') THEN
                              SELECT LPAD((TO_NUMBER(NVL(MAX(NRSEQUITEM),'0000')) + 1), 4, 0)
                                INTO V_NRSEQUITEM
                                FROM ITLANCTOEST
                               WHERE CDFILIAL   = V_CDFILIAL
                                 AND NRLANCESTQ = V_NRLANCESTQ;
         
                              BEGIN
                                 --aqui o insert de item produto deve ser feito somente se tiver AF
                                 IF V_NRAUTOFORNE IS NOT NULL THEN
                                     V_VRTOTALITEM := V_VRQUANTIDADE * V_VRUNITARIO;
                                     
                                     INSERT INTO ITEMPRODUTO
                                        (CDFILIAL, NRLANCTONF, NRSEQITPROD, CDPRODUTO,
                                         CDPRODEMIS, DSPRODEMIS, IDATUVRESTOQ, QTITEMPROD,
                                         VRUNITITEM, VRDESCITEM, VRTOTAITEM, VRCONTITEM,
                                         VRBRUTITEM, IDCONFORITEM, CDFILIMOVI,
                                         CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ, NRSUBLOTE,
                                         CDPRODMOVI, NRAUTOFORN, CDMARCA, DTPROGENTAF)
                                     VALUES
                                        (V_CDFILIAL, V_NRLANCTONF, V_NRSEQUITEM, V_CDPRODUTO,
                                         V_CDARVPROD, V_DSPRODEMIS, 'S', V_VRQUANTIDADE,
                                         V_VRUNITARIO, 0, V_VRTOTALITEM, V_VRTOTALITEM,
                                         
                                         V_VRTOTALITEM, 'S', V_CDFILIAL,
                                         ' ', ' ', ' ', ' ',
                                         V_CDPRODESTO, V_NRAUTOFORN, V_CDMARCA, V_DTPROGENTAF);
                                    SELECT LPAD(TO_CHAR(NVL(MAX(NRSEQUITNOTA),0)), 3, '0') INTO V_NRSEQDEVOL FROM ITEMNOTAFISC WHERE CDFILIAL = V_CDFILIAL AND NRLANCTONFIT = V_NRLANCTONFORIG;                       
                                    
                                     INSERT INTO ITEMNOTAFISC
                                        (CDFILIAL, NRLANCTONF, NRSEQUITNOTA, CDFILIALIT, NRLANCTONFIT)
                                     VALUES
                                        (V_CDFILIAL, V_NRLANCTONF, V_NRSEQDEVOL, V_CDFILIAL, V_NRLANCTONFORIG);
                                 END IF;
                                     
                                 INSERT INTO ITLANCTOEST
                                       (CDFILIAL, NRLANCESTQ, NRSEQUITEM, CDPRODUTO, CDPRODMOVI, VRUNILANCTO,
                                        VRTOTLANCTO, QTTOTLANCTO, QTLANCTOEST, IDTIPOMOVI, DTLANCMOVI, IDORDEMCLC,
                                        VRLANCTOBRUT, VRLANCTOEST, CDFILIMOVI, CDALMOXARIFE, CDLOCALESTOQ,
                                        NRLOTEESTQ, NRSUBLOTE)
                                     VALUES
                                       (V_CDFILIAL, V_NRLANCESTQ, V_NRSEQUITEM, V_CDPRODUTO, V_CDPRODESTO, V_VRUNITARIO,
                                        (V_VRQUANTIDADE*V_VRUNITARIO), V_VRQUANTIDADE, (V_VRQUANTIDADE*V_VRFATOCONV), DECODE(V_IDENTRSAID, '2', '4', '2'), V_DTENTRADA,
                                        DECODE(V_IDENTRSAID, '2', '9', '2'), (V_VRUNITARIO/V_VRFATOCONV), (V_VRUNITARIO/V_VRFATOCONV), V_CDFILIAL, ' ', ' ',
                                        ' ', ' ');
                              EXCEPTION
                                 WHEN OTHERS THEN
                                    V_ERRO := 'COM_ERRO_ITLANC';
                                    V_ERRO_AUX := SUBSTR(SQLERRM,0,100);
                              END;
                          END IF;
         
                           BEGIN
                              SELECT MAX(A.CDFILLANC), MAX(A.CDFILDEST)
                                INTO V_CDFILLANC, V_CDFILDEST
                                FROM AUTOFORNE A
                               WHERE A.NRAUTOFORN = V_NRAUTOFORN
                                 AND (A.IDSITUATUAAF IS NULL);
                           EXCEPTION
                               WHEN NO_DATA_FOUND THEN BEGIN
                                  V_CDFILLANC := NULL;
                                  V_CDFILDEST := NULL;
                               END;
                           END;
                          DBMS_OUTPUT.PUT_LINE('antes de abrir o cursor af V_NRAUTOFORN = '||V_NRAUTOFORN); 
                          IF V_NRAUTOFORN IS NOT NULL THEN
                            DBMS_OUTPUT.PUT_LINE('abrir cursor af'); 
                             OPEN C_ITEMAUTF(V_OPERACAO, V_CDFILLANC, V_CDFILDEST, V_NRAUTOFORN, V_CDPRODESTO);
                             LOOP
                                FETCH C_ITEMAUTF INTO V_CDMARCA, V_DTPROGENTAF, V_QTPROGENTAF, V_VRPREUNIAF, V_CDPRODUTO, V_CDARVPROD, V_VRFATOCONVAF;
                                EXIT WHEN C_ITEMAUTF%NOTFOUND;
                                DBMS_OUTPUT.PUT_LINE('cursor af aberto'); 
                                    V_RELACAF := 0;
                                    BEGIN
                                       SELECT COUNT(1)
                                         INTO V_RELACAF
                                         FROM NFRELACAF
                                        WHERE CDFILIAL    = V_CDFILIAL
                                          AND CDFILLANC   = V_CDFILLANC
                                          AND CDFILDEST   = V_CDFILDEST
                                          AND NRAUTOFORN  = V_NRAUTOFORN
                                          AND CDPRODUTO   = V_CDPRODUTO
                                          AND CDMARCA     = V_CDMARCA
                                          AND DTPROGENTAF = V_DTPROGENTAF;
                                    EXCEPTION
                                       WHEN NO_DATA_FOUND THEN
                                          V_RELACAF := 0;
                                    END;
                             
                                    IF(V_OPERACAO = 'ESTORNO') THEN
                                      IF (V_IDENTRSAID = '1') THEN
                                           BEGIN
                                              NF_BAIXA_AF(V_CDFILIAL,  V_NRLANCTONFORIG, NULL, 'E', V_CDARVPROD , V_CDARVPROD,
                                              V_CDPRODUTO, V_CDPRODUTO, 'T', 'T', V_VRQUANTIDADE, V_VRQUANTIDADE,  V_ERROAF);
                             
                                              IF(V_ERROAF <> 'N') THEN
                                                  V_ERRO := 'COM_ERRO_PARPROD';
                                                  V_ERRO_AUX := 'ERRO NA ATUALIZAÇÃO DA AF';
                                              END IF;
                                           EXCEPTION
                                              WHEN OTHERS THEN
                                                 V_ERRO := 'COM_ERRO_PARPROD';
                                        DBMS_OUTPUT.PUT_LINE('else V_IDENTRSAID 2'); 
                                                 V_ERRO_AUX := SUBSTR(SQLERRM,0,100);
                                           END;
                                      ELSE --V_IDENTRSAI = '2'
                                           
                                           UPDATE ITEMAUTF
                                              SET QTEFETENTRAF = (QTEFETENTRAF+V_VRQUANTIDADE)
                                            WHERE CDFILLANC   = V_CDFILLANC
                                              AND CDFILDEST   = V_CDFILDEST
                                              AND NRAUTOFORN  = V_NRAUTOFORN
                                              AND CDPRODUTO   = V_CDPRODUTO
                                              AND CDMARCA     = V_CDMARCA
                                              AND DTPROGENTAF = V_DTPROGENTAF;
                                          
                                      END IF;
                                    ELSE
                                       IF V_RELACAF <> 0 THEN
                                            
                                       USR_NF_DEVO_AF(V_CDFILIAL, V_NRLANCTONF, V_CDPRODUTO, V_NRSEQUITEM, V_VRQUANTIDADE, V_VRUNITARIO);
                             
                            
                                       END IF;
                                    END IF;
                             END LOOP;
                             CLOSE C_ITEMAUTF;
                          END IF;
                       ELSE
                          V_ERRO := 'COM_ERRO_PARPROD';
                          V_ERRO_AUX := ' Util. Contr. Estoque: '||V_IDCNTRESTOQ_PROD||' Ativ/Inat.: '||V_IDPRODATIV;
                       END IF;
               END LOOP;
               CLOSE C_PRODUTOS;
         
         
               IF V_DTENTRADA < V_DTPROCESSA THEN
                  V_DTINICIAL := V_DTENTRADA;
               ELSE
                  V_DTINICIAL := V_DTPROCESSA;
               END IF;
         
               IF V_DTENTRADA > V_DTPROCESSA THEN
                  V_DTFINAL := V_DTENTRADA;
               ELSE
                  V_DTFINAL := V_DTPROCESSA;
               END IF;
         
         
               IF(V_OPERACAO = 'ESTORNO') THEN
                    DBMS_OUTPUT.PUT_LINE('delecoes de estorno'); 
                   V_NRLANCESTUPDATE := V_NRLANCTONFORIG;
         
                   BEGIN
                       IF(V_IDENTRSAID = '1') THEN
                            DBMS_OUTPUT.PUT_LINE('V_IDENTRSAID = '||V_IDENTRSAID); 
                           DELETA_NF(V_CDFILIAL, V_NRLANCTONFORIG, 'I');
                           
                           CUSTO_LIQUIDO(V_CDFILIAL, V_NRLANCESTQORIG, 0, NULL, 'S');
                           ATUALIZA_ESTOQUE(V_CDFILIAL, V_DTINICIAL, V_DTFINAL, V_CDFILIAL, V_NRLANCESTQORIG, NULL);
                           
                           DELETA_NF(V_CDFILIAL, V_NRLANCTONFORIG, 'C');
                       ELSE
                           DBMS_OUTPUT.PUT_LINE('else do estorno V_NRAUTOFORNE = '||V_NRAUTOFORNE); 
                           IF V_NRAUTOFORNE IS NOT NULL THEN
                               DBMS_OUTPUT.PUT_LINE('deletando V_NRLANCTONFORIG = '||V_NRLANCTONFORIG); 
                               DELETA_NF(V_CDFILIAL, V_NRLANCTONFORIG, 'I');
                           
                               CUSTO_LIQUIDO(V_CDFILIAL, V_NRLANCESTQORIG, 0, NULL, 'S');
                               ATUALIZA_ESTOQUE(V_CDFILIAL, V_DTINICIAL, V_DTFINAL, V_CDFILIAL, V_NRLANCESTQORIG, NULL);
                               
                               DELETA_NF(V_CDFILIAL, V_NRLANCTONFORIG, 'C');
                           ELSE
                               DBMS_OUTPUT.PUT_LINE('nao tem nota'); 
                               DELETE ITLANCTOEST
                               WHERE CDFILIAL = V_CDFILIAL
                               AND NRLANCESTQ = V_NRLANCESTQORIG;
                               
                               CUSTO_LIQUIDO(V_CDFILIAL, V_NRLANCESTQORIG, 0, NULL, 'S');         
                               ATUALIZA_ESTOQUE(V_CDFILIAL, V_DTINICIAL, V_DTFINAL, V_CDFILIAL, V_NRLANCESTQORIG, NULL);                           
             
                               DELETE LANCTOESTOQ
                               WHERE CDFILIAL = V_CDFILIAL
                               AND NRLANCESTQ = V_NRLANCESTQORIG;
                           END IF;
                       END IF;
         
                       IF(V_IDENTRSAID = '1') THEN
                           DELETE USR_ENTR_MERC
                           WHERE NRNOTAFISCAL = V_NRNOTAFISCAL
                           AND NRINSJURFORN   = V_NRINSJURFORN
                           AND CDSERIE        = V_CDSERIE
                           AND CDFILIAL       = V_CDFILIAL_EXT;
         
                           DELETE USR_ITEM_ENTR_MERC
                           WHERE NRNOTAFISCAL = V_NRNOTAFISCAL
                           AND NRINSJURFORN   = V_NRINSJURFORN
                           AND CDSERIE        = V_CDSERIE
                           AND CDFILIAL       = V_CDFILIAL_EXT;
                       ELSE
                           
                           DELETE USR_DEVO_MERC
                           WHERE NRNOTAFISCAL = V_NRNOTAFISCAL
                           AND NRINSJURFORN   = V_NRINSJURFORN
						   AND CDSERIE        = V_CDSERIE
                           AND CDFILIAL       = V_CDFILIAL_EXT;
         
                           DELETE USR_ITEM_DEVO_MERC
                           WHERE NRNOTAFISCAL = V_NRNOTAFISCAL
                           AND NRINSJURFORN   = V_NRINSJURFORN
                           AND CDSERIE        = V_CDSERIE
                           AND CDFILIAL       = V_CDFILIAL_EXT;
                       END IF;
                   EXCEPTION
                       WHEN OTHERS THEN
                         V_ERRO := 'COM_ERRO_PARPROD';
                         V_ERRO_AUX := 'Erro ao excluir nota fiscal';
                   END;
               ELSE
                   V_NRLANCESTUPDATE := V_NRLANCESTQ;
               END IF;
         
               CUSTO_LIQUIDO(V_CDFILIAL, V_NRLANCESTUPDATE, 0, NULL, 'S');
               BAIXAAF(V_CDFILIAL, V_CDFILIAL, V_NRAUTOFORN); -- nao pode ficar no loop de produto
               ATUALIZA_ESTOQUE(V_CDFILIAL, V_DTINICIAL, V_DTFINAL, V_CDFILIAL, V_NRLANCESTUPDATE, NULL);
         
               /* Atualiza a Itlanctoest para não evoluir estoque caso encontre erro ao atualizar o estoque */
               FOR C_PRODIRREG IN (SELECT M.NRMOVILOTE, M.CDFILIAL, M.CDALMOXARIFE, M.CDLOCALESTOQ,
                                          M.CDPRODUTO, M.NRLOTEESTQ, M.NRSUBLOTE, P.NMPRODUTO,
                                          TO_CHAR(REPLACE(TO_CHAR(P.CDARVPROD, REPLACE((SELECT CDPICTPROD FROM PARAMGERAL), '.', ',')), ',', '.')) AS CDARVPROD
                                     FROM MOVILOTE M, PRODUTO P
                                    WHERE M.NRMOVILOTE = V_CDFILIAL||V_NRLANCESTUPDATE
                                      AND CDFILIAL     = V_CDFILIAL
                                      AND M.CDPRODUTO  = P.CDPRODUTO)
               LOOP
                  UPDATE ITLANCTOEST
                     SET IDEVOLESTOQ  = 'N'
                   WHERE CDFILIAL     = V_CDFILIAL
                     AND NRLANCESTQ   = V_NRLANCESTUPDATE
                     AND CDALMOXARIFE = ' '
                     AND CDLOCALESTOQ = ' '
                     AND CDPRODUTO    = V_CDPRODUTO
                     AND NRLOTEESTQ   = ' '
                     AND NRSUBLOTE    = ' ';
         
                  V_ERRO := 'COM_ERRO_IRREGEST';
                  V_PROD_IRREG := V_PROD_IRREG||' '||C_PRODIRREG.CDARVPROD||'-'||C_PRODIRREG.NMPRODUTO;
               END LOOP;
               
               IF V_PROD_IRREG IS NOT NULL THEN
                  V_ERRO_AUX := ' Operação Bloqueada! Algum(ns) produto(s) tornariam o estoque irregular. '||V_PROD_IRREG;
               END IF;
         
               DELETE MOVILOTE
                WHERE NRMOVILOTE = V_CDFILIAL||V_NRLANCESTUPDATE;
         
            END IF;
         ELSE
            V_ERRO := 'COM_ERRO_PARFIL';
            V_ERRO_AUX := ' Util. Contr. de Estoque:'||V_IDCTRLESTQ||' Util. Contr. de Lote:'||V_IDUTILLOTE||' Util. Contr. de Almox.:'||V_IDUTILALMOX;
         END IF;
      ELSE
         V_ERRO := 'COM_ERRO_NF_JA_EXISTE';
         V_ERRO_AUX := SUBSTR(SQLERRM,0,100);
      END IF;      

   IF V_ERRO IS NULL THEN

      IF V_OPERACAO = 'ESTORNO' THEN
         UPDATE USR_ESTORNO_MERC
            SET DTIMPORTACAO = SYSDATE,
                NRLANCTONF   = V_NRLANCTONF,
                NRLANCESTQ   = V_NRLANCESTUPDATE,
                LOG_ERRO     = 'Operação realizada com Sucesso! (Data:'||TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')||')'
          WHERE CDFILIAL     = V_CDFILIAL_EXT
            AND NRNOTAFISCAL = V_NRNOTAFISCAL
            AND NRINSJURFORN = V_NRINSJURFORN
            AND CDSERIE      = V_CDSERIE
            AND DTEMISSAO    = V_DTEMISSAO
            AND LOG_ERRO IS NULL;
      ELSE
         UPDATE USR_DEVO_MERC
            SET DTIMPORTACAO = SYSDATE,
                NRLANCTONF   = V_NRLANCTONF,
                NRLANCESTQ   = V_NRLANCESTQ,
                LOG_ERRO     = 'Operação realizada com Sucesso! (Data:'||TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')||')'
          WHERE CDFILIAL     = V_CDFILIAL_EXT
            AND NRNOTAFISCAL = V_NRNOTAFISCAL
            AND NRINSJURFORN = V_NRINSJURFORN
            AND CDSERIE      = V_CDSERIE
            AND DTEMISSAO    = V_DTEMISSAO
            AND LOG_ERRO IS NULL;
            
         UPDATE USR_ITEM_DEVO_MERC
          SET IDIMPORTADO = 'S'
          WHERE NRNOTAFISCAL = V_NRNOTAFISCAL
            AND NRINSJURFORN = V_NRINSJURFORN
            AND CDSERIE      = V_CDSERIE
            AND DTEMISSAO    = V_DTEMISSAO;    
      END IF;

   ELSE
      /*TRATATIVAS DE LOG*/
      V_DESC_LOG := 'Operação não realizada - FILIAL: '||V_CDFILIAL||' NF: '||V_NRNOTAFISCAL||' DT. EMIS.: '||V_DTEMISSAO||'Tipo: '||V_OPERACAO||' -';

      CASE WHEN V_ERRO = 'COM_ERRO_PARFIL'         THEN V_DESC_LOG := V_DESC_LOG||'(Restrição de Par. de Filial) '||V_ERRO_AUX;
           WHEN V_ERRO != 'OTHERS' THEN V_DESC_LOG := V_DESC_LOG||' '||V_ERRO_AUX;
           WHEN V_ERRO = 'COM_ERRO_PARPROD'        THEN V_DESC_LOG := V_DESC_LOG||'(Restrição de Par. de Produtos) '||V_ERRO_AUX;
           WHEN V_ERRO = 'COM_ERRO_OPER'           THEN V_DESC_LOG := V_DESC_LOG||'(Operador padrão não parametrizado) '||V_ERRO_AUX;
           WHEN V_ERRO = 'COM_ERRO_LANCTOEST'      THEN V_DESC_LOG := V_DESC_LOG||'(Erro no Lanç. do Cabeçalho) '||V_ERRO_AUX;
      END CASE;

      NOVO_CODIGO('INTEGRA_WEBSERV_CABEC/FILIAL' || V_CDFILIAL_EXT, V_SEQUENCIAL);
      V_SEQLOG := SUBSTR(V_SEQUENCIAL, 11, 10);

         LOG_WEBSERVICE_INTEGRACAO('C',
                                   V_SEQLOG,
                                   V_DSMETODO,
                                   'INCLUSAO',
                                   NULL,
                                   'LANCAMENTO',
                                   NULL,
                                   NULL,
                                   V_DESC_LOG,
                                   V_CDFORNECED,
                                   NULL,
                                   NULL,
                                   V_CDFILIAL,
                                   V_NRLANCTONF,
                                   NULL,
                                   V_NRLANCESTUPDATE,
                                   NULL,
                                   NULL,
                                   V_CDFILIRECE,
                                   NULL,
                                   NULL,
                                   NULL,
                                   NULL);

      IF (V_JACADASTRADO = 0) THEN 
         IF V_OPERACAO = 'ESTORNO' THEN
            UPDATE USR_ESTORNO_MERC
               SET LOG_ERRO = V_ERRO||' (Data:'||TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')||V_ERRO_AUX||')',
                   NRLANCTONF   = V_NRLANCTONF,
                   NRLANCESTQ   = V_NRLANCESTQ            
             WHERE CDFILIAL     = V_CDFILIAL_EXT
               AND NRNOTAFISCAL = V_NRNOTAFISCAL
               AND NRINSJURFORN = V_NRINSJURFORN
               AND CDSERIE      = V_CDSERIE
               AND DTEMISSAO    = V_DTEMISSAO
               AND LOG_ERRO IS NULL;
         ELSE
            UPDATE USR_DEVO_MERC
               SET LOG_ERRO = V_ERRO||' (Data:'||TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')||V_ERRO_AUX||')',
                   NRLANCTONF   = V_NRLANCTONF,
                   NRLANCESTQ   = V_NRLANCESTQ            
             WHERE CDFILIAL     = V_CDFILIAL_EXT
               AND NRNOTAFISCAL = V_NRNOTAFISCAL
               AND NRINSJURFORN = V_NRINSJURFORN
               AND CDSERIE      = V_CDSERIE
               AND DTEMISSAO    = V_DTEMISSAO
               AND LOG_ERRO IS NULL;
               
            UPDATE USR_ITEM_DEVO_MERC
              SET IDIMPORTADO = 'S'
              WHERE NRNOTAFISCAL = V_NRNOTAFISCAL
                AND NRINSJURFORN = V_NRINSJURFORN
                AND CDSERIE      = V_CDSERIE
                AND DTEMISSAO    = V_DTEMISSAO;      
                
         END IF;
      ELSE
         IF V_OPERACAO = 'ESTORNO' THEN
            UPDATE USR_ESTORNO_MERC
               SET LOG_ERRO = V_ERRO||' (Data:'||TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')||V_ERRO_AUX||')'           
             WHERE CDFILIAL     = V_CDFILIAL_EXT
               AND NRNOTAFISCAL = V_NRNOTAFISCAL
               AND NRINSJURFORN = V_NRINSJURFORN
               AND CDSERIE      = V_CDSERIE
               AND DTEMISSAO    = V_DTEMISSAO
               AND LOG_ERRO IS NULL;
         ELSE
            UPDATE USR_DEVO_MERC
               SET LOG_ERRO = V_ERRO||' (Data:'||TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')||V_ERRO_AUX||')'           
             WHERE CDFILIAL     = V_CDFILIAL_EXT
               AND NRNOTAFISCAL = V_NRNOTAFISCAL
               AND NRINSJURFORN = V_NRINSJURFORN
               AND CDSERIE      = V_CDSERIE
               AND DTEMISSAO    = V_DTEMISSAO
               AND LOG_ERRO IS NULL;
               
            UPDATE USR_ITEM_DEVO_MERC
               SET IDIMPORTADO = 'S'
              WHERE NRNOTAFISCAL = V_NRNOTAFISCAL
                AND NRINSJURFORN = V_NRINSJURFORN
                AND CDSERIE      = V_CDSERIE
                AND DTEMISSAO    = V_DTEMISSAO;  
              
         END IF;      
      END IF;
   END IF;
   
   COMMIT;

   END LOOP;
   CLOSE C_CABECALHO;

   COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('USR_IMPORTA_DEVOLUCOES','6.35.021'); END;
/
