create or replace 
PROCEDURE IMPORTA_PRODUCTO_SITE
IS
   V_CDPRODUTO INTEGER;
   V_CDFILIAL  VARCHAR2(4);
   V_CDARVPROD VARCHAR2(20);
   V_PRODEXIST INTEGER;
   V_MENSERRO  VARCHAR2(300);
BEGIN
   FOR C_PRODFILI IN
       (SELECT U.CDSITESAP, U.CDPRODSAP, U.IDINTERFACE, U.TPINTERFACE
          FROM USR_SAP_PRODUTO_SITE U
         WHERE U.DTINTERFACEDEST IS NULL
           AND U.STATUS <> 2
           AND ROWNUM < 50000
         ORDER BY U.IDINTERFACE)
   LOOP
      V_CDARVPROD := C_PRODFILI.CDPRODSAP;
      BEGIN
         SELECT F.CDFILIAL
           INTO V_CDFILIAL
           FROM FILIAL F, PARAMFILIAL P
          WHERE F.CDFILIAL = P.CDFILIAL
            AND P.CDEXFILIAL = C_PRODFILI.CDSITESAP;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_CDFILIAL := NULL;
            
            INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
            VALUES(C_PRODFILI.IDINTERFACE, C_PRODFILI.TPINTERFACE, 5, SYSDATE, 1, 'Site '||C_PRODFILI.CDSITESAP||' no registrado');
            
            UPDATE USR_SAP_PRODUTO_SITE 
               SET STATUS = 2
             WHERE IDINTERFACE = C_PRODFILI.IDINTERFACE;
         WHEN TOO_MANY_ROWS THEN
            V_CDFILIAL := NULL;
            
            INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
            VALUES(C_PRODFILI.IDINTERFACE, C_PRODFILI.TPINTERFACE, 5, SYSDATE, 1, 'M'||CHR(225)||'s de un site con el codigo '||C_PRODFILI.CDSITESAP);
            
            UPDATE USR_SAP_PRODUTO_SITE 
               SET STATUS = 2
             WHERE IDINTERFACE = C_PRODFILI.IDINTERFACE;
      END;
      
      IF V_CDFILIAL IS NOT NULL THEN
         /* Serao atualizados todos produtos que possuirem o mesmo codigo SAP */
         SELECT COUNT(1)
           INTO V_CDPRODUTO
           FROM MARCPROD M, PRODUTO P
          WHERE M.CDPRODUTO = P.CDPRODUTO
            AND M.CDPRODSAP = V_CDARVPROD;
         
         IF V_CDPRODUTO > 0 THEN
            FOR C_PRODUTO IN (SELECT P.CDPRODUTO
                                FROM MARCPROD M, PRODUTO P
                               WHERE M.CDPRODUTO = P.CDPRODUTO
                                 AND M.CDPRODSAP = V_CDARVPROD)
            LOOP
               IF (C_PRODFILI.TPINTERFACE <> 'E') THEN
                  BEGIN
                     SELECT COUNT(1)
                       INTO V_PRODEXIST
                       FROM PRODFILI PF
                      WHERE PF.CDFILIAL  = V_CDFILIAL
                        AND PF.CDPRODUTO = C_PRODUTO.CDPRODUTO;
                     
                     IF (V_PRODEXIST = 0) THEN
                        INSERT INTO PRODFILI(CDFILIAL, CDPRODUTO)
                        VALUES(V_CDFILIAL, C_PRODUTO.CDPRODUTO);
                     ELSE
                        UPDATE PRODFILI
                           SET IDPRODATIV = 'A'
                         WHERE CDFILIAL  = V_CDFILIAL
                           AND CDPRODUTO = C_PRODUTO.CDPRODUTO;
                     END IF;
                     
                     INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                     VALUES(C_PRODFILI.IDINTERFACE, C_PRODFILI.TPINTERFACE, 5, SYSDATE, 0, 'Producto '||V_CDARVPROD||' registrado con '||CHR(233)||'xito para el site '||V_CDFILIAL);
                  EXCEPTION
                     WHEN OTHERS THEN
                        V_MENSERRO := SQLERRM(SQLCODE);
                        
                        INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                        VALUES(C_PRODFILI.IDINTERFACE, C_PRODFILI.TPINTERFACE, 5, SYSDATE, 1, 'Error en la operaci'||CHR(243)||'n del producto por site. Error: '||V_MENSERRO);
                        
                        UPDATE USR_SAP_PRODUTO_SITE 
                           SET STATUS = 2
                         WHERE IDINTERFACE = C_PRODFILI.IDINTERFACE;
                        COMMIT;
                  END;
               ELSE
                  UPDATE PRODFILI
                     SET IDPRODATIV = 'I'
                   WHERE CDFILIAL  = V_CDFILIAL
                     AND CDPRODUTO = C_PRODUTO.CDPRODUTO;
                  
                  INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                  VALUES(C_PRODFILI.IDINTERFACE, C_PRODFILI.TPINTERFACE, 5, SYSDATE, 0, 'Producto '||V_CDARVPROD||' retirado del site '||V_CDFILIAL||' con '||CHR(233)||'xito');
               END IF;
               
               UPDATE USR_SAP_PRODUTO_SITE
                  SET DTINTERFACEDEST = SYSDATE, 
                      STATUS = 0
                WHERE IDINTERFACE = C_PRODFILI.IDINTERFACE;
            END LOOP;
         ELSE
            INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
            VALUES(C_PRODFILI.IDINTERFACE, C_PRODFILI.TPINTERFACE, 5, SYSDATE, 1, 'Producto '||V_CDARVPROD||' no registrado');
            
            UPDATE USR_SAP_PRODUTO_SITE 
               SET STATUS = 2
             WHERE IDINTERFACE = C_PRODFILI.IDINTERFACE;
         END IF;
      END IF;
   END LOOP;
   
   COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('IMPORTA_PRODUCTO_SITE','6.05.xxx'); END;
/