CREATE OR REPLACE TRIGGER LOG_APROVALCADA
AFTER DELETE OR INSERT OR UPDATE
ON APROVALCADA 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(500);
  V_ITPESQ       VARCHAR2(40);
  V_NMOPERADOR   VARCHAR2(40);
  V_IDTIPOOPER   VARCHAR2(1);
BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_IDTIPOOPER   := '';
   NMUSUARIO(V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   IF UPDATING THEN
      IF NVL(:OLD.NRCONFIGALCADA, 0) <> NVL(:NEW.NRCONFIGALCADA, 0)    THEN
         V_DESC   := V_DESC || 'Alçada:' || '' || NVL(:NEW.NRCONFIGALCADA,  '')  || ' ';
      END IF;
      IF NVL(:OLD.CDFILDEST, '!')   <> NVL(:NEW.CDFILDEST, '!')   THEN
         V_DESC   := V_DESC || 'Unidade Dest:' || '' || NVL(:NEW.CDFILDEST, '')  || ' ';
      END IF;
      IF NVL(:OLD.CDFILLANC, '!')   <> NVL(:NEW.CDFILLANC, '!')   THEN
         V_DESC   := V_DESC || 'Unidade Lanc:' || '' || NVL(:NEW.CDFILLANC, '')  || ' ';
      END IF;
      IF NVL(:OLD.NRDEMANDA, '!')   <> NVL(:NEW.NRDEMANDA, '!')   THEN
         V_DESC   := V_DESC || 'Demanda:' || '' || NVL(:NEW.NRDEMANDA, '')  || ' ';
      END IF;
      IF NVL(:OLD.CDOPERADOR, '!')   <> NVL(:NEW.CDOPERADOR, '!')   THEN
         V_DESC   := V_DESC || 'Aprov Princ:' || '' || :NEW.CDOPERADOR  || ' ';
      END IF;
      IF NVL(:OLD.IDTPDEMANDA, '!')   <> NVL(:NEW.IDTPDEMANDA, '!')   THEN
         V_DESC   := V_DESC || 'Tipo Demanda:' || '' || NVL(:NEW.IDTPDEMANDA, '')  || ' ';
      END IF;
      IF NVL(:OLD.IDAPROVADO, '!')   <> NVL(:NEW.IDAPROVADO, '!')   THEN
         V_DESC   := V_DESC || 'Status Aprov:' || '' || NVL(:NEW.IDAPROVADO, '')  || ' ';
      END IF;
      IF NVL(:OLD.DSJUSTIFICA, '!')   <> NVL(:NEW.DSJUSTIFICA, '!')   THEN
         V_DESC   := V_DESC || 'Just Aprov:' || '' || NVL(:NEW.DSJUSTIFICA, '')  || ' ';
      END IF;
      IF NVL(:OLD.CDOPERAPROV, '!')   <> NVL(:NEW.CDOPERAPROV, '!')   THEN
         V_DESC   := V_DESC || 'Oper Aprov:' || '' || NVL(:NEW.CDOPERAPROV, '')  || ' ';
      END IF;
      V_ITPESQ       := NVL(:OLD.NRCONFIGALCADA||:OLD.CDFILDEST||:OLD.CDFILLANC||:OLD.NRDEMANDA, '');
      V_IDTIPOOPER   := '2';
   ELSE
      IF INSERTING THEN
         V_DESC   := 'Alçada:'       || '' || NVL(:NEW.NRCONFIGALCADA, '') || ' ' ||
                     'Unidade Dest:' || '' || NVL(:NEW.CDFILDEST, '')      || ' ' ||
				             'Unidade Lanc:' || '' || NVL(:NEW.CDFILLANC, '')      || ' ' ||
                     'Demanda:'      || '' || NVL(:NEW.NRDEMANDA, '')      || ' ' ||
                     'Aprov Princ:'  || '' || NVL(:NEW.CDOPERADOR, '')     || ' ' ||
                     'Tipo Demanda:' || '' || NVL(:NEW.IDTPDEMANDA, '')    || ' ' ||
                     'Status Aprov:' || '' || NVL(:NEW.IDAPROVADO, '')     || ' ' ||
                     'Just Aprov:'   || '' || NVL(:NEW.DSJUSTIFICA, '')    || ' ' ||
                     'Oper Aprov:'   || '' || NVL(:NEW.CDOPERAPROV, '');
         
         V_ITPESQ     := :NEW.NRCONFIGALCADA||:NEW.CDFILDEST||:NEW.CDFILLANC||:NEW.NRDEMANDA;
         V_IDTIPOOPER := '1';
      ELSE
         IF DELETING THEN
            V_DESC   := 'Alçada:'       || '' || NVL(:OLD.NRCONFIGALCADA, '') || ' ' ||
                        'Unidade Dest:' || '' || NVL(:OLD.CDFILDEST, '')      || ' ' ||
                        'Unidade Lanc:' || '' || NVL(:OLD.CDFILLANC, '')      || ' ' ||
                        'Demanda:'      || '' || NVL(:OLD.NRDEMANDA, '')      || ' ' ||
                        'Aprov Princ:'  || '' || NVL(:OLD.CDOPERADOR, '')     || ' ' ||
                        'Tipo Demanda:' || '' || NVL(:OLD.IDTPDEMANDA, '')    || ' ' ||
                        'Status Aprov:' || '' || NVL(:OLD.IDAPROVADO, '')     || ' ' ||
                        'Just Aprov:'   || '' || NVL(:OLD.DSJUSTIFICA, '')    || ' ' ||
                        'Oper Aprov:'   || '' || NVL(:OLD.CDOPERAPROV, '');
            
            V_ITPESQ      := NVL(:OLD.NRCONFIGALCADA||:OLD.CDFILDEST||:OLD.CDFILLANC||:OLD.NRDEMANDA, '');
            V_IDTIPOOPER  := '3';
         END IF;
      END IF;
   END IF;
   V_DESC := SUBSTR(V_DESC, 1, 700);

   IF V_DESC IS NOT NULL THEN
      INSERT INTO LOGOPERA
         (NMTABELA,
         DTOPERACAO,
         NMRESPOPER,
         IDTIPOOPER,
         DSOPERACAO,
         CDPESQITEM,
         DSRDMUSUOPER,
         DSENDUSUOPER,
         DSNMUSUOPER,
         DSMETUSUOPER,
         CDORESPOPER)
      VALUES
         ('APROVALCADA',
         SYSDATE,
         NVL(V_NMOPERADOR,' '),
         V_IDTIPOOPER,
         V_DESC,
         V_ITPESQ,
         V_DSSERVERRDM,
         V_DSREMOTEADDR,
         V_DSREMOTEHOST,
         V_DSSERVMETHOD,
         V_DSREMOTEOPER);
   END IF;
END;
/
