create or replace PROCEDURE PROT_EXPORTA_NFSAIDA
IS
V_CDFIL_EXP  VARCHAR2(4);
V_EMPRESA    VARCHAR2(2);
V_CPASS      VARCHAR2(5);
V_NOPC       VARCHAR2(1);
V_C5_NUM     VARCHAR2(9);
V_C5_CLIENTE VARCHAR2(14);
V_C5_LOJACLI VARCHAR2(2);
V_C5_TIPOCLI VARCHAR2(1);
V_C5_EMISSAO DATE;
V_C5_MENNOTA VARCHAR2(250);
V_C5_TIPLIB  VARCHAR2(1);
V_CEMPAUX    VARCHAR2(2);
V_CFILAUX    VARCHAR2(2);
/* ITEMPRODUTO */
V_C6_PRODUTO VARCHAR2(15);
V_C6_QTDVEN  FLOAT;
V_C6_QTDLIB  FLOAT;
V_C6_PRCVEN  FLOAT;
V_C6_VALOR   FLOAT;
V_C6_UM      VARCHAR2(5);
V_C6_LOCAL   VARCHAR2(2);
V_C6_ENTREG  DATE;
V_CDTIPOOPER VARCHAR2(2);
V_C5_TIPO    VARCHAR2(1);
   
V_CDFILIAL   VARCHAR2(4);
V_NRLANCTONF VARCHAR2(10);
V_VRTOTAITEM FLOAT; 
V_VRDESCITEM FLOAT;
V_TOTAL      FLOAT;
V_CDIMPOSTO  VARCHAR2(2);
V_CDIMPOSNFE VARCHAR2(2);
V_TIPOIMPOS  VARCHAR2(2);
V_CDPRODUTO  VARCHAR2(10);
V_BOOLC5TIPO BOOLEAN;
V_CONTADOR   INTEGER;
   
V_ERRO       VARCHAR2(500);
   
CURSOR C_FILIAL IS
SELECT F.CDFILIAL, P.CDEXFILIAL, F.CDEMPRESA
  FROM FILIAL F, PARAMFILIAL P
 WHERE F.CDFILIAL = P.CDFILIAL
   AND CDEXFILIAL IS NOT NULL;

CURSOR C_NOTAS(C_CDFILIRECE IN VARCHAR2) IS
SELECT N.CDFILIAL, N.NRLANCTONF, NVL(SUBSTR(N.NRNOTAFISC, -9), N.NRNOTAFISC) C5_NUM,
      SUBSTR(REGEXP_REPLACE(NVL(N.NRINSJURNF, C.NRINSJURCLIE), '\D'), 1, 14) C5_CLIENTE, 
      CASE WHEN T.CDTIPOOPER = '03'
           THEN 'C'
           WHEN T.CDTIPOOPER = '06'
           THEN 'D'
           ELSE 'N'            
      END AS C5_TIPOCLI,
      N.DTEMISSAO C5_EMISSAO, /*LPAD(C.CDFORMPGTO, 3, '0') C5_CONDPAG, */
      SUBSTR(D.DSDADOADIC, 1, 250) C5_MENNOTA,
      --SUBSTR(N.DSCDFISOPENF, 1, 10) C5_NATUREZ, 
      N.DTENTRSAID C6_ENTREG, -- REFERENTE AO ITEM
      T.CDTIPOOPER
  FROM NOTAFISCAL N JOIN TIPOOPERAC T
                      ON N.IDENTRSAIDOP = T.IDENTRSAIDOP
                     AND N.CDTIPOOPER   = T.CDTIPOOPER
                    JOIN CLIENTE C
                      ON N.CDCLIENTE   = C.CDCLIENTE
               LEFT JOIN DADOSADIC D
                      ON D.CDFILIAL = N.CDFILIAL
                     AND D.NRLANCTONF = N.NRLANCTONF
              INNER JOIN (SELECT PARAMEMPRESA.CDEMPINTEGRACAO AS CDFIL_PROTHEUS, PARAMEMPRESA.CDEXPORTEMPR AS CDEMPRE_PROTHEUS, EMPRESA.CDEMPRESA AS CDEMPR_TEK
                            FROM PARAMEMPRESA
                           INNER JOIN EMPRESA
                              ON EMPRESA.CDEMPRESA = PARAMEMPRESA.CDEMPRESA) EMPR_PROTHEUS
                      ON N.CDEMPRESA = EMPR_PROTHEUS.CDEMPR_TEK  
 WHERE T.IDENTRSAIDOP = 'S'
   AND N.DTEXPXMLPROT IS NULL
   AND EXISTS(SELECT CDFILIAL
                FROM ITEMPRODUTO I
               WHERE I.CDFILIAL = N.CDFILIAL
                 AND I.NRLANCTONF = N.NRLANCTONF);
    
CURSOR C_ITEMPRODUTO(C_CDFILIAL IN VARCHAR2, C_NRLANCTONF IN VARCHAR2) IS
SELECT P.CDARVPROD C6_PRODUTO, I.QTITEMPROD C6_QTDVEN, I.QTITEMPROD C6_QTDLIB, I.VRUNITITEM C6_PRCVEN, I.VRTOTAITEM C6_VALOR,
       P.SGUNIDADE C6_UM, /*I.CDFISOPEITEM C6_CF,*/ I.CDALMOXARIFE C6_LOCAL, I.CDPRODUTO
  FROM ITEMPRODUTO I, PRODUTO P
 WHERE I.CDPRODUTO  = P.CDPRODUTO
   AND I.CDFILIAL   = C_CDFILIAL
   AND I.NRLANCTONF = C_NRLANCTONF;

CURSOR C_IMPOSTO(C_CDFILIAL IN VARCHAR2, C_NRLANCTONF IN VARCHAR2) IS
SELECT CDIMPOSTO
  FROM IMPOSNFTOT
 WHERE CDFILIAL   = C_CDFILIAL
   AND NRLANCTONF = C_NRLANCTONF
 ORDER BY CDIMPOSTO;

BEGIN
   V_CPASS      := 'SPORT';
   V_NOPC       := '3';
   V_C5_LOJACLI := '01';
   V_C5_TIPLIB  := '1';
   
   DELETE FROM USR_PROT_NFSAIDA;
   COMMIT;

   DELETE FROM USR_PROT_ITEMSAIDA;
   COMMIT;

   DELETE USR_PROT_INTEGRACAO 
    WHERE CDLOG = 'EnviarNFS'
      AND (OBSLOG = NULL)
      AND TRUNC(DTINCLUSAO) < TRUNC(SYSDATE-7);
   COMMIT;


   OPEN C_FILIAL;
   LOOP
      FETCH C_FILIAL INTO V_CDFIL_EXP, V_CFILAUX, V_CEMPAUX;
      EXIT WHEN C_FILIAL%NOTFOUND;

      OPEN C_NOTAS(V_CDFIL_EXP);
      LOOP
         FETCH C_NOTAS INTO V_CDFILIAL, V_NRLANCTONF, V_C5_NUM, V_C5_CLIENTE, V_C5_TIPOCLI, V_C5_EMISSAO, /*V_C5_CONDPAG,*/ V_C5_MENNOTA,
                            /*V_C5_NATUREZ,*/ V_C6_ENTREG, V_CDTIPOOPER;
         EXIT WHEN C_NOTAS%NOTFOUND;

         INSERT INTO USR_PROT_NFSAIDA(CPASS, NOPC, C5_NUM, C5_CLIENTE, C5_TIPOCLI, C5_EMISSAO, /*C5_CONDPAG,*/ C5_MENNOTA, /*C5_NATUREZ,*/ C5_TIPLIB,
                                      CEMPAUX, CFILAUX, CDFILIAL, NRLANCTONF)
         VALUES(V_CPASS, V_NOPC, V_C5_NUM, V_C5_CLIENTE, V_C5_TIPOCLI, V_C5_EMISSAO, /*V_C5_CONDPAG,*/ V_C5_MENNOTA, /*V_C5_NATUREZ,*/ V_C5_TIPLIB,
                V_CEMPAUX, V_CFILAUX, V_CDFILIAL, V_NRLANCTONF);

         V_BOOLC5TIPO := TRUE;
         OPEN C_ITEMPRODUTO(V_CDFILIAL, V_NRLANCTONF);
         LOOP
            FETCH C_ITEMPRODUTO INTO V_C6_PRODUTO, V_C6_QTDVEN, V_C6_QTDLIB, V_C6_PRCVEN, V_C6_VALOR, V_C6_UM, /*V_C6_CF,*/ V_C6_LOCAL, V_CDPRODUTO;
            EXIT WHEN C_ITEMPRODUTO%NOTFOUND;

            IF (V_BOOLC5TIPO) THEN
               IF V_CDTIPOOPER = '06' THEN
                  V_C5_TIPO := 'D';
               ELSIF V_CDTIPOOPER = '03' THEN
                  BEGIN
                     SELECT VRTOTAITEM, VRDESCITEM
                       INTO V_VRTOTAITEM, V_VRDESCITEM
                       FROM ITEMPRODUTO
                      WHERE CDFILIAL   = V_CDFILIAL
                        AND NRLANCTONF = V_NRLANCTONF
                        AND CDPRODUTO  = V_CDPRODUTO;

                     V_TOTAL := V_VRTOTAITEM - V_VRDESCITEM;
                  EXCEPTION
                     WHEN OTHERS THEN
                        V_TOTAL := 0;
                  END;

                  IF V_TOTAL = 0 THEN
                     V_CONTADOR := 0;
                     OPEN C_IMPOSTO(V_CDFILIAL, V_NRLANCTONF);
                     LOOP
                        FETCH C_IMPOSTO INTO V_CDIMPOSTO;
                        EXIT WHEN C_IMPOSTO%NOTFOUND;

                          SELECT CDIMPOSTONFE
                            INTO V_CDIMPOSNFE
                            FROM IMPOSTO
                           WHERE CDIMPOSTO = V_CDIMPOSTO;

                          SELECT CDIMPOSTONFE
                            INTO V_TIPOIMPOS
                            FROM IMPOSTONFE
                           WHERE CDIMPOSTONFE = V_CDIMPOSNFE;

                          IF V_TIPOIMPOS = '00' THEN
                             V_C5_TIPO := 'I';
                             V_CONTADOR := V_CONTADOR + 1;
                          ELSIF V_TIPOIMPOS = '10' THEN
                             V_C5_TIPO := 'P';
                             V_CONTADOR := V_CONTADOR + 1;
                          END IF;
                      END LOOP;

                      IF (V_CONTADOR > 1) THEN
                         V_C5_TIPO := 'I';
                      END IF;
                  ELSE
                     V_C5_TIPO := 'C';
                  END IF;
               ELSE
                  V_C5_TIPO := 'N';
               END IF;

               UPDATE USR_PROT_NFSAIDA
                  SET C5_TIPO = V_C5_TIPO
                WHERE CDFILIAL = V_CDFILIAL
                  AND NRLANCTONF = V_NRLANCTONF;

               V_BOOLC5TIPO := FALSE;
            END IF;

            INSERT INTO USR_PROT_ITEMSAIDA(C6_PRODUTO, C6_QTDVEN, C6_QTDLIB, C6_PRCVEN, C6_VALOR, C6_UM, /*C6_TES, C6_CF, */
                                           C6_LOCAL, C6_ENTREG, CDFILIAL, NRLANCTONF)
            VALUES(V_C6_PRODUTO, V_C6_QTDVEN, V_C6_QTDLIB, V_C6_PRCVEN, V_C6_VALOR, V_C6_UM, /*V_C6_TES, V_C6_CF, */
                   V_C6_LOCAL, V_C6_ENTREG, V_CDFILIAL, V_NRLANCTONF);
         END LOOP;

         UPDATE NOTAFISCAL
            SET DTEXPXMLPROT = SYSDATE
          WHERE CDFILIAL     = V_CDFILIAL
            AND NRLANCTONF   = V_NRLANCTONF;   

         CLOSE C_ITEMPRODUTO;
      END LOOP;
      CLOSE C_NOTAS;

      COMMIT;
   END LOOP;
   CLOSE C_FILIAL;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('PROT_EXPORTA_NFSAIDA','6.29.XXX'); END;
/