CREATE OR REPLACE TRIGGER LOG_PLA_PRATTPCARD
AFTER DELETE OR INSERT OR UPDATE
ON PRATTPCARD FOR EACH ROW
DECLARE
  V_USUARIO   VARCHAR2(40);
  V_TIPO      VARCHAR2(1);
  V_ITPESQ    VARCHAR2(40);
  V_DESC      VARCHAR2(500);
  V_DTOPER    DATE;
  V_DSIP       VARCHAR2(50);
  V_DSUSUARIO  VARCHAR2(50);
  V_DSRDM      VARCHAR2(50);
  V_DSMETODO   VARCHAR2(250);
  V_DSOPERADOR VARCHAR2(12);
BEGIN
   V_TIPO := '0';
   V_DESC := '';
   WEBTUNNING(V_DSIP,
              V_DSUSUARIO,
              V_DSRDM,
              V_DSMETODO,
              V_DSOPERADOR);
   IF DELETING THEN
      V_DESC := V_DESC || 'Prato=' || :OLD.CDPRATO;
      V_DESC := V_DESC || ' Arv=' || :OLD.CDFILAUXPRAT;
      V_DESC := V_DESC || ' Fili=' || :OLD.CDFILCENTPME;
      V_DESC := V_DESC || ' TpCard=' || :OLD.CDTIPOCARD;
      IF (NVL(:OLD.IDATIVO, '') <> '') THEN
         V_DESC := V_DESC || ' IdAtivo=' || :OLD.IDATIVO;
      END IF;      
      IF (NVL(:OLD.DTINATIVAUTO, '01/01/1900') <> '01/01/1900') THEN
         V_DESC := V_DESC || ' DtInativAuto=' || TO_CHAR(:OLD.DTINATIVAUTO,'DD/MM/YYYY');
      END IF;       
      V_DESC := V_DESC || ' Rdm='      || V_DSRDM;
      V_DESC := V_DESC || ' Metodo='   || V_DSMETODO;
      V_DESC := V_DESC || ' Ip='       || V_DSIP;
      V_DESC := V_DESC || ' Usuario='  || V_DSUSUARIO;
      V_DESC := V_DESC || ' Operador=' || V_DSOPERADOR;
      V_TIPO := '3';
      V_ITPESQ := :OLD.CDPRATO||:OLD.CDFILAUXPRAT||:OLD.CDFILCENTPME||:OLD.CDTIPOCARD;
   ELSE
      IF UPDATING THEN
         IF (:OLD.CDPRATO      <> :NEW.CDPRATO     ) OR
            (:OLD.CDFILAUXPRAT <> :NEW.CDFILAUXPRAT) OR
            (:OLD.CDFILCENTPME     <> :NEW.CDFILCENTPME   ) OR
            (:OLD.CDTIPOCARD   <> :NEW.CDTIPOCARD   ) OR
            (NVL(:OLD.DTINATIVAUTO,'01/01/1900') <> NVL(:NEW.DTINATIVAUTO,'01/01/1900')) OR     
            (NVL(:OLD.IDATIVO, '') <> NVL(:NEW.IDATIVO, '')) THEN
            V_TIPO   := '2';
            V_ITPESQ := :OLD.CDPRATO||:OLD.CDFILAUXPRAT||:OLD.CDFILCENTPME||:OLD.CDTIPOCARD;
         END IF;
      ELSE
         V_TIPO   := '1';
         V_ITPESQ := :NEW.CDPRATO||:NEW.CDFILAUXPRAT||:NEW.CDFILCENTPME||:NEW.CDTIPOCARD;
      END IF;
      IF UPDATING THEN
         IF (:OLD.CDPRATO <> :NEW.CDPRATO) THEN
            V_DESC := V_DESC || 'Prato=' || :OLD.CDPRATO || '|' || :NEW.CDPRATO;
         ELSE
            V_DESC := V_DESC || 'Prato=' || :OLD.CDPRATO;
         END IF;
      ELSE
         V_DESC := V_DESC || 'Prato=' || :NEW.CDPRATO;
      END IF;
      IF UPDATING THEN
         IF (:OLD.CDFILAUXPRAT <> :NEW.CDFILAUXPRAT) THEN
            V_DESC := V_DESC || ' Arv=' || :OLD.CDFILAUXPRAT || '|' || :NEW.CDFILAUXPRAT;
         ELSE
            V_DESC := V_DESC || ' Arv=' || :OLD.CDFILAUXPRAT;
         END IF;
      ELSE
         V_DESC := V_DESC || ' Arv=' || :NEW.CDFILAUXPRAT;
      END IF;
      IF UPDATING THEN
         IF (:OLD.CDFILCENTPME <> :NEW.CDFILCENTPME) THEN
            V_DESC := V_DESC || 'Fili=' || :OLD.CDFILCENTPME || '|' || :NEW.CDFILCENTPME;
         ELSE
            V_DESC := V_DESC || 'Fili=' || :OLD.CDFILCENTPME;
         END IF;
      ELSE
         V_DESC := V_DESC || 'Fili=' || :NEW.CDFILCENTPME;
      END IF;
      IF UPDATING THEN
         IF (:OLD.CDTIPOCARD <> :NEW.CDTIPOCARD) THEN
            V_DESC := V_DESC || 'TpCard=' || :OLD.CDTIPOCARD || '|' || :NEW.CDTIPOCARD;
         ELSE
            V_DESC := V_DESC || 'TpCard=' || :OLD.CDTIPOCARD;
         END IF;
      ELSE
         V_DESC := V_DESC || 'TpCard=' || :NEW.CDTIPOCARD;
      END IF;
      IF UPDATING THEN
         IF (:OLD.IDATIVO <> :NEW.IDATIVO) THEN
            V_DESC := V_DESC || 'IdAtivo=' || :OLD.IDATIVO || '|' || :NEW.IDATIVO;
         ELSE
            V_DESC := V_DESC || 'IdAtivo=' || :OLD.IDATIVO;
         END IF;
      ELSE
         V_DESC := V_DESC || 'IdAtivo=' || :NEW.IDATIVO;
      END IF;
      IF UPDATING THEN
         IF (NVL(:OLD.DTINATIVAUTO,'01/01/1900') <> NVL(:NEW.DTINATIVAUTO,'01/01/1900')) THEN
            V_DESC := V_DESC || ' DtInativAuto=' || TO_CHAR(:OLD.DTINATIVAUTO,'DD/MM/YYYY') || '|' || TO_CHAR(:NEW.DTINATIVAUTO,'DD/MM/YYYY');
         ELSE
            V_DESC := V_DESC || ' DtInativAuto=' || TO_CHAR(:OLD.DTINATIVAUTO,'DD/MM/YYYY');
         END IF;
      ELSE
         V_DESC := V_DESC || ' DtInativAuto=' || :NEW.IDATIVO;
      END IF;      
      V_DESC := V_DESC || ' Rdm='      || V_DSRDM;
      V_DESC := V_DESC || ' Metodo='   || V_DSMETODO;
      V_DESC := V_DESC || ' Ip='       || V_DSIP;
      V_DESC := V_DESC || ' Usuario='  || V_DSUSUARIO;
      V_DESC := V_DESC || ' Operador=' || V_DSOPERADOR;
   END IF;
   IF V_TIPO <> '0' THEN
      NMUSUARIO(V_USUARIO);
      IF NOT V_DESC IS NULL THEN
         IF NOT V_USUARIO IS NULL THEN
            V_DTOPER := SYSDATE;

            INSERT INTO LOGOPERA
               (NMTABELA,   DTOPERACAO, NMRESPOPER, IDTIPOOPER, CDPESQITEM, DSOPERACAO,
                DSRDMUSUOPER, DSENDUSUOPER, DSNMUSUOPER, DSMETUSUOPER, CDORESPOPER, CDFILLOGOPER)
            VALUES
               ('PRATTPCARD', V_DTOPER, V_USUARIO, V_TIPO, V_ITPESQ, SUBSTR(V_DESC, 1, 300),
                V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_DSOPERADOR, NVL(:NEW.CDFILCENTPME, :OLD.CDFILCENTPME));
         END IF;
      END IF;
   END IF;
END;
/