CREATE OR REPLACE TRIGGER LOG_GOP_PARAMORCAOPERAC
AFTER UPDATE
ON PARAMORCAOPERAC 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_CDFILLOGOPER            VARCHAR2(10);
  V_ITPESQ                  VARCHAR2(40);
  V_NMOPERADOR              VARCHAR2(40);
  V_CDOPERADOR              VARCHAR2(12);
  V_NMTABELA                VARCHAR2(20);
  V_DESCUPD                 VARCHAR2(4000);
  V_NMTIPOCUSTO                  VARCHAR2(50);
  V_NMTIPOCUSTO_NOVO             VARCHAR2(50);
  V_NMINDICECON                  VARCHAR2(50);
  V_NMINDICECON_NOVO             VARCHAR2(50);
  V_NMINDICEFAT                  VARCHAR2(50);
  V_NMINDICEFAT_NOVO             VARCHAR2(50);
  V_IDORCDESPENTROP              VARCHAR2(50);
  V_IDORCDESPENTROP_NOVO         VARCHAR2(50);
  V_IDCALCFATUROP                VARCHAR2(50);
  V_IDCALCFATUROP_NOVO           VARCHAR2(50);
  V_IDTIPOSIMULARESULTFAT        VARCHAR2(50);
  V_IDTIPOSIMULARESULTFAT_NOVO   VARCHAR2(50);
  V_IDREALSUPORCA                VARCHAR2(50);
  V_IDREALSUPORCA_NOVO           VARCHAR2(50);
  V_IDREALINFORCA                VARCHAR2(50);
  V_IDREALINFORCA_NOVO           VARCHAR2(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 = 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           := 'PARAMORCAOPERAC';
   V_NMINDICEFAT        := '" "';
   V_NMINDICEFAT_NOVO   := '" "';
   V_NMINDICECON        := '" "';
   V_NMINDICECON_NOVO   := '" "';
   V_NMTIPOCUSTO        := '" "';
   V_NMTIPOCUSTO_NOVO   := '" "';
   
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);
              
    V_DSSERVERRDM := 'gop00100_parametros_orcamento_operacional';
    
   IF UPDATING THEN
      V_TIPO := '2';
      V_ITPESQ       := TO_CHAR(:NEW.CDPARORCAOPERAC);
      V_CDOPERADOR   := :NEW.CDOPERULTATU;
        
      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
      V_DESCUPD := 'Parametros para Orcamento Operacional' || chr(10) || '-> Geral' || chr(10);
        
      IF NVL(:NEW.IDCALCFATUROP,'!') <> NVL(:OLD.IDCALCFATUROP,'!')  THEN
         V_IDCALCFATUROP := CASE :OLD.IDCALCFATUROP WHEN 'CL' THEN 'Cliente/Servico'
                                                    WHEN 'SE' THEN 'Cliente'
                                                    ELSE :OLD.IDCALCFATUROP
                            END;
         V_IDCALCFATUROP_NOVO := CASE :NEW.IDCALCFATUROP WHEN 'CL' THEN 'Cliente/Servico'
                                                         WHEN 'SE' THEN 'Cliente'
                                                         ELSE :NEW.IDCALCFATUROP
                                 END;
         V_DESC := chr(10) || 'Calculo do Faturamento alterado de: "' || V_IDCALCFATUROP || '" para: "' || V_IDCALCFATUROP_NOVO || '"';
      END IF;
        
      IF NVL(:NEW.NRMESINIORCA, '') <> NVL(:OLD.NRMESINIORCA, '')  THEN
         V_DESC := V_DESC || chr(10) || 'Mes de Inicio alterado de: ' || NVL(:OLD.NRMESINIORCA, ' ') || ' para: ' || NVL(TO_CHAR(:NEW.NRMESINIORCA), ' ');
      END IF;
        
      IF NVL(:NEW.IDPERIODOORCA,'!') <> NVL(:OLD.IDPERIODOORCA,'!')  THEN
         V_DESC := V_DESC || chr(10) || 'Periodo do Orcamento alterado de: ' || NVL(TO_CHAR(:OLD.IDPERIODOORCA), ' ') || ' para: ' || NVL(TO_CHAR(:NEW.IDPERIODOORCA), ' ');
      END IF;
        
      IF NVL(:NEW.NRDIAINIORCA, 0) <> NVL(:OLD.NRDIAINIORCA, 0)  THEN
         V_DESC := V_DESC || chr(10) || 'Dia Inicial do Orcamento alterado de: ' || NVL(TO_CHAR(:OLD.NRDIAINIORCA), '') || ' para: ' || NVL(TO_CHAR(TO_CHAR(:NEW.NRDIAINIORCA)), ' ');
      END IF;
        
      IF NVL(:NEW.NRDIAANTELABORCA, 0) <> NVL(:OLD.NRDIAANTELABORCA, 0)  THEN
         V_DESC := V_DESC || chr(10) || 'Numero de Dias Anteriores para a Elaboracao do Orcamento alterado de: ' || NVL(TO_CHAR(TO_CHAR(:OLD.NRDIAANTELABORCA)), ' ') || ' para: ' || NVL(TO_CHAR(TO_CHAR(:NEW.NRDIAANTELABORCA)), ' ');
      END IF;
        
      IF NVL(:NEW.IDTIPOSIMULARESULTFAT,'!') <> NVL(:OLD.IDTIPOSIMULARESULTFAT,'!')  THEN
         V_IDTIPOSIMULARESULTFAT := CASE :OLD.IDTIPOSIMULARESULTFAT WHEN 'FATURAMENTO_LIQUIDO' THEN 'Faturamento Liquido'
                                                                    WHEN 'FATURAMENTO_BRUTO' THEN 'Faturamento Bruto'
                                                                    ELSE :OLD.IDTIPOSIMULARESULTFAT
                                    END;
         V_IDTIPOSIMULARESULTFAT_NOVO := CASE :NEW.IDTIPOSIMULARESULTFAT WHEN 'FATURAMENTO_LIQUIDO' THEN 'Faturamento Liquido'
                                                                         WHEN 'FATURAMENTO_BRUTO' THEN 'Faturamento Bruto'
                                                                         ELSE :NEW.IDTIPOSIMULARESULTFAT
                                         END;
         V_DESC := V_DESC || chr(10) || 'Tipo de Faturamento alterado de: ' || NVL(TO_CHAR(V_IDTIPOSIMULARESULTFAT), ' ') || ' para: ' || NVL(TO_CHAR(V_IDTIPOSIMULARESULTFAT_NOVO), ' ');
      END IF;
        
      IF NVL(:NEW.CDINDICEFAT,'!') <> NVL(:OLD.CDINDICEFAT,'!')  THEN
         IF NVL(:OLD.CDINDICEFAT, '!') <> '!' THEN
            SELECT MAX(NMINDICE)
              INTO V_NMINDICEFAT
              FROM INDICE
             WHERE CDTPINDICE = '2'
               AND IDPERVALOR = '1'
               AND CDINDICE = :OLD.CDINDICEFAT;

            V_NMINDICEFAT := :OLD.CDINDICEFAT || ' - ' ||V_NMINDICEFAT;
         END IF;

         IF NVL(:NEW.CDINDICEFAT, '!') <> '!' THEN
            SELECT MAX(NMINDICE)
              INTO V_NMINDICEFAT_NOVO
              FROM INDICE
             WHERE CDTPINDICE = '2'
               AND IDPERVALOR = '1'
               AND CDINDICE = :NEW.CDINDICEFAT;
            V_NMINDICEFAT_NOVO := :NEW.CDINDICEFAT || ' - ' ||V_NMINDICEFAT_NOVO;
         END IF;

         V_DESC := V_DESC || chr(10) || 'Faturamento alterado de: ' || V_NMINDICEFAT || ' para: ' || V_NMINDICEFAT_NOVO;
      END IF;
        
      IF NVL(:NEW.CDINDICECON,'!') <> NVL(:OLD.CDINDICECON,'!')  THEN
         IF NVL(:OLD.CDINDICECON, '!') <> '!' THEN
            SELECT MAX(NMINDICE) INTO V_NMINDICECON FROM INDICE WHERE CDTPINDICE = '2' AND IDPERVALOR = '1' AND CDINDICE = :OLD.CDINDICECON;
            V_NMINDICECON := :OLD.CDINDICECON || ' - ' ||V_NMINDICECON;
         END IF;
            
         IF NVL(:NEW.CDINDICECON, '!') <> '!' THEN
            SELECT MAX(NMINDICE) INTO V_NMINDICECON_NOVO FROM INDICE WHERE CDTPINDICE = '2' AND IDPERVALOR = '1' AND CDINDICE = :NEW.CDINDICECON;
            V_NMINDICECON_NOVO := :NEW.CDINDICECON || ' - ' ||V_NMINDICECON_NOVO;
         END IF;
            
         V_DESC := V_DESC || chr(10) || 'Consumo de: ' || V_NMINDICECON || ' para: ' || V_NMINDICECON_NOVO;
      END IF;
        
      IF NVL(:NEW.CDTIPOCUSTO,'!') <> NVL(:OLD.CDTIPOCUSTO,'!')  THEN
         IF NVL(:OLD.CDTIPOCUSTO, '!') <> '!' THEN
            SELECT MAX(NMTIPOCUSTO) INTO V_NMTIPOCUSTO FROM TIPOCUSTO WHERE CDTIPOCUSTO = :OLD.CDTIPOCUSTO;
            V_NMTIPOCUSTO := :OLD.CDTIPOCUSTO || ' - ' ||V_NMTIPOCUSTO;
         END IF;
            
         IF NVL(:NEW.CDTIPOCUSTO, '!') <> '!' THEN
            SELECT MAX(NMTIPOCUSTO) INTO V_NMTIPOCUSTO_NOVO FROM TIPOCUSTO WHERE CDTIPOCUSTO = :NEW.CDTIPOCUSTO;
            V_NMTIPOCUSTO_NOVO := :NEW.CDTIPOCUSTO || ' - ' ||V_NMTIPOCUSTO_NOVO;
         END IF;
            
         V_DESC := V_DESC || chr(10) || 'Tipo de Custo alterado de: ' || V_NMTIPOCUSTO || ' para: ' || V_NMTIPOCUSTO_NOVO;
      END IF;
        
      IF NVL(:NEW.IDORCDESPENTROP,'!') <> NVL(:OLD.IDORCDESPENTROP,'!')  THEN
         V_IDORCDESPENTROP := CASE :OLD.IDORCDESPENTROP WHEN 'O' THEN 'Tipo de Operacao'
                                                        WHEN 'D' THEN 'Despesa'
                                                        ELSE :OLD.IDORCDESPENTROP
                              END;
         V_IDORCDESPENTROP_NOVO := CASE :NEW.IDORCDESPENTROP WHEN 'O' THEN 'Tipo de Operacao'
                                                             WHEN 'D' THEN 'Despesa'
                                                             ELSE :NEW.IDORCDESPENTROP
                                   END;
         V_DESC := V_DESC || chr(10) || 'Orcamento de Despesas Lanc. Entrada alterado de: "' || NVL(V_IDORCDESPENTROP, ' ') || '" para: "' || NVL(V_IDORCDESPENTROP_NOVO, ' ') || '"';
      END IF;
        
      IF NVL(:NEW.IDUTILVERSAOORCA,'!') <> NVL(:OLD.IDUTILVERSAOORCA,'!')  THEN
         V_DESC := V_DESC || chr(10) || 'Utiliza Versao de Orcamento alterado de: ' || NVL(TO_CHAR(:OLD.IDUTILVERSAOORCA), ' ') || ' para: ' || NVL(TO_CHAR(:NEW.IDUTILVERSAOORCA), ' ');
      END IF;
        
      IF NVL(:NEW.IDAPROVORCACONC,'!') <> NVL(:OLD.IDAPROVORCACONC,'!')  THEN
         V_DESC := V_DESC || chr(10) || 'Aprovacao Automatica na Conclusao do Orcamento alterado de: ' || NVL(TO_CHAR(:OLD.IDAPROVORCACONC), ' ') || ' para: ' || NVL(TO_CHAR(:NEW.IDAPROVORCACONC), ' ');
      END IF;
        
      IF NVL(:NEW.IDPERORCAITEMDETAL,'!') <> NVL(:OLD.IDPERORCAITEMDETAL,'!')  THEN
         V_DESC := V_DESC || chr(10) || 'Permite Orcamento por Item de Detalhamento alterado de: ' || NVL(TO_CHAR(:OLD.IDPERORCAITEMDETAL), ' ') || ' para: ' || NVL(TO_CHAR(:NEW.IDPERORCAITEMDETAL), ' ');
      END IF;
        
      IF NVL(:NEW.IDUTILORCAREALOC,'!') <> NVL(:OLD.IDUTILORCAREALOC,'!')  THEN
         V_DESC := V_DESC || chr(10) || 'Utiliza Orcamento Realocado alterado de: ' || NVL(TO_CHAR(:OLD.IDUTILORCAREALOC), ' ') || ' para: ' || NVL(TO_CHAR(:NEW.IDUTILORCAREALOC), ' ');
      END IF;
        
      IF NVL(:NEW.IDCONSORCREALOC,'!') <> NVL(:OLD.IDCONSORCREALOC,'!')  THEN
         V_DESC := V_DESC || chr(10) || 'Considera Orcamento Realocado nas Validacoes do Workflow alterado de: ' || NVL(TO_CHAR(:OLD.IDCONSORCREALOC), ' ') || ' para: ' || NVL(TO_CHAR(:NEW.IDCONSORCREALOC), ' ');
      END IF;
        
      IF NVL(:NEW.IDREALSUPORCA,'!') <> NVL(:OLD.IDREALSUPORCA,'!')  THEN
         V_IDREALSUPORCA := CASE :OLD.IDREALSUPORCA WHEN 'RATEAR_PERIODO' THEN 'Ratear para Restante do Periodo'
                                                    WHEN 'PROXIMO_MES' THEN 'Abater Mes Seguinte'
                                                    ELSE :OLD.IDREALSUPORCA
                            END;
         V_IDREALSUPORCA_NOVO := CASE :NEW.IDREALSUPORCA WHEN 'RATEAR_PERIODO' THEN 'Ratear para Restante do Periodo'
                                                         WHEN 'PROXIMO_MES' THEN 'Abater Mes Seguinte'
                                                         ELSE :NEW.IDREALSUPORCA
                                 END;
         V_DESC := V_DESC || chr(10) || 'Realizado Superior ao Orcado alterado de: "' || NVL(V_IDREALSUPORCA, ' ') || '" para: "' || NVL(V_IDREALSUPORCA_NOVO, ' ') || '"';
      END IF;
        
      IF NVL(:NEW.IDREALINFORCA,'!') <> NVL(:OLD.IDREALINFORCA,'!')  THEN
         V_IDREALINFORCA := CASE :OLD.IDREALINFORCA WHEN 'RATEAR_PERIODO' THEN 'Ratear para Restante do Periodo'
                                                    WHEN 'PROXIMO_MES' THEN 'Abater Mes Seguinte'
                                                    ELSE :OLD.IDREALINFORCA
                            END;
         V_IDREALINFORCA_NOVO := CASE :NEW.IDREALINFORCA WHEN 'RATEAR_PERIODO' THEN 'Ratear para Restante do Periodo'
                                                         WHEN 'PROXIMO_MES' THEN 'Abater Mes Seguinte'
                                                         ELSE :NEW.IDREALINFORCA
                                 END;
         V_DESC := V_DESC || chr(10) || 'Realizado Inferior ao Orcado alterado de: "' || NVL(V_IDREALINFORCA, ' ') || '" para: "' || NVL(V_IDREALINFORCA_NOVO, ' ') || '"';
      END IF;
   END IF;       
      
   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;
/