create or replace PROCEDURE PROT_EXPORTA_PRODUTO
IS

V_CDFILIAL  VARCHAR2(04);
V_CPASS     VARCHAR2(05) := 'SPORT' ;
V_NOPC      VARCHAR2(01);
V_CXCODIGO  VARCHAR2(4000);
V_CXDESCRI  VARCHAR2(4000);
V_CXTIPO    VARCHAR2(4000);
V_CXUM      VARCHAR2(4000);
V_CXLOCPAD  VARCHAR2(4000);
V_CXGRUPO   VARCHAR2(4000);
V_CDESCGRUP VARCHAR2(4000);
V_CXPOSIPI  VARCHAR2(4000);
V_CBLOQUE   VARCHAR2(4000);
V_CULTPRC   VARCHAR2(4000);
V_CULTCOM   VARCHAR2(4000);
V_CXORIGEM  VARCHAR2(4000);
V_CCLASFISC VARCHAR2(4000);
V_CGARANTIA VARCHAR2(4000);
V_CCEST     VARCHAR2(4000);
V_CDPRODUTO VARCHAR2(4000);
V_CEMPAUX   VARCHAR2(02);
V_CFILAUX   VARCHAR2(02);
V_ERRO      VARCHAR2(5000);
V_SEQLOG    NUMBER;
V_OBS       VARCHAR2(5000);

CURSOR C_PRODUTO IS
   SELECT DISTINCT NOPC, CXCODIGO, CXDESCRI, CXTIPO, CXUM, CXLOCPAD, CXGRUPO, CDESCGRUP, CXPOSIPI, CBLOQUE, CULTPRC, CULTCOM, CXORIGEM, CCLASFISC, CCEST, CDPRODUTO, CDFIL_PROTHEUS, CDEMPRE_PROTHEUS
     FROM (SELECT DISTINCT ROWNUM REG, (CASE WHEN PF.DTEXPXMLPROT IS NULL THEN '3'
                                             WHEN PF.DTEXPXMLPROT < PF.DTULTATUPROD THEN '4'
                                        END) AS NOPC,
                           SUBSTR(PF.CDPRODUTO,0,14) AS CXCODIGO,
                           SUBSTR(PF.NMPRODUTO,0,39) AS CXDESCRI,
                           (CASE WHEN PF.CDTPITEMPROD = '01' THEN 'MP'
                                 WHEN PF.CDTPITEMPROD = '04' THEN 'PA'
                                 WHEN PF.CDTPITEMPROD = '06' THEN 'PI'
                                 WHEN PF.CDTPITEMPROD = '07' THEN 'MC'
                                ELSE 'MP' END) CXTIPO,
                           SUBSTR(PF.SGUNIDADE,0,2) AS CXUM,
                           '01' CXLOCPAD,
                           '0328' CXGRUPO,
                           '' CDESCGRUP,
                           LPAD(PF.CDCLASFISC,8,0) CXPOSIPI,
                           '2' CBLOQUE,
                           NVL(ROUND(CP.VRLIQCMPPROD,5),0) CULTPRC,
                           (TRUNC(CP.DTCUSTCMPPRO)) CULTCOM ,
                           CASE WHEN PF.CDCSTDIG1PROD IN ('0', '3','4','5','8') THEN '0' ELSE '1' END CXORIGEM,
                           PF.CDGENPROD CCLASFISC,
                           REPLACE(PF.CDCEST,'.','') AS CCEST,
                           PF.CDPRODUTO,
                           '00' CDFIL_PROTHEUS,
                           FIL.CDEMPRE_PROTHEUS
             FROM (SELECT PF.CDFILIAL, PR.CDARVPROD, PR.CDPRODUTO, PR.NMPRODUTO, PR.CDCLASFISC, PR.SGUNIDADE, PR.CDCEST, PR.CDGENPROD, PR.CDCSTDIG1PROD, PR.CDTPITEMPROD,
                          NVL(PF.CDALMOXARIFE, P.CDALMOXARIFE) CDALMOXARIFE, NVL(PF.CDLOCALESTOQ,P.CDLOCALESTOQ) CDLOCALESTOQ, PF.IDPRODATIV, PR.DTEXPXMLPROT, DTULTATUPROD
                     FROM PRODUTO PR, PRODFILI PF, PARAMFILIAL P
                    WHERE PF.CDFILIAL  = P.CDFILIAL
                      AND PF.CDPRODUTO = PR.CDPRODUTO
                      AND PR.CDNVPRODUTO = '5'
                    ORDER BY PR.CDARVPROD, PR.NMPRODUTO, PF.CDFILIAL) PF

        INNER JOIN (SELECT PARAMEMPRESA.CDEXPORTEMPR AS CDEMPRE_PROTHEUS, 'FIL' CDKEY
                                  FROM PARAMEMPRESA
                                 INNER JOIN EMPRESA ON EMPRESA.CDEMPRESA = PARAMEMPRESA.CDEMPRESA
                                 GROUP BY PARAMEMPRESA.CDEXPORTEMPR
                                 ORDER BY CDEMPRE_PROTHEUS) FIL ON FIL.CDKEY = 'FIL'
       LEFT JOIN CLASFISCAL CL
    ON PF.CDCLASFISC = CL.CDCLASFISC
  LEFT JOIN CUSTOCMPPROD CP
    ON CP.CDFILIAL     = PF.CDFILIAL
   AND CP.CDALMOXARIFE = PF.CDALMOXARIFE
   AND CP.CDLOCALESTOQ = PF.CDLOCALESTOQ
   AND CP.NRLOTEESTQ   = (SELECT MAX(NRLOTEESTQ)
                            FROM CUSTOCMPPROD C
                           WHERE C.CDFILIAL     = CP.CDFILIAL
                             AND C.CDALMOXARIFE = CP.CDALMOXARIFE
                             AND C.CDLOCALESTOQ = CP.CDLOCALESTOQ
                             AND C.NRLOTEESTQ   = CP.NRLOTEESTQ
                             AND C.CDPRODUTO    = CP.CDPRODUTO)
   AND CP.NRSUBLOTE    = (SELECT MAX(NRSUBLOTE)
                            FROM CUSTOCMPPROD
                           WHERE CDFILIAL     = CP.CDFILIAL
                             AND CDALMOXARIFE = CP.CDALMOXARIFE
                             AND CDLOCALESTOQ = CP.CDLOCALESTOQ
                             AND NRLOTEESTQ   = CP.NRLOTEESTQ
                             AND CDPRODUTO    = CP.CDPRODUTO)
   AND CP.CDPRODUTO    = PF.CDPRODUTO
   AND CP.DTCUSTCMPPRO = (SELECT MAX(DTCUSTCMPPRO)
                            FROM CUSTOCMPPROD
                           WHERE CDFILIAL     = CP.CDFILIAL
                             AND CDALMOXARIFE = CP.CDALMOXARIFE
                             AND CDLOCALESTOQ = CP.CDLOCALESTOQ
                             AND NRLOTEESTQ   = CP.NRLOTEESTQ
                             AND CDPRODUTO    = CP.CDPRODUTO)
    WHERE ((PF.DTEXPXMLPROT IS NULL) OR (PF.DTEXPXMLPROT < PF.DTULTATUPROD)) ORDER BY CXCODIGO, FIL.CDEMPRE_PROTHEUS)
    ORDER BY CXDESCRI;

BEGIN

   DELETE FROM USR_PROT_PRODUTO;
   COMMIT;

   DELETE USR_PROT_INTEGRACAO
    WHERE CDLOG = 'EnviarProduto'
      AND OBSLOG = NULL;

   COMMIT;

   OPEN C_PRODUTO;
   LOOP
      FETCH C_PRODUTO INTO V_NOPC, V_CXCODIGO, V_CXDESCRI, V_CXTIPO, V_CXUM, V_CXLOCPAD, V_CXGRUPO, V_CDESCGRUP,
                           V_CXPOSIPI, V_CBLOQUE, V_CULTPRC, V_CULTCOM, V_CXORIGEM, V_CCLASFISC, V_CCEST, V_CDPRODUTO, V_CFILAUX, V_CEMPAUX;
      EXIT WHEN C_PRODUTO%NOTFOUND;

            INSERT INTO USR_PROT_PRODUTO(CPASS, NOPC, CXCODIGO, CXDESCRI, CXTIPO, CXUM, CXLOCPAD, CXGRUPO, CDESCGRUP, CXPOSIPI,
                                         CBLOQUE, CULTPRC, CULTCOM, CXORIGEM, CCLASFIS, CGARANTIA, CCEST, CEMPAUX, CFILAUX, CDPRODUTO)

            VALUES(V_CPASS, V_NOPC, V_CXCODIGO, V_CXDESCRI, V_CXTIPO, V_CXUM, V_CXLOCPAD, V_CXGRUPO, V_CDESCGRUP, V_CXPOSIPI,
                   V_CBLOQUE, (V_CULTPRC), (TO_DATE(NVL(V_CULTCOM, SYSDATE))), V_CXORIGEM, V_CCLASFISC, NULL, V_CCEST, V_CEMPAUX, V_CFILAUX, V_CDPRODUTO);

           COMMIT;

   END LOOP;
   CLOSE C_PRODUTO;

   COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('PROT_EXPORTA_PRODUTO','6.35.004'); END;
/
