CREATE OR REPLACE TRIGGER LOG_SUP_PRODUTO
AFTER DELETE OR INSERT OR UPDATE OF SGUNIDADE,
                                    VRPESOUNID,
                                    CDPRODESTO,
                                    VRFATOCONV,
                                    VRARREDCMP,
                                    CDTPCTPAGAR,
                                    CDPRODORIG,
                                    CDTPINDICE,
                                    IDPERVALOR,
                                    CDINDICE,
                                    IDPRODATIVPR,
                                    NMPRODUTO,
                                    CDCTBLENTRPR,
                                    CDCTBLSAIDPR,
                                    CDCTBLPRODPR,
                                    CDCTBLCPROPR,
                                    CDCTBLPRACPR,
                                    IDPRCMPATIVO,
                                    NMFANTPROD,
                                    IDTEOROBRIG,
                                    IDVDANALISE,
                                    DSFORMULAVDANA,
                                    DSFORMULAVDRANA,
                                    IDPRODPERIG,
                                    DSINFADICPROD

ON PRODUTO  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(40);
   V_NMOPERADOR   VARCHAR2(40);
   V_IDTIPOOPER   VARCHAR2(1);
BEGIN
/* IDTIPOOPER - '1' - Inclusao, '2' - Alteracao, '3' - Exclusao*/
   V_DESC       := '';
   V_ITPESQ     := '';
   V_NMOPERADOR := '';
   V_IDTIPOOPER := '';
   NMUSUARIO(V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);
   IF DELETING THEN
      V_IDTIPOOPER   := '3';
      V_ITPESQ       := :OLD.CDARVPROD;
      V_DESC         := 'Produto '       || '' || NVL(:OLD.CDARVPROD,'')||' '||
                        'Cod. Produto '  || '' || NVL(:OLD.CDPRODUTO,'')||' '||
                        'NmCod '         || '' || NVL(:OLD.NMFANTPROD, '');
   ELSE
      IF UPDATING THEN
         IF NVL(:NEW.CDARVPROD,'NULL') <> NVL(:OLD.CDARVPROD,'NULL') THEN
            V_DESC := 'Prod ' || '' || NVL(:NEW.CDARVPROD,''  );
         END IF;

         IF NVL(:NEW.NMPRODUTO,'NULL') <> NVL(:OLD.NMPRODUTO,'NULL') THEN
             V_DESC := NVL(V_DESC, '') || ' ' || 'Nome ' || '' || NVL(:NEW.NMPRODUTO,'' );
         END IF;

         IF NVL(:NEW.SGUNIDADE,'NULL') <> NVL(:OLD.SGUNIDADE,'NULL') THEN
             V_DESC := NVL(V_DESC, '') || ' ' || 'Unidade ' || '' || NVL(:NEW.SGUNIDADE,'' );
         END IF;

         IF NVL(:NEW.VRPESOUNID, 0) <> NVL(:OLD.VRPESOUNID,0) THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'PesoUnid ' || '' || NVL(:NEW.VRPESOUNID,''  );
         END IF;

         IF NVL(:NEW.CDPRODESTO,'NULL') <> NVL(:OLD.CDPRODESTO,'NULL') THEN
             V_DESC := NVL(V_DESC, '') || ' ' || 'ProdEst ' || '' || NVL(:NEW.CDPRODESTO,'' );
         END IF;

         IF NVL(:NEW.VRFATOCONV, 0) <> NVL(:OLD.VRFATOCONV,0) THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'FatorConv ' || '' || NVL(:NEW.VRFATOCONV,''  );
         END IF;

         IF NVL(:NEW.VRARREDCMP, 0) <> NVL(:OLD.VRARREDCMP,0) THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'ArreCmp ' || '' || NVL(:NEW.VRARREDCMP,''  );
         END IF;

         IF NVL(:NEW.CDTPCTPAGAR, 'NULL') <> NVL(:OLD.CDTPCTPAGAR,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'TpCtbPag ' || '' || NVL(:NEW.CDTPCTPAGAR,''  );
         END IF;

         IF NVL(:NEW.CDPRODORIG, 'NULL') <> NVL(:OLD.CDPRODORIG,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'ProgOrig ' || '' || NVL(:NEW.CDPRODORIG,''  );
         END IF;

         IF NVL(:NEW.CDTPINDICE, 'NULL') <> NVL(:OLD.CDTPINDICE,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'CdTPIndice ' || '' || NVL(:NEW.CDTPINDICE,''  );
         END IF;

         IF NVL(:NEW.IDPERVALOR, 'NULL') <> NVL(:OLD.IDPERVALOR,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'IdIndice ' || '' || NVL(:NEW.IDPERVALOR,''  );
         END IF;

         IF NVL(:NEW.CDINDICE, 'NULL') <> NVL(:OLD.CDINDICE,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'CdIndice ' || '' || NVL(:NEW.CDINDICE,''  );
         END IF;

         IF NVL(:NEW.IDPRODATIVPR, 'NULL') <> NVL(:OLD.IDPRODATIVPR,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'ProdAtiv ' || '' || NVL(:NEW.IDPRODATIVPR,''  );
         END IF;

         IF NVL(:NEW.CDCTBLENTRPR, 'NULL') <> NVL(:OLD.CDCTBLENTRPR,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'CtblEntrada ' || '' || NVL(:NEW.CDCTBLENTRPR,''  );
         END IF;

         IF NVL(:NEW.CDCTBLSAIDPR, 'NULL') <> NVL(:OLD.CDCTBLSAIDPR,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'CtblSaida ' || '' || NVL(:NEW.CDCTBLSAIDPR,''  );
         END IF;

         IF NVL(:NEW.CDCTBLPRODPR, 'NULL') <> NVL(:OLD.CDCTBLPRODPR,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'CtblCustoProd ' || '' || NVL(:NEW.CDCTBLPRODPR,''  );
         END IF;

         IF NVL(:NEW.CDCTBLCPROPR, 'NULL') <> NVL(:OLD.CDCTBLCPROPR,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'CtblContraProva ' || '' || NVL(:NEW.CDCTBLCPROPR,''  );
         END IF;

         IF NVL(:NEW.IDPRCMPATIVO, 'NULL') <> NVL(:OLD.IDPRCMPATIVO,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'Emb. CMP ' || '' || NVL(:NEW.IDPRCMPATIVO,''  );
         END IF;

         IF NVL(:NEW.CDCTBLPRACPR, 'NULL') <> NVL(:OLD.CDCTBLPRACPR,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'CtblCMV ' || '' || NVL(:NEW.CDCTBLPRACPR,''  );
         END IF;

         IF NVL(:NEW.NMFANTPROD, 'NULL') <> NVL(:OLD.NMFANTPROD,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'NmCod ' || '' || NVL(:NEW.NMFANTPROD,''  );
         END IF;

         IF NVL(:NEW.IDTEOROBRIG, 'NULL') <> NVL(:OLD.IDTEOROBRIG,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'IdTeorObrig ' || '' || NVL(:NEW.IDTEOROBRIG,''  );
         END IF;

         IF NVL(:NEW.IDVDANALISE, 'NULL') <> NVL(:OLD.IDVDANALISE,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'IdVdAanalise ' || '' || NVL(:NEW.IDVDANALISE,''  );
         END IF;

         IF NVL(:NEW.DSFORMULAVDANA, 'NULL') <> NVL(:OLD.DSFORMULAVDANA,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'DsFormulaVdAna ' || '' || NVL(:NEW.DSFORMULAVDANA,''  );
         END IF;

         IF NVL(:NEW.DSFORMULAVDRANA, 'NULL') <> NVL(:OLD.DSFORMULAVDRANA,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'DsFormulaVdRana ' || '' || NVL(:NEW.DSFORMULAVDRANA,''  );
         END IF;

         IF NVL(:NEW.IDPRODPERIG, 'NULL') <> NVL(:OLD.IDPRODPERIG,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'IdProdPerig ' || '' || NVL(:NEW.IDPRODPERIG,''  );
         END IF;

         IF NVL(:NEW.DSINFADICPROD, 'NULL') <> NVL(:OLD.DSINFADICPROD,'NULL') THEN
            V_DESC := NVL(V_DESC, '') || ' ' || 'DsInfAdicProd ' || '' || NVL(:NEW.DSINFADICPROD,''  );
         END IF;

         V_ITPESQ := :NEW.CDPRODUTO;
         V_IDTIPOOPER := '2';
      ELSE
         V_IDTIPOOPER   := '1';
         V_ITPESQ       := :NEW.CDARVPROD;
         V_DESC         := 'Produto '       || '' || NVL(:NEW.CDARVPROD,'') ||' '||
                           'Cod. Produto '  || '' || NVL(:NEW.CDPRODUTO,'') ||' '||
                           'NmCod'          || '' || NVL(:NEW.NMFANTPROD, '');
      END IF;
   END IF;

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

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