CREATE OR REPLACE TRIGGER LOG_VND_PRODEXTERNOINTE
AFTER DELETE OR INSERT OR UPDATE ON PRODEXTERNOINTE
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(4000);
   V_ITPESQ       VARCHAR2(80);
   V_NMOPERADOR   VARCHAR2(40);
   V_IDTIPOOPER   VARCHAR2(1);
BEGIN
   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(:NEW.CDFILIAL, 'NULL') <> NVL(:OLD.CDFILIAL, 'NULL') THEN
         V_DESC := 'Filial ' || NVL(:NEW.CDFILIAL, '');
      END IF;
      IF NVL(:NEW.CDPRODUTO, 'NULL') <> NVL(:OLD.CDPRODUTO, 'NULL') THEN
         IF V_DESC IS NOT NULL AND V_DESC <> '' THEN
            V_DESC := V_DESC || ' | ';
         END IF;
         V_DESC := V_DESC || 'Produto ' || NVL(:NEW.CDPRODUTO, '');
      END IF;
      IF NVL(:NEW.CDPRODINTE, 'NULL') <> NVL(:OLD.CDPRODINTE, 'NULL') THEN
         IF V_DESC IS NOT NULL AND V_DESC <> '' THEN
            V_DESC := V_DESC || ' | ';
         END IF;
         V_DESC := V_DESC || 'Cd Prod Inte ' || NVL(:NEW.CDPRODINTE, '');
      END IF;
      IF NVL(:NEW.CDPROJETO, 'NULL') <> NVL(:OLD.CDPROJETO, 'NULL') THEN
         IF V_DESC IS NOT NULL AND V_DESC <> '' THEN
            V_DESC := V_DESC || ' | ';
         END IF;
         V_DESC := V_DESC || 'Projeto ' || NVL(:NEW.CDPROJETO, '');
      END IF;
      IF NVL(:NEW.CDSUBPROJETO, 'NULL') <> NVL(:OLD.CDSUBPROJETO, 'NULL') THEN
         IF V_DESC IS NOT NULL AND V_DESC <> '' THEN
            V_DESC := V_DESC || ' | ';
         END IF;
         V_DESC := V_DESC || 'Subprojeto ' || NVL(:NEW.CDSUBPROJETO, '');
      END IF;

      V_ITPESQ := NVL(:NEW.CDPRODUTO, '') ||
                  NVL(:NEW.CDPRODINTE, '') ||
                  NVL(:NEW.CDPROJETO, '');
      V_IDTIPOOPER := '2';

   ELSIF INSERTING THEN
      V_DESC := 'Filial '        || NVL(:NEW.CDFILIAL, '') || ' | ' ||
                'Produto '       || NVL(:NEW.CDPRODUTO, '') || ' | ' ||
                'Cd Prod Inte ' || NVL(:NEW.CDPRODINTE, '') || ' | ' ||
                'Projeto '       || NVL(:NEW.CDPROJETO, '') || ' | ' ||
                'Subprojeto '    || NVL(:NEW.CDSUBPROJETO, '');
      V_ITPESQ := NVL(:NEW.CDPRODUTO, '') ||
                  NVL(:NEW.CDPRODINTE, '') ||
                  NVL(:NEW.CDPROJETO, '');
      V_IDTIPOOPER := '1';

   ELSIF DELETING THEN
      V_DESC := 'Filial '        || NVL(:OLD.CDFILIAL, '') || ' | ' ||
                'Produto '       || NVL(:OLD.CDPRODUTO, '') || ' | ' ||
                'Cd Prod Inte ' || NVL(:OLD.CDPRODINTE, '') || ' | ' ||
                'Projeto '       || NVL(:OLD.CDPROJETO, '') || ' | ' ||
                'Subprojeto '    || NVL(:OLD.CDSUBPROJETO, '');
      V_ITPESQ := NVL(:OLD.CDPRODUTO, '') ||
                  NVL(:OLD.CDPRODINTE, '') ||
                  NVL(:OLD.CDPROJETO, '');
      V_IDTIPOOPER := '3';
   END IF;

   V_DESC := SUBSTR(V_DESC, 1, 300);

   INSERT INTO LOGOPERAVND 
      (NMTABELAVND, 
       DTOPERACAOVND, 
       NMRESPOPERVND, 
       IDTIPOOPERVND, 
       DSOPERACAOVND, 
       CDPESQITEMVND, 
       DSRDMUSUOPERVND, 
       DSENDUSUOPERVND, 
       DSNMUSUOPERVND, 
       DSMETUSUOPERVND, 
       CDORESPOPERVND, 
       CDFILLOGOPERVND)
   VALUES
      ('PRODEXTERNOINTE',
       SYSDATE,
       NVL(V_NMOPERADOR, ' '),
       V_IDTIPOOPER,
       NVL(V_DESC, ' '),
       V_ITPESQ,
       V_DSSERVERRDM,
       V_DSREMOTEADDR,
       V_DSREMOTEHOST,
       V_DSSERVMETHOD,
       V_DSREMOTEOPER,
       NVL(:NEW.CDFILIAL, :OLD.CDFILIAL));
END;
/
