CREATE OR REPLACE TRIGGER LOG_SUP_ITEMPEDEXOL
AFTER INSERT OR UPDATE OR DELETE ON ITEMPEDEXOL
FOR EACH ROW 
DECLARE
  V_DSREMOTEADDR VARCHAR2(15);
  V_DSREMOTEHOST VARCHAR2(15);
  V_DSSERVERRDM  VARCHAR2(20);
  V_DSSERVMETHOD VARCHAR2(30);
  V_DSREMOTEOPER VARCHAR2(12);
  V_DESC         VARCHAR2(1500);
  V_CDFILLOGOPER VARCHAR2(4);
  V_ITPESQ       VARCHAR2(80);
  V_NMOPERADOR   VARCHAR2(40);
  V_IDTIPOOPER   VARCHAR2(1);

BEGIN
/* IDTIPOOPER - '1' - Inclusao, '2' - Alteracao, '3' - Exclusao*/
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_IDTIPOOPER   := '';
   V_CDFILLOGOPER := '';
   NMUSUARIO(V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   IF UPDATING THEN
      IF (NVL(:OLD.DTPROGENPEOL, TO_DATE('01/01/1900', 'DD/MM/YYYY')) <> NVL(:NEW.DTPROGENPEOL, TO_DATE('01/01/1900', 'DD/MM/YYYY'))) THEN
         V_DESC := V_DESC || 'Dt. Entr. Ped.' ||''|| NVL(:NEW.DTPROGENPEOL,'') ||'   ';
      END IF;
      IF (NVL(:OLD.CDOPERBAIXA, 'X') <> NVL(:NEW.CDOPERBAIXA, 'X')) THEN
         V_DESC := V_DESC || 'Oper. que Baixou' ||''|| NVL(:NEW.CDOPERBAIXA,'') ||'   ';
      END IF;
      IF (NVL(:OLD.DTBAIXTMPEOL, TO_DATE('01/01/1900', 'DD/MM/YYYY')) <> NVL(:NEW.DTBAIXTMPEOL, TO_DATE('01/01/1900', 'DD/MM/YYYY'))) THEN
         V_DESC := V_DESC || 'Dt. Baixa' ||''|| NVL(:NEW.DTBAIXTMPEOL,'') ||'   ';
      END IF;
      IF (NVL(:OLD.QTPROGENPEOL, 0) <> NVL(:NEW.QTPROGENPEOL, 0)) THEN
         V_DESC := V_DESC || 'Qt. Its.' ||''|| NVL(:NEW.QTPROGENPEOL,'') ||'   ';
      END IF;
      IF (NVL(:OLD.IDBAIXENPEOL, 'X') <> NVL(:NEW.IDBAIXENPEOL, 'X')) THEN
         V_DESC := V_DESC || 'ID Baixa' ||''|| NVL(:NEW.IDBAIXENPEOL,'') ||'   ';
      END IF;
      IF (NVL(:OLD.IDBAIXAOLSAI, 'X') <> NVL(:NEW.IDBAIXAOLSAI, 'X')) THEN
         V_DESC := V_DESC || 'ID Saida' ||''|| NVL(:NEW.IDBAIXAOLSAI,'') ||'   ';
      END IF;
      IF (NVL(:OLD.TXOBSITMPEOL, 'X') <> NVL(:NEW.TXOBSITMPEOL, 'X')) THEN
         V_DESC := V_DESC || 'Obs.' ||''|| NVL(:NEW.TXOBSITMPEOL,'') ||'   ';
      END IF;
      IF (NVL(:OLD.DTEFETENPEOL, TO_DATE('01/01/1900', 'DD/MM/YYYY')) <> NVL(:NEW.DTEFETENPEOL, TO_DATE('01/01/1900', 'DD/MM/YYYY'))) THEN
         V_DESC := V_DESC || 'Dt. Efet.' ||''|| NVL(:NEW.DTEFETENPEOL,'') ||'   ';
      END IF;
      IF (NVL(:OLD.QTEFETENPEOL, 0) <> NVL(:NEW.QTEFETENPEOL, 0)) THEN
         V_DESC := V_DESC || 'Qt. Efet.' ||''|| NVL(:NEW.QTEFETENPEOL,'') ||'   ';
      END IF;
      IF (NVL(:OLD.DTPROGEMBARQ, TO_DATE('01/01/1900', 'DD/MM/YYYY')) <> NVL(:NEW.DTPROGEMBARQ, TO_DATE('01/01/1900', 'DD/MM/YYYY'))) THEN
         V_DESC := V_DESC || 'Dt. Emb.' ||''|| NVL(:NEW.DTPROGEMBARQ,'') ||'   ';
      END IF;
      IF (NVL(:OLD.QTATENDPEDOL, 0) <> NVL(:NEW.QTATENDPEDOL, 0)) THEN
         V_DESC := V_DESC || 'Qt. para OL' ||''|| NVL(:NEW.QTATENDPEDOL,'') ||'   ';
      END IF;
      IF (NVL(:OLD.VRPBRUTOPEDOL, 0) <> NVL(:NEW.VRPBRUTOPEDOL, 0)) THEN
         V_DESC := V_DESC || 'Peso Br.'  ||''|| NVL(:NEW.VRPBRUTOPEDOL,'') ||'   ';
      END IF;
      IF (NVL(:OLD.IDITMPEDOLBLOQ, 0) <> NVL(:NEW.IDITMPEDOLBLOQ, 0)) THEN
         V_DESC := V_DESC || 'It. bloqu.:'  ||''|| NVL(:NEW.IDITMPEDOLBLOQ,'') ||'   ';
      END IF;
      IF (NVL(:OLD.CDOPERBLOQITM, 0) <> NVL(:NEW.CDOPERBLOQITM, 0)) THEN
         V_DESC := V_DESC || 'Oper. bloq.:'  ||''|| NVL(:NEW.CDOPERBLOQITM,'') ||'   ';
      END IF;
      IF (NVL(:OLD.CDLOTENVITOL, 0) <> NVL(:NEW.CDLOTENVITOL, 0)) THEN
         V_DESC := V_DESC || 'Lote:'  ||''|| NVL(:NEW.CDLOTENVITOL,'') ||'   ';
      END IF;
      IF (NVL(:OLD.CDOPERLOTEOL, 0) <> NVL(:NEW.CDOPERLOTEOL, 0)) THEN
         V_DESC := V_DESC || 'Oper. lote:'  ||''|| NVL(:NEW.CDOPERLOTEOL,'') ||'   ';
      END IF;
      IF (NVL(:OLD.IDITEMAJUSTE, 0) <> NVL(:NEW.IDITEMAJUSTE, 0)) THEN
         V_DESC := V_DESC || 'It. Ajust:'  ||''|| NVL(:NEW.IDITEMAJUSTE,'') ||'   ';
      END IF;
      IF (NVL(:OLD.VRPLIQUIPEDOL, 0) <> NVL(:NEW.VRPLIQUIPEDOL, 0)) THEN
         V_DESC := V_DESC || 'Peso Liq.'  ||''|| NVL(:NEW.VRPLIQUIPEDOL,'')||'   ';
      END IF;
      -- Produto e Quantidade originais
      IF (NVL(:OLD.CDPRODORIGPEDOL, '') <> NVL(:NEW.CDPRODORIGPEDOL, '')) THEN
         V_DESC := V_DESC || 'Prod. Orig.' ||''||NVL(:NEW.CDPRODORIGPEDOL, '')||'   ';
      END IF;
      IF (NVL(:OLD.QTORIGPRODPED, '') <> NVL(:NEW.QTORIGPRODPED, '')) THEN
         V_DESC := V_DESC || 'Qt. Orig.' ||''||NVL(:NEW.QTORIGPRODPED, '')||'   ';
      END IF;
      IF (NVL(:OLD.CDRASTRITM, 0) <> NVL(:NEW.CDRASTRITM, 0)) THEN
         V_DESC := V_DESC || 'Cod. Rast.' ||''||NVL(:NEW.CDRASTRITM, '')||'   ';
      END IF;
      V_ITPESQ       := :NEW.CDFILDEST|| :NEW.CDFILLANC|| :NEW.NRPEDEXOL|| :NEW.CDMARCA|| :NEW.CDPRODUTO||
                        TO_CHAR(:NEW.DTPROGENPEOL, 'DD/MM/YYYY')|| :NEW.CDRASTRITM;
      V_CDFILLOGOPER := :NEW.CDFILLANC;
      V_IDTIPOOPER   := '2';
   ELSE
      IF INSERTING THEN
         V_DESC   :=       'Fil. Dest.'             ||''  || NVL(:NEW.CDFILDEST,'')       ||'  '  ||
                           'Fil. Lanc.'             ||''  || NVL(:NEW.CDFILLANC,'')       ||'  '  ||
                           'Ped.'                   ||''  || NVL(:NEW.NRPEDEXOL,'')       ||'  '  ||
                           'Marca'                  ||''  || NVL(:NEW.CDMARCA,'')         ||'  '  ||
                           'Prod.'                  ||''  || NVL(:NEW.CDPRODUTO,'')       ||'  '  ||
                           'Dt. Entr. Ped.'         ||''  || NVL(:NEW.DTPROGENPEOL,'')    ||'  '  ||
                           'Oper. que Baixou'       ||''  || NVL(:NEW.CDOPERBAIXA,'')     ||'  '  ||
                           'Dt. Baixa'              ||''  || NVL(:NEW.DTBAIXTMPEOL,'')    ||'  '  ||
                           'Qt. Its.'               ||''  || NVL(:NEW.QTPROGENPEOL,'')    ||'  '  ||
                           'ID Baixa'               ||''  || NVL(:NEW.IDBAIXENPEOL,'')    ||'  '  ||
                           'ID Saida'               ||''  || NVL(:NEW.IDBAIXAOLSAI,'')    ||'  '  ||
                           'Obs.'                   ||''  || NVL(:NEW.TXOBSITMPEOL,'')    ||'  '  ||
                           'Dt. Efet.'              ||''  || NVL(:NEW.DTEFETENPEOL,'')    ||'  '  ||
                           'Qt. Efet.'              ||''  || NVL(:NEW.QTEFETENPEOL,'')    ||'  '  ||
                           'Dt. Emb.'               ||''  || NVL(:NEW.DTPROGEMBARQ,'')    ||'  '  ||
                           'Qt. para OL'            ||''  || NVL(:NEW.QTATENDPEDOL,'')    ||'  '  ||
                           'Peso Br.'               ||''  || NVL(:NEW.VRPBRUTOPEDOL,'')   ||'  '  ||
                           'It. bloq.:'             ||''  || NVL(:NEW.IDITMPEDOLBLOQ,'')  ||'  '  ||
                           'Oper. bloq.:'           ||''  || NVL(:NEW.CDOPERBLOQITM,'')   ||'  '  ||
                           'Lote:'                  ||''  || NVL(:NEW.CDLOTENVITOL,'')    ||'  '  ||
                           'Oper. lote:'            ||''  || NVL(:NEW.CDOPERLOTEOL,'')    ||'  '  ||
                           'It. Ajust:'             ||''  || NVL(:NEW.IDITEMAJUSTE,'')    ||'  '  ||
                           'Peso Liqu.'             ||''  || NVL(:NEW.VRPLIQUIPEDOL,'')   ||'  '  ||
                           'Prod. Orig.'            ||''  || NVL(:NEW.CDPRODORIGPEDOL, '')||'  '  ||
                           'Qt. Orig.'              ||''  || NVL(:NEW.QTORIGPRODPED, '')  ||'  '  ||
                           'Cod. Rast.'             ||''  || NVL(:NEW.CDRASTRITM, '');

         V_ITPESQ       := :NEW.CDFILDEST|| :NEW.CDFILLANC|| :NEW.NRPEDEXOL|| :NEW.CDMARCA|| :NEW.CDPRODUTO||
                           TO_CHAR(:NEW.DTPROGENPEOL, 'DD/MM/YYYY')|| :NEW.CDRASTRITM;
         V_CDFILLOGOPER := :NEW.CDFILLANC;
         V_IDTIPOOPER   := '1';
      ELSE
         IF DELETING THEN
            V_DESC  :=     'Fil. Dest.'             ||''  || NVL(:OLD.CDFILDEST,'')       ||'  '  ||
                           'Fil. Lanc.'             ||''  || NVL(:OLD.CDFILLANC,'')       ||'  '  ||
                           'Ped.'                   ||''  || NVL(:OLD.NRPEDEXOL,'')       ||'  '  ||
                           'Marca'                  ||''  || NVL(:OLD.CDMARCA,'')         ||'  '  ||
                           'Prod,'                  ||''  || NVL(:OLD.CDPRODUTO,'')       ||'  '  ||
                           'Dt. Entr. Ped.'         ||''  || NVL(:OLD.DTPROGENPEOL,'')    ||'  '  ||
                           'Oper. Baixou'           ||''  || NVL(:OLD.CDOPERBAIXA,'')     ||'  '  ||
                           'Dt. Baixa'              ||''  || NVL(:OLD.DTBAIXTMPEOL,'')    ||'  '  ||
                           'Qt. Its.'               ||''  || NVL(:OLD.QTPROGENPEOL,'')    ||'  '  ||
                           'ID Baixa'               ||''  || NVL(:OLD.IDBAIXENPEOL,'')    ||'  '  ||
                           'ID Saida'               ||''  || NVL(:OLD.IDBAIXAOLSAI,'')    ||'  '  ||
                           'Obs.'                   ||''  || NVL(:OLD.TXOBSITMPEOL,'')    ||'  '  ||
                           'Dt. Ef.'                ||''  || NVL(:OLD.DTEFETENPEOL,'')    ||'  '  ||
                           'Qt. Ef. '               ||''  || NVL(:OLD.QTEFETENPEOL,'')    ||'  '  ||
                           'Dt. Emb'                ||''  || NVL(:OLD.DTPROGEMBARQ,'')    ||'  '  ||
                           'Qt. para OL'            ||''  || NVL(:OLD.QTATENDPEDOL,'')    ||'  '  ||
                           'Peso Br.'               ||''  || NVL(:OLD.VRPBRUTOPEDOL,'')   ||'  '  ||
                           'It. bloq.:'             ||''  || NVL(:OLD.IDITMPEDOLBLOQ,'')  ||'  '  ||
                           'Op. bloq.:'             ||''  || NVL(:OLD.CDOPERBLOQITM,'')   ||'  '  ||
                           'Lote:'                  ||''  || NVL(:OLD.CDLOTENVITOL,'')    ||'  '  ||
                           'Op. lote:'              ||''  || NVL(:OLD.CDOPERLOTEOL,'')    ||'  '  ||
                           'It. Ajust.:'            ||''  || NVL(:OLD.IDITEMAJUSTE,'')    ||'  '  ||
                           'Peso Liq.'              ||''  || NVL(:OLD.VRPLIQUIPEDOL,'')   ||'  '  ||
                           'Prod. Orig.'            ||''  || NVL(:OLD.CDPRODORIGPEDOL, '')||'  '  ||
                           'Qt. Orig.'              ||''  || NVL(:OLD.QTORIGPRODPED, '')  ||'  '  ||
                           'Cod. Rast.'             ||''  || NVL(:OLD.CDRASTRITM, '');

            V_ITPESQ         := :OLD.CDFILDEST|| :OLD.CDFILLANC|| :OLD.NRPEDEXOL|| :OLD.CDMARCA|| :OLD.CDPRODUTO||
                                TO_CHAR(:OLD.DTPROGENPEOL, 'DD/MM/YYYY')|| :OLD.CDRASTRITM;
            V_CDFILLOGOPER   := :OLD.CDFILLANC;
            V_IDTIPOOPER     := '3';
         END IF;
      END IF;
   END IF;
   IF (V_DESC IS NOT NULL)   THEN
      V_DESC := SUBSTR(V_DESC, 1, 400);
      INSERT INTO LOGOPERA
         (NMTABELA,
          DTOPERACAO,
          NMRESPOPER,
          IDTIPOOPER,
          DSOPERACAO,
          CDPESQITEM,
          DSRDMUSUOPER,
          DSENDUSUOPER,
          DSNMUSUOPER,
          DSMETUSUOPER,
          CDORESPOPER,
          CDFILLOGOPER)
      VALUES
         ('ITEMPEDEXOL',
          SYSDATE,
          NVL(V_NMOPERADOR,' '),
          V_IDTIPOOPER,
          V_DESC,
          V_ITPESQ,
          V_DSSERVERRDM,
          V_DSREMOTEADDR,
          V_DSREMOTEHOST,
          V_DSSERVMETHOD,
          V_DSREMOTEOPER,
          V_CDFILLOGOPER);
   END IF;
END;
/