CREATE OR REPLACE TRIGGER LOG_CMP_ITEMSOLI
AFTER INSERT OR UPDATE OR DELETE
ON ITEMSOLI 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);
  V_IDPARAM      VARCHAR2(1);

BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_IDTIPOOPER   := '';
   V_CDFILLOGOPER := '';
   NMUSUARIO(V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);
   SELECT NVL(MAX(IDUTAPROVSOL), 'N')
     INTO V_IDPARAM
    FROM PARCMPSUP
   WHERE CDFILIAL = NVL(:NEW.CDFILSOLI, :OLD.CDFILSOLI);

   IF UPDATING THEN
      IF (NVL(:OLD.DTPROGENTR, TO_DATE('01/01/1900', 'DD/MM/YYYY')) <> NVL(:NEW.DTPROGENTR, TO_DATE('01/01/1900', 'DD/MM/YYYY'))) THEN
         V_DESC := V_DESC ||'Dt. Entr. Item' ||''|| NVL(:NEW.DTPROGENTR,'') ||'   ';
      END IF;
      IF (NVL(:OLD.CDOPERAPROV, 'X') <> NVL(:NEW.CDOPERAPROV, 'X')) THEN
         V_DESC := V_DESC ||'Oper. Aprova.' ||''|| NVL(:NEW.CDOPERAPROV,'') ||'   ';
      END IF;
      IF (NVL(:OLD.DTUTILIZA, TO_DATE('01/01/1900', 'DD/MM/YYYY')) <> NVL(:NEW.DTUTILIZA, TO_DATE('01/01/1900', 'DD/MM/YYYY'))) THEN
         V_DESC := V_DESC ||'Dt. Ut.' ||''|| NVL(:NEW.DTUTILIZA,'') ||'   ';
      END IF;
      IF (NVL(:OLD.QTSOLIPROD, 0) <> NVL(:NEW.QTSOLIPROD, 0)) THEN
         V_DESC := V_DESC ||'Qt. Itens:' ||''|| NVL(:NEW.QTSOLIPROD,'') ||'   ';
      END IF;
      IF (NVL(:OLD.IDITMCONS, 'X') <> NVL(:NEW.IDITMCONS, 'X')) THEN
         V_DESC := V_DESC ||'ID Cons:' ||''|| NVL(:NEW.IDITMCONS,'') ||'   ';
      END IF;
      IF (NVL(:OLD.IDSOLIAPROV, 'X') <> NVL(:NEW.IDSOLIAPROV, 'X')) THEN
         V_DESC := V_DESC ||'ID Aprovação:' ||''|| NVL(:NEW.IDSOLIAPROV,'') ||'   ';
      END IF;
      IF (NVL(:OLD.DTHRAPROVSOL, TO_DATE('01/01/1900', 'DD/MM/YYYY')) <> NVL(:NEW.DTHRAPROVSOL, TO_DATE('01/01/1900', 'DD/MM/YYYY'))) THEN
         V_DESC := V_DESC ||'Dt. Aprovação:' ||''|| NVL(:NEW.DTHRAPROVSOL,'') ||'   ';
      END IF;
      IF (NVL(:OLD.CDFILIOPELOG, 'X') <> NVL(:NEW.CDFILIOPELOG, 'X')) THEN
         V_DESC := V_DESC ||'Filial OL:' ||''|| NVL(:NEW.CDFILIOPELOG,'') ||'   ';
      END IF;
      IF (NVL(:OLD.NRSEQUCONSOL, 'X') <> NVL(:NEW.NRSEQUCONSOL, 'X')) THEN
         V_DESC := V_DESC ||'Consolidação:' ||''|| NVL(:NEW.NRSEQUCONSOL,'') ||'   ';
      END IF;
      IF (NVL(V_IDPARAM, 'X') <> NVL(V_IDPARAM, 'X')) THEN
         V_DESC := V_DESC ||'Param. Aprova:'  ||''|| NVL(V_IDPARAM,'') ||'   ';
      END IF;
      IF (NVL(:OLD.IDPEDIDOOL, 'X') <> NVL(:NEW.IDPEDIDOOL, 'X')) THEN
         V_DESC := V_DESC ||'Gerou Pedido:'  ||''|| NVL(:NEW.IDPEDIDOOL,'')||'   ';
      END IF;
      IF (NVL(:OLD.CDRASTRITM, 0) <> NVL(:NEW.CDRASTRITM, 0)) THEN
         V_DESC := V_DESC ||'Seq Rast:'  ||''|| NVL(:NEW.CDRASTRITM,'')||'   ';
      END IF;
      V_ITPESQ       := :NEW.CDFILSOLI|| :NEW.CDFILLAN|| :NEW.NRSOLICMP|| :NEW.CDPRODUTO||
                        TO_CHAR(:NEW.DTPROGENTR, 'DD/MM/YYYY')|| TO_CHAR(:NEW.CDRASTRITM);
      V_CDFILLOGOPER := :NEW.CDFILLAN;
      V_IDTIPOOPER   := '2';
   ELSE
      V_DESC   :=        'Filial Dest.'           ||''  || NVL(NVL(:NEW.CDFILSOLI, :OLD.CDFILSOLI), '')      ||'  '  ||
                         'Filial Lanç.'           ||''  || NVL(NVL(:NEW.CDFILLAN, :OLD.CDFILLAN), '')        ||'  '  ||
                         'Número'                 ||''  || NVL(NVL(:NEW.NRSOLICMP, :OLD.NRSOLICMP), '')      ||'  '  ||
                         'Produto'                ||''  || NVL(NVL(:NEW.CDPRODUTO, :OLD.CDPRODUTO), '')      ||'  '  ||
                         'Dt. Entr. Item'         ||''  || NVL(NVL(:NEW.DTPROGENTR, :OLD.DTPROGENTR), '')    ||'  '  ||
                         'Oper. Aprova.'          ||''  || NVL(NVL(:NEW.CDOPERAPROV, :OLD.CDOPERAPROV), '')  ||'  '  ||
                         'Dt. Ut.'                ||''  || NVL(NVL(:NEW.DTUTILIZA, :OLD.DTUTILIZA), '')      ||'  '  ||
                         'Qt. Itens:'             ||''  || NVL(NVL(:NEW.QTSOLIPROD, :OLD.QTSOLIPROD), '')    ||'  '  ||
                         'ID Cons:'               ||''  || NVL(NVL(:NEW.IDITMCONS, :OLD.IDITMCONS), '')      ||'  '  ||
                         'ID Aprovação:'          ||''  || NVL(NVL(:NEW.IDSOLIAPROV, :OLD.IDSOLIAPROV), '')  ||'  '  ||
                         'Dt. Aprovação:'         ||''  || NVL(NVL(:NEW.DTHRAPROVSOL, :OLD.DTHRAPROVSOL), '')||'  '  ||
                         'Filial OL:'             ||''  || NVL(NVL(:NEW.CDFILIOPELOG, :OLD.CDFILIOPELOG) ,'')||'  '  ||
                         'Consolidação:'          ||''  || NVL(NVL(:NEW.NRSEQUCONSOL, :OLD.NRSEQUCONSOL), '')||'  '  ||
                         'Param. Aprova:'         ||''  || V_IDPARAM                                         ||'  '  ||
                         'Gerou Pedido:'          ||''  || NVL(NVL(:NEW.IDPEDIDOOL, :OLD.IDPEDIDOOL), '')    ||'  '  ||
                         'Seq Rast:'              ||''  || NVL(NVL(:NEW.CDRASTRITM, :OLD.CDRASTRITM), '');

      V_ITPESQ       := NVL(:NEW.CDFILSOLI, :OLD.CDFILSOLI)   ||
                        NVL(:NEW.CDFILLAN,  :OLD.CDFILLAN)    ||
                        NVL(:NEW.NRSOLICMP, :OLD.NRSOLICMP)   ||
                        NVL(:NEW.CDPRODUTO, :OLD.CDPRODUTO)   ||
                        NVL(TO_CHAR(:NEW.DTPROGENTR, 'DD/MM/YYYY'),TO_CHAR(:OLD.DTPROGENTR, 'DD/MM/YYYY'))  ||
                        TO_CHAR(NVL(:NEW.CDRASTRITM,:OLD.CDRASTRITM));
      V_CDFILLOGOPER := NVL(:NEW.CDFILLAN,  :OLD.CDFILLAN);
      IF INSERTING THEN
         V_IDTIPOOPER   := '1';
      ELSE
         V_IDTIPOOPER   := '3';
      END IF;
   END IF;
   IF (V_DESC IS NOT NULL)   THEN
      V_DESC := SUBSTR(V_DESC, 1, 300);
      INSERT INTO LOGOPERA
         (NMTABELA,
          DTOPERACAO,
          NMRESPOPER,
          IDTIPOOPER,
          DSOPERACAO,
          CDPESQITEM,
          DSRDMUSUOPER,
          DSENDUSUOPER,
          DSNMUSUOPER,
          DSMETUSUOPER,
          CDORESPOPER,
          CDFILLOGOPER)
      VALUES
         ('ITEMSOLI',
          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;
/

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