CREATE OR REPLACE TRIGGER USR_TRG_INTERFACE_SAIDA_HA
AFTER DELETE OR INSERT OR UPDATE
ON ITLANCTOEST FOR EACH ROW

DECLARE
   V_MATR_CODIGO  PRODINTDOS.CDPRODINTDOS%TYPE;
   V_CDOPEREXPO   OPERADOR.USR_CDOPEREXPO%TYPE;
   V_CDCENTCUST   SERVICO.USR_CDCENTCUST%TYPE;
   V_SEQUENCIA    ITLANCTOEST.USR_RECB_SEQUENCIA%TYPE;
   V_QUANTIDADE   ITLANCTOEST.QTLANCTOEST%TYPE;
   V_CDEMPRESA    FILIAL.CDEMPRESAP%TYPE;
   V_CDPRODUTO    PRODUTO.CDPRODUTO%TYPE;
   V_VRFATOCONV   PRODUTO.VRFATOCONV%TYPE;

   V_NRCONTADOR   NUMBER;
   V_IDTIPOMOVI   VARCHAR2(02);

BEGIN
   IF (NVL(:OLD.CDFILIMOVI, :NEW.CDFILIMOVI) = '0001') THEN

      V_SEQUENCIA  := NVL(:OLD.USR_RECB_SEQUENCIA, :NEW.USR_RECB_SEQUENCIA);
      V_IDTIPOMOVI := 'SC';

      IF (V_SEQUENCIA IS NULL) AND (NVL(:OLD.IDTIPOMOVI, :NEW.IDTIPOMOVI) <> '2') THEN
         SELECT COUNT(*)
         INTO V_NRCONTADOR
         FROM PRODUTO
         WHERE CDPRODESTO = NVL(:NEW.CDPRODMOVI, :OLD.CDPRODMOVI) AND
               CDPRODUTO  <> CDPRODESTO;

         IF V_NRCONTADOR = 1 THEN
            SELECT MAX(CDPRODUTO), NVL(MAX(VRFATOCONV),1)
            INTO V_CDPRODUTO, V_VRFATOCONV
            FROM PRODUTO
            WHERE CDPRODESTO = NVL(:NEW.CDPRODMOVI, :OLD.CDPRODMOVI) AND
                  CDPRODUTO  <> CDPRODESTO;
         ELSE
            V_CDPRODUTO  := NVL(:NEW.CDPRODMOVI, :OLD.CDPRODMOVI);
            V_VRFATOCONV := 1;
         END IF;

         SELECT MAX(CDPRODINTE)
         INTO V_MATR_CODIGO
         FROM PRODUTO
         WHERE CDPRODUTO = V_CDPRODUTO;

         IF V_MATR_CODIGO IS NULL THEN
            SELECT MAX(CDPRODINTE), NVL(MAX(VRFATOCONV),1)
            INTO V_MATR_CODIGO, V_VRFATOCONV
            FROM PRODUTO
            WHERE CDPRODUTO = NVL(:NEW.CDPRODMOVI, :OLD.CDPRODMOVI);
         END IF;

         SELECT NVL(MAX(VRFATOCONV),1)
         INTO V_VRFATOCONV
         FROM PRODUTO
         WHERE CDPRODUTO = NVL(:NEW.CDPRODUTO, :OLD.CDPRODUTO)  AND
               CDPRODESTO <> CDPRODUTO;

         SELECT MAX(USR_CDOPEREXPO)
         INTO V_CDOPEREXPO
         FROM OPERADOR
         WHERE CDOPERADOR = NVL(:NEW.CDOPERADOR, :OLD.CDOPERADOR);

         SELECT MAX(USR_CDCENTCUST)
         INTO V_CDCENTCUST
         FROM RETIRADA I, CARDADIA C, SERVICO S
         WHERE I.CDFILANCESTQ = NVL(:OLD.CDFILIAL,:NEW.CDFILIAL)     AND
               I.NRLANCESTQ   = NVL(:OLD.NRLANCESTQ,:NEW.NRLANCESTQ) AND
               C.CDFILIAL     = I.CDFILIAL                           AND
               C.NRCARDAPIO   = I.NRCARDAPIO                         AND
               S.CDFILIAL     = C.CDFILIAL                           AND
               S.CDSERVFILI   = C.CDSERVFILI;

         V_CDCENTCUST := NVL(V_CDCENTCUST, NVL(:NEW.CDCENTCUST, :OLD.CDCENTCUST));

         SELECT NVL(MAX(CDEMPRESAP),'101')
         INTO V_CDEMPRESA
         FROM FILIAL
         WHERE CDFILIAL = NVL(:OLD.CDFILIMOVI, :NEW.CDFILIMOVI);

         IF DELETING THEN
            IF :NEW.IDEVOLESTOQ  = 'S'  OR :OLD.IDEVOLESTOQ = 'S' THEN
               V_QUANTIDADE := :OLD.QTLANCTOEST;
               V_IDTIPOMOVI := 'DC';
            END IF;
         ELSIF UPDATING THEN
            IF :NEW.IDEVOLESTOQ  = 'S' THEN
               IF :OLD.IDEVOLESTOQ = 'S' THEN
                  V_QUANTIDADE := :NEW.QTLANCTOEST - :OLD.QTLANCTOEST;
               ELSE
                  V_QUANTIDADE := NVL(:NEW.QTLANCTOEST, :OLD.QTLANCTOEST);
               END IF;
               IF V_QUANTIDADE < 0 THEN
                  V_QUANTIDADE := ABS(V_QUANTIDADE);
                  V_IDTIPOMOVI := 'DC';
               END IF;
            ELSE
               IF :OLD.IDEVOLESTOQ = 'S' THEN
                  V_QUANTIDADE := :OLD.QTLANCTOEST;
                  V_IDTIPOMOVI := 'DC';
               END IF;
            END IF;
         ELSE
            IF :NEW.IDEVOLESTOQ = 'S' THEN
               V_QUANTIDADE := :NEW.QTLANCTOEST;
            END IF;
         END IF;

         IF V_VRFATOCONV <> 0 THEN
            V_QUANTIDADE := V_QUANTIDADE / V_VRFATOCONV;
         END IF;

         INSERT INTO LOGOPERA(NMTABELA, DTOPERACAO, NMRESPOPER, IDTIPOOPER, DSOPERACAO,
                              CDPESQITEM)
         VALUES('SIA',SYSDATE,'INTEGRACAO','1','NEW : '||:NEW.QTLANCTOEST||' OLD : '|| :OLD.QTLANCTOEST||' ID : '||NVL(V_IDTIPOMOVI,'NULL')||
                  'CD '||V_MATR_CODIGO||'EMP '||V_CDEMPRESA||' CENT '||V_CDCENTCUST||
                  'QT '|| V_QUANTIDADE||' ALM '||NVL(:NEW.CDALMOXARIFE, :OLD.CDALMOXARIFE)||
                  ' OP '||V_CDOPEREXPO,
                 NVL(:OLD.NRLANCESTQ,:NEW.NRLANCESTQ));

         IF V_QUANTIDADE <> 0 THEN
            IF (V_MATR_CODIGO IS NOT NULL) AND
                (V_CDCENTCUST  IS NOT NULL) THEN

               HAESTQ.PKG_MOVIMENTACAO_ESTOQUE.PRC_MOVIMENTA_ESTQ_ALIMENTOS(
                  TO_NUMBER(V_MATR_CODIGO), TO_NUMBER(V_CDEMPRESA), TO_NUMBER(V_CDCENTCUST),
                  V_QUANTIDADE, TO_NUMBER(NVL(:NEW.CDALMOXARIFE, :OLD.CDALMOXARIFE)),
                  V_IDTIPOMOVI, 4085, NVL(:OLD.CDFILIAL, :NEW.CDFILIAL),NVL(:OLD.NRLANCESTQ,:NEW.NRLANCESTQ));

            END IF;
         END IF;
      END IF;
   END IF;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('USR_TRG_INTERFACE_SAIDA_HA','5.60.XXX'); END;
/

