CREATE OR REPLACE PROCEDURE USR_EXPORTA_SOLCOMP(V_NOME IN VARCHAR)
IS

--ESPECIFICO TABELA INT
V_ERRO 		   VARCHAR2(5000);
V_OBS			   VARCHAR2(5000);

V_DTINI        DATE;
V_DTFIN        DATE;
V_MAXSEQLOG    NUMBER;
V_EXISTE       NUMBER;
V_CDFILSOLI    VARCHAR2(04);

BEGIN
   V_DTINI := TRUNC(SYSDATE - 1);
   V_DTFIN := TRUNC(SYSDATE + 730);
   V_CDFILSOLI := '';

   FOR C_FILIAL IN (SELECT P.CDFILIAL, P.CDEXFILIAL
                      FROM PARAMFILIAL P
                     WHERE NOT CDEXFILIAL IS NULL)
   LOOP
      BEGIN
         SELECT I.CDFILSOLI
           into V_CDFILSOLI
           FROM  ITEMSOLI I, PRODUTO PR
          WHERE I.CDFILSOLI = C_FILIAL.CDFILIAL
            AND I.CDPRODUTO = PR.CDPRODUTO
            AND I.DTPROGENTR BETWEEN V_DTINI AND V_DTFIN
            AND NVL(I.USR_SHA_INTEGRADO, 'N') = 'N'
            AND NVL(I.IDSOLIAPROV, 'N')       = 'S'
            AND NOT PR.CDPRODINTE IS NULL
            FETCH FIRST ROW ONLY;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_CDFILSOLI := NULL;
      END;

      IF NOT V_CDFILSOLI IS NULL THEN
         FOR C_SOLICOMPRA IN (SELECT I.CDFILSOLI, P.CDPRODINTE AS CDPRODUTO, P.SGUNIDADE, I.DTPROGENTR, P.CDPRODUTO AS CODPRODTEK, SUM(I.QTSOLIPROD) QTSOLIPROD
                                FROM ITEMSOLI I, PRODUTO P
                               WHERE I.CDFILSOLI = V_CDFILSOLI
                                 AND I.CDPRODUTO = P.CDPRODUTO
                                 AND I.DTPROGENTR BETWEEN V_DTINI AND V_DTFIN
                                 AND NVL(I.IDSOLIAPROV, 'N')  = 'S'
                                 AND NOT P.CDPRODINTE IS NULL
                                GROUP BY I.CDFILSOLI, P.CDPRODINTE, P.SGUNIDADE, I.DTPROGENTR, P.CDPRODUTO)
         LOOP
            V_ERRO := NULL;
            V_OBS  := NULL;

            INSERT INTO USR_ITEMSOLI_SHA(CDFILISOLI, CDPRODUTO, SGUNIDMED, DTPROGENTR, QTSOLIPROD)
            VALUES (V_CDFILSOLI, C_SOLICOMPRA.CDPRODUTO, C_SOLICOMPRA.SGUNIDADE, C_SOLICOMPRA.DTPROGENTR, C_SOLICOMPRA.QTSOLIPROD);

            UPDATE ITEMSOLI
               SET USR_SHA_INTEGRADO = 'S'
             WHERE CDFILSOLI  = C_SOLICOMPRA.CDFILSOLI
               AND CDPRODUTO  = C_SOLICOMPRA.CODPRODTEK
               AND DTPROGENTR = C_SOLICOMPRA.DTPROGENTR;

               COMMIT;
         END LOOP; -- END C_SOLICOMPRA
      END IF;
   END LOOP; -- END C_FILIAL

   FOR C_FILIAL_INVALIDA IN (SELECT P.CDFILIAL, P.CDEXFILIAL, F.NMFILIAL
                               FROM PARAMFILIAL P, FILIAL F
                              WHERE CDEXFILIAL IS NULL
                                AND P.CDFILIAL = F.CDFILIAL)
   LOOP

       SELECT COUNT(1) INTO V_EXISTE FROM ITEMSOLI --WHERE CDFILSOLI = C_FILIAL.CDFILIAL
       WHERE CDFILSOLI =  C_FILIAL_INVALIDA.CDFILIAL
       AND ROWNUM <= 1;

       IF (V_EXISTE >= 1) THEN
           SELECT NVL(MAX(SEQLOG),0)+1 INTO V_MAXSEQLOG FROM USR_LOG_WEBSERVICE;
           INSERT INTO USR_LOG_WEBSERVICE
               (SEQLOG, DSMETODO, IDACAO, IDTIPINTEGR, CDFILIAL, OBSLOG, DTINCLUSAO)
           VALUES
               (V_MAXSEQLOG, 'USR_EXPORTA_SOLCOMP', 'INCLUSAO', 'ENVIAR', C_FILIAL_INVALIDA.CDFILIAL, 'CODIGO EXTERNO NAO CADASTRADO PARA FILIAL '||C_FILIAL_INVALIDA.CDFILIAL||' - '||C_FILIAL_INVALIDA.NMFILIAL, SYSDATE);
       END IF;

   END LOOP; --END C_FILIAL_INVALIDA


   FOR C_SOLICOMPRA_INVALIDA IN (SELECT P.CDPRODUTO, P.CDARVPROD, P.NMPRODUTO
                          FROM ITEMSOLI I, PRODUTO P
                         WHERE I.CDPRODUTO = P.CDPRODUTO
                           AND I.DTPROGENTR BETWEEN V_DTINI AND V_DTFIN
                           AND NVL(I.USR_SHA_INTEGRADO, 'N') = 'N'
                           AND NVL(I.IDSOLIAPROV, 'N')       = 'S'
                           AND P.CDPRODINTE IS NULL
                          GROUP BY P.CDPRODUTO, P.CDARVPROD, P.NMPRODUTO)
   LOOP
      SELECT NVL(MAX(SEQLOG),0)+1 INTO V_MAXSEQLOG FROM USR_LOG_WEBSERVICE;

      INSERT INTO USR_LOG_WEBSERVICE
         (SEQLOG, DSMETODO, IDACAO, IDTIPINTEGR, CDPRODUTO, OBSLOG, DTINCLUSAO)
      VALUES
         (V_MAXSEQLOG, 'USR_EXPORTA_SOLCOMP', 'INCLUSAO', 'ENVIAR', C_SOLICOMPRA_INVALIDA.CDPRODUTO, 'CODIGO EXTERNO NAO CADASTRADO PARA O PRODUTO '||C_SOLICOMPRA_INVALIDA.CDARVPROD||' - '||C_SOLICOMPRA_INVALIDA.NMPRODUTO, SYSDATE);
   END LOOP; --END C_SOLICOMPRA_INVALIDA


   COMMIT;
   --DROPA O JOB AO ENCERRAR O PROCESSO
   BEGIN
      DBMS_SCHEDULER.DROP_JOB(V_NOME);
   EXCEPTION
      WHEN OTHERS THEN
           NULL;
   END;
EXCEPTION
WHEN OTHERS THEN
   V_ERRO := SQLERRM(SQLCODE);
   DBMS_OUTPUT.PUT_LINE(V_ERRO);
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('USR_EXPORTA_SOLCOMP','6.49.025'); END;
/

