CREATE OR REPLACE TRIGGER USR_ATU_ITEMSOLI_SHA
BEFORE DELETE OR UPDATE OF IDSOLIAPROV
ON ITEMSOLI FOR EACH ROW
DECLARE
   V_NOME     VARCHAR2(1000);
   V_COMANDO  VARCHAR2(2000);
   V_CDFILIAL   USR_ITEMSOLI_SHA.CDFILISOLI%TYPE;
   V_CDPRODINTE USR_ITEMSOLI_SHA.CDPRODUTO%TYPE;
   V_QTSOLIPROD USR_ITEMSOLI_SHA.QTSOLIPROD%TYPE;
   V_SGUNIDADE  USR_ITEMSOLI_SHA.SGUNIDMED%TYPE; 
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   V_NOME := 'EXPORTASOLCOMPRA';
   V_COMANDO := 'BEGIN USR_EXPORTA_SOLCOMP('||CHR(39)||V_NOME||CHR(39)||'); END;';

   IF UPDATING THEN
      IF (NVL(:NEW.IDSOLIAPROV, 'N') <> NVL(:OLD.IDSOLIAPROV, 'N')) THEN
         :NEW.USR_SHA_INTEGRADO   := 'N';
      END IF;
   END IF;
   
   IF DELETING THEN
      BEGIN
         SELECT P.CDPRODINTE AS CDPRODUTO, P.SGUNIDADE,  SUM(I.QTSOLIPROD) QTSOLIPROD
         INTO   V_CDPRODINTE,              V_SGUNIDADE,  V_QTSOLIPROD
          FROM ITEMSOLI I, (SELECT CDPRODUTO, CDPRODINTE, CDARVPROD, SGUNIDADE
                              FROM PRODUTO
                             WHERE CDNVPRODUTO = '5'
                             AND CDPRODUTO = :OLD.CDPRODUTO) P
         WHERE I.CDFILSOLI = :OLD.CDFILSOLI
           AND I.CDPRODUTO = P.CDPRODUTO 
           AND I.DTPROGENTR = :OLD.DTPROGENTR
           AND I.NRSOLICMP <> :OLD.NRSOLICMP
           AND NVL(I.IDSOLIAPROV, 'N')       = 'S' 
           AND NOT P.CDPRODINTE IS NULL
          GROUP BY I.CDFILSOLI, P.CDPRODINTE, P.SGUNIDADE, I.DTPROGENTR, P.CDPRODUTO;
      EXCEPTION WHEN NO_DATA_FOUND THEN
        SELECT CDPRODINTE, SGUNIDADE INTO V_CDPRODINTE, V_SGUNIDADE FROM PRODUTO
        WHERE CDPRODUTO = :OLD.CDPRODUTO;
        V_QTSOLIPROD := 0;
      END;
      
      BEGIN 
         SELECT CDEXFILIAL INTO V_CDFILIAL FROM PARAMFILIAL WHERE CDFILIAL = :OLD.CDFILSOLI;
      EXCEPTION WHEN NO_DATA_FOUND THEN
        NULL;
      END;
      
      INSERT INTO USR_ITEMSOLI_SHA(CDFILISOLI, CDPRODUTO, SGUNIDMED, DTPROGENTR, QTSOLIPROD)
           VALUES (V_CDFILIAL, V_CDPRODINTE, V_SGUNIDADE, :OLD.DTPROGENTR, V_QTSOLIPROD);
        
      COMMIT;
   END IF;
   BEGIN
      DBMS_SCHEDULER.DROP_JOB(V_NOME);
    EXCEPTION
      WHEN OTHERS THEN
            NULL;
   END;
   BEGIN
      DBMS_SCHEDULER.CREATE_JOB (
          JOB_NAME => V_NOME,
          JOB_TYPE => 'PLSQL_BLOCK',
          JOB_ACTION => V_COMANDO,
          START_DATE => SYSDATE + INTERVAL '180' SECOND,
          ENABLED => TRUE    
      );
   END;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('USR_ATU_ITEMSOLI_SHA','6.45.040'); END;
/

