CREATE OR REPLACE TRIGGER LOG_GOP_PARFILIALROP
AFTER UPDATE OR INSERT
ON PARFILIALROP FOR EACH ROW
DECLARE
  V_TIPO                        VARCHAR2(1);
  V_DSREMOTEADDR                VARCHAR2(15);
  V_DSREMOTEHOST                VARCHAR2(15);
  V_DSSERVERRDM                 VARCHAR2(100);
  V_DSSERVMETHOD                VARCHAR2(4000);
  V_DSREMOTEOPER                VARCHAR2(12);
  V_DESC                        VARCHAR2(4000);
  V_DESCUPD                     VARCHAR2(4000);
  V_CDFILLOGOPER                VARCHAR2(4);
  V_ITPESQ                      VARCHAR2(40);
  V_NMOPERADOR                  VARCHAR2(40);
  V_CDOPERADOR                  VARCHAR2(12);
  V_NMFILIAL                    VARCHAR2(30);
  V_CDFILIAL                    VARCHAR2(30);
  V_MES                         VARCHAR2(30);
  V_MES_NOVO                    VARCHAR2(30);
  V_NMTABELA                    VARCHAR2(50);
  V_NMTELA                      VARCHAR2(50);
  V_UNIDADE                     VARCHAR(100);
  -- Faturamento
  V_CDIMPOSTO                   VARCHAR2(50);
  V_CDIMPOSTO_NOVO              VARCHAR2(50);
  V_SGIMPOSTO                   VARCHAR2(50);
  V_SGIMPOSTO_NOVO              VARCHAR2(50);
  V_NMIMPOSTO                   VARCHAR2(50);
  V_NMIMPOSTO_NOVO              VARCHAR2(50);
  V_IDDETALEFET                 VARCHAR2(30);
  V_IDDETALEFET_NOVO            VARCHAR2(30);
  -- Geral:
  V_IDDTAPURFAT                 VARCHAR2(50);
  V_IDDTAPURFAT_NOVO            VARCHAR2(50);
  V_IDTPAPURACAO                VARCHAR2(30);
  V_IDTPAPURACAO_NOVO           VARCHAR2(30);
  V_CDGRUPPROD                  VARCHAR2(30);
  V_CDGRUPPROD_NOVO             VARCHAR2(30);
  V_CDTIPOOPER                  VARCHAR2(30);
  V_CDTIPOOPER_NOVO             VARCHAR2(30);
  V_NMTIPOOPER                  VARCHAR2(30);
  V_NMTIPOOPER_NOVO             VARCHAR2(30);
  V_IDVISAOROP                  VARCHAR2(30);
  V_IDVISAOROP_NOVO             VARCHAR2(30);
  V_NMGRUPPROD                  VARCHAR2(30);
  V_NMGRUPPROD_NOVO             VARCHAR2(30);
  -- Apuracao Consumo:
  V_IDRETIRADAROP               VARCHAR2(100);
  V_IDRETIRADAROP_NOVO          VARCHAR2(100);
  -- Apuracao Estoque:
  V_IDPERCONSROP                VARCHAR2(50);
  V_IDPERCONSROP_NOVO           VARCHAR2(50);
  -- Apuracao Despesas:
  V_NMGRUPDESP                  VARCHAR2(50);
  V_NMGRUPDESP_NOVO             VARCHAR2(50);
  V_IDDTAPUCTPAGAR              VARCHAR2(50);
  V_IDDTAPUCTPAGAR_NOVO         VARCHAR2(50);
  V_IDEXIBEDESPESAMOBRA         VARCHAR2(50);
  V_IDEXIBEDESPESAMOBRA_NOVO    VARCHAR2(50);
  V_IDTIPODEPRECROP             VARCHAR2(50);
  V_IDTIPODEPRECROP_NOVO        VARCHAR2(50);
  -- Deducoes da Receita:
  V_IDDATADEVOLROP              VARCHAR2(50);
  V_IDDATADEVOLROP_NOVO         VARCHAR2(50);
  --Especifico DRF:
  V_CDGRUPPRODDRL               VARCHAR(50);
  V_CDGRUPPRODDRL_NOVO          VARCHAR(50);
  V_NMGRUPPRODDRL               VARCHAR(50);
  V_NMGRUPPRODDRL_NOVO          VARCHAR(50);
  V_CDGRUPPRODVEN               VARCHAR(50);
  V_CDGRUPPRODVEN_NOVO          VARCHAR(50);
  V_NMGRUPPRODVEN               VARCHAR(50);
  V_NMGRUPPRODVEN_NOVO          VARCHAR(50);
  

  PROCEDURE NMOPERADOR (P_CDOPERADOR IN OUT VARCHAR2,
                        P_NMOPERADOR OUT VARCHAR2) AS
  BEGIN 
     P_NMOPERADOR := NULL; 

     BEGIN 
        SELECT CDOPERADOR, NMOPERADOR 
          INTO P_CDOPERADOR, P_NMOPERADOR 
          FROM OPERADOR 
         WHERE CDOPERADOR = TO_CHAR(P_CDOPERADOR); 
     EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
          P_CDOPERADOR := 'VIA BD';
          P_NMOPERADOR := 'VIA BD';
     END; 
  END;
BEGIN
/* IDTIPOOPER - '1' - Inclusao, '2' - Alteracao, '3' - Exclusao*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';
   V_CDFILLOGOPER := '';
   V_NMTABELA     := 'PARFILIALROP';
   V_UNIDADE      := '';
   V_NMTELA       := NULL;

   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   V_DSSERVERRDM := 'ger80200_parametros_resultado_operacional';
   V_DESCUPD := 'Parametros para Resultado Operacional' || chr(10);
   
   IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
      V_UNIDADE := chr(10) || 'Unidade: Padrao';
   ELSE
      SELECT MAX(CDFILIAL), MAX(NMFILIAL) 
        INTO V_CDFILIAL, V_NMFILIAL 
        FROM FILIAL 
       WHERE CDFILIAL = :NEW.CDFILIAL;

      V_UNIDADE := chr(10) || 'Unidade: '|| V_CDFILIAL || ' - ' || V_NMFILIAL;
   END IF;

   IF UPDATING THEN
      V_TIPO         := '2';
      V_ITPESQ       := TO_CHAR(:OLD.CDFILIAL);
      V_CDOPERADOR   := :NEW.CDOPERULTATU;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      /*
          - LOOP dividido em blocos, cada um com os campos de sua respectiva tela.                    
          - Nao e possivel alterar duas telas ao mesmo tempo.                                         
          - Se houver alteracao em um bloco, os outros seguintes nao precisam ser verificados.        
          - Fora do loop e realizado a insercao na LOGOPERAGES, dos dados modificados.                
      */

      LOOP
         IF NVL(:OLD.IDUTPADRROPFIL, '!') <> NVL (:NEW.IDUTPADRROPFIL, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Utiliza parametrizacao padrao alterado de: ' || NVL(:OLD.IDUTPADRROPFIL,' ') || ' para: ' || NVL(:NEW.IDUTPADRROPFIL,' ');
         END IF;

         IF NVL(:OLD.IDFECHDIAROP, '!') <> NVL (:NEW.IDFECHDIAROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Apura resultado operacional da unidade no fechamento do dia/mes alterado de: ' || NVL(:OLD.IDFECHDIAROP,' ') || ' para: ' || NVL(:NEW.IDFECHDIAROP,' ');
         END IF;

         IF NVL(:OLD.IDFILIALAGRROP, '!') <> NVL (:NEW.IDFILIALAGRROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Considera unidades agregadas na apuracao da central alterado de: ' || NVL(:OLD.IDFILIALAGRROP,' ') || ' para: ' || NVL(:NEW.IDFILIALAGRROP,' ');
         END IF;
         IF NVL(:OLD.IDCOMPARANFEFET, '!') <> NVL (:NEW.IDCOMPARANFEFET, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Exibe comparativo entre NF e Efetivos alterado de: ' || NVL(:OLD.IDCOMPARANFEFET,' ') || ' para: ' || NVL(:NEW.IDCOMPARANFEFET,' ');
         END IF;

         IF NVL(:OLD.IDTPAPURACAO, '!') <> NVL (:NEW.IDTPAPURACAO, '!') THEN
            V_IDTPAPURACAO := NVL(CASE :OLD.IDTPAPURACAO WHEN '1' THEN 'Apuracao do DRO'
                                                         WHEN '2' THEN 'Apuracao do DRF'
                                                         WHEN '3' THEN 'Ambos (DRO e DRF)'
                                                         ELSE :OLD.IDTPAPURACAO
                                  END,' ');
            V_IDTPAPURACAO_NOVO := NVL(CASE :NEW.IDTPAPURACAO WHEN '1' THEN 'Apuracao do DRO'
                                                              WHEN '2' THEN 'Apuracao do DRF'
                                                              WHEN '3' THEN 'Ambos (DRO e DRF)'
                                                              ELSE :NEW.IDTPAPURACAO
                                       END,' ');
            V_DESC := V_DESC || chr(10) || 'Tipo de apuracao alterado de: ' || V_IDTPAPURACAO || ' para: ' || V_IDTPAPURACAO_NOVO;
         END IF;

         IF NVL(:OLD.CDGRUPPROD, 0) <> NVL (:NEW.CDGRUPPROD, 0) THEN
            SELECT NVL(MAX(CDGRUPPROD),' '), NVL(MAX(NMGRUPPROD),' ')
              INTO V_CDGRUPPROD, V_NMGRUPPROD
              FROM GRUPPROD
             WHERE CDGRUPPROD = :OLD.CDGRUPPROD;
            SELECT NVL(MAX(CDGRUPPROD),' '), NVL(MAX(NMGRUPPROD),' ')
              INTO V_CDGRUPPROD_NOVO, V_NMGRUPPROD_NOVO
              FROM GRUPPROD
             WHERE CDGRUPPROD = :NEW.CDGRUPPROD;
            V_DESC := V_DESC || chr(10) || 'Agrupamento de produto alterado de: ' || V_CDGRUPPROD || '-' || V_NMGRUPPROD || ' para: ' || V_CDGRUPPROD_NOVO || '-' ||  V_NMGRUPPROD_NOVO;
         END IF;

        IF (NVL(:OLD.CDTPOPTRANSFIL, 0) <> NVL (:NEW.CDTPOPTRANSFIL, 0)) OR (NVL(:OLD.IDENTRSAIDROP, 0) <> NVL (:NEW.IDENTRSAIDROP, 0)) THEN
            SELECT NVL(MAX(CDTIPOOPER),' '), NVL(MAX(NMTIPOOPER),' ')
              INTO V_CDTIPOOPER, V_NMTIPOOPER
              FROM TIPOOPERAC
             WHERE CDTIPOOPER = :OLD.CDTPOPTRANSFIL 
               AND IDENTRSAIDOP = :OLD.IDENTRSAIDROP;
            SELECT NVL(MAX(CDTIPOOPER),' '), NVL(MAX(NMTIPOOPER),' ') 
              INTO V_CDTIPOOPER_NOVO, V_NMTIPOOPER_NOVO 
              FROM TIPOOPERAC 
             WHERE CDTIPOOPER = :NEW.CDTPOPTRANSFIL 
               AND IDENTRSAIDOP = :NEW.IDENTRSAIDROP;
            V_DESC := V_DESC || chr(10) || 'Tipo de Operacao utilizado para transferencia de produtos entre unidades alterado de: ' || V_NMTIPOOPER || ' para: ' || V_NMTIPOOPER_NOVO;
         END IF;

         IF NVL(:OLD.IDEXIBEPROJAUTOM, '!') <> NVL (:NEW.IDEXIBEPROJAUTOM, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Exibe projecao automatica alterado de: ' || NVL(:OLD.IDEXIBEPROJAUTOM,' ') || ' para: ' || NVL(:NEW.IDEXIBEPROJAUTOM,' ');
         END IF;
         
         IF NVL(:OLD.IDPROJECMANU, '!') <> NVL (:NEW.IDPROJECMANU, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Projecao Manual alterado de: ' || NVL(:OLD.IDPROJECMANU,' ') || ' para: ' || NVL(:NEW.IDPROJECMANU,' ');
         END IF;
         
         IF NVL(:OLD.IDVOLUNEGOCIO, '!') <> NVL (:NEW.IDVOLUNEGOCIO, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Volume de Negocios alterado de: ' || NVL(:OLD.IDVOLUNEGOCIO,' ') || ' para: ' || NVL(:NEW.IDVOLUNEGOCIO,' ');
         END IF;

         IF NVL(:OLD.IDVISAOROP, '!') <> NVL (:NEW.IDVISAOROP, '!') THEN
            V_IDVISAOROP := NVL(CASE :OLD.IDVISAOROP WHEN 'PADRAO' THEN 'Padrao'
                                                     WHEN 'PERSONALIZADO' THEN 'Personalizado'
                                                     ELSE :OLD.IDVISAOROP
                                END,' ');
            V_IDVISAOROP_NOVO := NVL(CASE :NEW.IDVISAOROP WHEN 'PADRAO' THEN 'Padrao'
                                                          WHEN 'PERSONALIZADO' THEN 'Personalizado'
                                                          ELSE :NEW.IDVISAOROP
                                     END,' ');
            V_DESC := V_DESC || chr(10) || 'Demonstrativo de Resultado alterado de: ' || V_IDVISAOROP || ' para: ' || V_IDVISAOROP_NOVO;
         END IF;

         -- Fim Geral
         IF V_DESC IS NOT NULL THEN
            V_DESCUPD := V_DESCUPD || '-> Geral' || chr(10) || V_UNIDADE;
            EXIT;
         END IF;

         -- Inicio Faturamento
         IF NVL(:OLD.IDDTAPURFAT, '!') <> NVL (:NEW.IDDTAPURFAT, '!') THEN
            V_IDDTAPURFAT := NVL(CASE :OLD.IDDTAPURFAT WHEN 'R' THEN 'Data de Referencia'
                                                       WHEN 'S' THEN 'Data de Saida'
                                                       ELSE :OLD.IDDTAPURFAT
                                 END,' ');
            V_IDDTAPURFAT_NOVO := NVL(CASE :NEW.IDDTAPURFAT WHEN 'R' THEN 'Data de Referencia'
                                                            WHEN 'S' THEN 'Data de Saida'
                                                            ELSE :NEW.IDDTAPURFAT
                                      END,' ');
            V_DESC := V_DESC || chr(10) || 'Apuracao do Faturamento por alterado de: ' || V_IDDTAPURFAT || ' para: ' || V_IDDTAPURFAT_NOVO;
         END IF;

         IF NVL(:OLD.IDGERROPFOS, '!') <> NVL (:NEW.IDGERROPFOS, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Apura Vendas ForSale (Reducao Z) alterado de: ' || NVL(:OLD.IDGERROPFOS,' ') || ' para: ' || NVL(:NEW.IDGERROPFOS,' ');
         END IF;

         IF NVL(:OLD.IDCONSFATUDIV, '!') <> NVL (:NEW.IDCONSFATUDIV, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Considera Faturamento Diversos para a unidade alterado de: ' || NVL(:OLD.IDCONSFATUDIV,' ') || ' para: ' || NVL(:NEW.IDCONSFATUDIV,' ');
         END IF;

         IF NVL(:OLD.IDTIPOCALCTAXAADM, '!') <> NVL (:NEW.IDTIPOCALCTAXAADM, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Calculo % de Taxa Administrativa por alterado de: ' || NVL(:OLD.IDTIPOCALCTAXAADM,' ') || ' para: ' || NVL(:NEW.IDTIPOCALCTAXAADM,' ');
         END IF;

         IF NVL(:OLD.IDCALCPERCENTFAT, '!') <> NVL (:NEW.IDCALCPERCENTFAT, '!') THEN
            V_DESC := V_DESC || chr(10) || '% Faturamento sobre alterado de: ' || NVL(:OLD.IDCALCPERCENTFAT,' ') || ' para: ' || NVL(:NEW.IDCALCPERCENTFAT,' ');
         END IF;

         IF NVL(:OLD.IDFATUROP, '!') <> NVL (:NEW.IDFATUROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Composicao do Faturamento alterado de: ' || NVL(:OLD.IDFATUROP,' ') || ' para: ' || NVL(:NEW.IDFATUROP,' ');
         END IF;

         IF NVL(:OLD.IDCONSNFEAUTORIZA, '!') <> NVL (:NEW.IDCONSNFEAUTORIZA, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Considera NF Autorizada pela Sefaz quando Modelo Eletronico alterado de: ' || NVL(:OLD.IDCONSNFEAUTORIZA,' ') || ' para: ' || NVL(:NEW.IDCONSNFEAUTORIZA,' ');
         END IF;

         IF NVL(:OLD.IDLANCIMPPAG, '!') <> NVL (:NEW.IDLANCIMPPAG, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Lancamentos de Impostos no Contas a Pagar alterado de: ' || NVL(:OLD.IDLANCIMPPAG,' ') || ' para: ' || NVL(:NEW.IDLANCIMPPAG,' ');
         END IF;

         IF NVL(:OLD.IDCALCIMPFAT, '!') <> NVL (:NEW.IDCALCIMPFAT, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Realizar a parametrizacao por alterado de: ' || NVL(:OLD.IDCALCIMPFAT,' ') || ' para: ' || NVL(:NEW.IDCALCIMPFAT,' ');
         END IF;

         IF NVL(:OLD.IDPERCFIXIMPREC, '!') <> NVL (:NEW.IDPERCFIXIMPREC, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Considera % Fixo para Imposto a Recuperar alterado de: ' || NVL(:OLD.IDPERCFIXIMPREC,' ') || ' para: ' || NVL(:NEW.IDPERCFIXIMPREC,' ');
         END IF;

         IF NVL(:OLD.VRPERIMPRECUROP, 0) <> NVL (:NEW.VRPERIMPRECUROP, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Imposto a Recuperar (%) alterado de: ' || NVL(TO_CHAR(:OLD.VRPERIMPRECUROP), ' ') || ' para: ' || NVL(TO_CHAR(:NEW.VRPERIMPRECUROP), ' ');
         END IF;

         IF NVL(:OLD.VRCREDICMSROP, 0) <> NVL (:NEW.VRCREDICMSROP, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Credito de ICMS(%) alterado de: ' || NVL(TO_CHAR(:OLD.VRCREDICMSROP),' ') || ' para: ' || NVL(TO_CHAR(:NEW.VRCREDICMSROP),' ');
         END IF;

         IF NVL(:OLD.CDIMPOSTOROP, '!') <> NVL (:NEW.CDIMPOSTOROP, '!') THEN
            SELECT NVL(MAX(CDIMPOSTO),' '), NVL(MAX(SGIMPOSTO),' '), NVL(MAX(NMIMPOSTO),' ')
              INTO V_CDIMPOSTO, V_SGIMPOSTO, V_NMIMPOSTO
              FROM IMPOSTO
             WHERE CDIMPOSTO = :OLD.CDIMPOSTOROP;
            SELECT NVL(MAX(CDIMPOSTO),' '), NVL(MAX(SGIMPOSTO), ' '), NVL(MAX(NMIMPOSTO),' ')
              INTO V_CDIMPOSTO_NOVO, V_SGIMPOSTO_NOVO, V_NMIMPOSTO_NOVO
              FROM IMPOSTO
             WHERE CDIMPOSTO = :NEW.CDIMPOSTOROP;
            V_DESC := V_DESC || chr(10) || 'Imposto alterado de: ' || V_SGIMPOSTO || '-' || V_NMIMPOSTO || ' para: ' || V_SGIMPOSTO_NOVO || '-' || V_NMIMPOSTO_NOVO;
         END IF;

         IF NVL(:OLD.IDPERFIXCALCIMP, '!') <> NVL (:NEW.IDPERFIXCALCIMP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Considera percentual fixo para calculo do imposto alterado de: ' || NVL(:OLD.IDPERFIXCALCIMP,' ') || ' para: ' || NVL(:NEW.IDPERFIXCALCIMP,' ');
         END IF;

         IF NVL(:OLD.IDSERVFATROP, '!') <> NVL (:NEW.IDSERVFATROP, '!') THEN
            V_NMTELA := '-> Faturamento -> Medicao de Efetivo -> Geral';
            V_DESC := V_DESC || chr(10) || 'Considera todos os servicos da unidade alterado de: ' || NVL(:OLD.IDSERVFATROP,' ') || ' para: ' || NVL(:NEW.IDSERVFATROP,' ');
         END IF;

         IF NVL(:OLD.IDDETALEFET, '!') <> NVL (:NEW.IDDETALEFET, '!') THEN
            V_NMTELA := '-> Faturamento -> Medicao de Efetivo -> Geral';
            V_IDDETALEFET := NVL(CASE :OLD.IDDETALEFET WHEN 'Q' THEN 'Volume'
                                                       WHEN 'V' THEN 'Valor'
                                                       ELSE :OLD.IDDETALEFET
                                 END,' ');
            V_IDDETALEFET_NOVO := NVL(CASE :NEW.IDDETALEFET WHEN 'Q' THEN 'Volume'
                                                            WHEN 'V' THEN 'Valor'
                                                            ELSE :NEW.IDDETALEFET
                                      END,' ');
            V_DESC := V_DESC || chr(10) || 'Tipo de destaque alterado de: ' || V_IDDETALEFET || ' para: ' || V_IDDETALEFET_NOVO;
         END IF;

         -- Fim Faturamento

         /*
             se existir alteracao na tela faturamento, as outras telas nao foram modificadas, logo,
             a verificacao de alteracao delas nao e necessaria. O mesmo vale para para os outros blocos.
         */
         IF V_DESC IS NOT NULL THEN
            V_DESCUPD :=  V_DESCUPD || NVL(V_NMTELA, '-> Faturamento -> Geral') || chr(10) || V_UNIDADE;
            EXIT;
         END IF;
         -- Inicio Apuracao Consumo

         IF NVL(:OLD.IDRETIRADAROP, '!') <> NVL (:NEW.IDRETIRADAROP, '!') THEN
            V_IDRETIRADAROP := NVL(CASE :OLD.IDRETIRADAROP WHEN 'C' THEN 'Compras N'
                                                           WHEN 'E' THEN 'Retirada de Estoque'
                                                           WHEN 'P' THEN 'Retirada do Planejamento'
                                                           WHEN 'A' THEN 'Retirada de Estoque + Retirada do Planejamento'
                                                           WHEN 'R' THEN 'Estoque Inicial + Compras NF - Saidas NF - Estoque Final'
                                                           ELSE :OLD.IDRETIRADAROP
                                   END,' ');
            V_IDRETIRADAROP_NOVO := NVL(CASE :NEW.IDRETIRADAROP WHEN 'C' THEN 'Compras N'
                                                                WHEN 'E' THEN 'Retirada de Estoque'
                                                                WHEN 'P' THEN 'Retirada do Planejamento'
                                                                WHEN 'A' THEN 'Retirada de Estoque + Retirada do Planejamento'
                                                                WHEN 'R' THEN 'Estoque Inicial + Compras NF - Saidas NF - Estoque Final'
                                                                ELSE :NEW.IDRETIRADAROP
                                        END,' ');
            V_DESC := V_DESC || chr(10) || 'Consumo com base em: ' || '"' ||V_IDRETIRADAROP || '"' || ' para: ' || '"' || V_IDRETIRADAROP_NOVO || '"';
         END IF;

         IF NVL(:OLD.IDSERVRETROP, '!') <> NVL (:NEW.IDSERVRETROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Considera todos os servicos da unidade: ' || NVL(:OLD.IDSERVRETROP,' ') || ' para: ' || NVL(:NEW.IDSERVRETROP,' ');
         END IF;

         -- Fim Apuracao Consumo

         IF V_DESC IS NOT NULL THEN
            V_DESCUPD := 'Apuracao Consumo -> Geral' || chr(10) || V_DESCUPD;
            EXIT;
         END IF;

         -- Inicio Apuracao Estoque

         IF NVL(:OLD.IDINVINICROP, '!') <> NVL(:NEW.IDINVINICROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Inventario Inicial alterado de: ' || NVL(:OLD.IDINVINICROP,' ') || ' para: ' || NVL(:NEW.IDINVINICROP,' ');
         END IF;

         IF NVL(:OLD.IDIMPLANTROP, '!') <> NVL(:NEW.IDIMPLANTROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Implantacao alterado de: ' || NVL(:OLD.IDIMPLANTROP,' ') || ' para: ' || NVL(:NEW.IDIMPLANTROP,' ');
         END IF;

         IF NVL(:OLD.IDINVFINAROP, '!') <> NVL(:NEW.IDINVFINAROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Inventario Final alterado de: ' || NVL(:OLD.IDINVFINAROP,' ') || ' para: ' || NVL(:NEW.IDINVFINAROP,' ');
         END IF;

         IF NVL(:OLD.IDAJUSTEROP, '!') <> NVL(:NEW.IDAJUSTEROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Destacar ajuste de estoque no relatorio alterado de: ' || NVL(:OLD.IDAJUSTEROP,' ') || ' para: ' || NVL(:NEW.IDAJUSTEROP,' ');
         END IF;

         IF NVL(:OLD.IDPERCONSROP, '!') <> NVL(:NEW.IDPERCONSROP, '!') THEN
            V_IDPERCONSROP := NVL(CASE :OLD.IDPERCONSROP WHEN 'A' THEN 'Considera consumo atual'
                                                         WHEN 'P' THEN 'Considera consumo anterior'
                                                         ELSE :OLD.IDPERCONSROP
                                  END,' ');
            V_IDPERCONSROP_NOVO := NVL(CASE :NEW.IDPERCONSROP WHEN 'A' THEN 'Considera consumo atual'
                                                              WHEN 'P' THEN 'Considera consumo anterior'
                                                              ELSE :NEW.IDPERCONSROP
                                       END,' ');
            V_DESC := V_DESC || chr(10) || 'Periodo Consumo alterado de: ' || V_IDPERCONSROP || ' para: ' || V_IDPERCONSROP_NOVO;
         END IF;
         IF NVL(:OLD.NRMESCONSROP, 0) <> NVL(:NEW.NRMESCONSROP, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Numero de Meses de Consumo alterado de: ' || TO_CHAR(NVL(:OLD.NRMESCONSROP,0)) || ' para: ' || TO_CHAR(NVL(:NEW.NRMESCONSROP,0));
         END IF;

         IF NVL(:OLD.IDNRDIASUTEST, '!') <> NVL(:NEW.IDNRDIASUTEST, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Calcula Dias de Estoque sobre Dias Realizados alterado de: ' || NVL(:OLD.IDNRDIASUTEST,' ') || ' para: ' || NVL(:NEW.IDNRDIASUTEST,' ');
         END IF;

         IF NVL(:OLD.IDCOMPRAROP, '!') <> NVL(:NEW.IDCOMPRAROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Entradas por Compras alterado de: ' || NVL(:OLD.IDCOMPRAROP,' ') || ' para: ' || NVL(:NEW.IDCOMPRAROP,' ');
         END IF;

         IF NVL(:OLD.IDNFSAIDAROP, '!') <> NVL(:NEW.IDNFSAIDAROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Saida por Devolucao alterado de: ' || NVL(:OLD.IDNFSAIDAROP,' ') || ' para: ' || NVL(:NEW.IDNFSAIDAROP,' ');
         END IF;

         -- Fim Apuracao Estoque

         IF V_DESC IS NOT NULL THEN
            V_DESCUPD := 'Apuracao Estoque -> Lancamentos -> Geral' || chr(10) || V_DESCUPD;
            EXIT;
         END IF;

         -- Inicio Apuracao Despesas

         IF NVL(:OLD.IDDTAPUCTPAGAR, '!') <> NVL(:NEW.IDDTAPUCTPAGAR, '!') THEN
            V_IDDTAPUCTPAGAR := NVL(CASE :OLD.IDDTAPUCTPAGAR WHEN 'ENTRADA' THEN 'Entrada'
                                                             WHEN 'VENCIMENTO' THEN 'Vencimento'
                                                             WHEN 'BAIXA' THEN 'Baixa'
                                                             ELSE :OLD.IDDTAPUCTPAGAR
                                    END,' ');
            V_IDDTAPUCTPAGAR_NOVO := NVL(CASE :NEW.IDDTAPUCTPAGAR WHEN 'ENTRADA' THEN 'Entrada'
                                                         WHEN 'VENCIMENTO' THEN 'Vencimento'
                                                         WHEN 'BAIXA' THEN 'Baixa'
                                                         ELSE :NEW.IDDTAPUCTPAGAR
                                         END,' ');
            V_DESC := V_DESC || chr(10) || 'Apuracao de Despesas no Contas a Pagar por data alterado de: ' || V_IDDTAPUCTPAGAR || ' para: ' || V_IDDTAPUCTPAGAR_NOVO;
         END IF;

         IF NVL(:OLD.IDEXIBEDESPESAMOBRA, '!') <> NVL(:NEW.IDEXIBEDESPESAMOBRA, '!') THEN
            V_IDEXIBEDESPESAMOBRA := NVL(CASE :OLD.IDEXIBEDESPESAMOBRA WHEN 'TOTAL_PERIODO' THEN 'Total do Periodo'
                                                                       WHEN 'PROPORCIONAL_DIAS' THEN 'Proporcional aos dias do Periodo'
                                                                       ELSE :OLD.IDEXIBEDESPESAMOBRA
                                         END,' ');
            V_IDEXIBEDESPESAMOBRA_NOVO := NVL(CASE :NEW.IDEXIBEDESPESAMOBRA WHEN 'TOTAL_PERIODO' THEN 'Total do Periodo'
                                                                            WHEN 'PROPORCIONAL_DIAS' THEN 'Proporcional aos dias do Periodo'
                                                                            ELSE :NEW.IDEXIBEDESPESAMOBRA
                                              END,' ');
            V_DESC := V_DESC || chr(10) || 'Despesas / Mao de Obra no Resumo alterado de: ' || V_IDEXIBEDESPESAMOBRA || ' para: ' || V_IDEXIBEDESPESAMOBRA_NOVO;
         END IF;

         IF NVL(:OLD.IDAPURDEPRECROP, '!') <> NVL(:NEW.IDAPURDEPRECROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Apura Depreciacao de Bem (Ativos) alterado de: ' || NVL(:OLD.IDAPURDEPRECROP,' ') || ' para: ' || NVL(:NEW.IDAPURDEPRECROP,' ');
         END IF;

         IF NVL(:OLD.IDTIPODEPRECROP, '!') <> NVL(:NEW.IDTIPODEPRECROP, '!') THEN
            V_IDTIPODEPRECROP := NVL(CASE :OLD.IDTIPODEPRECROP WHEN 'C' THEN 'Contabil'
                                                               WHEN 'F' THEN 'Fiscal'
                                                               ELSE :OLD.IDTIPODEPRECROP
                                     END,' ');
            V_IDTIPODEPRECROP_NOVO := NVL(CASE :NEW.IDTIPODEPRECROP WHEN 'C' THEN 'Contabil'
                                                                    WHEN 'F' THEN 'Fiscal'
                                                                    ELSE :NEW.IDTIPODEPRECROP
                                          END,' ');
            V_DESC := V_DESC || chr(10) || 'Tipo de Depreciacao alterado de: ' || V_IDTIPODEPRECROP || ' para: ' || V_IDTIPODEPRECROP_NOVO;
         END IF;

         IF NVL(:OLD.IDDESPMOBROP, '!') <> NVL(:NEW.IDDESPMOBROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Lancamentos de Despesas com Mao de Obra (Manual) alterado de: ' || NVL(:OLD.IDDESPMOBROP,' ') || ' para: ' || NVL(:NEW.IDDESPMOBROP,' ');
         END IF;

         IF NVL(:OLD.IDDESPDIVROP, '!') <> NVL(:NEW.IDDESPDIVROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Lancamentos de Despesa Diversas (Manual) alterado de: ' || NVL(:OLD.IDDESPDIVROP,' ') || ' para: ' || NVL(:NEW.IDDESPDIVROP,' ');
         END IF;

         IF NVL(:OLD.IDAPUINVFILROP, '!') <> NVL(:NEW.IDAPUINVFILROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Lancamentos de Investimento (Manual) alterado de: ' || NVL(:OLD.IDAPUINVFILROP,' ') || ' para: ' || NVL(:NEW.IDAPUINVFILROP, ' ');
         END IF;

         IF NVL(:OLD.CDGRUPDESP, '!') <> NVL(:NEW.CDGRUPDESP, '!') THEN
            SELECT NVL(MAX(NMGRUPDESP),' ')
              INTO V_NMGRUPDESP
              FROM GRUPDESP
             WHERE CDGRUPDESP = :OLD.CDGRUPDESP;
            SELECT NVL(MAX(NMGRUPDESP), ' ')
              INTO V_NMGRUPDESP_NOVO
              FROM GRUPDESP
             WHERE CDGRUPDESP = :NEW.CDGRUPDESP;

            V_DESC := V_DESC || chr(10) || 'Agrupamento de Despesas Diversas alterado de: ' || :OLD.CDGRUPDESP || '-' || V_NMGRUPDESP || ' para: ' || :NEW.CDGRUPDESP || '-' || V_NMGRUPDESP_NOVO;
         END IF;

         IF NVL(:OLD.IDDESPENTROP, '!') <> NVL(:NEW.IDDESPENTROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Despesas com Lancamentos de Entrada alterado de: ' || NVL(:OLD.IDDESPENTROP,' ') || ' para: ' || NVL(:NEW.IDDESPENTROP,' ');
         END IF;

         IF NVL(:OLD.IDCONSPERRATFIL, '!') <> NVL(:NEW.IDCONSPERRATFIL, '!') THEN 
            V_DESC := V_DESC || chr(10) || 'Considera Rateio Despesas de Entrada por Unidade alterado de: ' || NVL(:OLD.IDCONSPERRATFIL,' ') || ' para: ' || NVL(:NEW.IDCONSPERRATFIL,' ');
         END IF;
        
         IF NVL(:OLD.IDAPURDESPENTRMO, '!') <> NVL(:NEW.IDAPURDESPENTRMO, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Mao de Obra com Lancamento de Entrada alterado de: ' || NVL(:OLD.IDAPURDESPENTRMO,' ') || ' para: ' || NVL(:NEW.IDAPURDESPENTRMO,' ');
         END IF;

         IF NVL(:OLD.IDCONSRATENTRMO, '!') <> NVL(:NEW.IDCONSRATENTRMO, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Considera Rateio Mao de Obra por Unidade alterado de: ' || NVL(:OLD.IDCONSRATENTRMO,' ') || ' para: ' || NVL(:NEW.IDCONSRATENTRMO,' ');
         END IF;

         IF NVL(:OLD.IDAPUCTPGROP, '!') <> NVL(:NEW.IDAPUCTPGROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Lancamentos de Despesas diversas no Contas a Pagar alterado de: ' || NVL(:OLD.IDAPUCTPGROP,' ') || ' para: ' || NVL(:NEW.IDAPUCTPGROP,' ');
         END IF;

         IF NVL(:OLD.IDDESPMOBROPCTB, '!') <> NVL(:NEW.IDDESPMOBROPCTB, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Lancamentos de Mao de Obra no Contabilidade alterado de: ' || NVL(:OLD.IDDESPMOBROPCTB,'!') || ' para: ' || NVL(:NEW.IDDESPMOBROPCTB,' ');
         END IF;

         IF NVL(:OLD.IDAPUMOCTPGROP, '!') <> NVL(:NEW.IDAPUMOCTPGROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Lancamentos de Mao de Obra no Contas a Pagar alterado de: ' || NVL(:OLD.IDAPUMOCTPGROP,' ') || ' para: ' || NVL(:NEW.IDAPUMOCTPGROP,' ');
         END IF;

         IF NVL(:OLD.IDAPURAINVCTPAGROP, '!') <> NVL(:NEW.IDAPURAINVCTPAGROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Lancamentos de Investimentos no Contas a Pagar alterado de: ' || NVL(:OLD.IDAPURAINVCTPAGROP,' ') || ' para: ' || NVL(:NEW.IDAPURAINVCTPAGROP,' ');
         END IF;

         IF NVL(:OLD.IDCONSLANCAJUSPAG, '!') <> NVL(:NEW.IDCONSLANCAJUSPAG, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Contas a Pagar alterado de: ' || NVL(:OLD.IDCONSLANCAJUSPAG,' ') || ' para: ' || NVL(:NEW.IDCONSLANCAJUSPAG,' ');
         END IF;

         IF NVL(:OLD.IDCONSLANCAJUSREC, '!') <> NVL(:NEW.IDCONSLANCAJUSREC, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Contas a Receber alterado de: ' || NVL(:OLD.IDCONSLANCAJUSREC,' ') || ' para: ' || NVL(:NEW.IDCONSLANCAJUSREC,' ');
         END IF;

         IF NVL(:OLD.IDCONSCREDBCO, '!') <> NVL(:NEW.IDCONSCREDBCO, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Credito alterado de: ' || NVL(:OLD.IDCONSCREDBCO,' ') || ' para: ' || NVL(:NEW.IDCONSCREDBCO,' ');
         END IF;
         
         IF NVL(:OLD.IDCONSDEBBCO, '!') <> NVL(:NEW.IDCONSDEBBCO, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Debito alterado de : ' || NVL(:OLD.IDCONSDEBBCO,' ') || ' para: ' || NVL(:NEW.IDCONSDEBBCO,' ');
         END IF;

         -- Fim Apuracao Despesas

         IF V_DESC IS NOT NULL THEN
            V_DESCUPD := 'Apuracao Despesa -> Geral' || chr(10) || V_DESCUPD;
            EXIT;
         END IF;

         -- Inicio Deducoes da Receita

         IF NVL(:OLD.IDEXIBEBENEFDEDU, '!') <> NVL(:NEW.IDEXIBEBENEFDEDU, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Exibir Beneficiario / Cliente alterado de: ' || NVL(:OLD.IDEXIBEBENEFDEDU,' ') || ' para: ' || NVL(:NEW.IDEXIBEBENEFDEDU,' ');
         END IF;
         IF NVL(:OLD.IDEXIBENUMNFDEDU, '!') <> NVL(:NEW.IDEXIBENUMNFDEDU, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Exibir Numero da Nota Fiscal alterado de: ' || NVL(:OLD.IDEXIBENUMNFDEDU,' ') || ' para: ' || NVL(:NEW.IDEXIBENUMNFDEDU,' ');
         END IF;
         IF NVL(:OLD.IDDATADEVOLROP, '!') <> NVL(:NEW.IDDATADEVOLROP, '!') THEN
            V_IDDATADEVOLROP := NVL(CASE :OLD.IDDATADEVOLROP WHEN 'SAIDA_NF_ORIGEM' THEN 'Data da Saida NF Origem'
                                                             WHEN 'SAIDA_NF' THEN 'Data de Saida NF'
                                                             ELSE :OLD.IDDATADEVOLROP
                                    END,' ');
            V_IDDATADEVOLROP_NOVO := NVL(CASE :NEW.IDDATADEVOLROP WHEN 'SAIDA_NF_ORIGEM' THEN 'Data da Saida NF Origem'
                                                                  WHEN 'SAIDA_NF' THEN 'Data de Saida NF'
                                                                  ELSE :NEW.IDDATADEVOLROP
                                         END, ' ');
            V_DESC := V_DESC || chr(10) || 'Data de Devolucao alterado de: ' || V_IDDATADEVOLROP || ' para: ' || V_IDDATADEVOLROP_NOVO;
         END IF;

         -- Fim Deducoes da Receita

         IF V_DESC IS NOT NULL THEN
            V_DESCUPD := 'Deducoes da Receita -> Geral' || chr(10) || V_DESCUPD;
         END IF;
        
        -- Inicio Especifico DRF

         IF NVL(:OLD.NRMETROFILIAL, 0) <> NVL(:NEW.NRMETROFILIAL, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Metros quadrados unidade alterado de: ' || :OLD.NRMETROFILIAL || ' para: ' || :NEW.NRMETROFILIAL;
         END IF;
         
         IF NVL(:OLD.IDPERFIXIMPDRF, '!') <> NVL(:NEW.IDPERFIXIMPDRF, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Considera percentual fixo para calculo do imposto alterado de: ' || NVL(:OLD.IDPERFIXIMPDRF,' ') || ' para: ' || NVL(:NEW.IDPERFIXIMPDRF,' ');
         END IF;
         
         IF (NVL(:OLD.CDGRUPPRODDRL, '!') <> NVL (:NEW.CDGRUPPRODDRL, '!')) THEN
            SELECT NVL(MAX(CDGRUPPROD),' '), NVL(MAX(NMGRUPPROD),' ')
              INTO V_CDGRUPPRODDRL, V_NMGRUPPRODDRL
              FROM GRUPPROD
             WHERE CDGRUPPROD = :OLD.CDGRUPPRODDRL;
            SELECT NVL(MAX(CDGRUPPROD),' '), NVL(MAX(NMGRUPPROD),' ') 
              INTO V_CDGRUPPRODDRL_NOVO, V_NMGRUPPRODDRL_NOVO 
              FROM GRUPPROD 
             WHERE CDGRUPPROD = :NEW.CDGRUPPRODDRL;
            V_DESC := V_DESC || chr(10) || 'Materia Prima alterado de: ' || V_NMGRUPPRODDRL || ' para: ' || V_NMGRUPPRODDRL_NOVO;
         END IF;
         
         IF (NVL(:OLD.CDGRUPPRODVEN, '!') <> NVL (:NEW.CDGRUPPRODVEN, '!')) THEN
            SELECT NVL(MAX(CDGRUPPROD),' '), NVL(MAX(NMGRUPPROD),' ')
              INTO V_CDGRUPPRODVEN, V_NMGRUPPRODVEN
              FROM GRUPPROD
             WHERE CDGRUPPROD = :OLD.CDGRUPPRODVEN;
            SELECT NVL(MAX(CDGRUPPROD),' '), NVL(MAX(NMGRUPPROD),' ') 
              INTO V_CDGRUPPRODVEN_NOVO, V_NMGRUPPRODVEN_NOVO 
              FROM GRUPPROD 
             WHERE CDGRUPPROD = :NEW.CDGRUPPRODVEN;
            V_DESC := V_DESC || chr(10) || 'Produtos de venda alterado de: ' || V_NMGRUPPRODVEN || ' para: ' || V_NMGRUPPRODVEN_NOVO;
         END IF;

         -- Fim Especifico DRF

         IF V_DESC IS NOT NULL THEN
            V_DESCUPD := 'Especifico DRF -> Geral' || chr(10) || V_DESCUPD;
         END IF;
         
         EXIT;
      END LOOP;

      -- INSERT FINAL
      IF NOT V_DESC IS NULL THEN
         V_DESC := V_DESCUPD || V_DESC;

         INSERT INTO LOGOPERAGES
             (NMTABELA,     DTOPERACAO,   NMRESPOPER,  IDTIPOOPER,   DSOPERACAO,  CDPESQITEM,
              DSRDMUSUOPER, DSENDUSUOPER, DSNMUSUOPER, DSMETUSUOPER, CDORESPOPER, CDFILLOGOPER)
         VALUES
             (V_NMTABELA, SYSDATE, NVL(V_NMOPERADOR,' '), V_TIPO, V_DESC, V_ITPESQ, NVL(V_DSSERVERRDM, ' '),
              NVL(V_DSREMOTEADDR, ' '), NVL(V_DSREMOTEHOST, ' '), NVL(V_DSSERVMETHOD, ' '), NVL(V_CDOPERADOR, ' '),
              NVL(V_CDFILLOGOPER, ' '));
      END IF;
   END IF;
END;
/