create or replace 
PROCEDURE IMPORTA_INVENT_STOCK(P_CDOPERADOR IN VARCHAR2)
IS
   V_CDFILIAL VARCHAR2(4);
   V_PRODUTO  VARCHAR2(20);
   V_DATAINI  DATE;
   V_QTDEESTO FLOAT;
   V_VALRESTO FLOAT;
   V_VALRBRUT FLOAT;
   V_NOVOCOD  VARCHAR2(20);
   V_CDALMOX  VARCHAR2(6);
   V_CDLOCEST VARCHAR2(6);
   V_CDTPCUST VARCHAR2(2);
   V_ORDIMPL  VARCHAR2(1);
   V_NOVOREGE BOOLEAN;
   V_VRTOTLAN FLOAT;
   V_CONTADOR INTEGER;
   V_NOVAFILI BOOLEAN;
   V_CODEERRO VARCHAR2(10);
   V_MENSERRO VARCHAR2(300);
   V_SITESAP  VARCHAR2(4);
BEGIN
   V_CDFILIAL := NULL;
   V_DATAINI  := NULL;
   V_SITESAP  := NULL;
   
   FOR C_INVESTOCK IN
       (SELECT U.CDSITESAP, U.DTINVENT, U.CDPRODUTO, U.QUANTIDADE, U.VRUNITARIO,
               U.IDINTERFACE, U.TPINTERFACE, U.SGUNIDADE
          FROM USR_SAP_INVENTESTOQ U
         WHERE U.DTINTERFACEDEST IS NULL
         ORDER BY U.CDSITESAP, U.DTINVENT, U.DTINTERFACEORI)
   LOOP
      BEGIN
         SELECT M.CDPRODUTO 
           INTO V_PRODUTO
           FROM MARCPROD M, PRODUTO P
          WHERE M.CDPRODUTO  = P.CDPRODUTO
            AND M.CDPRODSAP  = C_INVESTOCK.CDPRODUTO
            AND P.SGUNIDADE  = C_INVESTOCK.SGUNIDADE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_PRODUTO := NULL;
            
            INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
            VALUES (C_INVESTOCK.IDINTERFACE, C_INVESTOCK.TPINTERFACE, 1, SYSDATE, 1, 'Producto no registrado en el sistema Teknisa');

            UPDATE USR_SAP_INVENTESTOQ SET STATUS = 2
             WHERE IDINTERFACE = C_INVESTOCK.IDINTERFACE;
      END;
      
      IF (V_PRODUTO IS NOT NULL) THEN
         IF V_SITESAP <> C_INVESTOCK.CDSITESAP THEN
            V_NOVAFILI := TRUE;
            V_SITESAP  := C_INVESTOCK.CDSITESAP;
            BEGIN
               SELECT F.CDFILIAL, NVL(P.CDALMOXARIFE, ' ') CDALMOXARIFE, NVL(P.CDLOCALESTOQ, ' ') CDLOCALESTOQ, 
                      NVL(P.CDTIPCUSTEST,'03') CDTIPCUSTEST, P.IDORDIMPLANT
                 INTO V_CDFILIAL, V_CDALMOX, V_CDLOCEST,
                      V_CDTPCUST, V_ORDIMPL
                 FROM FILIAL F, PARAMFILIAL P
                WHERE F.CDFILIAL = P.CDFILIAL
                  AND P.CDEXFILIAL = V_SITESAP;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_CDFILIAL := NULL;
                  V_NOVAFILI := FALSE;
                  V_CDALMOX  := NULL;
                  V_CDLOCEST := NULL;
                  V_CDTPCUST := NULL;
                  V_ORDIMPL  := NULL;
                  
                  INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                  VALUES (C_INVESTOCK.IDINTERFACE, 'I', 1, SYSDATE, 1, 'Site '|| V_SITESAP || ' no registrado.');

                  UPDATE USR_SAP_INVENTESTOQ SET STATUS = 2
                   WHERE IDINTERFACE = C_INVESTOCK.IDINTERFACE;
            END;
         END IF;   
         
         IF (V_CDFILIAL IS NOT NULL)  THEN
            IF ((V_DATAINI <> C_INVESTOCK.DTINVENT) AND (V_NOVAFILI)) THEN
               V_NOVAFILI := FALSE;
               V_DATAINI  := C_INVESTOCK.DTINVENT;
               V_NOVOREGE := TRUE;
               V_CONTADOR := 1;
               
               NOVO_CODIGO('LANCTOEST'||V_CDFILIAL, V_NOVOCOD);
               V_NOVOCOD := SUBSTR(V_NOVOCOD, -10);

               CASE NVL(TRIM(V_ORDIMPL), 'P')
                   WHEN ('P') THEN V_ORDIMPL := 'O';
                   ELSE V_ORDIMPL := 'U';
                END CASE;
            END IF;
            
            BEGIN
               POSICAO_ESTOQUE(V_CDFILIAL, V_PRODUTO, V_DATAINI, V_QTDEESTO, V_VALRESTO, V_VALRBRUT);
               
               IF V_VALRESTO <> 0.0 THEN
                  INSERT INTO INVEROTA(CDFILIAL, CDALMOXARIFE, CDLOCALESTOQ, DTINVEROTA, CDPRODUTO, QTINVEROTA)
                  VALUES(V_CDFILIAL, V_CDALMOX, V_CDLOCEST, V_DATAINI, V_PRODUTO, C_INVESTOCK.QUANTIDADE);
               ELSE
                  IF (V_NOVOREGE) THEN
                     INSERT INTO LANCTOESTOQ
                       (CDFILIAL, NRLANCESTQ, IDTPLANCTO, DTLANCESTQ, DSLANCESTQ, CDOPERADOR, CDFILIMOVI,
                        CDALMOXARIFE, CDLOCALESTOQ)
                     VALUES
                       (V_CDFILIAL, V_NOVOCOD, '0', V_DATAINI, 'DESCRICAO DA IMPLANTACAO', P_CDOPERADOR, V_CDFILIAL, 
                        V_CDALMOX, V_CDLOCEST);
                     
                     V_NOVOREGE := FALSE;
                  END IF;
                  
                  V_VRTOTLAN := (C_INVESTOCK.VRUNITARIO * C_INVESTOCK.QUANTIDADE);
                  
                  INSERT INTO ITLANCTOEST
                     (CDFILIAL, NRLANCESTQ, NRSEQUITEM, CDPRODUTO, QTLANCTOEST, QTTOTLANCTO,
                      CDPRODMOVI, CDFILIMOVI, CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ, NRSUBLOTE, 
                      IDTIPOMOVI, IDEVOLESTOQ, IDORDEMCLC, DTLANCMOVI, VRUNILANCTO,
                      VRTOTLANCTO, VRLANCTOEST)
                  VALUES
                     (V_CDFILIAL, V_NOVOCOD, V_CONTADOR, V_PRODUTO, C_INVESTOCK.QUANTIDADE, C_INVESTOCK.QUANTIDADE,
                      V_PRODUTO, V_CDFILIAL, V_CDALMOX, V_CDLOCEST, ' ', ' ', 
                      '0', 'N', V_ORDIMPL, V_DATAINI, C_INVESTOCK.VRUNITARIO,
                      V_VRTOTLAN, V_VRTOTLAN);
               
                  V_CONTADOR := V_CONTADOR + 1;
               END IF;
               
               UPDATE USR_SAP_INVENTESTOQ SET DTINTERFACEDEST = SYSDATE, STATUS = 0
                WHERE IDINTERFACE = C_INVESTOCK.IDINTERFACE;
            EXCEPTION
               WHEN OTHERS THEN
                  V_CODEERRO := SQLCODE;
                  V_MENSERRO := SQLERRM;
                  
                  INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                  VALUES(C_INVESTOCK.IDINTERFACE, C_INVESTOCK.TPINTERFACE, 4, SYSDATE, 1, 'Error en la importaci'||CHR(243)||'n de inventario del Stock. Error: '||V_CODEERRO || '- '||V_MENSERRO);

                  UPDATE USR_SAP_INVENTESTOQ SET STATUS = 2
                   WHERE IDINTERFACE = C_INVESTOCK.IDINTERFACE;
            END;
         END IF;
      END IF;
   END LOOP;
   
   COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('IMPORTA_INVENT_STOCK','5.45.XXX'); END;
/