CREATE OR REPLACE TRIGGER LOG_GOP_CALENPREORCAGOP
AFTER UPDATE OR INSERT
ON CALENPREORCAGOP 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(500);
  V_CDFILLOGOPER    VARCHAR2(4);
  V_ITPESQ          VARCHAR2(40);
  V_NMOPERADOR      VARCHAR2(40);
  V_NMTABELA        VARCHAR2(20);
  V_CDOPERADOR      VARCHAR2(12);

  V_DESCUPD                 VARCHAR2(1000);
  V_NMGRUPGERENTEOP         VARCHAR2(50);
  V_NMGRUPGERENTEOP_NOVO    VARCHAR2(50);
  V_DESCNRPERIODOORCA       VARCHAR2(40);

  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;
  
  FUNCTION STRPERIODO (NRPERIODOORCA NUMBER, IDPERIODOORCA VARCHAR2) RETURN VARCHAR2
    AS DESCNRPERIODOORCA VARCHAR2(40);
  BEGIN 
     IF TO_CHAR(IDPERIODOORCA) = 'MENSAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := 'Janeiro';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := 'Fevereiro';
        ELSIF NRPERIODOORCA  = 3 THEN
           DESCNRPERIODOORCA := 'Março';
        ELSIF NRPERIODOORCA  = 4 THEN
           DESCNRPERIODOORCA := 'Abril';
        ELSIF NRPERIODOORCA  = 5 THEN
           DESCNRPERIODOORCA := 'Maio';
        ELSIF NRPERIODOORCA  = 6 THEN
           DESCNRPERIODOORCA := 'Junho';
        ELSIF NRPERIODOORCA  = 7 THEN
           DESCNRPERIODOORCA := 'Julho';
        ELSIF NRPERIODOORCA  = 8 THEN
           DESCNRPERIODOORCA := 'Agosto';
        ELSIF NRPERIODOORCA  = 9 THEN
           DESCNRPERIODOORCA := 'Setembro';
        ELSIF NRPERIODOORCA  = 10 THEN
           DESCNRPERIODOORCA := 'Outubro';
        ELSIF NRPERIODOORCA  = 11 THEN
           DESCNRPERIODOORCA := 'Novembro';
        ELSIF NRPERIODOORCA  = 12 THEN
           DESCNRPERIODOORCA := 'Dezembro';
        END IF;
     ELSIF IDPERIODOORCA = 'BIMESTRAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := '1º Bimestre';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := '2º Bimestre';
        ELSIF NRPERIODOORCA  = 3 THEN
           DESCNRPERIODOORCA := '3º Bimestre';
        ELSIF NRPERIODOORCA  = 4 THEN
           DESCNRPERIODOORCA := '4º Bimestre';
        ELSIF NRPERIODOORCA  = 5 THEN
           DESCNRPERIODOORCA := '5º Bimestre';
        ELSIF NRPERIODOORCA  = 6 THEN
           DESCNRPERIODOORCA := '6º Bimestre';
        END IF;
     ELSIF IDPERIODOORCA = 'TRIMESTRAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := '1º Trimestre';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := '2º Trimestre';
        ELSIF NRPERIODOORCA  = 3 THEN
           DESCNRPERIODOORCA := '3º Trimestre';
        ELSIF NRPERIODOORCA  = 4 THEN
           DESCNRPERIODOORCA := '4º Trimestre';
        END IF;
     ELSIF IDPERIODOORCA = 'QUADRIMESTRAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := '1º Quadrimestre';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := '2º Quadrimestre';
        ELSIF NRPERIODOORCA  = 3 THEN
           DESCNRPERIODOORCA := '3º Quadrimestre';
        END IF;
     ELSIF IDPERIODOORCA = 'SEMESTRAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := '1º Semestre';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := '2º Semestre';
        END IF;
     END IF;

     RETURN DESCNRPERIODOORCA;
  END STRPERIODO;
BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDFILLOGOPER := '';
   V_NMTABELA     := 'CALENPREORCAGOP';

   V_CDOPERADOR   := :NEW.CDOPERULTATU;

   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

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

   IF INSERTING THEN
      V_TIPO := '1';
      V_ITPESQ := TO_CHAR(:NEW.NRCALENPREORCAGOP);

      V_DESCUPD := 'Calendário de Preparação do Orçamento' || chr(10);
      V_DSSERVERRDM := 'gop02000_calendario_prep_orca';
      V_DESCUPD := V_DESCUPD || 'Tipo do Orcamento: ' || :NEW.IDPERIODOORCA || chr(10);
      V_DESCUPD := V_DESCUPD || ' Ano: ' || :NEW.NRANOORCAGOP;

      IF TO_CHAR(:NEW.IDPERIODOORCA) <> 'ANUAL' THEN
         V_DESCUPD := V_DESCUPD || chr(10) || ' Periodo: ' || STRPERIODO(:NEW.NRPERIODOORCA, :NEW.IDPERIODOORCA) || chr(10);
      END IF;

      IF NVL(TO_CHAR(:NEW.DTINICIOPRE),'!') <> NVL(TO_CHAR(:OLD.DTINICIOPRE),'!') THEN
         V_DESC := V_DESC || ' Data Inical Prevista: ' || TO_CHAR(:NEW.DTINICIOPRE, 'DD/MM/YYYY') || chr(10);
      END IF;

      IF NVL(TO_CHAR(:NEW.NRDIAAREALIZA),'!') <> NVL(TO_CHAR(:OLD.NRDIAAREALIZA),'!') THEN
         V_DESC := V_DESC || ' Dias de Duracao: ' || :NEW.NRDIAAREALIZA || chr(10);
      END IF;

      IF NVL(TO_CHAR(:NEW.NRDIAALERTA),'!') <> NVL(TO_CHAR(:OLD.NRDIAALERTA),'!') THEN
         V_DESC := V_DESC || ' Dias Alerta: ' || :NEW.NRDIAALERTA || chr(10);
      END IF;

      IF NVL(TO_CHAR(:NEW.CDGRUPGERENTEOP),'!') <> NVL(TO_CHAR(:OLD.CDGRUPGERENTEOP),'!') THEN
         SELECT NMGRUPGERENTEOP
           INTO V_NMGRUPGERENTEOP_NOVO
           FROM GRUPGERENTEOP
          WHERE CDGRUPGERENTEOP = :NEW.CDGRUPGERENTEOP;

         V_DESC := V_DESC || ' Grupo Gerente: "' || :NEW.CDGRUPGERENTEOP || ' - ' || V_NMGRUPGERENTEOP_NOVO || '"' || chr(10);
      END IF;

      IF NVL(TO_CHAR(:NEW.DSETAPA),'!') <> NVL(TO_CHAR(:OLD.DSETAPA),'!') THEN
         V_DESC := V_DESC || ' Descricao: "' || :NEW.DSETAPA || '"';
      END IF;

    -- ELSIF DELETING THEN
    --     V_TIPO := '3';
    --     V_ITPESQ       := TO_CHAR(:OLD.NRCALENPREORCAGOP);

    --     V_DESC := V_DESC || 'Tipo do Orcamento: ' || :OLD.IDPERIODOORCA;
    --     V_DESC := V_DESC || ' Ano: ' || :OLD.NRANOORCAGOP;
    --     IF TO_CHAR(:OLD.IDPERIODOORCA) <> 'ANUAL' THEN
    --         V_DESC := V_DESC || ' Periodo: ' || STRPERIODO(:OLD.NRPERIODOORCA, :OLD.IDPERIODOORCA);
    --         END IF;
    --     V_DESC := V_DESC || ' Data Inical Prevista: ' || TO_CHAR(:OLD.DTINICIOPRE, 'DD/MM/YYYY');

    --     INSERT_LOGOPERAGES(V_NMTABELA, V_NMOPERADOR, V_TIPO, V_DESC, V_ITPESQ, V_DSSERVERRDM, V_DSREMOTEADDR, V_DSREMOTEHOST, V_DSSERVMETHOD, V_DSREMOTEOPER, V_CDFILLOGOPER);
   ELSIF UPDATING THEN
      V_TIPO := '2';
      V_ITPESQ       := TO_CHAR(:NEW.NRCALENPREORCAGOP);
      V_DESCUPD := 'Calendário de Preparação do Orçamento' || chr(10);
      V_DSSERVERRDM := 'gop02000_calendario_prep_orca';
      V_DESCUPD := V_DESCUPD || 'Tipo do Orcamento: ' || :OLD.IDPERIODOORCA || chr(10);
      V_DESCUPD := V_DESCUPD || 'Ano: ' || :OLD.NRANOORCAGOP || chr(10);

      IF TO_CHAR(:OLD.IDPERIODOORCA) <> 'ANUAL' THEN
         V_DESCUPD := V_DESCUPD || 'Periodo: ' || STRPERIODO(:OLD.NRPERIODOORCA, :OLD.IDPERIODOORCA) || chr(10);
      END IF;

      IF (NVL(TO_CHAR(:NEW.DTINICIOPRE),'!') <> NVL(TO_CHAR(:OLD.DTINICIOPRE),'!'))  THEN
         V_DESC := V_DESC || 'Data Inicial Prevista alterada de: "' || TO_CHAR(:OLD.DTINICIOPRE, 'DD/MM/YYYY') || '" para: "' || TO_CHAR(:NEW.DTINICIOPRE, 'DD/MM/YYYY') || '"' || chr(10);
      END IF;

      IF (NVL(TO_CHAR(:NEW.NRDIAAREALIZA),'!') <> NVL(TO_CHAR(:OLD.NRDIAAREALIZA),'!'))  THEN
         V_DESC := V_DESC || 'Dias de Duracao alterado de: "' || :OLD.NRDIAAREALIZA || '" para: ' || :NEW.NRDIAAREALIZA || '"' || chr(10);
      END IF;

      IF (NVL(TO_CHAR(:NEW.NRDIAALERTA),'!') <> NVL(TO_CHAR(:OLD.NRDIAALERTA),'!'))  THEN
         V_DESC := V_DESC || 'Dias Alerta alterado de: "' || :OLD.NRDIAALERTA || '" para: "' || :NEW.NRDIAALERTA || '"' || chr(10);
      END IF;

      IF (NVL(TO_CHAR(:NEW.CDGRUPGERENTEOP),'!') <> NVL(TO_CHAR(:OLD.CDGRUPGERENTEOP),'!'))  THEN
         SELECT NMGRUPGERENTEOP
           INTO V_NMGRUPGERENTEOP
           FROM GRUPGERENTEOP
          WHERE CDGRUPGERENTEOP = :OLD.CDGRUPGERENTEOP;

         SELECT NMGRUPGERENTEOP
           INTO V_NMGRUPGERENTEOP_NOVO
           FROM GRUPGERENTEOP
          WHERE CDGRUPGERENTEOP = :NEW.CDGRUPGERENTEOP;

         V_DESC := V_DESC || 'Grupo Gerente alterado de: "' || V_NMGRUPGERENTEOP || '" para: ' || V_NMGRUPGERENTEOP_NOVO || '"'  || chr(10);
      END IF;

      IF (NVL(TO_CHAR(:NEW.DSETAPA),'!') <> NVL(TO_CHAR(:OLD.DSETAPA),'!'))  THEN
         V_DESC := V_DESC || 'Descricao alterada de: "' || :OLD.DSETAPA || '" para: "' || :NEW.DSETAPA || '"';
      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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_CONCPREORCAGOP
AFTER UPDATE OR INSERT
ON CONCPREORCAGOP FOR EACH ROW
DECLARE
  V_TIPO         VARCHAR2(1);
  V_DSREMOTEADDR VARCHAR2(15);
  V_DSREMOTEHOST VARCHAR2(15);
  V_DSSERVERRDM  VARCHAR2(20);
  V_DSSERVMETHOD VARCHAR2(4000);
  V_DSREMOTEOPER VARCHAR2(12);
  V_DESC         VARCHAR2(500);
  V_CDFILLOGOPER VARCHAR2(4);
  V_ITPESQ       VARCHAR2(40);
  V_NMOPERADOR   VARCHAR2(40);
  V_CDOPERADOR   VARCHAR2(12);
  V_NRANOORCAGOP VARCHAR(4);
  V_IDPERIODOORCA VARCHAR2(20);
  V_NRPERIODOORCA NUMBER;

  PROCEDURE PERIODO(P_NRCALENPREORCAGOP IN VARCHAR2, P_NRORCAMENTOGOP IN VARCHAR2,
                    P_NRANOORCAGOP OUT VARCHAR2, P_NRPERIODOORCA OUT VARCHAR2, P_IDPERIODOORCA OUT VARCHAR2) AS
  BEGIN
     P_NRPERIODOORCA := NULL;
     P_IDPERIODOORCA := NULL;

     SELECT MAX(IDPERIODOORCA), MAX(NRPERIODOORCA)
       INTO P_IDPERIODOORCA, P_NRPERIODOORCA
       FROM (SELECT IDPERIODOORCA, NRPERIODOORCA
               FROM CALENPREORCAGOP
              WHERE NRCALENPREORCAGOP = P_NRCALENPREORCAGOP
              UNION
             SELECT IDPERIODOORCA, NRPERIODOORCA
               FROM ORCAMENTOGOP
              WHERE NRORCAMENTOGOP = P_NRORCAMENTOGOP) PERIODO;

     SELECT MAX(NRANOORCAGOP) INTO P_NRANOORCAGOP
       FROM (SELECT NRANOORCAGOP
               FROM CALENPREORCAGOP
              WHERE NRCALENPREORCAGOP = P_NRCALENPREORCAGOP
              UNION
             SELECT NRANOORCAGOP
               FROM ORCAMENTOGOP
              WHERE NRORCAMENTOGOP = P_NRORCAMENTOGOP) ANO;
  END;

  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;
  
  FUNCTION STRPERIODO (NRPERIODOORCA NUMBER, IDPERIODOORCA VARCHAR2) RETURN VARCHAR2
    AS DESCNRPERIODOORCA VARCHAR2(40);
  BEGIN 
     IF TO_CHAR(IDPERIODOORCA) = 'MENSAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := 'Janeiro';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := 'Fevereiro';
        ELSIF NRPERIODOORCA  = 3 THEN
           DESCNRPERIODOORCA := 'Março';
        ELSIF NRPERIODOORCA  = 4 THEN
           DESCNRPERIODOORCA := 'Abril';
        ELSIF NRPERIODOORCA  = 5 THEN
           DESCNRPERIODOORCA := 'Maio';
        ELSIF NRPERIODOORCA  = 6 THEN
           DESCNRPERIODOORCA := 'Junho';
        ELSIF NRPERIODOORCA  = 7 THEN
           DESCNRPERIODOORCA := 'Julho';
        ELSIF NRPERIODOORCA  = 8 THEN
           DESCNRPERIODOORCA := 'Agosto';
        ELSIF NRPERIODOORCA  = 9 THEN
           DESCNRPERIODOORCA := 'Setembro';
        ELSIF NRPERIODOORCA  = 10 THEN
           DESCNRPERIODOORCA := 'Outubro';
        ELSIF NRPERIODOORCA  = 11 THEN
           DESCNRPERIODOORCA := 'Novembro';
        ELSIF NRPERIODOORCA  = 12 THEN
           DESCNRPERIODOORCA := 'Dezembro';
        END IF;
     ELSIF IDPERIODOORCA = 'BIMESTRAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := '1º Bimestre';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := '2º Bimestre';
        ELSIF NRPERIODOORCA  = 3 THEN
           DESCNRPERIODOORCA := '3º Bimestre';
        ELSIF NRPERIODOORCA  = 4 THEN
           DESCNRPERIODOORCA := '4º Bimestre';
        ELSIF NRPERIODOORCA  = 5 THEN
           DESCNRPERIODOORCA := '5º Bimestre';
        ELSIF NRPERIODOORCA  = 6 THEN
           DESCNRPERIODOORCA := '6º Bimestre';
        END IF;
     ELSIF IDPERIODOORCA = 'TRIMESTRAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := '1º Trimestre';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := '2º Trimestre';
        ELSIF NRPERIODOORCA  = 3 THEN
           DESCNRPERIODOORCA := '3º Trimestre';
        ELSIF NRPERIODOORCA  = 4 THEN
           DESCNRPERIODOORCA := '4º Trimestre';
        END IF;
     ELSIF IDPERIODOORCA = 'QUADRIMESTRAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := '1º Quadrimestre';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := '2º Quadrimestre';
        ELSIF NRPERIODOORCA  = 3 THEN
           DESCNRPERIODOORCA := '3º Quadrimestre';
        END IF;
     ELSIF IDPERIODOORCA = 'SEMESTRAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := '1º Semestre';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := '2º Semestre';
        END IF;
     END IF;

     RETURN DESCNRPERIODOORCA;
  END STRPERIODO;
BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := :NEW.CDOPERULTATU;
   V_CDFILLOGOPER := '';
   V_NRANOORCAGOP := '';
   V_IDPERIODOORCA := '';
   V_NRPERIODOORCA := '';
   V_DSSERVERRDM := 'ger03000_conclusao_prep_orca';

   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);
   PERIODO(:NEW.NRCALENPREORCAGOP, :NEW.NRORCAMENTOGOP, V_NRANOORCAGOP, V_NRPERIODOORCA, V_IDPERIODOORCA);

   IF INSERTING THEN
      IF NVL(:NEW.NRCONCPREORCAGOP, 0) <> NVL(:OLD.NRCONCPREORCAGOP,0) THEN
         V_DESC := V_DESC || 'Conclusão de Preparação do Orçamento' || chr(10)
                          || 'Tipo do Orçamento: ' || V_IDPERIODOORCA || chr(10)
                          || 'Ano: ' || V_NRANOORCAGOP || chr(10)
                          || 'Periodo: ' || STRPERIODO(V_NRPERIODOORCA, V_IDPERIODOORCA) || chr(10);
         IF NVL(:NEW.NRCALENPREORCAGOP, 0) <> 0 THEN
            IF NVL(TO_CHAR(:NEW.DTINICIALPREP),'!') <> NVL(TO_CHAR(:OLD.DTINICIALPREP),'!') THEN
               V_DESC := V_DESC || 'Data Inicial = '  || :NEW.DTINICIALPREP;
            END IF;
            IF NVL(TO_CHAR(:NEW.DTFINALPREP),'!') <> NVL(TO_CHAR(:OLD.DTFINALPREP),'!') THEN
               V_DESC := V_DESC || ' Data Final = '  || :NEW.DTFINALPREP || chr(10);
            END IF;
         END IF;
         
         IF NVL(:NEW.IDSTATUS,'!') <> NVL(:OLD.IDSTATUS,'!') THEN
            V_DESC   := V_DESC||'Status = '  || :NEW.IDSTATUS;
         END IF;         
      END IF;
      V_TIPO   := '1';
      V_ITPESQ := TO_CHAR(:NEW.NRCONCPREORCAGOP);
   ELSE
      IF (NVL(:NEW.IDSTATUS,'!') <> NVL(:OLD.IDSTATUS,'!')) THEN
         V_DESC := V_DESC || 'Conclusão de Preparação do Orçamento' || chr(10)
                   || 'Tipo do Orçamento: ' || V_IDPERIODOORCA || chr(10)
                   || 'Ano: ' || V_NRANOORCAGOP || chr(10)
                   || 'Periodo: ' || STRPERIODO(V_NRPERIODOORCA, V_IDPERIODOORCA) || chr(10) || chr(10);
         IF NVL(:NEW.NRCALENPREORCAGOP, 0) <> 0 THEN
            IF NVL(TO_CHAR(:NEW.DTINICIALPREP),'!') <> NVL(TO_CHAR(:OLD.DTINICIALPREP),'!') THEN
               V_DESC := V_DESC || 'Data Inicial = '  || :NEW.DTINICIALPREP;
            END IF;
            IF NVL(TO_CHAR(:NEW.DTFINALPREP),'!') <> NVL(TO_CHAR(:OLD.DTFINALPREP),'!') THEN
               V_DESC := V_DESC || ' Data Final = '  || :NEW.DTFINALPREP || chr(10);
            END IF;
         END IF;
         V_DESC := V_DESC || 'Status alterado de ' || :OLD.IDSTATUS || ' para ' || :NEW.IDSTATUS;

         V_TIPO         := '2';
         V_ITPESQ       := TO_CHAR(:OLD.NRCONCPREORCAGOP);
      END IF;
   END IF;

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

   IF NOT V_DESC IS NULL THEN
      INSERT INTO LOGOPERAGES
         (NMTABELA,     DTOPERACAO,   NMRESPOPER,  IDTIPOOPER,   DSOPERACAO,  CDPESQITEM,
          DSRDMUSUOPER, DSENDUSUOPER, DSNMUSUOPER, DSMETUSUOPER, CDORESPOPER, CDFILLOGOPER)
      VALUES
         ('CONCPREORCAGOP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_DEDURECEITAROP
AFTER INSERT
ON DEDURECEITAROP 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(500);
  V_DESCUPD             VARCHAR2(200);
  V_CDFILLOGOPER        VARCHAR2(4);
  V_ITPESQ              VARCHAR2(40);
  V_NMOPERADOR          VARCHAR2(40);
  V_CDOPERADOR          VARCHAR2(12);
  V_CDFILIAL            VARCHAR2(20);
  V_NMFILIAL            VARCHAR2(50);
  V_NMENCARGO           VARCHAR2(100);
  V_NMTIPOOPER          VARCHAR2(100);
  V_UNIDADE             VARCHAR2(100);

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_DESCUPD      := '';
   V_CDOPERADOR   := :NEW.CDOPERULTATU;
   V_CDFILLOGOPER := '';

   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   V_DSSERVERRDM := 'ger80200_resultado_operacional';

   IF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.CDFILIAL) || '|' || TO_CHAR(:NEW.CDENCARGO);
      V_DESCUPD := 'Parâmetros para Resultado Operacional' || chr(10);

      IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
         V_UNIDADE   := chr(10) || chr(10) || 'Unidade: Padrão';
      ELSE
        SELECT CDFILIAL, NMFILIAL
          INTO V_CDFILIAL, V_NMFILIAL
          FROM FILIAL
         WHERE CDFILIAL = :NEW.CDFILIAL;

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

      IF NOT :NEW.CDENCARGO IS NULL THEN
         SELECT NMENCARGO
           INTO V_NMENCARGO
           FROM ENCARGO
          WHERE CDENCARGO = :NEW.CDENCARGO;
          V_DESC := '-> Deduções e Receitas -> Descontos sobre Vendas' || V_UNIDADE || chr(10) || 'Desconto: ' || :NEW.CDENCARGO || ' - ' || V_NMENCARGO;

      ELSIF NOT :NEW.CDTIPOOPER IS NULL THEN
         SELECT NMTIPOOPER
           INTO V_NMTIPOOPER
           FROM TIPOOPERAC
          WHERE CDTIPOOPER = :NEW.CDTIPOOPER
            AND IDENTRSAIDOP = :NEW.IDENTRSAIDOP;

         V_DESC := '-> Deduções e Receitas -> Devoluções / Estornos ' || V_UNIDADE || chr(10) || 'Devolução / Estorno: ' || :NEW.CDTIPOOPER || ' - ' || V_NMTIPOOPER;
      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
        ('DEDURECEITAROP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_DETALHE_SERVICOROP
AFTER INSERT OR UPDATE
ON DETALHE_SERVICOROP 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(1000);
   V_CDFILLOGOPER        VARCHAR2(4);
   V_ITPESQ              VARCHAR2(40);
   V_NMOPERADOR          VARCHAR2(40);
   V_CDOPERADOR          VARCHAR2(12);
   V_CDFILIAL            VARCHAR2(20);
   V_NMFILIAL            VARCHAR2(50);
   V_NMSERVICO           VARCHAR2(100);
   V_DESCUPD             VARCHAR2(200);
   V_UNIDADE             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 = TO_CHAR(P_CDOPERADOR); 
     EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
          P_CDOPERADOR := 'VIA BD';
          P_NMOPERADOR := 'VIA BD';
     END; 
  END;

BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := :NEW.CDOPERULTATU;
   V_CDFILLOGOPER := '';
   V_ITPESQ       := TO_CHAR(:NEW.NRSERVICOROP);

   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   V_DSSERVERRDM := 'ger80200_parametros_resultado_operacional';
   IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
      V_UNIDADE   :=  'Unidade: Padrão';
   ELSE
      SELECT NMFILIAL
        INTO V_NMFILIAL
        FROM FILIAL
       WHERE CDFILIAL = :NEW.CDFILIAL;
       
      V_UNIDADE   :=  'Unidade: '|| :NEW.CDFILIAL || ' - ' || V_NMFILIAL;
   END IF;
    
   SELECT NMSERVICO
     INTO V_NMSERVICO
     FROM SERVICO
    WHERE CDFILIAL = :NEW.CDFILIAL
      AND CDSERVFILI = :NEW.CDSERVFILI;

   V_UNIDADE :=  'Unidade: '|| V_CDFILIAL || ' - ' || V_NMFILIAL || chr(10);
   V_DESCUPD := 'Parâmetros para Resultado Operacional' || chr(10);

   IF INSERTING THEN
      V_TIPO         := '1';

      IF :NEW.IDDETALHESERVICO = 'RETIRADA' THEN
         V_DESC := '-> Consumo -> Detalhamento de Serviços ' || chr(10) || chr(10) || V_UNIDADE || 'Detalhamento: '|| :NEW.CDSERVFILI || ' - ' || V_NMSERVICO || chr(10) || 'Ordem: ' || :NEW.CDORDEM ||  chr(10) || '% para PU: ' || :NEW.VRPERCENTPU;
      ELSIF :NEW.IDDETALHESERVICO = 'EFETIVO' THEN
         V_DESC := '-> Faturamento -> Medição Efetivo -> Detalhamento (Medição de Efetivos) ' || chr(10) || chr(10) || V_UNIDADE || 'Detalhamento: '|| :NEW.CDSERVFILI || ' - ' || V_NMSERVICO || chr(10) || 'Ordem: ' || :NEW.CDORDEM;
      END IF;
   ELSIF UPDATING THEN
      V_TIPO         := '2';

      IF :NEW.IDDETALHESERVICO = 'RETIRADA' THEN
         V_DESCUPD :=  V_DESCUPD || '-> Consumo -> Detalhamento de Serviços ' || chr(10) || chr(10) || V_UNIDADE || 'Detalhamento: ' || :NEW.CDSERVFILI || ' - ' || V_NMSERVICO;

         IF NVL(:OLD.CDORDEM, 0) <> NVL(:NEW.CDORDEM, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Ordem alterada de ' || :OLD.CDORDEM ||  ' para ' || :NEW.CDORDEM;
         END IF;

         IF NVL(:OLD.VRPERCENTPU, 0) <> NVL(:NEW.VRPERCENTPU, 0) THEN
            V_DESC := V_DESC || chr(10) || '% para PU alterada de "' || :OLD.VRPERCENTPU ||  '" para "' || :NEW.VRPERCENTPU || '"';
         END IF;
      ELSIF :NEW.IDDETALHESERVICO = 'EFETIVO' THEN

         V_DESCUPD := V_DESCUPD || ' -> Faturamento -> Medição Efetivo -> Detalhamento (Medição de Efetivos) ' || chr(10) || chr(10) || V_UNIDADE  || :NEW.CDSERVFILI || ' - ' || V_NMSERVICO;

         IF NVL(:OLD.CDORDEM, 0) <> NVL(:NEW.CDORDEM, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Ordem alterada de ' || :OLD.CDORDEM ||  ' para ' || :NEW.CDORDEM;
         END IF;
      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
         ('DETALHE_SERVICOROP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_FILIALOPEROP
AFTER UPDATE OR INSERT
ON FILIALOPEROP 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(1000);
  V_CDFILLOGOPER    VARCHAR2(4);
  V_ITPESQ          VARCHAR2(40);
  V_NMOPERADOR      VARCHAR2(40);
  V_CDOPERADOR      VARCHAR2(12);
  V_DESCUPD         VARCHAR2(100);

  /* Nome do grupo e do gerente relacionado */
  V_NMGERENTE       VARCHAR2(50);
  V_NMGRUPGERENTEOP VARCHAR2(40);
  V_NMFILIAL        VARCHAR2(30); 

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';
   V_CDFILLOGOPER := '';

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

   V_DESCUPD := 'Controle de Unidades por Gerente' || chr(10) || '-> Gerente -> Unidade' || chr(10);
   V_DSSERVERRDM := 'gop00200_controle_de_unidades_por_gerente';

   IF INSERTING THEN
      SELECT GG.NMGRUPGERENTEOP, OP.NMOPERADOR, F.NMFILIAL
        INTO V_NMGRUPGERENTEOP, V_NMGERENTE, V_NMFILIAL
        FROM OPERADOR OP, GRUPGERENTEOP GG, OPGRUPGERENTEOP GP, FILIAL F
       WHERE GP.CDGRUPGERENTEOP = GG.CDGRUPGERENTEOP
         AND GP.CDOPERADOR = OP.CDOPERADOR
         AND F.CDFILIAL = :NEW.CDFILIAL
         AND GP.CDGRUPGERENTEOP = :NEW.CDGRUPGERENTEOP
         AND OP.CDOPERADOR = :NEW.CDOPERADOR;

      IF NVL(:NEW.CDFILIAL, 0) <> NVL(:OLD.CDFILIAL,0) THEN
         V_DESC := V_DESC || chr(10) ||' Grupo de Gerentes: '  || NVL(V_NMGRUPGERENTEOP, ' ');
         V_DESC := V_DESC || chr(10) ||' Gerente: '  || NVL(V_NMGERENTE, ' ');
         V_DESC := V_DESC || chr(10) ||' Unidade: '  || :NEW.CDFILIAL || ' - ' || NVL(V_NMFILIAL, ' ');
         V_DESC := V_DESC || chr(10) ||' Acesso ao Calculo: '  || :NEW.IDACESSOCALC;
         V_DESC := V_DESC || chr(10) ||' Acesso a Aprovacao: '  || :NEW.IDACESSOAPROV;
      END IF;

      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.CDGRUPGERENTEOP) || '/' || TO_CHAR(:NEW.CDOPERADOR) || '/' || TO_CHAR(:NEW.CDFILIAL);
      V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

   ELSIF UPDATING THEN
      SELECT  GG.NMGRUPGERENTEOP, OP.NMOPERADOR, F.NMFILIAL
        INTO V_NMGRUPGERENTEOP, V_NMGERENTE, V_NMFILIAL
        FROM OPERADOR OP, GRUPGERENTEOP GG, OPGRUPGERENTEOP GP, FILIAL F
       WHERE GP.CDGRUPGERENTEOP = GG.CDGRUPGERENTEOP
         AND GP.CDOPERADOR = OP.CDOPERADOR
         AND F.CDFILIAL = :OLD.CDFILIAL
         AND GP.CDGRUPGERENTEOP = :OLD.CDGRUPGERENTEOP
         AND OP.CDOPERADOR = :OLD.CDOPERADOR;

      IF (NVL(TO_CHAR(:NEW.IDACESSOCALC),'!') <> NVL(TO_CHAR(:OLD.IDACESSOCALC),'!'))  OR
         (NVL(TO_CHAR(:NEW.IDACESSOAPROV),'!') <> NVL(TO_CHAR(:OLD.IDACESSOAPROV),'!'))  THEN

         V_DESC := chr(10) || 'Grupo de Gerente: ' || V_NMGRUPGERENTEOP;
         V_DESC := V_DESC || chr(10) || 'Gerente: ' || V_NMGERENTE;
         V_DESC := V_DESC || chr(10) || 'Unidade: ' || :NEW.CDFILIAL || ' - ' || NVL(V_NMFILIAL, ' ');

         IF NVL(TO_CHAR(:NEW.IDACESSOCALC),'!') <> NVL(TO_CHAR(:OLD.IDACESSOCALC),'!') THEN
            V_DESC := V_DESC || chr(10) || ' Acesso ao Calculo alterado de: '|| '"' ||TO_CHAR(:OLD.IDACESSOCALC) || '"' ||' para ' || '"' ||TO_CHAR(:NEW.IDACESSOCALC) || '"';
         END IF;
         IF NVL(TO_CHAR(:NEW.IDACESSOAPROV),'!') <> NVL(TO_CHAR(:OLD.IDACESSOAPROV),'!') THEN
            V_DESC := V_DESC || chr(10) || ' Acesso a Aprovacao alterado de: '|| '"' ||TO_CHAR(:OLD.IDACESSOAPROV) || '"' ||' para ' || '"' ||TO_CHAR(:NEW.IDACESSOAPROV) || '"';
         END IF;

         V_TIPO         := '2';
         V_ITPESQ       := TO_CHAR(:OLD.CDGRUPGERENTEOP) || '/' || TO_CHAR(:OLD.CDOPERADOR) || '/' || TO_CHAR(:OLD.CDFILIAL);
         V_CDOPERADOR   := :NEW.CDOPERULTATU;

         NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
      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
         ('FILIALOPEROP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_GRUPGERENTEOP
AFTER UPDATE OR INSERT
ON GRUPGERENTEOP 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(1000);
   V_CDFILLOGOPER VARCHAR2(4);
   V_ITPESQ       VARCHAR2(40);
   V_NMOPERADOR   VARCHAR2(40);
   V_CDOPERADOR   VARCHAR2(12);
   V_DESCUPD      VARCHAR2(200);

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';
   V_CDFILLOGOPER := '';

   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);
   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

   V_DESCUPD := 'Controle de Unidades por Gerente' || chr(10);
   V_DSSERVERRDM := 'gop00200_controle_de_unidades_por_gerente';

   IF INSERTING THEN
      IF NVL(:NEW.CDGRUPGERENTEOP,0) <> NVL(:OLD.CDGRUPGERENTEOP, 0) AND
         NVL(TO_CHAR(:NEW.NMGRUPGERENTEOP),'!') <> NVL(TO_CHAR(:OLD.NMGRUPGERENTEOP),'!') THEN
      V_DESC   := chr(10) ||'Grupo de Gerente: '  || :NEW.CDGRUPGERENTEOP || ' - ' || :NEW.NMGRUPGERENTEOP;
   END IF;

      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.CDGRUPGERENTEOP);
      V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;
   ELSIF UPDATING THEN
      IF NVL(TO_CHAR(:NEW.NMGRUPGERENTEOP),'!') <> NVL(TO_CHAR(:OLD.NMGRUPGERENTEOP),'!') THEN
         V_DESCUPD := V_DESCUPD || chr(10) || 'Código do Grupo de Gerente: '|| :NEW.CDGRUPGERENTEOP;
         V_DESC := chr(10) || 'Nome alterado de '|| TO_CHAR(:OLD.NMGRUPGERENTEOP) || ' para ' ||  TO_CHAR(:NEW.NMGRUPGERENTEOP);
      END IF;

      V_TIPO := '2';
      V_ITPESQ       := TO_CHAR(:OLD.CDGRUPGERENTEOP);
      V_CDOPERADOR   := :NEW.CDOPERULTATU;
   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
         ('GRUPGERENTEOP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_IMPOSTOROP
AFTER INSERT OR UPDATE
ON IMPOSTOROP 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(1000);
   V_DESCUPD             VARCHAR2(500);
   V_CDFILLOGOPER        VARCHAR2(4);
   V_ITPESQ              VARCHAR2(40);
   V_NMOPERADOR          VARCHAR2(40);
   V_CDOPERADOR          VARCHAR2(12);
   V_CDFILIAL            VARCHAR2(20);
   V_NMFILIAL            VARCHAR2(50);
   V_NMTIPOOPER          VARCHAR2(100);
   V_IDTPIMPOSTOROP      VARCHAR2(100);
   V_IDTPIMPOSTOROP_NOVO VARCHAR2(100);
   V_IDTRATIMPROP        VARCHAR2(100);
   V_IDTRATIMPROP_NOVO   VARCHAR2(100);
   V_SGIMPOSTO           VARCHAR2(100);
   V_NMIMPOSTO           VARCHAR2(100);
   V_UNIDADE             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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := :NEW.CDOPERULTATU;
   V_CDFILLOGOPER := '';
   V_ITPESQ       := TO_CHAR(:NEW.CDIMPOSTO);
   V_UNIDADE      := '';
   
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   V_DSSERVERRDM := 'ger80200_resultado_operacional';          
    
   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   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: Padrão' || chr(10);
   ELSE
      SELECT CDFILIAL, NMFILIAL
        INTO V_CDFILIAL, V_NMFILIAL
        FROM FILIAL
       WHERE CDFILIAL = :NEW.CDFILIAL;
      V_UNIDADE := chr(10) || 'Unidade: '|| V_CDFILIAL || ' - ' || V_NMFILIAL || chr(10);
   END IF;

   SELECT SGIMPOSTO, NMIMPOSTO
     INTO V_SGIMPOSTO, V_NMIMPOSTO
     FROM IMPOSTO
    WHERE CDIMPOSTO = :NEW.CDIMPOSTO;

   IF INSERTING THEN
      V_TIPO := '1';
      IF :NEW.IDTPIMPOSTOROP = 'CC' OR :NEW.IDTPIMPOSTOROP = 'CS' OR :NEW.IDTPIMPOSTOROP = 'ST' THEN
         V_DESCUPD := V_DESCUPD || 'Apuração Estoque -> Impostos ' || chr(10) || V_UNIDADE;
         
         V_IDTPIMPOSTOROP_NOVO := CASE :NEW.IDTPIMPOSTOROP WHEN 'CC' THEN 'Consumo Compras'
                                                           WHEN 'CS' THEN 'Consumo Saída'
                                                           WHEN 'ST' THEN 'Substituição Tributária'
                                                           ELSE :NEW.IDTPIMPOSTOROP
                                  END;
         V_IDTRATIMPROP_NOVO := CASE :NEW.IDTRATIMPROP WHEN 'A' THEN 'Acrescer'
                                                       WHEN 'D' THEN 'Descontar'
                                                       WHEN 'V' THEN 'Destacar'
                                                       ELSE :NEW.IDTRATIMPROP
                                END;
         V_DESC := 'Imposto: ' || V_SGIMPOSTO || ' - ' || V_NMIMPOSTO || chr(10) || 'Tipo: ' || V_IDTPIMPOSTOROP_NOVO || chr(10) || 'Tp. Faturamento: ' || V_IDTRATIMPROP_NOVO;

      ELSIF :NEW.IDTPIMPOSTOROP = 'FS' OR :NEW.IDTPIMPOSTOROP = 'FE' THEN
         V_DESCUPD :=  V_DESCUPD || 'Faturamento -> Impostos -> Impostos' || chr(10) || V_UNIDADE;

         V_IDTRATIMPROP := CASE :NEW.IDTRATIMPROP WHEN 'A' THEN 'Acrescer'
                                                  WHEN 'D' THEN 'Descontar'
                                                  WHEN 'V' THEN 'Destacar'
                                                  ELSE :NEW.IDTRATIMPROP
                           END;
         V_IDTPIMPOSTOROP := CASE :NEW.IDTPIMPOSTOROP WHEN 'FS' THEN 'Faturamento Bruto'
                                                      WHEN 'FE' THEN 'Medição de Efetivos'
                                                      ELSE :NEW.IDTPIMPOSTOROP
                              END;
         V_DESC := 'Imposto: ' || V_SGIMPOSTO || ' - ' || V_NMIMPOSTO || chr(10) || 'Tratamento: ' || V_IDTRATIMPROP || chr(10) || 'Tipo: ' || V_IDTPIMPOSTOROP;

      END IF;
   ELSIF UPDATING THEN
      V_TIPO := '2';
      IF :OLD.IDTPIMPOSTOROP = 'CC' OR :OLD.IDTPIMPOSTOROP = 'CS' OR :OLD.IDTPIMPOSTOROP = 'ST' THEN
         V_DESCUPD := V_DESCUPD || 'Apuração Estoque -> Impostos' || chr(10) || V_UNIDADE || 'Imposto: ' || V_SGIMPOSTO || ' - ' || V_NMIMPOSTO;

         IF NVL(:OLD.IDTPIMPOSTOROP, '!') <> NVL(:NEW.IDTPIMPOSTOROP, '!') THEN
            V_IDTPIMPOSTOROP := CASE :OLD.IDTPIMPOSTOROP WHEN 'CC' THEN 'Consumo Compras'
                                                         WHEN 'CS' THEN 'Consumo Saída'
                                                         WHEN 'ST' THEN 'Substituição Tributária'
                                                         ELSE :OLD.IDTPIMPOSTOROP
                                END;
            V_IDTPIMPOSTOROP_NOVO := CASE :NEW.IDTPIMPOSTOROP WHEN 'CC' THEN 'Consumo Compras'
                                                              WHEN 'CS' THEN 'Consumo Saída'
                                                              WHEN 'ST' THEN 'Substituição Tributária'
                                                              ELSE :NEW.IDTPIMPOSTOROP
                                     END;
           
            V_DESC := V_DESC || chr(10) || 'Tipo alterado de: ' || V_IDTPIMPOSTOROP || ' para ' || V_IDTPIMPOSTOROP_NOVO;
         END IF;
         
         IF NVL(:OLD.IDTPIMPOSTOROP, '!') <> NVL(:NEW.IDTPIMPOSTOROP, '!') THEN           
            V_IDTRATIMPROP := CASE :OLD.IDTRATIMPROP WHEN 'A' THEN 'Acrescer'
                                                     WHEN 'D' THEN 'Descontar'
                                                     WHEN 'V' THEN 'Destacar'
                                                     ELSE :OLD.IDTRATIMPROP
                              END;
            V_IDTRATIMPROP_NOVO := CASE :NEW.IDTRATIMPROP WHEN 'A' THEN 'Acrescer'
                                                          WHEN 'D' THEN 'Descontar'
                                                          WHEN 'V' THEN 'Destacar'
                                                          ELSE :NEW.IDTRATIMPROP
                                   END;
            V_DESC := V_DESC || chr(10) || 'Tratamento alterado de ' || V_IDTRATIMPROP || ' para ' || V_IDTRATIMPROP_NOVO;
         END IF;

      ELSIF :OLD.IDTPIMPOSTOROP = 'FS' OR :OLD.IDTPIMPOSTOROP = 'FE' THEN
         V_DESCUPD := V_DESCUPD || 'Faturamento -> Impostos -> Impostos' || chr(10) || V_UNIDADE || 'Imposto: ' || V_SGIMPOSTO || ' - ' || V_NMIMPOSTO;
            
         IF NVL(:OLD.IDTPIMPOSTOROP, '!') <> NVL(:NEW.IDTPIMPOSTOROP, '!') THEN
            
            V_IDTPIMPOSTOROP := CASE :OLD.IDTPIMPOSTOROP WHEN 'FS' THEN 'Faturamento Bruto'
                                                         WHEN 'FE' THEN 'Medição de Efetivos'
                                                         ELSE :OLD.IDTPIMPOSTOROP
                                END;
            V_IDTPIMPOSTOROP_NOVO := CASE :NEW.IDTPIMPOSTOROP WHEN 'FS' THEN 'Faturamento Bruto'
                                                              WHEN 'FE' THEN 'Medição de Efetivos'
                                                              ELSE :NEW.IDTPIMPOSTOROP
                                     END;
            V_DESC := V_DESC || chr(10) || 'Tp. Faturamento alterado de ' || V_IDTPIMPOSTOROP || ' para ' || V_IDTPIMPOSTOROP_NOVO;
         END IF;
               
         IF NVL(:OLD.IDTRATIMPROP, '!') <> NVL(:NEW.IDTRATIMPROP, '!') THEN
            V_IDTRATIMPROP := CASE :OLD.IDTRATIMPROP WHEN 'A' THEN 'Acrescer'
                                                     WHEN 'D' THEN 'Descontar'
                                                     WHEN 'V' THEN 'Destacar'
                                                      ELSE :OLD.IDTRATIMPROP
                              END;
            V_IDTRATIMPROP_NOVO := CASE :NEW.IDTRATIMPROP WHEN 'A' THEN 'Acrescer'
                                                          WHEN 'D' THEN 'Descontar'
                                                          WHEN 'V' THEN 'Destacar'
                                                          ELSE :NEW.IDTRATIMPROP
                                   END;
            V_DESC := V_DESC || chr(10) || 'Tratamento alterado de ' || V_IDTRATIMPROP || ' para ' || V_IDTRATIMPROP_NOVO;

         END IF;

         IF NVL(:OLD.VRPERFIXCALCIMP, 0) <> NVL(:NEW.VRPERFIXCALCIMP, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Tipo alterado de "' || :OLD.VRPERFIXCALCIMP || '" para "' || :NEW.VRPERFIXCALCIMP || '"';
         END IF;
      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
                 ('IMPOSTOROP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_LANCCREDBCOROP
AFTER INSERT
ON LANCCREDBCOROP 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(500);
  V_CDFILLOGOPER        VARCHAR2(4);
  V_ITPESQ              VARCHAR2(40);
  V_NMOPERADOR          VARCHAR2(40);
  V_CDOPERADOR          VARCHAR2(12);
  V_CDFILIAL            VARCHAR2(20);
  V_NMFILIAL            VARCHAR2(50);
  V_DSTPCREDBANC        VARCHAR2(100);
  V_UNIDADE             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 = TO_CHAR(P_CDOPERADOR); 
     EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
          P_CDOPERADOR := 'VIA BD';
          P_NMOPERADOR := 'VIA BD';
     END; 
  END;
BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := :NEW.CDOPERULTATU;
   V_CDFILLOGOPER := '';

   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   V_DSSERVERRDM := 'gop00100_parametros_resultado_operacional';

   IF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.CDFILIAL) || '|' || TO_CHAR(:NEW.CDTPCREDBANC);


      IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
         V_UNIDADE := 'Unidade: Padrão' || chr(10);
      ELSE
         SELECT CDFILIAL, NMFILIAL
           INTO V_CDFILIAL, V_NMFILIAL
           FROM FILIAL
          WHERE CDFILIAL = :NEW.CDFILIAL;

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

      SELECT DSTPCREDBANC
        INTO V_DSTPCREDBANC
        FROM TPCREDBANC
       WHERE CDTPCREDBANC = :NEW.CDTPCREDBANC;

      V_DESC := 'Parâmetros para Resultado Operacional' || chr(10) || '-> Despesas -> Lançamento Bancário -> Crédito ' ||
                chr(10) || chr(10) || V_UNIDADE || 'Crédito: ' || :NEW.CDTPCREDBANC || ' - ' || V_DSTPCREDBANC;

      INSERT INTO LOGOPERAGES
        (NMTABELA,     DTOPERACAO,   NMRESPOPER,  IDTIPOOPER,   DSOPERACAO,  CDPESQITEM,
         DSRDMUSUOPER, DSENDUSUOPER, DSNMUSUOPER, DSMETUSUOPER, CDORESPOPER, CDFILLOGOPER)
      VALUES
        ('LANCCREDBCOROP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_LANCDEBBCOROP
AFTER INSERT
ON LANCDEBBCOROP 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(500);
   V_CDFILLOGOPER        VARCHAR2(4);
   V_ITPESQ              VARCHAR2(40);
   V_NMOPERADOR          VARCHAR2(40);
   V_CDOPERADOR          VARCHAR2(12);
   V_CDFILIAL            VARCHAR2(20);
   V_NMFILIAL            VARCHAR2(50);
   V_TPDEBIBANC          VARCHAR2(100);
   V_UNIDADE             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 = TO_CHAR(P_CDOPERADOR); 
     EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
          P_CDOPERADOR := 'VIA BD';
          P_NMOPERADOR := 'VIA BD';
     END; 
  END;
BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := :NEW.CDOPERULTATU;
   V_CDFILLOGOPER := '';

   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   V_DSSERVERRDM := 'gop00100_parametros_resultado_operacional';

   IF INSERTING THEN      
      V_TIPO   := '1';
      V_ITPESQ := TO_CHAR(:NEW.CDFILIAL) || '|' || TO_CHAR(:NEW.CDTPDEBIBANC);

      IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
         V_UNIDADE := 'Unidade: Padrão' || chr(10);
      ELSE
         SELECT  NMFILIAL INTO V_NMFILIAL FROM FILIAL WHERE CDFILIAL = :NEW.CDFILIAL;
         V_UNIDADE := 'Unidade: '|| :NEW.CDFILIAL || ' - ' || V_NMFILIAL || chr(10);
      END IF;

      SELECT DSTPDEBIBANC INTO V_TPDEBIBANC FROM TPDEBIBANC WHERE CDTPDEBIBANC = :NEW.CDTPDEBIBANC;
      V_DESC := 'Parâmetros para Resultado Operacional' || chr(10) || '-> Despesas -> Lançamento Bancário -> Débito' ||
                chr(10) || chr(10) || V_UNIDADE || 'Débito: ' || :NEW.CDTPDEBIBANC || ' - ' || V_TPDEBIBANC;

      INSERT INTO LOGOPERAGES
        (NMTABELA,     DTOPERACAO,   NMRESPOPER,  IDTIPOOPER,   DSOPERACAO,  CDPESQITEM,
         DSRDMUSUOPER, DSENDUSUOPER, DSNMUSUOPER, DSMETUSUOPER, CDORESPOPER, CDFILLOGOPER)
      VALUES
        ('LANCDEBBCOROP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_OPERSEMCUSTOROP
AFTER INSERT
ON OPERSEMCUSTOROP 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(500);
   V_CDFILLOGOPER        VARCHAR2(4);
   V_ITPESQ              VARCHAR2(40);
   V_NMOPERADOR          VARCHAR2(40);
   V_CDOPERADOR          VARCHAR2(12);
   V_NMFILIAL            VARCHAR2(50);
   V_NMTIPOOPER          VARCHAR2(100);
   V_UNIDADE             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 = TO_CHAR(P_CDOPERADOR); 
     EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
          P_CDOPERADOR := 'VIA BD';
          P_NMOPERADOR := 'VIA BD';
     END; 
  END;

BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := :NEW.CDOPERULTATU;
   V_CDFILLOGOPER := '';

   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   V_DSSERVERRDM := 'gop00100_parametros_resultado_operacional';

   IF INSERTING THEN

      V_TIPO   := '1';
      V_ITPESQ := TO_CHAR(:NEW.CDFILIAL) || '|' || TO_CHAR(:NEW.CDTIPOOPER);
      V_DESC   := 'Parâmetros para Resultado Operacional' || chr(10) || '-> Consumo -> Lançamento';

      IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
         V_UNIDADE := 'Unidade: Padrão' || chr(10);
      ELSE
         SELECT NMFILIAL INTO V_NMFILIAL FROM FILIAL WHERE CDFILIAL = :NEW.CDFILIAL;
         V_UNIDADE := 'Unidade: '|| :NEW.CDFILIAL || ' - ' || V_NMFILIAL || chr(10);
      END IF;

      SELECT NMTIPOOPER
        INTO V_NMTIPOOPER
        FROM TIPOOPERAC
       WHERE IDENTRSAIDOP = :NEW.IDENTRSAID
         AND CDTIPOOPER = :NEW.CDTIPOOPER;

      IF :NEW.IDENTRSAID = 'E' THEN
         V_DESC := V_DESC || '-> Entradas que não participam CMV: '|| chr(10) || chr(10) || V_UNIDADE || 'Entrada: '|| :NEW.CDTIPOOPER || ' - ' || V_NMTIPOOPER;
      ELSIF :NEW.IDENTRSAID = 'S' THEN
         V_DESC := V_DESC || '-> Saídas que não participam CMV: ' || chr(10) || chr(10) || V_UNIDADE || 'Saída: '|| :NEW.CDTIPOOPER || ' - ' || V_NMTIPOOPER;
      END IF;
   END IF;

   IF NOT V_DESC IS NULL THEN
      INSERT INTO LOGOPERAGES
         (NMTABELA,     DTOPERACAO,   NMRESPOPER,  IDTIPOOPER,   DSOPERACAO,  CDPESQITEM,
          DSRDMUSUOPER, DSENDUSUOPER, DSNMUSUOPER, DSMETUSUOPER, CDORESPOPER, CDFILLOGOPER)
      VALUES
        ('OPERSEMCUSTOROP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_OPGRUPGERENTEOP
AFTER INSERT
ON OPGRUPGERENTEOP 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(50);
  V_DESC            VARCHAR2(500);
  V_CDFILLOGOPER    VARCHAR2(20);
  V_ITPESQ          VARCHAR2(40);
  V_NMOPERADOR      VARCHAR2(40);
  V_CDOPERADOR      VARCHAR2(40);
  V_DESCUPD         VARCHAR2(500);

  /* nome do grupo e do gerente relacionado */
  V_NMGERENTE       VARCHAR2(200);
  V_NMGRUPGERENTEOP VARCHAR2(200);

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO            := '0';
   V_DESC            := '';
   V_ITPESQ          := '';
   V_NMOPERADOR      := '';
   V_CDOPERADOR      := '';
   V_CDFILLOGOPER    := '';
   V_NMGRUPGERENTEOP := '';
   V_NMGERENTE       := '';

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

   V_DESCUPD := 'Controle de Unidades por Gerentes' || chr(10) || '-> Gerente' || chr(10);
   V_DSSERVERRDM := 'gop00200_controle_de_unidades_por_gerente';
   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

   IF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.CDGRUPGERENTEOP) || '/' || TO_CHAR(:NEW.CDOPERADOR);
      V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;
      SELECT  GG.NMGRUPGERENTEOP, OP.NMOPERADOR INTO V_NMGRUPGERENTEOP, V_NMGERENTE
        FROM OPERADOR OP, GRUPGERENTEOP GG
       WHERE :NEW.CDGRUPGERENTEOP = GG.CDGRUPGERENTEOP AND :NEW.CDOPERADOR = OP.CDOPERADOR;
       IF NVL(:NEW.CDGRUPGERENTEOP,0)     <> NVL(:OLD.CDGRUPGERENTEOP, 0) THEN
         V_DESC   := chr(10) ||'Grupo de Gerente: '  || :NEW.CDGRUPGERENTEOP || ' - ' || NVL(V_NMGRUPGERENTEOP, ' ');
      END IF;
      
      IF NVL(:NEW.CDOPERADOR,0)     <> NVL(:OLD.CDOPERADOR, 0) THEN
         V_DESC   := V_DESC || chr(10) ||'Gerente: '  || :NEW.CDOPERADOR || ' - ' || NVL(V_NMGERENTE, ' ');
      END IF;
   END IF;
   
   V_DESC := SUBSTR(V_DESC, 1, 300);

   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
         ('OPGRUPGERENTEOP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_PARAMGESTAO
AFTER UPDATE OR INSERT OR DELETE
ON PARAMGESTAO 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(500);
   V_CDFILLOGOPER    VARCHAR2(4);
   V_ITPESQ          VARCHAR2(40);
   V_NMOPERADOR      VARCHAR2(40);
   V_CDOPERADOR      VARCHAR2(12);
   V_NMTABELA        VARCHAR2(20);

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';
   V_CDFILLOGOPER := '';
   V_NMTABELA     := 'PARAMGESTAO';

   V_DSSERVERRDM := 'gop00800_taxa_administrativa';
   V_DESC := 'Taxa Administrativa' || chr(10) || '-> Geral' || chr(10) || chr(10);
   
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   IF INSERTING THEN
      V_TIPO := '1';
      V_ITPESQ := TO_CHAR(:NEW.CDPARAMGESTAO);
      V_DESC := V_DESC || 'Taxa Administrativa Padrão (%): ' || NVL(TO_CHAR(:NEW.TAXAADMINMATRIZ), ' ');
      V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;
      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
      
   ELSIF UPDATING THEN
      V_TIPO := '2';
      V_ITPESQ := TO_CHAR(:NEW.CDPARAMGESTAO);
      V_CDOPERADOR := :NEW.CDOPERULTATU;
      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);  
      IF NVL(:NEW.TAXAADMINMATRIZ, 0) <> NVL(:OLD.TAXAADMINMATRIZ, 0) THEN
         V_DESC := V_DESC || 'Taxa Administrativa Padrão (%) de: ' || TO_CHAR(:OLD.TAXAADMINMATRIZ) || ' para: ' || TO_CHAR(:NEW.TAXAADMINMATRIZ) ;
      END IF;
    END IF;    
    
   IF NOT V_DESC IS NULL THEN
      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;
/
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(100);

  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); 

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   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 := 'Parâmetros para Orçamento 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 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 Início de: ' || NVL(:OLD.NRMESINIORCA, ' ') || ' para: ' || NVL(:NEW.NRMESINIORCA, ' ');
      END IF;

      IF NVL(:NEW.IDPERIODOORCA,'!') <> NVL(:OLD.IDPERIODOORCA,'!')  THEN
         V_DESC := V_DESC || chr(10) || 'Periodo do Orcamento de: ' || NVL(:OLD.IDPERIODOORCA, ' ') || ' para: ' || NVL(:NEW.IDPERIODOORCA, ' ');
      END IF;

      IF NVL(:NEW.NRDIAINIORCA, 0) <> NVL(:OLD.NRDIAINIORCA, 0)  THEN
         V_DESC := V_DESC || chr(10) || 'Dia Inicial do Orcamento de: ' || NVL(TO_CHAR(:OLD.NRDIAINIORCA), '') || ' para: ' || NVL(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 Elaboração do Orcamento de: ' || NVL(TO_CHAR(:OLD.NRDIAANTELABORCA), ' ') || ' para: ' || NVL(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 de: ' || NVL(V_IDTIPOSIMULARESULTFAT, ' ') || ' para: ' || NVL(V_IDTIPOSIMULARESULTFAT_NOVO, ' ');
      END IF;

      IF NVL(:NEW.CDINDICEFAT,'!') <> NVL(:OLD.CDINDICEFAT,'!')  THEN
         IF NVL(:OLD.CDINDICEFAT, '!') <> '!' THEN
            SELECT 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 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 de: ' || V_NMINDICEFAT || ' para: ' || V_NMINDICEFAT_NOVO;
      END IF;

      IF NVL(:NEW.CDINDICECON,'!') <> NVL(:OLD.CDINDICECON,'!')  THEN
         IF NVL(:OLD.CDINDICECON, '!') <> '!' THEN
            SELECT 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 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 NMTIPOCUSTO
              INTO V_NMTIPOCUSTO
              FROM TIPOCUSTO
             WHERE CDTIPOCUSTO = :OLD.CDTIPOCUSTO;
             
            V_NMTIPOCUSTO := :OLD.CDTIPOCUSTO || ' - ' ||V_NMTIPOCUSTO;
         END IF;

         IF NVL(:NEW.CDTIPOCUSTO, '!') <> '!' THEN
            SELECT 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 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 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 Versão de Orçamento de: ' || NVL(:OLD.IDUTILVERSAOORCA, ' ') || ' para: ' || NVL(:NEW.IDUTILVERSAOORCA, ' ');
      END IF;
      IF NVL(:NEW.IDAPROVORCACONC,'!') <> NVL(:OLD.IDAPROVORCACONC,'!')  THEN
         V_DESC := V_DESC || chr(10) || 'Aprovação Automática na Conclusão do Orçamento de: ' || NVL(:OLD.IDAPROVORCACONC, ' ') || ' para: ' || NVL(:NEW.IDAPROVORCACONC, ' ');
      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;
/
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(500);
  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);
  -- Apuração Consumo:
  V_IDRETIRADAROP               VARCHAR2(100);
  V_IDRETIRADAROP_NOVO          VARCHAR2(100);
  -- Apuração Estoque:
  V_IDPERCONSROP                VARCHAR2(50);
  V_IDPERCONSROP_NOVO           VARCHAR2(50);
  -- Apuração 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);
  -- Deduções da Receita:
  V_IDDATADEVOLROP              VARCHAR2(50);
  V_IDDATADEVOLROP_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 = TO_CHAR(P_CDOPERADOR); 
     EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
          P_CDOPERADOR := 'VIA BD';
          P_NMOPERADOR := 'VIA BD';
     END; 
  END;
BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';
   V_CDFILLOGOPER := '';
   V_NMTABELA     := 'PARFILIALROP';
   V_UNIDADE      := '';

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

   V_DSSERVERRDM := 'ger80200_parametros_resultado_operacional';
   V_DESCUPD := 'Parâmetros para Resultado Operacional' || chr(10);
   
   IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
      V_UNIDADE := chr(10) || 'Unidade: Padrão';
   ELSE
      SELECT CDFILIAL, 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.                    
          - Não é possível alterar duas telas ao mesmo tempo.                                         
          - Se houver alteração em um bloco, os outros seguintes não precisam ser verificados.        
          - Fora do loop é realizado a inserção na LOGOPERAGES, dos dados modificados.                
      */

      LOOP                                         
        -- Inicio Geral

         IF NVL(:OLD.IDUTPADRROPFIL, '!') <> NVL (:NEW.IDUTPADRROPFIL, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Utiliza parametrização padrão alterado de: ' || :OLD.IDUTPADRROPFIL || ' para: ' || :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/mês alterado de: ' || :OLD.IDFECHDIAROP || ' para: ' || :NEW.IDFECHDIAROP;
         END IF;

         IF NVL(:OLD.IDFILIALAGRROP, '!') <> NVL (:NEW.IDFILIALAGRROP, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Considera unidades agregadas na apuração da central alterado de: ' || :OLD.IDFILIALAGRROP || ' para: ' || :NEW.IDFILIALAGRROP;
         END IF;

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

         IF NVL(:OLD.CDGRUPPROD, 0) <> NVL (:NEW.CDGRUPPROD, 0) THEN
            SELECT CDGRUPPROD, NMGRUPPROD
              INTO V_CDGRUPPROD, V_NMGRUPPROD
              FROM GRUPPROD
             WHERE CDGRUPPROD = :OLD.CDGRUPPROD;
            SELECT CDGRUPPROD, 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 CDTIPOOPER, NMTIPOOPER
              INTO V_CDTIPOOPER, V_NMTIPOOPER
              FROM TIPOOPERAC
             WHERE CDTIPOOPER = :OLD.CDTPOPTRANSFIL
               AND IDENTRSAIDOP = :OLD.IDENTRSAIDROP;
            SELECT CDTIPOOPER, 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 Operação utilizado para transferência de produtos entre unidades alterado de: ' || V_NMTIPOOPER || ' para: ' || V_NMTIPOOPER_NOVO ;
         END IF;

         IF NVL(:OLD.IDVOLUNEGOCIO, '!') <> NVL (:NEW.IDVOLUNEGOCIO, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Projeção Manual alterado de: ' || :OLD.IDVOLUNEGOCIO || ' para: ' || :NEW.IDVOLUNEGOCIO;
         END IF;

         IF NVL(:OLD.IDPROJECMANU, '!') <> NVL (:NEW.IDPROJECMANU, '!') THEN
            V_DESC := V_DESC || chr(10) || 'Volume de Negócios alterado de: ' || :OLD.IDPROJECMANU || ' para: ' || :NEW.IDPROJECMANU;
         END IF;

         IF NVL(:OLD.IDVISAOROP, '!') <> NVL (:NEW.IDVISAOROP, '!') THEN
            V_IDVISAOROP := CASE :OLD.IDVISAOROP WHEN 'PADRAO' THEN 'Padrao'
                                                 WHEN 'PERSONALIZADO' THEN 'Personalizado'
                                                 ELSE :OLD.IDVISAOROP
                            END;
            V_IDVISAOROP_NOVO := 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, 0) <> NVL (:NEW.IDDTAPURFAT, 0) THEN
            V_IDDTAPURFAT := CASE :OLD.IDDTAPURFAT WHEN 'R' THEN 'Data de Referência'
                                                   WHEN 'S' THEN 'Data de Saída'
                                                   ELSE :OLD.IDDTAPURFAT
                             END;
            V_IDDTAPURFAT_NOVO := CASE :NEW.IDDTAPURFAT WHEN 'R' THEN 'Data de Referência'
                                                        WHEN 'S' THEN 'Data de Saída'
                                                        ELSE :NEW.IDDTAPURFAT
                                  END;
            V_DESC := V_DESC || chr(10) || 'Apuração do Faturamento por alterado de: ' || V_IDDTAPURFAT || ' para: ' || V_IDDTAPURFAT_NOVO;
         END IF;

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

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

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

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

         IF NVL(:OLD.IDFATUROP, 0) <> NVL (:NEW.IDFATUROP, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Composição do Faturamento alterado de: ' || :OLD.IDFATUROP || ' para: ' || :NEW.IDFATUROP;
         END IF;

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

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

         IF NVL(:OLD.IDCALCIMPFAT, 0) <> NVL (:NEW.IDCALCIMPFAT, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Realizar a parametrização por alterado de: ' || :OLD.IDCALCIMPFAT || ' para: ' || :NEW.IDCALCIMPFAT;
         END IF;

         IF NVL(:OLD.IDPERCFIXIMPREC, 0) <> NVL (:NEW.IDPERCFIXIMPREC, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Considera % Fixo para Imposto a Recuperar alterado de: ' || :OLD.IDPERCFIXIMPREC || ' para: ' || :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) || 'Crédito de ICMS(%) alterado de: ' || :OLD.VRCREDICMSROP || ' para: ' || :NEW.VRCREDICMSROP;
         END IF;

         IF NVL(:OLD.CDIMPOSTOROP, 0) <> NVL (:NEW.CDIMPOSTOROP, 0) THEN
            SELECT CDIMPOSTO, SGIMPOSTO, NMIMPOSTO
              INTO V_CDIMPOSTO, V_SGIMPOSTO, V_NMIMPOSTO
              FROM IMPOSTO
             WHERE CDIMPOSTO = :OLD.CDIMPOSTOROP;
            SELECT CDIMPOSTO, SGIMPOSTO, 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, 0) <> NVL (:NEW.IDPERFIXCALCIMP, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Considera percentual fixo para cálculo do imposto alterado de: ' || :OLD.IDPERFIXCALCIMP || ' para: ' || :NEW.IDPERFIXCALCIMP;
         END IF;

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

         IF NVL(:OLD.IDDETALEFET, '!') <> NVL (:NEW.IDDETALEFET, '!') THEN
            V_NMTELA := '-> Faturamento -> Medição de Efetivo -> Geral';
            V_IDDETALEFET := CASE :OLD.IDDETALEFET WHEN 'Q' THEN 'Volume'
                                                   WHEN 'V' THEN 'Valor'
                                                   ELSE :OLD.IDDETALEFET
                             END;
            V_IDDETALEFET_NOVO := 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 alteração na tela faturamento, as outras telas não foram modificadas, logo,
            a verificação de alteração delas não é necessária. 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 Apuração Consumo

         IF NVL(:OLD.IDRETIRADAROP, '!') <> NVL (:NEW.IDRETIRADAROP, '!') THEN
            V_IDRETIRADAROP := 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 - Saídas NF - Estoque Final'
                                                       ELSE :OLD.IDRETIRADAROP
                               END;
            V_IDRETIRADAROP_NOVO := 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 - Saídas 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 serviços da unidade: ' || :OLD.IDSERVRETROP || ' para: ' || :NEW.IDSERVRETROP;
         END IF;

         -- Fim Apuração Consumo
         IF V_DESC IS NOT NULL THEN
            V_DESCUPD := 'Apuração Consumo -> Geral' || chr(10) || V_DESCUPD;
            EXIT;
         END IF;

         -- Inicio Apuração Estoque
         IF NVL(:OLD.IDINVINICROP, 0) <> NVL(:NEW.IDINVINICROP, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Inventario Inicial alterado de: ' || :OLD.IDINVINICROP || ' para: ' || :NEW.IDINVINICROP;
         END IF;

         IF NVL(:OLD.IDIMPLANTROP, 0) <> NVL(:NEW.IDIMPLANTROP, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Implantação alterado de: ' || :OLD.IDIMPLANTROP || ' para: ' || :NEW.IDIMPLANTROP;
         END IF;

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

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

         IF NVL(:OLD.IDPERCONSROP, '!') <> NVL(:NEW.IDPERCONSROP, '!') THEN
            V_IDPERCONSROP := CASE :OLD.IDPERCONSROP WHEN 'A' THEN 'Considera consumo atual'
                                                     WHEN 'P' THEN 'Considera consumo anterior'
                                                     ELSE :OLD.IDPERCONSROP
                              END;
            V_IDPERCONSROP_NOVO := 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: ' || :OLD.NRMESCONSROP || ' para: ' || :NEW.NRMESCONSROP;
         END IF;

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

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

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

         -- Fim Apuração Estoque
         IF V_DESC IS NOT NULL THEN
            V_DESCUPD := 'Apuração Estoque -> Lançamentos -> Geral' || chr(10) || V_DESCUPD;
            EXIT;
         END IF;

         -- Inicio Apuração Despesas
         IF NVL(:OLD.IDDTAPUCTPAGAR, 0) <> NVL(:NEW.IDDTAPUCTPAGAR, 0) THEN
            V_IDDTAPUCTPAGAR := CASE :OLD.IDDTAPUCTPAGAR WHEN 'ENTRADA' THEN 'Entrada'
                                                         WHEN 'VENCIMENTO' THEN 'Vencimento'
                                                         WHEN 'BAIXA' THEN 'Baixa'
                                                         ELSE :OLD.IDDTAPUCTPAGAR
                                END;
            V_IDDTAPUCTPAGAR_NOVO := 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) || 'Apuração de Despesas no Contas a Pagar por data alterado de: ' || V_IDDTAPUCTPAGAR || ' para: ' || V_IDDTAPUCTPAGAR_NOVO;
         END IF;

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

         IF NVL(:OLD.IDAPURDEPRECROP, 0) <> NVL(:NEW.IDAPURDEPRECROP, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Apura Depreciação de Bem (Ativos) alterado de: ' || :OLD.IDAPURDEPRECROP || ' para: ' || :NEW.IDAPURDEPRECROP;
         END IF;

         IF NVL(:OLD.IDTIPODEPRECROP, 0) <> NVL(:NEW.IDTIPODEPRECROP, 0) THEN
            V_IDTIPODEPRECROP := CASE :OLD.IDTIPODEPRECROP WHEN 'C' THEN 'Contábil'
                                                                    WHEN 'F' THEN 'Fiscal'
                                                                    ELSE :OLD.IDTIPODEPRECROP
                                 END;
            V_IDTIPODEPRECROP_NOVO := CASE :NEW.IDTIPODEPRECROP WHEN 'C' THEN 'Contábil'
                                                                WHEN 'F' THEN 'Fiscal'
                                                                ELSE :NEW.IDTIPODEPRECROP
                                      END;
            V_DESC := V_DESC || chr(10) || 'Tipo de Depreciação alterado de: ' || V_IDTIPODEPRECROP || ' para: ' || V_IDTIPODEPRECROP_NOVO;
         END IF;

         IF NVL(:OLD.IDDESPMOBROP, 0) <> NVL(:NEW.IDDESPMOBROP, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Lançamentos de Despesas com Mão de Obra (Manual) alterado de: ' || :OLD.IDDESPMOBROP || ' para: ' || :NEW.IDDESPMOBROP;
         END IF;

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

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

         IF NVL(:OLD.CDGRUPDESP, 0) <> NVL(:NEW.CDGRUPDESP, 0) THEN
            SELECT NMGRUPDESP
              INTO V_NMGRUPDESP
              FROM GRUPDESP
             WHERE CDGRUPDESP = :OLD.CDGRUPDESP;
            SELECT 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, 0) <> NVL(:NEW.IDDESPENTROP, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Despesas com Lançamentos de Entrada alterado de: ' || :OLD.IDDESPENTROP || ' para: ' || :NEW.IDDESPENTROP;
         END IF;

         IF NVL(:OLD.IDCONSPERRATFIL, 0) <> NVL(:NEW.IDCONSPERRATFIL, 0) THEN
            IF NVL(:OLD.IDAPURDESPENTRMO, 0) <> NVL(:NEW.IDAPURDESPENTRMO, 0) THEN
               V_DESC := V_DESC || chr(10) || 'Considera Rateio Despesas de Entrada por Unidade alterado de: ' || :OLD.IDCONSPERRATFIL || ' para: ' || :NEW.IDCONSPERRATFIL;
            END IF;
            V_DESC := V_DESC || chr(10) || 'Mão de Obra com Lançamento de Entrada alterado de: ' || :OLD.IDAPURDESPENTRMO || ' para: ' || :NEW.IDAPURDESPENTRMO;
         END IF;

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

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

         IF NVL(:OLD.IDDESPMOBROPCTB, 0) <> NVL(:NEW.IDDESPMOBROPCTB, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Lançamentos de Mão de Obra no Contabilidade alterado de: ' || :OLD.IDDESPMOBROPCTB || ' para: ' || :NEW.IDDESPMOBROPCTB;
         END IF;

         IF NVL(:OLD.IDAPUMOCTPGROP, 0) <> NVL(:NEW.IDAPUMOCTPGROP, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Lançamentos de Mão de Obra no Contas a Pagar alterado de: ' || :OLD.IDAPUMOCTPGROP || ' para: ' || :NEW.IDAPUMOCTPGROP;
         END IF;

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

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

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

         IF NVL(:OLD.IDCONSCREDBCO, 0) <> NVL(:NEW.IDCONSCREDBCO, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Crédito alterado de: ' || :OLD.IDCONSCREDBCO || ' para: ' || :NEW.IDCONSCREDBCO;
         END IF;

         -- Fim Apuração Despesas
         IF V_DESC IS NOT NULL THEN
            V_DESCUPD := 'Apuração Despesa -> Geral' || chr(10) || V_DESCUPD;
            EXIT;
         END IF;

         -- Inicio Deduções da Receita
         IF NVL(:OLD.IDEXIBEBENEFDEDU, 0) <> NVL(:NEW.IDEXIBEBENEFDEDU, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Exibir Beneficiário / Cliente alterado de: ' || :OLD.IDEXIBEBENEFDEDU || ' para: ' || :NEW.IDEXIBEBENEFDEDU;
         END IF;
         IF NVL(:OLD.IDEXIBENUMNFDEDU, 0) <> NVL(:NEW.IDEXIBENUMNFDEDU, 0) THEN
            V_DESC := V_DESC || chr(10) || 'Exibir Número da Nota Fiscal alterado de: ' || :OLD.IDEXIBENUMNFDEDU || ' para: ' || :NEW.IDEXIBENUMNFDEDU;
         END IF;
         IF NVL(:OLD.IDDATADEVOLROP, 0) <> NVL(:NEW.IDDATADEVOLROP, 0) THEN
            V_IDDATADEVOLROP := CASE :OLD.IDDATADEVOLROP WHEN 'SAIDA_NF_ORIGEM' THEN 'Data da Saída NF Origem'
                                                         WHEN 'SAIDA_NF' THEN 'Data de Saída NF'
                                                         ELSE :OLD.IDDATADEVOLROP
                                END;
            V_IDDATADEVOLROP_NOVO := CASE :NEW.IDDATADEVOLROP WHEN 'SAIDA_NF_ORIGEM' THEN 'Data da Saída NF Origem'
                                                              WHEN 'SAIDA_NF' THEN 'Data de Saída NF'
                                                              ELSE :NEW.IDDATADEVOLROP
                                     END;
            V_DESC := V_DESC || chr(10) || 'Data de Devolução alterado de: ' || V_IDDATADEVOLROP || ' para: ' || V_IDDATADEVOLROP_NOVO;
         END IF;

         -- Fim Deduções da Receita
         IF V_DESC IS NOT NULL THEN
            V_DESCUPD := 'Deduções da Receita -> 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_PERCCORRECAOGOP
AFTER UPDATE OR INSERT
ON PERCCORRECAOGOP 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(4);
  V_ITPESQ       VARCHAR2(40);
  V_NMOPERADOR   VARCHAR2(40);
  V_CDOPERADOR   VARCHAR2(12);

  V_DESCUPD      VARCHAR2(1000);
  V_CDFILIAL     VARCHAR2(20);
  V_NMFILIAL     VARCHAR2(30);
  V_TIPOORCA     VARCHAR2(100);
  V_UNIDADE      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 = TO_CHAR(P_CDOPERADOR); 
     EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
          P_CDOPERADOR := 'VIA BD';
          P_NMOPERADOR := 'VIA BD';
     END; 
  END;
BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_DESCUPD      := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';
   V_CDFILLOGOPER := '';

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

   V_DSSERVERRDM := 'gop22000_percentual_de_correcao';
   V_DESCUPD := 'Percentual de Correção' || chr(10);
   IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
      V_DESCUPD := V_DESCUPD || '-> Geral' || chr(10);
      V_UNIDADE := chr(10) || 'Unidade: Padrão';
   ELSE
      SELECT CDFILIAL, NMFILIAL
        INTO V_CDFILIAL, V_NMFILIAL
        FROM FILIAL
       WHERE CDFILIAL = :NEW.CDFILIAL;
      V_DESCUPD := V_DESCUPD || '-> Unidade' || chr(10);
      V_UNIDADE := chr(10) || 'Unidade: '|| V_CDFILIAL || ' - ' || V_NMFILIAL;
   END IF;

   V_TIPOORCA := CASE :NEW.IDTIPOORCAOP WHEN 'FATURAMENTO' THEN 'Faturamento'
                                        WHEN 'CONSUMO' THEN 'Consumo'
                                        WHEN 'MAOOBRA' THEN 'Mao de Obra'
                                        WHEN 'DESPMATRIZ' THEN 'Despesas da Matriz'
                                        WHEN 'DESPENTRADA' THEN 'Despesas de Entrada'
                                        WHEN 'DESPDIVERSA' THEN 'Despesas Diversas'
                                        WHEN 'IMPOSTO' THEN 'Imposto'
                                        WHEN 'IMPOSTOARECUPERAR' THEN 'Imposto a Recuperar'
                                        WHEN 'IMPOSTOSOBLUCRO' THEN 'Imposto sob o Lucro'
                                        WHEN 'INVESTIMENTO' THEN 'Investimento'
                                        WHEN 'DEPRECIACAO' THEN 'Depreciacao'
                                        ELSE :NEW.IDTIPOORCAOP
                 END;
   IF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.NRPERCCORRECAOGOP);
      V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      V_DESCUPD := V_DESCUPD || V_UNIDADE || chr(10) || 'Tipo de Orçamento: ' || V_TIPOORCA;
      V_DESCUPD := V_DESCUPD || chr(10) || 'Ano: ' || :NEW.CDANO;

      IF NVL(:NEW.VRMES01, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Janeiro: ' || :NEW.VRMES01;
      END IF;
      IF NVL(:NEW.VRMES02, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Fevereiro: ' || :NEW.VRMES02;
      END IF;
      IF NVL(:NEW.VRMES03, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Março: ' || :NEW.VRMES03;
      END IF;
      IF NVL(:NEW.VRMES04, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Abril: ' || :NEW.VRMES04;
      END IF;
      IF NVL(:NEW.VRMES05, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Maio: ' || :NEW.VRMES05;
      END IF;
      IF NVL(:NEW.VRMES06, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Junho: ' || :NEW.VRMES06;
      END IF;
      IF NVL(:NEW.VRMES07, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Julho: ' || :NEW.VRMES07;
      END IF;
      IF NVL(:NEW.VRMES08, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Agosto: ' || :NEW.VRMES08;
      END IF;
      IF NVL(:NEW.VRMES09, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Setembro: ' || :NEW.VRMES09;
      END IF;
      IF NVL(:NEW.VRMES10, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Outubro: ' || :NEW.VRMES10;
      END IF;
      IF NVL(:NEW.VRMES11, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Novembro: ' || :NEW.VRMES11;
      END IF;
      IF NVL(:NEW.VRMES12, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Dezembro: ' || :NEW.VRMES12;
      END IF;
   ELSIF UPDATING THEN
      V_TIPO         := '2';
      V_ITPESQ       := TO_CHAR(:OLD.NRPERCCORRECAOGOP);
      V_CDOPERADOR   := :NEW.CDOPERULTATU;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      V_DESCUPD := V_DESCUPD || V_UNIDADE || chr(10) || 'Tipo de Orçamento: ' || V_TIPOORCA;
      V_DESCUPD := V_DESCUPD || chr(10) || 'Ano: ' || :NEW.CDANO;

      IF NVL(:OLD.VRMES01, 0) <> NVL(:NEW.VRMES01, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Janeiro alterado de: ' || :OLD.VRMES01 || ' para: ' || :NEW.VRMES01;
      END IF;
      IF NVL(:OLD.VRMES02, 0) <> NVL(:NEW.VRMES02, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Fevereiro alterado de: ' || :OLD.VRMES02 || ' para: ' || :NEW.VRMES02;
      END IF;
      IF NVL(:OLD.VRMES03, 0) <> NVL(:NEW.VRMES03, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Março alterado de: ' || :OLD.VRMES03 || ' para: ' || :NEW.VRMES03;
      END IF;
      IF NVL(:OLD.VRMES04, 0) <> NVL(:NEW.VRMES04, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Abril alterado de: ' || :OLD.VRMES04 || ' para: ' || :NEW.VRMES04;
      END IF;
      IF NVL(:OLD.VRMES05, 0) <> NVL(:NEW.VRMES05, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Maio alterado de: ' || :OLD.VRMES05 || ' para: ' || :NEW.VRMES05;
      END IF;
      IF NVL(:OLD.VRMES06, 0) <> NVL(:NEW.VRMES06, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Junho alterado de: ' || :OLD.VRMES06 || ' para: ' || :NEW.VRMES06;
      END IF;
      IF NVL(:OLD.VRMES07, 0) <> NVL(:NEW.VRMES07, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Julho alterado de: ' || :OLD.VRMES07 || ' para: ' || :NEW.VRMES07;
      END IF;
      IF NVL(:OLD.VRMES08, 0) <> NVL(:NEW.VRMES08, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Agosto alterado de: ' || :OLD.VRMES08 || ' para: ' || :NEW.VRMES08;
      END IF;
      IF NVL(:OLD.VRMES09, 0) <> NVL(:NEW.VRMES09, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Setembro alterado de: ' || :OLD.VRMES09 || ' para: ' || :NEW.VRMES09;
      END IF;
      IF NVL(:OLD.VRMES10, 0) <> NVL(:NEW.VRMES10, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Outubro alterado de: ' || :OLD.VRMES10 || ' para: ' || :NEW.VRMES10;
      END IF;
      IF NVL(:OLD.VRMES11, 0) <> NVL(:NEW.VRMES11, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Novembro alterado de: ' || :OLD.VRMES11 || ' para: ' || :NEW.VRMES11;
      END IF;
      IF NVL(:OLD.VRMES12, 0) <> NVL(:NEW.VRMES12, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Dezembro alterado de: ' || :OLD.VRMES12 || ' para: ' || :NEW.VRMES12;
      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
         ('PERCCORRECAOGOP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_PERCDETALPRODGOP
AFTER UPDATE or INSERT
ON PERCDETALPRODGOP 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(4);
  V_ITPESQ                  VARCHAR2(40);
  V_NMOPERADOR              VARCHAR2(40);
  V_CDOPERADOR              VARCHAR2(12);
  V_NMTABELA                VARCHAR2(20);
  V_DESCUPD                 VARCHAR2(500);
  V_NMFILIAL                VARCHAR2(100);

  V_IDDESPPREV              VARCHAR2(100);
  V_CDDESPPREV              VARCHAR2(100);
  V_NMDESPPREV              VARCHAR2(100);
  V_CDPRODUTO               VARCHAR2(100);
  V_CDARVPROD               VARCHAR2(100);
  V_NMPRODUTO               VARCHAR2(100);

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';
   V_CDFILLOGOPER := '';
   V_NMTABELA     := 'PERCDETALPRODGOP';

   V_DSSERVERRDM := 'gop21000_percentual_por_item_operacional';
   V_DESCUPD := 'Percentual por Item Operacional' || chr(10) || '-> Geral ' ;

   SELECT PDG.IDDESPPREV, PR.CDDESPPREV, D.NMDESPPREV, PR.CDPRODUTO, P.CDARVPROD, P.NMPRODUTO
     INTO V_IDDESPPREV, V_CDDESPPREV, V_NMDESPPREV, V_CDPRODUTO, V_CDARVPROD, V_NMPRODUTO
     FROM DESPPREV D JOIN PRODDESPPREV PR ON D.CDDESPPREV = PR.CDDESPPREV
                     JOIN PRODUTO P ON PR.CDPRODUTO = P.CDPRODUTO
                     LEFT JOIN PERCITEMDETALGOP PDG ON PDG.NRPERCITEMDETALGOP = :NEW.NRPERCITEMDETALGOP
                                                   AND PDG.CDDESPPREV = D.CDDESPPREV
    WHERE PDG.NRPERCITEMDETALGOP = :NEW.NRPERCITEMDETALGOP AND
          PR.CDPRODUTO = P.CDPRODUTO AND
          P.CDPRODUTO = :NEW.CDPRODUTO;


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


   IF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.NRPERCDETALPRODGOP);
      V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      IF NVL(:OLD.VRPERCENTUAL, 0) <> NVL(:NEW.VRPERCENTUAL, 0)  THEN
         IF V_IDDESPPREV = 'MATRIZ' THEN
            V_DESCUPD := V_DESCUPD || '-> Despesas da Matriz -> Detalhamento -> Produto';

         ELSIF V_IDDESPPREV = 'DIVERSA' THEN
            V_DESCUPD := V_DESCUPD || '-> Despesas Diversas -> Detalhamento -> Produto';

         ELSIF V_IDDESPPREV = 'LANCENTRADA' THEN
            V_DESCUPD := V_DESCUPD || '-> Despesas Lanc. Entrada -> Detalhamento -> Produto';

         END IF;

         IF V_IDDESPPREV IS NOT NULL THEN
            V_DESC := chr(10) || chr(10) || 'Despesa: ' || V_CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) ||
                                            'Produto: ' || V_CDARVPROD || ' - ' || V_NMPRODUTO || chr(10) ||
                                            'Percentual: ' ||NVL(:NEW.VRPERCENTUAL, 0) || '%';
         END IF;
      END IF;
   ELSIF UPDATING THEN
      V_TIPO := '2';
      V_ITPESQ       := TO_CHAR(:NEW.NRPERCDETALPRODGOP);
      V_CDOPERADOR   := :NEW.CDOPERULTATU;
      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      IF NVL(:OLD.VRPERCENTUAL, 0) <> NVL(:NEW.VRPERCENTUAL, 0)  THEN
         IF V_IDDESPPREV = 'MATRIZ' THEN
            V_DESCUPD := V_DESCUPD || '-> Despesas da Matriz -> Detalhamento -> Produto';

         ELSIF V_IDDESPPREV = 'DIVERSA' THEN
            V_DESCUPD := V_DESCUPD || '-> Despesas Diversas -> Detalhamento  -> Produto';

         ELSIF V_IDDESPPREV = 'LANCENTRADA' THEN
            V_DESCUPD := V_DESCUPD || '-> Despesas Lanc. Entrada -> Detalhamento -> Produto';
         END IF;

         IF V_IDDESPPREV IS NOT NULL THEN
            V_DESC := chr(10) || chr(10) || 'Despesa: ' || V_CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) ||
                                            'Produto: ' || V_CDARVPROD || ' - ' || V_NMPRODUTO || chr(10) ||
                                            'Percentual alterado de: ' || NVL(:OLD.VRPERCENTUAL, 0) || '% para: ' || NVL(:NEW.VRPERCENTUAL, 0) || '%';
         END IF;
      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
        ('PERCDETALPRODGOP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_PERCDETPRODFILGOP
AFTER UPDATE or INSERT
ON PERCDETPRODFILGOP 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(4);
  V_ITPESQ                  VARCHAR2(40);
  V_NMOPERADOR              VARCHAR2(40);
  V_CDOPERADOR              VARCHAR2(12);
  V_NMTABELA                VARCHAR2(20);
  V_DESCUPD                 VARCHAR2(500);

  V_NMFILIAL                VARCHAR2(100);
  V_IDDESPPREV              VARCHAR2(100);
  V_CDDESPPREV              VARCHAR2(100);
  V_NMDESPPREV              VARCHAR2(100);
  V_CDPRODUTO               VARCHAR2(100);
  V_CDARVPROD               VARCHAR2(100);
  V_NMPRODUTO               VARCHAR2(100);
  V_UNIDADE                 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 = TO_CHAR(P_CDOPERADOR); 
     EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
          P_CDOPERADOR := 'VIA BD';
          P_NMOPERADOR := 'VIA BD';
     END; 
  END;
BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';
   V_CDFILLOGOPER := '';
   V_NMTABELA     := 'PERCDETPRODFILGOP';

   V_DSSERVERRDM := 'gop21000_percentual_por_item_operacional';
   V_DESCUPD      := 'Percentual por Item Operacional' || chr(10) || '-> Unidade ';

   IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
      V_UNIDADE := 'Unidade: Padrão' || chr(10);
   ELSE
      SELECT NMFILIAL
        INTO V_NMFILIAL
        FROM FILIAL
       WHERE CDFILIAL = :NEW.CDFILIAL;
      V_UNIDADE := 'Unidade: '|| :NEW.CDFILIAL || ' - ' || V_NMFILIAL || chr(10);
   END IF;

   SELECT PDG.IDDESPPREV, PR.CDDESPPREV, D.NMDESPPREV,
          PR.CDPRODUTO,P.CDARVPROD, P.NMPRODUTO
     INTO V_IDDESPPREV, V_CDDESPPREV, V_NMDESPPREV, V_CDPRODUTO, V_CDARVPROD, V_NMPRODUTO
     FROM DESPPREV D JOIN PRODDESPPREV PR ON D.CDDESPPREV = PR.CDDESPPREV
                     JOIN PRODUTO P ON PR.CDPRODUTO = P.CDPRODUTO
                     LEFT JOIN PERCITDETALFILGOP PDG ON PDG.NRPERCITDETALFILGOP = :NEW.NRPERCITDETALFILGOP
                                                    AND PDG.CDDESPPREV = D.CDDESPPREV
                                                    AND PDG.CDFILIAL = :NEW.CDFILIAL
    WHERE D.CDDESPPREV = PR.CDDESPPREV
      AND PR.CDPRODUTO = :NEW.CDPRODUTO;

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


   IF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.NRPERCDETPRODFILGOP);
      V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      IF NVL(:OLD.VRPERCENTUAL, 0) <> NVL(:NEW.VRPERCENTUAL, 0)  THEN
         IF V_IDDESPPREV = 'MATRIZ' THEN
            V_DESCUPD := V_DESCUPD || '-> Despesas da Matriz -> Detalhamento -> Produto';

         ELSIF V_IDDESPPREV = 'DIVERSA' THEN
            V_DESCUPD := V_DESCUPD || '-> Despesas Diversas -> Detalhamento -> Produto';
         ELSIF V_IDDESPPREV = 'LANCENTRADA' THEN
            V_DESCUPD := V_DESCUPD || '-> Despesas Lanc. Entrada -> Detalhamento -> Produto';
         END IF;

         IF V_IDDESPPREV IS NOT NULL THEN
            V_DESC := chr(10) || chr(10) || V_UNIDADE || 'Despesa: ' || V_CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) ||
                      'Produto: ' || V_CDARVPROD || ' - ' || V_NMPRODUTO || chr(10) ||
                      'Percentual: ' || NVL(:NEW.VRPERCENTUAL, 0) || '%';
         END IF;
      END IF;
   ELSIF UPDATING THEN
      V_TIPO := '2';
      V_ITPESQ       := TO_CHAR(:NEW.NRPERCDETPRODFILGOP);
      V_CDOPERADOR   := :NEW.CDOPERULTATU;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      IF NVL(:OLD.VRPERCENTUAL, 0) <> NVL(:NEW.VRPERCENTUAL, 0)  THEN
         IF NVL(:OLD.VRPERCENTUAL, 0) <> NVL(:NEW.VRPERCENTUAL, 0)  THEN
            IF V_IDDESPPREV = 'MATRIZ' THEN
               V_DESCUPD := V_DESCUPD || '-> Despesas da Matriz -> Detalhamento -> Produto';

            ELSIF V_IDDESPPREV = 'DIVERSA' THEN
               V_DESCUPD := V_DESCUPD || '-> Despesas Diversas -> Detalhamento -> Produto';

            ELSIF V_IDDESPPREV = 'LANCENTRADA' THEN
               V_DESCUPD := V_DESCUPD || '-> Despesas Lanc. Entrada -> Detalhamento -> Produto';
            END IF;

            IF V_IDDESPPREV IS NOT NULL THEN
               V_DESC := chr(10) || chr(10) || V_UNIDADE || 'Despesa: ' || V_CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) ||
                                                 'Produto: ' || V_CDARVPROD || ' - ' || V_NMPRODUTO || chr(10) ||
                                                 'Percentual alterado de: ' || NVL(:OLD.VRPERCENTUAL, 0) || '% para: '|| NVL(:NEW.VRPERCENTUAL, 0) || '%';
            END IF;
         END IF;
      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
        ('PERCDETPRODFILGOP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_PERCITDETALFILGOP
AFTER UPDATE or INSERT
ON PERCITDETALFILGOP 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(4);
  V_ITPESQ                  VARCHAR2(40);
  V_NMOPERADOR              VARCHAR2(40);
  V_CDOPERADOR              VARCHAR2(12);
  V_NMTABELA                VARCHAR2(20);
  V_DESCUPD                 VARCHAR2(500);

  V_NMFILIAL                VARCHAR2(100);
  V_NMIMPOSTO               VARCHAR2(100);
  V_CDARVPROD               VARCHAR2(100);
  V_NMPRODUTO               VARCHAR2(100);
  V_DSDESPADMFAT            VARCHAR2(100);
  V_NMDESPPREV              VARCHAR2(100);
  V_NMINVEST                VARCHAR2(100);
  V_NRPERCITEMGOP           VARCHAR2(30);
  V_UNIDADE                 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 = TO_CHAR(P_CDOPERADOR); 
     EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
          P_CDOPERADOR := 'VIA BD';
          P_NMOPERADOR := 'VIA BD';
     END; 
  END;
BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';
   V_CDFILLOGOPER := '';
   V_NMTABELA     := 'PERCITDETALFILGOP';

   V_DSSERVERRDM := 'gop21000_percentual_por_item_operacional';
   V_DESCUPD := 'Percentual por Item Operacional' || chr(10) || '-> Unidade ->';

   SELECT NRSEQITEMORCA
     INTO V_NRPERCITEMGOP
     FROM PERCITFILGOP P
    WHERE NRPERCITFILGOP = :NEW.NRPERCITFILGOP;

   IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
      V_UNIDADE := 'Unidade: Padrão' || chr(10);
   ELSE
      SELECT NMFILIAL
        INTO V_NMFILIAL
        FROM FILIAL
       WHERE CDFILIAL = :NEW.CDFILIAL;
      V_UNIDADE := 'Unidade: '|| :NEW.CDFILIAL || ' - ' || V_NMFILIAL || chr(10);
   END IF;

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

   IF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.NRPERCITDETALFILGOP);
      V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      IF V_NRPERCITEMGOP = 1 THEN
         V_DESCUPD := V_DESCUPD || ' Imposto -> Detalhamento' || chr(10);
         SELECT NMIMPOSTO
           INTO V_NMIMPOSTO
           FROM IMPOSTO
          WHERE CDIMPOSTO = TO_NUMBER(:NEW.CDIMPOSTO);
         V_DESC := 'Imposto: ' || :NEW.CDIMPOSTO || ' - ' || V_NMIMPOSTO || chr(10) || 'Percentual: ' || :NEW.VRPERCENTUAL || '%';

      ELSIF V_NRPERCITEMGOP = 2 THEN
         V_DESCUPD := V_DESCUPD || ' Consumo -> Detalhamento' || chr(10);
         SELECT CDARVPROD, NMPRODUTO
           INTO V_CDARVPROD, V_NMPRODUTO
           FROM PRODUTO
          WHERE CDPRODUTO = :NEW.CDPRODUTO;
         V_DESC := 'Produto: ' || V_CDARVPROD || ' - ' || V_NMPRODUTO || chr(10) || 'Percentual: ' || :NEW.VRPERCENTUAL || '%';

      ELSIF V_NRPERCITEMGOP = 3 THEN
         V_DESCUPD := V_DESCUPD || ' Mão de Obra -> Detalhamento' || chr(10);
         SELECT DSDESPADMFAT
           INTO V_DSDESPADMFAT
           FROM DESPADMFATUR
          WHERE CDDESPADMFAT = TO_NUMBER(:NEW.CDDESPADMFAT);
         V_DESC := 'Descrição: ' || :NEW.CDDESPADMFAT || ' - ' || V_DSDESPADMFAT || chr(10) || 'Percentual: ' || :NEW.VRPERCENTUAL || '%';

      ELSIF V_NRPERCITEMGOP = 5 THEN
         V_DESCUPD := V_DESCUPD || ' Despesas da Matriz -> Detalhamento' || chr(10);
         SELECT NMDESPPREV
           INTO V_NMDESPPREV
           FROM DESPPREV
          WHERE CDDESPPREV = TO_NUMBER(:NEW.CDDESPPREV);
         V_DESC := 'Despesa: ' || :NEW.CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) || 'Percentual: ' || :NEW.VRPERCENTUAL || '%';

      ELSIF V_NRPERCITEMGOP = 6 THEN
         V_DESCUPD := V_DESCUPD || ' Despesas Diversas -> Detalhamento' || chr(10);
         SELECT NMDESPPREV
           INTO V_NMDESPPREV
           FROM DESPPREV
          WHERE CDDESPPREV = TO_NUMBER(:NEW.CDDESPPREV);
         V_DESC := 'Despesa: ' || :NEW.CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) || 'Percentual: ' || :NEW.VRPERCENTUAL || '%';

      ELSIF V_NRPERCITEMGOP = 7 THEN
         V_DESCUPD := V_DESCUPD || ' Despesas Lanc. Entrada -> Detalhamento' || chr(10);
         SELECT NMDESPPREV
           INTO V_NMDESPPREV
           FROM DESPPREV
          WHERE CDDESPPREV = TO_NUMBER(:NEW.CDDESPPREV);
         V_DESC := 'Despesa: ' || :NEW.CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) || 'Percentual: ' || :NEW.VRPERCENTUAL || '%';

      ELSIF V_NRPERCITEMGOP = 8 THEN
         V_DESCUPD := V_DESCUPD || ' Imposto a Recuperar -> Detalhamento' || chr(10);
         SELECT NMIMPOSTO
           INTO V_NMIMPOSTO
           FROM IMPOSTO
          WHERE CDIMPOSTO = TO_NUMBER(:NEW.CDIMPOSTO);
         V_DESC := 'Imposto: ' || :NEW.CDIMPOSTO || ' - ' || V_NMIMPOSTO || chr(10) || 'Percentual: ' || :NEW.VRPERCENTUAL || '%';

      ELSIF V_NRPERCITEMGOP = 9 THEN
         V_DESCUPD := V_DESCUPD || ' Impostos Sobre o Lucro -> Detalhamento' || chr(10);
         SELECT NMIMPOSTO
           INTO V_NMIMPOSTO
           FROM IMPOSTO
          WHERE CDIMPOSTO = TO_NUMBER(:NEW.CDIMPOSTO);
         V_DESC := 'Imposto: ' || :NEW.CDIMPOSTO || ' - ' || V_NMIMPOSTO || chr(10) || 'Percentual: ' || :NEW.VRPERCENTUAL || '%';

      ELSIF V_NRPERCITEMGOP = 10 THEN
         V_DESCUPD := V_DESCUPD || ' Investimentos -> Detalhamento' || chr(10);
         SELECT NMINVEST
           INTO V_NMINVEST
           FROM INVESTIMENTOS
          WHERE CDINVEST = TO_NUMBER(:NEW.CDINVEST);
         V_DESC := 'Investimento: ' || :NEW.CDINVEST || ' - ' || V_NMINVEST || chr(10) || 'Percentual: ' || :NEW.VRPERCENTUAL || '%';
      END IF;
   ELSIF UPDATING THEN
      V_TIPO := '2';
      V_ITPESQ       := TO_CHAR(:NEW.NRPERCITDETALFILGOP);
      V_CDOPERADOR   := :NEW.CDOPERULTATU;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      IF NVL(:OLD.VRPERCENTUAL, 0) <> NVL(:NEW.VRPERCENTUAL, 0)  THEN
         IF V_NRPERCITEMGOP = 1 THEN
            V_DESCUPD := V_DESCUPD || ' Imposto -> Detalhamento' || chr(10);
            SELECT NMIMPOSTO
              INTO V_NMIMPOSTO
              FROM IMPOSTO
             WHERE CDIMPOSTO = TO_NUMBER(:OLD.CDIMPOSTO);
            V_DESC := 'Imposto: ' || :NEW.CDIMPOSTO || ' - ' || V_NMIMPOSTO || chr(10) ||'Percentual alterado de: ' || :OLD.VRPERCENTUAL || '% para: ' || :NEW.VRPERCENTUAL || '%';

         ELSIF V_NRPERCITEMGOP = 2 THEN
            V_DESCUPD := V_DESCUPD || ' Consumo -> Detalhamento' || chr(10);
            SELECT CDARVPROD, NMPRODUTO
              INTO V_CDARVPROD, V_NMPRODUTO
              FROM PRODUTO
             WHERE CDPRODUTO = :OLD.CDPRODUTO;
            V_DESC := 'Produto: ' || V_CDARVPROD || ' - ' || V_NMPRODUTO || chr(10) ||'Percentual alterado de: ' || :OLD.VRPERCENTUAL || '% para: ' || :NEW.VRPERCENTUAL || '%';

         ELSIF V_NRPERCITEMGOP = 3 THEN
            V_DESCUPD := V_DESCUPD || ' Mão de Obra -> Detalhamento' || chr(10);
            SELECT DSDESPADMFAT
              INTO V_DSDESPADMFAT
              FROM DESPADMFATUR
             WHERE CDDESPADMFAT = TO_NUMBER(:OLD.CDDESPADMFAT);
            V_DESC := 'Descrição: ' || :NEW.CDDESPADMFAT || ' - ' || V_DSDESPADMFAT || chr(10) ||'Percentual alterado de: ' || :OLD.VRPERCENTUAL || '% para: ' || :NEW.VRPERCENTUAL || '%';

         ELSIF V_NRPERCITEMGOP = 5 THEN
            V_DESCUPD := V_DESCUPD || ' Despesas da Matriz -> Detalhamento' || chr(10);
            SELECT NMDESPPREV
              INTO V_NMDESPPREV
              FROM DESPPREV
             WHERE CDDESPPREV = TO_NUMBER(:OLD.CDDESPPREV);
            V_DESC := 'Despesa: ' || :NEW.CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) ||'Percentual alterado de: ' || :OLD.VRPERCENTUAL || '% para: ' || :NEW.VRPERCENTUAL || '%';

         ELSIF V_NRPERCITEMGOP = 6 THEN
            V_DESCUPD := V_DESCUPD || ' Despesas Diversas -> Detalhamento' || chr(10);
            SELECT NMDESPPREV
              INTO V_NMDESPPREV
              FROM DESPPREV
             WHERE CDDESPPREV = TO_NUMBER(:OLD.CDDESPPREV);
            V_DESC := 'Despesa: ' || :NEW.CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) ||'Percentual alterado de: ' || :OLD.VRPERCENTUAL || '% para: ' || :NEW.VRPERCENTUAL || '%';

         ELSIF V_NRPERCITEMGOP = 7 THEN
            V_DESCUPD := V_DESCUPD || ' Despesas Lanc. Entrada -> Detalhamento' || chr(10);
            SELECT NMDESPPREV
              INTO V_NMDESPPREV
              FROM DESPPREV
             WHERE CDDESPPREV = TO_NUMBER(:OLD.CDDESPPREV);
            V_DESC := 'Despesa: ' || :NEW.CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) ||'Percentual alterado de: ' || :OLD.VRPERCENTUAL || '% para: ' || :NEW.VRPERCENTUAL || '%';

         ELSIF V_NRPERCITEMGOP = 8 THEN
            V_DESCUPD := V_DESCUPD || ' Imposto a Recuperar -> Detalhamento' || chr(10);
            SELECT NMIMPOSTO
              INTO V_NMIMPOSTO
              FROM IMPOSTO
             WHERE CDIMPOSTO = TO_NUMBER(:OLD.CDIMPOSTO);
            V_DESC := 'Imposto: ' || :NEW.CDIMPOSTO || ' - ' || V_NMIMPOSTO || chr(10) ||'Percentual alterado de: ' || :OLD.VRPERCENTUAL || '% para: ' || :NEW.VRPERCENTUAL || '%';

         ELSIF V_NRPERCITEMGOP = 9 THEN
            V_DESCUPD := V_DESCUPD || ' Impostos Sobre o Lucro -> Detalhamento' || chr(10);
            SELECT NMIMPOSTO
              INTO V_NMIMPOSTO
              FROM IMPOSTO
             WHERE CDIMPOSTO = TO_NUMBER(:OLD.CDIMPOSTO);
            V_DESC := 'Imposto: ' || :NEW.CDIMPOSTO || ' - ' || V_NMIMPOSTO || chr(10) ||'Percentual alterado de: ' || :OLD.VRPERCENTUAL || '% para: ' || :NEW.VRPERCENTUAL || '%';

         ELSIF V_NRPERCITEMGOP = 10 THEN
            V_DESCUPD := V_DESCUPD || ' Investimentos -> Detalhamento' || chr(10);
            SELECT NMINVEST
              INTO V_NMINVEST
              FROM INVESTIMENTOS
             WHERE CDINVEST = TO_NUMBER(:OLD.CDINVEST);
            V_DESC := 'Investimento: ' || :NEW.CDINVEST || ' - ' || V_NMINVEST || chr(10) ||'Percentual alterado de: ' || :OLD.VRPERCENTUAL || '% para: ' || :NEW.VRPERCENTUAL || '%';
         END IF;
      END IF;
   END IF;

   IF NOT V_DESC IS NULL THEN
      V_DESC := V_DESCUPD || chr(10) || V_DESC;
      INSERT INTO LOGOPERAGES
         (NMTABELA,     DTOPERACAO,   NMRESPOPER,  IDTIPOOPER,   DSOPERACAO,  CDPESQITEM,
          DSRDMUSUOPER, DSENDUSUOPER, DSNMUSUOPER, DSMETUSUOPER, CDORESPOPER, CDFILLOGOPER)
      VALUES
         ('PERCITDETALFILGOP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_PERCITEMDETALGOP
AFTER UPDATE or INSERT
ON PERCITEMDETALGOP 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(4);
  V_ITPESQ                  VARCHAR2(40);
  V_NMOPERADOR              VARCHAR2(40);
  V_CDOPERADOR              VARCHAR2(12);
  V_NMTABELA                VARCHAR2(20);
  V_DESCUPD                 VARCHAR2(100);

  V_NMIMPOSTO               VARCHAR2(100);
  V_CDARVPROD               VARCHAR2(100);
  V_NMPRODUTO               VARCHAR2(100);
  V_DSDESPADMFAT            VARCHAR2(100);
  V_NMDESPPREV              VARCHAR2(100);
  V_NMTIPOOPER              VARCHAR2(100);
  V_NMINVEST                VARCHAR2(100);  

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';
   V_CDFILLOGOPER := '';
   V_NMTABELA     := 'PERCITEMDETALGOP';

   V_DESCUPD      := 'Percentual por Item Operacional -> Geral';

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

    V_DSSERVERRDM := 'gop21000_percentual_por_item_operacional';

   IF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.NRPERCITEMDETALGOP);
      V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      IF :NEW.NRPERCITEMGOP = 1 THEN
         V_DESCUPD := V_DESCUPD || ' -> Imposto -> Detalhamento' || chr(10) || chr(10);
         SELECT NMIMPOSTO
           INTO V_NMIMPOSTO
           FROM IMPOSTO
          WHERE CDIMPOSTO = TO_NUMBER(:NEW.CDIMPOSTO);
         V_DESC := 'Imposto: ' || :NEW.CDIMPOSTO || ' - ' || V_NMIMPOSTO || chr(10) || 'Percentual (%): ' || :NEW.VRPERCENTUAL;

      ELSIF :NEW.NRPERCITEMGOP = 2 THEN
         V_DESCUPD := V_DESCUPD || ' -> Consumo -> Detalhamento' || chr(10) || chr(10);
         SELECT CDARVPROD, NMPRODUTO
           INTO V_CDARVPROD, V_NMPRODUTO
           FROM PRODUTO
          WHERE CDPRODUTO = :NEW.CDPRODUTO;
         V_DESC := 'Produto: ' || V_CDARVPROD || ' - ' || V_NMPRODUTO || chr(10) || 'Percentual (%): ' || :NEW.VRPERCENTUAL;

      ELSIF :NEW.NRPERCITEMGOP = 3 THEN
         V_DESCUPD := V_DESCUPD || ' -> Mão de Obra -> Detalhamento' || chr(10) || chr(10);
         SELECT DSDESPADMFAT
           INTO V_DSDESPADMFAT
           FROM DESPADMFATUR
          WHERE CDDESPADMFAT = TO_NUMBER(:NEW.CDDESPADMFAT);
         V_DESC := 'Descrição: ' || :NEW.CDDESPADMFAT || ' - ' || V_DSDESPADMFAT || chr(10) || 'Percentual (%): ' || :NEW.VRPERCENTUAL;

      ELSIF :NEW.NRPERCITEMGOP = 5 THEN
         V_DESCUPD := V_DESCUPD || ' -> Despesas da Matriz -> Detalhamento' || chr(10) || chr(10);
         SELECT NMDESPPREV
           INTO V_NMDESPPREV
           FROM DESPPREV
          WHERE CDDESPPREV = TO_NUMBER(:NEW.CDDESPPREV);
         V_DESC := 'Despesa: ' || :NEW.CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) || 'Percentual (%): ' || :NEW.VRPERCENTUAL;

      ELSIF :NEW.NRPERCITEMGOP = 6 THEN
         V_DESCUPD := V_DESCUPD || ' -> Despesas Diversas -> Detalhamento' || chr(10) || chr(10);
         SELECT NMDESPPREV
           INTO V_NMDESPPREV
           FROM DESPPREV
          WHERE CDDESPPREV = TO_NUMBER(:NEW.CDDESPPREV);
         V_DESC := 'Despesa: ' || :NEW.CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) || 'Percentual (%): ' || :NEW.VRPERCENTUAL;

      ELSIF :NEW.NRPERCITEMGOP = 7 THEN
         V_DESCUPD := V_DESCUPD || ' -> Despesas Lanc. Entrada -> Detalhamento' || chr(10) || chr(10);
         IF :NEW.CDDESPPREV IS NOT NULL THEN
            SELECT NMDESPPREV
              INTO V_NMDESPPREV
              FROM DESPPREV
             WHERE CDDESPPREV = TO_NUMBER(:NEW.CDDESPPREV);
            V_DESC := 'Despesa: ' || :NEW.CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) || 'Percentual (%): ' || :NEW.VRPERCENTUAL;
         ELSIF :NEW.CDTIPOOPER IS NOT NULL THEN
            SELECT NMTIPOOPER
              INTO V_NMTIPOOPER
              FROM TIPOOPERAC
             WHERE CDTIPOOPER = TO_NUMBER(:NEW.CDTIPOOPER)
               AND IDENTRSAIDOP = :NEW.IDENTRSAIDOP;
            V_DESC := 'Tipo de Operação: ' || :NEW.CDTIPOOPER || ' - ' || V_NMTIPOOPER || chr(10) || 'Percentual (%): ' || :NEW.VRPERCENTUAL;
         END IF;
      ELSIF :NEW.NRPERCITEMGOP = 8 THEN
         V_DESCUPD := V_DESCUPD || ' -> Imposto a Recuperar -> Detalhamento' || chr(10) || chr(10);
         SELECT NMIMPOSTO
           INTO V_NMIMPOSTO
           FROM IMPOSTO
          WHERE CDIMPOSTO = TO_NUMBER(:NEW.CDIMPOSTO);
         V_DESC := 'Imposto: ' || :NEW.CDIMPOSTO || ' - ' || V_NMIMPOSTO || chr(10) || 'Percentual (%): ' || :NEW.VRPERCENTUAL;
      ELSIF :NEW.NRPERCITEMGOP = 9 THEN
         V_DESCUPD := V_DESCUPD || ' -> Impostos Sobre o Lucro -> Detalhamento' || chr(10) || chr(10);
         SELECT NMIMPOSTO
           INTO V_NMIMPOSTO
           FROM IMPOSTO
          WHERE CDIMPOSTO = TO_NUMBER(:NEW.CDIMPOSTO);
         V_DESC := 'Imposto: ' || :NEW.CDIMPOSTO || ' - ' || V_NMIMPOSTO || chr(10) || 'Percentual (%): ' || :NEW.VRPERCENTUAL;
      ELSIF :NEW.NRPERCITEMGOP = 10 THEN
         V_DESCUPD := V_DESCUPD || ' -> Investimentos -> Detalhamento' || chr(10) || chr(10);
         SELECT NMINVEST
           INTO V_NMINVEST
           FROM INVESTIMENTOS
          WHERE CDINVEST = TO_NUMBER(:NEW.CDINVEST);
         V_DESC := 'Investimento: ' || :NEW.CDINVEST || ' - ' || V_NMINVEST || chr(10) || 'Percentual (%): ' || :NEW.VRPERCENTUAL;
      END IF;
   ELSIF UPDATING THEN
      V_TIPO := '2';
      V_ITPESQ       := TO_CHAR(:NEW.NRPERCITEMDETALGOP);
      V_CDOPERADOR   := :NEW.CDOPERULTATU;
      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      IF NVL(:OLD.VRPERCENTUAL, 0) <> NVL(:NEW.VRPERCENTUAL, 0)  THEN
         IF :NEW.NRPERCITEMGOP = 1 THEN
            V_DESCUPD := V_DESCUPD || ' -> Imposto -> Detalhamento' || chr(10) || chr(10);
            SELECT NMIMPOSTO
              INTO V_NMIMPOSTO
              FROM IMPOSTO
             WHERE CDIMPOSTO = TO_NUMBER(:OLD.CDIMPOSTO);
            V_DESC := 'Imposto: ' || :NEW.CDIMPOSTO || ' - ' || V_NMIMPOSTO || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCENTUAL || ' para: ' || :NEW.VRPERCENTUAL;

         ELSIF :NEW.NRPERCITEMGOP = 2 THEN
            V_DESCUPD := V_DESCUPD || ' -> Consumo -> Detalhamento' || chr(10) || chr(10);
            SELECT CDARVPROD, NMPRODUTO
              INTO V_CDARVPROD, V_NMPRODUTO
              FROM PRODUTO
             WHERE CDPRODUTO = :OLD.CDPRODUTO;
            V_DESC := 'Consumo: ' || V_CDARVPROD || ' - ' || V_NMIMPOSTO || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCENTUAL || ' para: ' || :NEW.VRPERCENTUAL;

         ELSIF :NEW.NRPERCITEMGOP = 3 THEN
            V_DESCUPD := V_DESCUPD || ' -> Mão de Obra -> Detalhamento' || chr(10) || chr(10);
            SELECT DSDESPADMFAT
              INTO V_DSDESPADMFAT
              FROM DESPADMFATUR
             WHERE CDDESPADMFAT = TO_NUMBER(:OLD.CDDESPADMFAT);
            V_DESC := 'Mão de Obra: ' || :NEW.CDDESPADMFAT || ' - ' || V_DSDESPADMFAT || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCENTUAL || ' para: ' || :NEW.VRPERCENTUAL;

         ELSIF :NEW.NRPERCITEMGOP = 5 THEN
            V_DESCUPD := V_DESCUPD || ' -> Despesas da Matriz -> Detalhamento' || chr(10) || chr(10);
            SELECT NMDESPPREV
              INTO V_NMDESPPREV
              FROM DESPPREV
             WHERE CDDESPPREV = TO_NUMBER(:OLD.CDDESPPREV);
            V_DESC := 'Despesa: ' || :NEW.CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCENTUAL || ' para: ' || :NEW.VRPERCENTUAL;

         ELSIF :NEW.NRPERCITEMGOP = 6 THEN
            V_DESCUPD := V_DESCUPD || ' -> Despesas Diversas -> Detalhamento' || chr(10) || chr(10);
            SELECT NMDESPPREV
              INTO V_NMDESPPREV
              FROM DESPPREV
             WHERE CDDESPPREV = TO_NUMBER(:OLD.CDDESPPREV);
            V_DESC := 'Despesa: ' || :NEW.CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCENTUAL || ' para: ' || :NEW.VRPERCENTUAL;

         ELSIF :NEW.NRPERCITEMGOP = 7 THEN
            V_DESCUPD := V_DESCUPD || ' -> Despesas Lanc. Entrada -> Detalhamento' || chr(10) || chr(10);
            IF :NEW.CDDESPPREV IS NOT NULL THEN
               SELECT NMDESPPREV
                 INTO V_NMDESPPREV
                 FROM DESPPREV
                WHERE CDDESPPREV = TO_NUMBER(:NEW.CDDESPPREV);
               V_DESC := 'Despesa: ' || :NEW.CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) ||
                         'Percentual (%) alterado de: ' || :OLD.VRPERCENTUAL || ' para: ' || :NEW.VRPERCENTUAL;
            ELSIF :NEW.CDTIPOOPER IS NOT NULL THEN
               SELECT NMTIPOOPER
                 INTO V_NMTIPOOPER
                 FROM TIPOOPERAC
                WHERE CDTIPOOPER = TO_NUMBER(:NEW.CDTIPOOPER)
                  AND IDENTRSAIDOP = :NEW.IDENTRSAIDOP;
               V_DESC := 'Tipo de Operação: ' || :NEW.CDTIPOOPER || ' - ' || V_NMTIPOOPER || chr(10) ||
                         'Percentual (%) alterado de: '|| :OLD.VRPERCENTUAL || ' para: ' || :NEW.VRPERCENTUAL;
            END IF;
         ELSIF :NEW.NRPERCITEMGOP = 8 THEN
            V_DESCUPD := V_DESCUPD || ' -> Imposto a Recuperar -> Detalhamento' || chr(10) || chr(10);
            SELECT NMIMPOSTO
              INTO V_NMIMPOSTO
              FROM IMPOSTO
             WHERE CDIMPOSTO = TO_NUMBER(:OLD.CDIMPOSTO);
            V_DESC := 'Imposto: ' || :NEW.CDIMPOSTO || ' - ' || V_NMIMPOSTO || 'Percentual (%) alterado de: ' || :OLD.VRPERCENTUAL || ' para: ' || :NEW.VRPERCENTUAL;

         ELSIF :NEW.NRPERCITEMGOP = 9 THEN
            V_DESCUPD := V_DESCUPD || ' -> Impostos Sobre o Lucro -> Detalhamento' || chr(10) || chr(10);
            SELECT NMIMPOSTO
              INTO V_NMIMPOSTO
              FROM IMPOSTO
             WHERE CDIMPOSTO = TO_NUMBER(:OLD.CDIMPOSTO);
            V_DESC := 'Imposto' || :NEW.CDIMPOSTO || ' - ' || V_NMIMPOSTO || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCENTUAL || ' para: ' || :NEW.VRPERCENTUAL;

         ELSIF :NEW.NRPERCITEMGOP = 10 THEN
            V_DESCUPD := V_DESCUPD || ' -> Investimentos -> Detalhamento' || chr(10) || chr(10);
            SELECT NMINVEST
              INTO V_NMINVEST
              FROM INVESTIMENTOS
             WHERE CDINVEST = TO_NUMBER(:OLD.CDINVEST);
            V_DESC := 'Investimento:' || :NEW.CDINVEST || ' - ' || V_NMINVEST || chr(10) ||  'Percentual (%) alterado de: ' || :OLD.VRPERCENTUAL || ' para: ' || :NEW.VRPERCENTUAL;
         END IF;
      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
         ('PERCITEMDETALGOP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_PERCITEMGOP
AFTER UPDATE or INSERT
ON PERCITEMGOP 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(4);
  V_ITPESQ                  VARCHAR2(40);
  V_NMOPERADOR              VARCHAR2(40);
  V_CDOPERADOR              VARCHAR2(12);
  V_NMTABELA                VARCHAR2(20);
  V_DESCUPD                 VARCHAR2(100);

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';
   V_CDFILLOGOPER := '';
   V_NMTABELA     := 'PERCITEMGOP';

   V_DESCUPD      := 'Percentual por Item Operacional -> Geral -> ';
   V_DSSERVERRDM := 'gop21000_percentual_por_item_operacional';

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

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

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      IF NVL(:NEW.VRPERCITEMGOP, 0) <> NVL(:OLD.VRPERCITEMGOP, 0)  THEN
         IF :NEW.NRSEQITEMORCA = 1 THEN
            V_DESC := 'Imposto' || chr(10) || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCITEMGOP || ' para: ' || :NEW.VRPERCITEMGOP;

         ELSIF :NEW.NRSEQITEMORCA = 2 THEN
            V_DESC := 'Consumo' || chr(10) || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCITEMGOP || ' para: ' || :NEW.VRPERCITEMGOP;

         ELSIF :NEW.NRSEQITEMORCA = 3 THEN
            V_DESC := 'Mão de Obra' || chr(10) || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCITEMGOP || ' para: ' || :NEW.VRPERCITEMGOP;

         ELSIF :NEW.NRSEQITEMORCA = 5 THEN
            V_DESC := 'Despesas da Matriz' || chr(10) || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCITEMGOP || ' para: ' || :NEW.VRPERCITEMGOP;

         ELSIF :NEW.NRSEQITEMORCA = 6 THEN
            V_DESC := 'Despesas Diversas' || chr(10) || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCITEMGOP || ' para: ' || :NEW.VRPERCITEMGOP;

         ELSIF :NEW.NRSEQITEMORCA = 7 THEN
            V_DESC := 'Despesas Lanc. Entrada' || chr(10) || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCITEMGOP || ' para: ' || :NEW.VRPERCITEMGOP;

         ELSIF :NEW.NRSEQITEMORCA = 8 THEN
            V_DESC := 'Imposto a Recuperar' || chr(10) || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCITEMGOP || ' para: ' || :NEW.VRPERCITEMGOP;

         ELSIF :NEW.NRSEQITEMORCA = 9 THEN
            V_DESC := 'Impostos Sobre o Lucro' || chr(10) || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCITEMGOP || ' para: ' || :NEW.VRPERCITEMGOP;

         ELSIF :NEW.NRSEQITEMORCA = 10 THEN
            V_DESC := 'Investimentos' || chr(10) || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCITEMGOP || ' para: ' || :NEW.VRPERCITEMGOP;

         ELSIF :NEW.NRSEQITEMORCA = 11 THEN
            V_DESC := 'Depreciação' || chr(10) || chr(10) || 'Percentual (%) alterado de: ' || :OLD.VRPERCITEMGOP || ' para: ' || :NEW.VRPERCITEMGOP;

         END IF;
      END IF;
   ELSIF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.NRPERCITEMGOP);
      V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      IF NVL(:OLD.VRPERCITEMGOP, 0) <> NVL(:NEW.VRPERCITEMGOP, 0)  THEN
         IF :NEW.NRSEQITEMORCA = 1 THEN
            V_DESC := chr(10) || 'Imposto' || :NEW.VRPERCITEMGOP;
         ELSIF :NEW.NRSEQITEMORCA = 2 THEN
            V_DESC := chr(10) || 'Consumo' || :NEW.VRPERCITEMGOP;
         ELSIF :NEW.NRSEQITEMORCA = 3 THEN
            V_DESC := chr(10) || 'Mão de Obra' || :NEW.VRPERCITEMGOP;
         ELSIF :NEW.NRSEQITEMORCA = 5 THEN
            V_DESC := chr(10) || 'Despesas da Matriz' || :NEW.VRPERCITEMGOP;
         ELSIF :NEW.NRSEQITEMORCA = 6 THEN
            V_DESC := chr(10) || 'Despesas Diversas' || :NEW.VRPERCITEMGOP;
         ELSIF :NEW.NRSEQITEMORCA = 7 THEN
            V_DESC := chr(10) || 'Despesas Lanc. Entrada' || :NEW.VRPERCITEMGOP;
         ELSIF :NEW.NRSEQITEMORCA = 8 THEN
            V_DESC := chr(10) || 'Imposto a Recuperar' || :NEW.VRPERCITEMGOP;
         ELSIF :NEW.NRSEQITEMORCA = 9 THEN
            V_DESC := chr(10) || 'Impostos Sobre o Lucro' || :NEW.VRPERCITEMGOP;
         ELSIF :NEW.NRSEQITEMORCA = 10 THEN
            V_DESC := chr(10) || 'Investimentos' || :NEW.VRPERCITEMGOP;
         ELSIF :NEW.NRSEQITEMORCA = 11 THEN
            V_DESC := chr(10) || 'Depreciação' || :NEW.VRPERCITEMGOP;
         END IF;
      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
         ('PERCITEMGOP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_PERCITFILGOP
AFTER UPDATE or INSERT
ON PERCITFILGOP 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(4);
  V_ITPESQ          VARCHAR2(40);
  V_NMOPERADOR      VARCHAR2(40);
  V_CDOPERADOR      VARCHAR2(12);
  V_NMTABELA        VARCHAR2(20);
  V_DESCUPD         VARCHAR2(1000);
  V_NMFILIAL        VARCHAR2(30);
  V_UNIDADE         VARCHAR2(50);
  V_ITEM            VARCHAR2(25);

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';
   V_CDFILLOGOPER := '';
   V_NMTABELA     := 'PERCITFILGOP';

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

   V_DSSERVERRDM := 'gop21000_percentual_por_item_operacional';
   V_DESCUPD := 'Percentual por Item Operacional -> Unidade -> ';

   IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
      V_UNIDADE := 'Unidade: Padrão' || chr(10);
   ELSE
      SELECT NMFILIAL
        INTO V_NMFILIAL
        FROM FILIAL
       WHERE CDFILIAL = :NEW.CDFILIAL;
      V_UNIDADE := 'Unidade: '|| :NEW.CDFILIAL || ' - ' || V_NMFILIAL || chr(10);
   END IF;

   IF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.CDFILIAL) || '/' || TO_CHAR(:NEW.NRSEQITEMORCA);
      V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;
      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      V_DESCUPD := 'Unidade: ' || :NEW.CDFILIAL || '-' || V_NMFILIAL;

      IF NVL(:OLD.VRPERCITEMGOP, 0) <> NVL(:NEW.VRPERCITEMGOP, 0)  THEN
         V_ITEM := CASE TO_CHAR(:NEW.NRSEQITEMORCA) WHEN 1 THEN 'Imposto'
                                                    WHEN 2 THEN 'Consumo'
                                                    WHEN 3 THEN 'Mão de Obra'
                                                    WHEN 5 THEN 'Despesas da Matriz'
                                                    WHEN 6 THEN 'Despesas Diversas'
                                                    WHEN 7 THEN 'Despesas Lanc. Entrada'
                                                    WHEN 8 THEN 'Impostos a Recuperar'
                                                    WHEN 9 THEN 'Impostos sob o Lucro'
                                                    WHEN 10 THEN 'Investimentos'
                                                    WHEN 11 THEN 'Depreciação'
                                                    ELSE TO_CHAR(:NEW.NRSEQITEMORCA)
                   END;
         IF :NEW.NRSEQITEMORCA IS NOT NULL THEN
            V_DESCUPD := V_DESCUPD || V_ITEM || chr(10) || chr(10);
            V_DESC := V_UNIDADE || chr(10) || 'Percentual: ' || NVL(:NEW.VRPERCITEMGOP, 0);
         END IF;
      END IF;
   ELSIF UPDATING THEN
      V_TIPO := '2';
      V_ITPESQ       := TO_CHAR(:NEW.CDFILIAL) || '/' || TO_CHAR(:NEW.NRSEQITEMORCA);
      V_CDOPERADOR   := :NEW.CDOPERULTATU;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      IF NVL(:NEW.VRPERCITEMGOP, 0) <> NVL(:OLD.VRPERCITEMGOP, 0)  THEN
         V_ITEM := CASE TO_CHAR(:NEW.NRSEQITEMORCA) WHEN 1 THEN 'Imposto'
                                                    WHEN 2 THEN 'Consumo'
                                                    WHEN 3 THEN 'Mão de Obra'
                                                    WHEN 5 THEN 'Despesas da Matriz'
                                                    WHEN 6 THEN 'Despesas Diversas'
                                                    WHEN 7 THEN 'Despesas Lanc. Entrada'
                                                    WHEN 8 THEN 'Impostos a Recuperar'
                                                    WHEN 9 THEN 'Impostos sob o Lucro'
                                                    WHEN 10 THEN 'Investimentos'
                                                    WHEN 11 THEN 'Depreciação'
                                                    ELSE TO_CHAR(:NEW.NRSEQITEMORCA)
                   END;

         IF :NEW.NRSEQITEMORCA IS NOT NULL THEN
            V_DESCUPD := V_DESCUPD || V_ITEM || chr(10) || chr(10);
            V_DESC := V_UNIDADE || 'Percentual (%) alterado de: ' || NVL(:OLD.VRPERCITEMGOP, 0) || ' para: ' || NVL(:NEW.VRPERCITEMGOP, 0);
         END IF;
      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
        ('PERCITFILGOP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_PRODUTOROP
AFTER INSERT
ON PRODUTOROP 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(500);
  V_DESCUPD             VARCHAR2(200);
  V_CDFILLOGOPER        VARCHAR2(4);
  V_ITPESQ              VARCHAR2(40);
  V_NMOPERADOR          VARCHAR2(40);
  V_CDOPERADOR          VARCHAR2(12);
  V_CDFILIAL            VARCHAR2(20);
  V_NMFILIAL            VARCHAR2(50);
  V_NMPRODUTO           VARCHAR2(100);
  V_CDARVPROD           VARCHAR2(100); 

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_DESCUPD      := '';
   V_CDOPERADOR   := :NEW.CDOPERULTATU;
   V_CDFILLOGOPER := '';

   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   V_DSSERVERRDM := 'gop00100_parametros_resultado_operacional';
   V_DESCUPD := 'Parâmetros pra Resultado Operacional' || chr(10) || '-> ';

   IF INSERTING THEN
      V_TIPO   := '1';
      V_ITPESQ := TO_CHAR(:NEW.CDFILIAL) || '|' || TO_CHAR(:NEW.CDPRODUTO);
   
      IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
         V_DESCUPD   := 'Unidade: Padrão' || chr(10);
      ELSE
         SELECT CDFILIAL, NMFILIAL
           INTO V_CDFILIAL, V_NMFILIAL
           FROM FILIAL
          WHERE CDFILIAL = :NEW.CDFILIAL;
         V_DESCUPD   := 'Unidade: '|| V_CDFILIAL || ' - ' || V_NMFILIAL || chr(10);
      END IF;

      SELECT CDARVPROD, NMPRODUTO
        INTO V_CDARVPROD, V_NMPRODUTO
        FROM PRODUTO
       WHERE CDPRODUTO = :NEW.CDPRODUTO;

      IF :NEW.IDTPPRODUTOROP = 'DE' THEN
         V_DESC := V_DESC || 'Despesa -> Lançamentos de Entrada -> Despesa -> Nível Produto';
      ELSIF :NEW.IDTPPRODUTOROP = 'EX' THEN
         V_DESC := V_DESC || 'Despesa -> Lançamentos de Entrada -> Despesa -> Exceções';
      ELSIF :NEW.IDTPPRODUTOROP = 'MO' THEN
        V_DESC := V_DESC || 'Despesa -> Lançamentos de Entrada ->  Mão de Obra -> Nível Produto';
      ELSIF :NEW.IDTPPRODUTOROP = 'MX' THEN
        V_DESC := V_DESC || 'Despesa -> Lançamentos de Entrada ->  Mão de Obra -> Exceções';
      END IF;

      IF :NEW.IDTPPRODUTOROP IS NOT NULL THEN
         V_DESC := 'Produto: ' ||  V_CDARVPROD || ' - ' || V_NMPRODUTO;
      END IF;
   END IF;

   IF NOT V_DESC IS NULL THEN
      V_DESC := V_DESCUPD || chr(10) || chr(10) || V_DESC;
      INSERT INTO LOGOPERAGES
        (NMTABELA,     DTOPERACAO,   NMRESPOPER,  IDTIPOOPER,   DSOPERACAO,  CDPESQITEM,
         DSRDMUSUOPER, DSENDUSUOPER, DSNMUSUOPER, DSMETUSUOPER, CDORESPOPER, CDFILLOGOPER)
      VALUES
        ('PRODUTOROP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_SERVICOROP
AFTER INSERT
ON SERVICOROP 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_DESCUPD             VARCHAR2(200);
  V_DESC                VARCHAR2(500);
  V_CDFILLOGOPER        VARCHAR2(4);
  V_ITPESQ              VARCHAR2(40);
  V_NMOPERADOR          VARCHAR2(40);
  V_CDOPERADOR          VARCHAR2(12);
  V_CDFILIAL            VARCHAR2(20);
  V_NMFILIAL            VARCHAR2(50);
  V_NMSERVICO           VARCHAR2(100);
  V_UNIDADE             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 = TO_CHAR(P_CDOPERADOR); 
     EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
          P_CDOPERADOR := 'VIA BD';
          P_NMOPERADOR := 'VIA BD';
     END; 
  END;
BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := :NEW.CDOPERULTATU;
   V_CDFILLOGOPER := '';

   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   V_DSSERVERRDM := 'ger80200_parametros_resultado_operacional';

   IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
      V_UNIDADE := 'Unidade: Padrão' || chr(10);
   ELSE
      SELECT CDFILIAL, NMFILIAL
        INTO V_CDFILIAL, V_NMFILIAL
        FROM FILIAL
       WHERE CDFILIAL = :NEW.CDFILIAL;
      V_UNIDADE := 'Unidade: '|| V_CDFILIAL || ' - ' || V_NMFILIAL || chr(10);
   END IF;
   SELECT NMSERVICO
     INTO V_NMSERVICO
     FROM SERVICO
    WHERE CDFILIAL = :NEW.CDFILIAL
      AND CDSERVFILI = :NEW.CDSERVFILI;

   V_DESCUPD := 'Parametros para Resultado Operacional' || chr(10);

   IF INSERTING THEN
      V_TIPO   := '1';
      V_ITPESQ := TO_CHAR(:NEW.CDFILIAL) || '|' || TO_CHAR(:NEW.CDSERVFILI);

      IF :NEW.IDTPSERVICOROP = 'R' THEN
         V_DESCUPD := V_DESCUPD || 'Apuração Consumo -> Serviço';
      ELSIF :NEW.IDTPSERVICOROP = 'E' THEN
         V_DESCUPD := V_DESCUPD ||'Faturamento -> Medição Efetivo -> Serviço';
      END IF;

      IF :NEW.IDTPSERVICOROP IS NOT NULL THEN
         V_DESC := chr(10) || chr(10)|| V_UNIDADE || :NEW.CDSERVFILI || '-' || V_NMSERVICO;
      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
         ('SERVICOROP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_TAXAADMFILGES
AFTER UPDATE OR INSERT
ON TAXAADMFILGES 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(1000);
  V_CDFILLOGOPER VARCHAR2(4);
  V_ITPESQ       VARCHAR2(40);
  V_NMOPERADOR   VARCHAR2(40);
  V_CDOPERADOR   VARCHAR2(12);

  V_DESCUPD      VARCHAR2(1000);
  V_NMFILIAL     VARCHAR2(30);

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';
   V_CDFILLOGOPER := '';

   V_DESCUPD := 'Taxa Administrativa ' || chr(10) || '-> Taxa Administrativa por Unidade' || chr(10);

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

   V_DSSERVERRDM := 'gop00800_taxa_administrativa';

   SELECT NMFILIAL
     INTO V_NMFILIAL
     FROM FILIAL
    WHERE CDFILIAL = :NEW.CDFILIAL;

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

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      V_DESCUPD := V_DESCUPD || chr(10) || 'Unidade: ' || :NEW.CDFILIAL || ' - ' || V_NMFILIAL;
      V_DESCUPD := V_DESCUPD || chr(10) || 'Ano: ' || :NEW.CDANO;

      IF NVL(:OLD.VRMES01, 0) <> NVL(:NEW.VRMES01, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Janeiro alterado de: ' || :OLD.VRMES01 || ' para: ' || :NEW.VRMES01;
      END IF;
      IF NVL(:OLD.VRMES02, 0) <> NVL(:NEW.VRMES02, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Fevereiro alterado de: ' || :OLD.VRMES02 || ' para: ' || :NEW.VRMES02;
      END IF;
      IF NVL(:OLD.VRMES03, 0) <> NVL(:NEW.VRMES03, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Março alterado de: ' || :OLD.VRMES03 || ' para: ' || :NEW.VRMES03;
      END IF;
      IF NVL(:OLD.VRMES04, 0) <> NVL(:NEW.VRMES04, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Abril alterado de: ' || :OLD.VRMES04 || ' para: ' || :NEW.VRMES04;
      END IF;
      IF NVL(:OLD.VRMES05, 0) <> NVL(:NEW.VRMES05, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Maio alterado de: ' || :OLD.VRMES05 || ' para: ' || :NEW.VRMES05;
      END IF;
      IF NVL(:OLD.VRMES06, 0) <> NVL(:NEW.VRMES06, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Junho alterado de: ' || :OLD.VRMES06 || ' para: ' || :NEW.VRMES06;
      END IF;
      IF NVL(:OLD.VRMES07, 0) <> NVL(:NEW.VRMES07, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Julho alterado de: ' || :OLD.VRMES07 || ' para: ' || :NEW.VRMES07;
      END IF;
      IF NVL(:OLD.VRMES08, 0) <> NVL(:NEW.VRMES08, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Agosto alterado de: ' || :OLD.VRMES08 || ' para: ' || :NEW.VRMES08;
      END IF;
      IF NVL(:OLD.VRMES09, 0) <> NVL(:NEW.VRMES09, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Setembro alterado de: ' || :OLD.VRMES09 || ' para: ' || :NEW.VRMES09;
      END IF;
      IF NVL(:OLD.VRMES10, 0) <> NVL(:NEW.VRMES10, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Outubro alterado de: ' || :OLD.VRMES10 || ' para: ' || :NEW.VRMES10;
      END IF;
      IF NVL(:OLD.VRMES11, 0) <> NVL(:NEW.VRMES11, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Novembro alterado de: ' || :OLD.VRMES11 || ' para: ' || :NEW.VRMES11;
      END IF;
      IF NVL(:OLD.VRMES12, 0) <> NVL(:NEW.VRMES12, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Dezembro alterado de: ' || :OLD.VRMES12 || ' para: ' || :NEW.VRMES12;
      END IF;
   ELSIF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.CDFILIAL);
      V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      V_DESCUPD := V_DESCUPD || chr(10) || 'Unidade: ' || :NEW.CDFILIAL || ' - ' || V_NMFILIAL;
      V_DESCUPD := V_DESCUPD || chr(10) || 'Ano: ' || :NEW.CDANO;

      IF NVL(:NEW.VRMES01, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Janeiro: ' || :NEW.VRMES01;
      END IF;
      IF NVL(:NEW.VRMES02, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Fevereiro: ' || :NEW.VRMES02;
      END IF;
      IF NVL(:NEW.VRMES03, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Março: ' || :NEW.VRMES03;
      END IF;
      IF NVL(:NEW.VRMES04, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Abril: ' || :NEW.VRMES04;
      END IF;
      IF NVL(:NEW.VRMES05, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Maio: ' || :NEW.VRMES05;
      END IF;
      IF NVL(:NEW.VRMES06, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Junho: ' || :NEW.VRMES06;
      END IF;
      IF NVL(:NEW.VRMES07, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Julho: ' || :NEW.VRMES07;
      END IF;
      IF NVL(:NEW.VRMES08, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Agosto: ' || :NEW.VRMES08;
      END IF;
      IF NVL(:NEW.VRMES09, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Setembro: ' || :NEW.VRMES09;
      END IF;
      IF NVL(:NEW.VRMES10, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Outubro: ' || :NEW.VRMES10;
      END IF;
      IF NVL(:NEW.VRMES11, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Novembro: ' || :NEW.VRMES11;
      END IF;
      IF NVL(:NEW.VRMES12, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Dezembro: ' || :NEW.VRMES12;
      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
            ('TAXAADMFILGES', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_TAXAADMREGGES
AFTER UPDATE OR INSERT
ON TAXAADMREGGES 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(1000);
  V_CDFILLOGOPER VARCHAR2(4);
  V_ITPESQ       VARCHAR2(40);
  V_NMOPERADOR   VARCHAR2(40);
  V_CDOPERADOR   VARCHAR2(12);
  V_DESCUPD      VARCHAR2(1000);
  V_NMREGIONAL   VARCHAR2(30); 

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := '';

   V_CDFILLOGOPER := '';
   V_DESCUPD := 'Taxa Administrativa' || chr(10) || '-> Taxa Administrativa por Regional' || chr(10);

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

    V_DSSERVERRDM := 'gop00800_taxa_administrativa';

   SELECT NMAREAGERE
     INTO V_NMREGIONAL
     FROM AREAGERE
    WHERE CDAREAGERE = :NEW.CDAREAGERE;

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

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      V_DESCUPD := V_DESCUPD || chr(10) || 'Regional: ' || :NEW.CDAREAGERE || ' - ' || V_NMREGIONAL;
      V_DESCUPD := V_DESCUPD || chr(10) || 'Ano: ' || :NEW.CDANO;

      IF NVL(:OLD.VRMES01, 0) <> NVL(:NEW.VRMES01, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Janeiro alterado de: ' || :OLD.VRMES01 || ' para: ' || :NEW.VRMES01;
      END IF;
      IF NVL(:OLD.VRMES02, 0) <> NVL(:NEW.VRMES02, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Fevereiro alterado de: ' || :OLD.VRMES02 || ' para: ' || :NEW.VRMES02;
      END IF;
      IF NVL(:OLD.VRMES03, 0) <> NVL(:NEW.VRMES03, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Março alterado de: ' || :OLD.VRMES03 || ' para: ' || :NEW.VRMES03;
      END IF;
      IF NVL(:OLD.VRMES04, 0) <> NVL(:NEW.VRMES04, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Abril alterado de: ' || :OLD.VRMES04 || ' para: ' || :NEW.VRMES04;
      END IF;
      IF NVL(:OLD.VRMES05, 0) <> NVL(:NEW.VRMES05, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Maio alterado de: ' || :OLD.VRMES05 || ' para: ' || :NEW.VRMES05;
      END IF;
      IF NVL(:OLD.VRMES06, 0) <> NVL(:NEW.VRMES06, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Junho alterado de: ' || :OLD.VRMES06 || ' para: ' || :NEW.VRMES06;
      END IF;
      IF NVL(:OLD.VRMES07, 0) <> NVL(:NEW.VRMES07, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Julho alterado de: ' || :OLD.VRMES07 || ' para: ' || :NEW.VRMES07;
      END IF;
      IF NVL(:OLD.VRMES08, 0) <> NVL(:NEW.VRMES08, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Agosto alterado de: ' || :OLD.VRMES08 || ' para: ' || :NEW.VRMES08;
      END IF;
      IF NVL(:OLD.VRMES09, 0) <> NVL(:NEW.VRMES09, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Setembro alterado de: ' || :OLD.VRMES09 || ' para: ' || :NEW.VRMES09;
      END IF;
      IF NVL(:OLD.VRMES10, 0) <> NVL(:NEW.VRMES10, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Outubro alterado de: ' || :OLD.VRMES10 || ' para: ' || :NEW.VRMES10;
      END IF;
      IF NVL(:OLD.VRMES11, 0) <> NVL(:NEW.VRMES11, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Novembro alterado de: ' || :OLD.VRMES11 || ' para: ' || :NEW.VRMES11;
      END IF;
      IF NVL(:OLD.VRMES12, 0) <> NVL(:NEW.VRMES12, 0) THEN
         V_DESC := V_DESC || chr(10) || 'Dezembro alterado de: ' || :OLD.VRMES12 || ' para: ' || :NEW.VRMES12;
      END IF;
   ELSIF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.CDAREAGERE);
      V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;

      NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

      V_DESCUPD := V_DESCUPD || chr(10) || 'Regional: ' || :NEW.CDAREAGERE || ' - ' || V_NMREGIONAL;
      V_DESCUPD := V_DESCUPD || chr(10) || 'Ano: ' || :NEW.CDANO;

      IF NVL(:NEW.VRMES01, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Janeiro: ' || :NEW.VRMES01;
      END IF;
      IF NVL(:NEW.VRMES02, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Fevereiro: ' || :NEW.VRMES02;
      END IF;
      IF NVL(:NEW.VRMES03, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Março: ' || :NEW.VRMES03;
      END IF;
      IF NVL(:NEW.VRMES04, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Abril: ' || :NEW.VRMES04;
      END IF;
      IF NVL(:NEW.VRMES05, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Maio: ' || :NEW.VRMES05;
      END IF;
      IF NVL(:NEW.VRMES06, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Junho: ' || :NEW.VRMES06;
      END IF;
      IF NVL(:NEW.VRMES07, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Julho: ' || :NEW.VRMES07;
      END IF;
      IF NVL(:NEW.VRMES08, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Agosto: ' || :NEW.VRMES08;
      END IF;
      IF NVL(:NEW.VRMES09, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Setembro: ' || :NEW.VRMES09;
      END IF;
      IF NVL(:NEW.VRMES10, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Outubro: ' || :NEW.VRMES10;
      END IF;
      IF NVL(:NEW.VRMES11, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Novembro: ' || :NEW.VRMES11;
      END IF;
      IF NVL(:NEW.VRMES12, 0) <> 0 THEN
         V_DESC := V_DESC || chr(10) || 'Dezembro: ' || :NEW.VRMES12;
      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
          ('TAXAADMREGGES', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_TIPOAJUSPAGROP
AFTER INSERT
ON TIPOAJUSPAGROP 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_DESCUPD             VARCHAR2(200);
  V_DESC                VARCHAR2(500);
  V_CDFILLOGOPER        VARCHAR2(4);
  V_ITPESQ              VARCHAR2(40);
  V_NMOPERADOR          VARCHAR2(40);
  V_CDOPERADOR          VARCHAR2(12);
  V_CDFILIAL            VARCHAR2(20);
  V_NMFILIAL            VARCHAR2(50);
  V_DSAJUCTPAG          VARCHAR2(100);

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := :NEW.CDOPERULTATU;
   V_CDFILLOGOPER := '';

   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   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) || '-> Despesas -> Lançamento de Ajuste -> Contas a Pagar' || chr(10) || chr(10);

   IF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.CDFILIAL) || '|' || TO_CHAR(:NEW.CDAJUCTPAG);

      IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
         V_DESC   := 'Unidade: Padrão';
      ELSE
         SELECT CDFILIAL, NMFILIAL
           INTO V_CDFILIAL, V_NMFILIAL
           FROM FILIAL
          WHERE CDFILIAL = :NEW.CDFILIAL;
         V_DESC   := 'Unidade: '|| V_CDFILIAL || ' - ' || V_NMFILIAL;
      END IF;

      SELECT DSAJUCTPAG
        INTO V_DSAJUCTPAG
        FROM TIPOAJPAGAR
       WHERE CDAJUCTPAG = :NEW.CDAJUCTPAG;

      V_DESC := V_DESCUPD || V_DESC || chr(10) || 'Ajuste de Conta a Pagar: ' || :NEW.CDAJUCTPAG || ' - ' || V_DSAJUCTPAG;

      INSERT INTO LOGOPERAGES
        (NMTABELA,     DTOPERACAO,   NMRESPOPER,  IDTIPOOPER,   DSOPERACAO,  CDPESQITEM,
         DSRDMUSUOPER, DSENDUSUOPER, DSNMUSUOPER, DSMETUSUOPER, CDORESPOPER, CDFILLOGOPER)
      VALUES
        ('TIPOAJUSPAGROP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_TIPOAJUSRECROP
AFTER INSERT
ON TIPOAJUSRECROP 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_DESCUPD             VARCHAR2(200);
  V_DESC                VARCHAR2(500);
  V_CDFILLOGOPER        VARCHAR2(4);
  V_ITPESQ              VARCHAR2(40);
  V_NMOPERADOR          VARCHAR2(40);
  V_CDOPERADOR          VARCHAR2(12);
  V_CDFILIAL            VARCHAR2(20);
  V_NMFILIAL            VARCHAR2(50);
  V_DSAJUCTREC          VARCHAR2(100); 

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := :NEW.CDOPERULTATU;
   V_CDFILLOGOPER := '';

   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   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) || '-> Despesas -> Lançamento de Ajuste -> Contas a Receber' || chr(10) || chr(10);

   IF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.CDFILIAL) || '|' || TO_CHAR(:NEW.CDAJUCTREC);

      IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
         V_DESC   := 'Unidade: Padrão' || chr(10);
      ELSE
         SELECT CDFILIAL, NMFILIAL
           INTO V_CDFILIAL, V_NMFILIAL
           FROM FILIAL
          WHERE CDFILIAL = :NEW.CDFILIAL;
         V_DESC   := 'Unidade: '|| V_CDFILIAL || ' - ' || V_NMFILIAL || chr(10);
      END IF;

      SELECT DSAJUCTREC
        INTO V_DSAJUCTREC
        FROM TIPOAJRECEBER
       WHERE CDAJUCTREC = :NEW.CDAJUCTREC;

      V_DESC := V_DESCUPD || V_DESC || 'Ajuste de Conta a Receber: ' || :NEW.CDAJUCTREC || ' - ' || V_DSAJUCTREC;

      INSERT INTO LOGOPERAGES
         (NMTABELA,     DTOPERACAO,   NMRESPOPER,  IDTIPOOPER,   DSOPERACAO,  CDPESQITEM,
          DSRDMUSUOPER, DSENDUSUOPER, DSNMUSUOPER, DSMETUSUOPER, CDORESPOPER, CDFILLOGOPER)
      VALUES
         ('TIPOAJUSRECROP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_TIPOCTPAGROP
AFTER INSERT
ON TIPOCTPAGROP 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(500);
  V_DESCUPD             VARCHAR2(200);
  V_CDFILLOGOPER        VARCHAR2(4);
  V_ITPESQ              VARCHAR2(40);
  V_NMOPERADOR          VARCHAR2(40);
  V_CDOPERADOR          VARCHAR2(12);
  V_NMFILIAL            VARCHAR2(50);
  V_DSTPCTPAGAR         VARCHAR2(100);
  V_UNIDADE             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 = TO_CHAR(P_CDOPERADOR); 
     EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
          P_CDOPERADOR := 'VIA BD';
          P_NMOPERADOR := 'VIA BD';
     END; 
  END;
BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_DESCUPD      := '';
   V_CDOPERADOR   := :NEW.CDOPERINCLUSAO;
   V_CDFILLOGOPER := '';

   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   WEBTUNNING(V_DSREMOTEADDR,
              V_DSREMOTEHOST,
              V_DSSERVERRDM,
              V_DSSERVMETHOD,
              V_DSREMOTEOPER);

   V_DSSERVERRDM := 'gop00100_orcamento_operacional';
   V_DESCUPD := 'Parametros para Resultado Operacional' || chr(10);

   IF INSERTING THEN
      V_TIPO         := '1';
      V_ITPESQ       := TO_CHAR(:NEW.CDFILIAL) || '|' || TO_CHAR(:NEW.CDTPCTPAGAR);

      IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
         V_UNIDADE   := 'Unidade: Padrão' || chr(10);
      ELSE
         SELECT NMFILIAL INTO V_NMFILIAL FROM FILIAL WHERE CDFILIAL = :NEW.CDFILIAL;
         V_UNIDADE   := 'Unidade: '|| :NEW.CDFILIAL || '-' || V_NMFILIAL || chr(10);
      END IF;

      SELECT DSTPCTPAGAR
        INTO V_DSTPCTPAGAR
        FROM TIPOCTPAGAR
       WHERE CDTPCTPAGAR = :NEW.CDTPCTPAGAR;

      IF :NEW.IDTPCTPAGROP = 'DSP' THEN
         V_DESC := V_DESC || 'Apuração Despesa -> Contas a Pagar -> Despesas Diversas';
      ELSIF :NEW.IDTPCTPAGROP = 'MAO' THEN
         V_DESC := V_DESC || 'Apuração Despesa -> Contas a Pagar -> Mão de Obra';
      ELSIF :NEW.IDTPCTPAGROP = 'INV' THEN
         V_DESC := V_DESC || 'Apuração Despesa -> Contas a Pagar ->  Investimentos';
      END IF;

      IF :NEW.IDTPCTPAGROP IS NOT NULL THEN
         V_DESC := V_DESC || chr(10) || chr(10) || V_UNIDADE || 'Conta a pagar: ' || :NEW.CDTPCTPAGAR || '-' || V_DSTPCTPAGAR;
      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
         ('TIPOCTPAGROP', 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;
/
CREATE OR REPLACE TRIGGER LOG_GOP_TIPOOPERACROP
AFTER INSERT OR UPDATE
ON TIPOOPERACROP 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(500);
  V_DESCUPD             VARCHAR2(200);
  V_CDFILLOGOPER        VARCHAR2(4);
  V_ITPESQ              VARCHAR2(40);
  V_NMOPERADOR          VARCHAR2(40);
  V_CDOPERADOR          VARCHAR2(12);
  V_NMFILIAL            VARCHAR2(50);
  V_NMTIPOOPER          VARCHAR2(100);
  V_UNIDADE             VARCHAR2(100);

  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' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO         := '0';
   V_DESC         := '';
   V_ITPESQ       := '';
   V_NMOPERADOR   := '';
   V_CDOPERADOR   := :NEW.CDOPERULTATU;
   V_CDFILLOGOPER := '';
   V_ITPESQ       := TO_CHAR(:NEW.CDTIPOOPER);

   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);

   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);

   IF TO_CHAR(:NEW.CDFILIAL) = 'T' OR TO_CHAR(:NEW.CDFILIAL) =  'P' THEN
      V_UNIDADE   := 'Unidade: Padrão' || chr(10);
   ELSE
      SELECT NMFILIAL
        INTO V_NMFILIAL
        FROM FILIAL
       WHERE CDFILIAL = :NEW.CDFILIAL;
      V_UNIDADE   := 'Unidade: '|| :NEW.CDFILIAL || '-' || V_NMFILIAL || chr(10);
   END IF;

   SELECT NMTIPOOPER
     INTO V_NMTIPOOPER
     FROM TIPOOPERAC
    WHERE CDTIPOOPER = :NEW.CDTIPOOPER
      AND IDENTRSAIDOP = :NEW.IDENTRSAIDOP;

   IF INSERTING THEN
      V_TIPO := '1';

      IF :NEW.IDENTRSAIDOP = 'E' THEN
         IF :NEW.IDTPOPERACROP = 'CC' THEN
            V_DESC := 'Apuração Estoque -> Lançamentos -> Entrada por Compras ';
         ELSIF :NEW.IDTPOPERACROP = 'DE' THEN
            V_DESC := 'Apuração Despesas -> Lançamentos de Entrada -> Despesas -> Tipo de Operação ';
         ELSIF :NEW.IDTPOPERACROP = 'MO' THEN
            V_DESC := 'Apuração Despesas -> Lançamentos de Entrada -> Mão de Obra -> Tipo de Operação';
         END IF;
      ELSIF :NEW.IDENTRSAIDOP = 'S' THEN
         IF :NEW.IDTPOPERACROP = 'FS' THEN
            V_DESC := 'Faturamento -> Faturamento Bruto -> Tipo Operação';
         ELSIF :NEW.IDTPOPERACROP = 'CS' THEN
            V_DESC := 'Apuração Estoque -> Lançamentos -> Saída por Devolução' ;
         END IF;
      END IF;

      IF :NEW.IDENTRSAIDOP IS NOT NULL THEN
         V_DESC := V_DESC || chr(10) || chr(10) || V_UNIDADE || 'Tipo de Operação: ' || :NEW.CDTIPOOPER || ' - ' || V_NMTIPOOPER;
      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
        ('TIPOOPERACROP', 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;
/
CREATE OR REPLACE TRIGGER APROVAORCAGOP_VERSAOGOP
AFTER UPDATE OR INSERT
ON APROVAORCAGOP FOR EACH ROW
DECLARE
  V_NRVERSAOGOP NUMBER;
  V_CDVERSAOGOP NUMBER;
  V_CDFILIAL VARCHAR2(4);
  V_NRANOORCAGOP  NUMBER;
  V_IDPERIODOORCA VARCHAR2(30);
  V_NRPERIODOORCA NUMBER;
  V_NRORG NUMBER;
  V_IDUTILVERSAOORCA VARCHAR2(1);

  V_IDITEMVERSAOGOP VARCHAR2(20);
  V_VRITEMVERSAO NUMBER;
  V_NRTIPOITVERSAOGOP NUMBER;
  V_NRITVERSAOGOP NUMBER;
  V_CDITVERSAOGOP NUMBER;

  V_TIPOIDITEMVERSAOGOP VARCHAR2(100);
  V_TIPONRITVERSAOGOP NUMBER;
  V_VRTIPOITVERSAOGOP NUMBER;
  V_CDTIPOITVERSAOGOP VARCHAR2(50);
  V_NMTIPOITVERSAOGOP VARCHAR(100);

  V_NRPRODTIPOITVERSAOGOP NUMBER;
  V_CDPRODTIPOITVERSAOGOP VARCHAR(50);
  V_NMPRODTIPOITVERSAOGOP VARCHAR(50);
  V_VRPRODTIPOITVERSAOGOP NUMBER;
BEGIN
   SELECT NVL(MAX(IDUTILVERSAOORCA),'N')
     INTO V_IDUTILVERSAOORCA
     FROM PARAMORCAOPERAC;

   IF (V_IDUTILVERSAOORCA = 'S' AND :NEW.IDAPROVACAOGOP = 'APROVADO') THEN
      SELECT O.CDFILIAL, O.NRANOORCAGOP, O.IDPERIODOORCA, O.NRPERIODOORCA, O.NRORG
        INTO V_CDFILIAL, V_NRANOORCAGOP, V_IDPERIODOORCA, V_NRPERIODOORCA, V_NRORG
        FROM ORCAMENTOGOP O
       WHERE O.NRORCAMENTOGOP = :NEW.NRORCAMENTOGOP;

      SELECT MAX(CDVERSAOGOP)
        INTO V_CDVERSAOGOP
        FROM VERSAOGOP
       WHERE NRAPROVAORCAGOP = :NEW.NRAPROVAORCAGOP;
      IF V_CDVERSAOGOP IS NULL THEN
         V_CDVERSAOGOP := 1;
      ELSE
         V_CDVERSAOGOP := (V_CDVERSAOGOP + 1);
      END IF;
      NOVO_CODIGO_SC('VERSAOGOP', V_NRVERSAOGOP);

      INSERT INTO VERSAOGOP
      (NRVERSAOGOP, NRAPROVAORCAGOP, CDVERSAOGOP, CDFILIAL, NRANOVERSAOGOP, IDPERIODOORCA, NRPERIODOORCA, NRORG)
      VALUES
      (V_NRVERSAOGOP, :NEW.NRAPROVAORCAGOP, V_CDVERSAOGOP, V_CDFILIAL, V_NRANOORCAGOP, V_IDPERIODOORCA, V_NRPERIODOORCA, V_NRORG);

      FOR C_ITVERSAOGOP IN
      (SELECT IO.IDTIPOORCAOP, SUM(NVL(I.VRORCAMENTO, 0)) VRORCAMENTO, I.NRORG
         FROM ITORCAMESGOP I INNER JOIN ITEMORCAGOP IO ON I.NRITEMORCAOP = IO.NRITEMORCAOP
        WHERE IO.NRORCAMENTOGOP = :NEW.NRORCAMENTOGOP
        GROUP BY IO.IDTIPOORCAOP, I.NRORG
      )
      LOOP
         NOVO_CODIGO_SC('ITVERSAOGOP', V_NRITVERSAOGOP);

         INSERT INTO ITVERSAOGOP
         (NRITVERSAOGOP, NRVERSAOGOP, CDVERSAOGOP, CDFILIAL, IDITEMVERSAOGOP, VRITEMVERSAO, NRORG)
         VALUES
         (V_NRITVERSAOGOP, V_NRVERSAOGOP, V_CDVERSAOGOP, V_CDFILIAL, C_ITVERSAOGOP.IDTIPOORCAOP, C_ITVERSAOGOP.VRORCAMENTO, C_ITVERSAOGOP.NRORG);
      END LOOP;
      FOR C_TIPOITVERSAOGOP IN
         (SELECT R.IDTIPOORCAOP, SUM(R.VRORCAMENTO), R.CDPRODUTO, R.NMPRODUTO, ITV.NRITVERSAOGOP, R.NRORG
           FROM (SELECT IO.IDTIPOORCAOP,
                   CASE IO.IDTIPOORCAOP WHEN 'MAOOBRA' THEN CDORCAMENTOMO
                                        WHEN 'DESPMATRIZ' THEN CDDESPPREV
                                        WHEN 'DESPDIVERSA' THEN CDDESPPREV
                                        WHEN 'DESPENTRADA' THEN CDDESPPREV
                                        WHEN 'INVESTIMENTO' THEN CDINVEST
                                        WHEN 'DEPRECIACAO' THEN CDDESPPREV
                                        WHEN 'IMPOSTOARECUPERAR' THEN CDIMPOSTO
                                        WHEN 'IMPOSTOSOBLUCRO' THEN CDIMPOSTO
                                        WHEN 'IMPOSTO' THEN CDIMPOSTO
                   ELSE NULL
                    END CDPRODUTO,
                   CASE IO.IDTIPOORCAOP WHEN 'MAOOBRA' THEN (SELECT DSORCAMENTOMO FROM ORCAMENTOMO O WHERE O.CDORCAMENTOMO = IO.CDORCAMENTOMO)
                                        WHEN 'DESPMATRIZ' THEN (SELECT NMDESPPREV FROM DESPPREV D WHERE D.CDDESPPREV = IO.CDDESPPREV)
                                        WHEN 'DESPDIVERSA' THEN (SELECT NMDESPPREV FROM DESPPREV D WHERE D.CDDESPPREV = IO.CDDESPPREV)
                                        WHEN 'DESPENTRADA' THEN (SELECT NMTIPOOPER FROM TIPOOPERAC T WHERE T.CDTIPOOPER = IO.CDTIPOOPER AND T.IDENTRSAIDOP = IO.IDENTRSAIDOP)
                                        WHEN 'INVESTIMENTO' THEN (SELECT NMINVEST FROM INVESTIMENTOS IV WHERE IV.CDINVEST = IO.CDINVEST)
                                        WHEN 'IMPOSTOARECUPERAR' THEN (SELECT NMIMPOSTO FROM IMPOSTO IP WHERE IP.CDIMPOSTO = IO.CDIMPOSTO)
                                        WHEN 'IMPOSTOSOBLUCRO' THEN (SELECT NMIMPOSTO FROM IMPOSTO IP WHERE IP.CDIMPOSTO = IO.CDIMPOSTO)
                                        WHEN 'IMPOSTO' THEN (SELECT NMIMPOSTO FROM IMPOSTO IP WHERE IP.CDIMPOSTO = IO.CDIMPOSTO)
                    ELSE NULL
                    END NMPRODUTO, SUM(NVL(I.VRORCAMENTO, 0)) VRORCAMENTO, I.NRITEMORCAOP, I.NRORG
                   FROM ITORCAMESGOP I INNER JOIN ITEMORCAGOP IO ON I.NRITEMORCAOP = IO.NRITEMORCAOP
                  WHERE IO.NRORCAMENTOGOP = :NEW.NRORCAMENTOGOP
                  GROUP BY IO.IDTIPOORCAOP,I.NRITEMORCAOP, I.NRORG, IO.CDDESPPREV, IO.CDINVEST, IO.CDIMPOSTO, IO.CDORCAMENTOMO, IO.IDENTRSAIDOP, IO.CDTIPOOPER
                  ORDER BY IO.IDTIPOORCAOP, I.NRITEMORCAOP, I.NRORG) R, ITVERSAOGOP ITV
          WHERE R.CDPRODUTO IS NOT NULL
            AND ITV.IDITEMVERSAOGOP = R.IDTIPOORCAOP
            AND ITV.CDVERSAOGOP = V_CDVERSAOGOP
          GROUP BY R.IDTIPOORCAOP, R.CDPRODUTO, R.NMPRODUTO, ITV.NRITVERSAOGOP, R.NRORG
          )
          LOOP
             NOVO_CODIGO_SC('TIPOITVERSAOGOP', V_NRTIPOITVERSAOGOP);

             INSERT INTO TIPOITVERSAOGOP
             (NRTIPOITVERSAOGOP, NRITVERSAOGOP, IDITEMVERSAOGOP, CDTIPOITVERSAOGOP, NMTIPOITVERSAOGOP, VRTIPOITVERSAOGOP, NRORG)
             VALUES
             (V_NRTIPOITVERSAOGOP, C_TIPOITVERSAOGOP.NRITVERSAOGOP, C_TIPOITVERSAOGOP.IDTIPOORCAOP, V_CDVERSAOGOP, C_TIPOITVERSAOGOP.NMPRODUTO, NVL(V_VRTIPOITVERSAOGOP, 0), V_NRORG);

          END LOOP;

      FOR C_PRODTIPOITVERSAOGOP IN
         (SELECT T.NRTIPOITVERSAOGOP, RESULTA.PRODUTO CDPRODUTO, RESULTA.NMPRODUTO,  NVL(SUM(RESULTA.VRORCAMENTO), 0) VRORCAMENTO, RESULTA.NRORG
            FROM (SELECT DETAL.NRITORCAMESGOP, DETAL.NRITDETALORCAMESGOP, DETAL.VRORCAMENTO, DETAL.NRITEMORCAOP, DETAL.IDTIPOORCAOP,
                         CASE IDTIPOORCAOP
                         WHEN 'MAOOBRA' THEN DETAL.CDORCAMENTOMO
                         WHEN 'DESPMATRIZ' THEN DETAL.CDDESPPREV
                         WHEN 'DESPDIVERSA' THEN DETAL.CDDESPPREV
                         WHEN 'DESPENTRADA' THEN DETAL.CDDESPPREV
                         WHEN 'INVESTIMENTO' THEN DETAL.CDINVEST
                         WHEN 'DEPRECIACAO' THEN DETAL.CDDESPPREV
                         WHEN 'IMPOSTOARECUPERAR' THEN DETAL.CDIMPOSTO
                         WHEN 'IMPOSTOSOBLUCRO' THEN DETAL.CDIMPOSTO
                         WHEN 'IMPOSTO' THEN DETAL.CDIMPOSTO ELSE NULL
                          END CDPRODUTO, NMPRODUTO, CDPRODUTO AS PRODUTO, DETAL.NRORG
                    FROM (SELECT I.IDTIPOORCAOP, IM.NRITEMORCAOP, IM.NRITORCAMESGOP, IP.NRITDETALORCAMESGOP, IP.VRORCAMENTO,
                                 I.CDDESPPREV, I.CDINVEST, I.CDIMPOSTO, I.CDORCAMENTOMO, I.IDENTRSAIDOP, I.CDTIPOOPER,
                                 IP.CDPRODUTO, P.NMPRODUTO, IP.NRORG
                            FROM ITEMORCAGOP I INNER JOIN ITORCAMESGOP IM ON I.NRITEMORCAOP = IM.NRITEMORCAOP
                                               LEFT JOIN ITDETALORCAMESGOP IP ON IM.NRITORCAMESGOP = IP.NRITORCAMESGOP
                                               LEFT JOIN PRODUTO P ON IP.CDPRODUTO = P.CDPRODUTO
                           WHERE I.NRORCAMENTOGOP = :NEW.NRORCAMENTOGOP) DETAL)
                 RESULTA INNER JOIN TIPOITVERSAOGOP T ON RESULTA.CDPRODUTO = T.CDTIPOITVERSAOGOP
                                                     AND RESULTA.IDTIPOORCAOP = T.IDITEMVERSAOGOP
                         INNER JOIN ITVERSAOGOP I ON T.NRITVERSAOGOP = I.NRITVERSAOGOP
           WHERE I.CDVERSAOGOP = V_CDVERSAOGOP
           GROUP BY T.NRTIPOITVERSAOGOP, RESULTA.PRODUTO, RESULTA.NMPRODUTO,  RESULTA.NRORG
         )
      LOOP
         NOVO_CODIGO_SC('PRODTIPOITVERSAOGOP', V_NRPRODTIPOITVERSAOGOP);

         INSERT INTO PRODTIPOITVERSAOPGOP
         (NRPRODTIPOITVERSAOPGOP, NRTIPOITVERSAOGOP, CDPRODTIPOITVERSAOPGOP,
          NMPRODTIPOITVERSAOPGOP, VRPRODTIPOITVERSAOPGOP, NRORG)
         VALUES
         (V_NRPRODTIPOITVERSAOGOP, C_PRODTIPOITVERSAOGOP.NRTIPOITVERSAOGOP, C_PRODTIPOITVERSAOGOP.CDPRODUTO,
         C_PRODTIPOITVERSAOGOP.NMPRODUTO, C_PRODTIPOITVERSAOGOP.VRORCAMENTO, C_PRODTIPOITVERSAOGOP.NRORG);

      END LOOP;
   END IF;
END;
/
CREATE OR REPLACE TRIGGER LOG_GOP_ORCAMENTOGOP
AFTER UPDATE OR INSERT
ON ORCAMENTOGOP 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(4);
  V_ITPESQ       VARCHAR2(40);
  V_NMOPERADOR   VARCHAR2(40);
  V_CDOPERADOR   VARCHAR2(12);
  V_DESCUPD      VARCHAR2(100);
  V_NMTABELA     VARCHAR2(30);
  V_NRPERIODOORCA NUMBER;
  V_IDPERIODOORCA VARCHAR2(30);

  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;  
  
  FUNCTION STRPERIODO (NRPERIODOORCA NUMBER, IDPERIODOORCA VARCHAR2) RETURN VARCHAR2
    AS DESCNRPERIODOORCA VARCHAR2(40);
  BEGIN 
     IF TO_CHAR(IDPERIODOORCA) = 'MENSAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := 'Janeiro';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := 'Fevereiro';
        ELSIF NRPERIODOORCA  = 3 THEN
           DESCNRPERIODOORCA := 'Março';
        ELSIF NRPERIODOORCA  = 4 THEN
           DESCNRPERIODOORCA := 'Abril';
        ELSIF NRPERIODOORCA  = 5 THEN
           DESCNRPERIODOORCA := 'Maio';
        ELSIF NRPERIODOORCA  = 6 THEN
           DESCNRPERIODOORCA := 'Junho';
        ELSIF NRPERIODOORCA  = 7 THEN
           DESCNRPERIODOORCA := 'Julho';
        ELSIF NRPERIODOORCA  = 8 THEN
           DESCNRPERIODOORCA := 'Agosto';
        ELSIF NRPERIODOORCA  = 9 THEN
           DESCNRPERIODOORCA := 'Setembro';
        ELSIF NRPERIODOORCA  = 10 THEN
           DESCNRPERIODOORCA := 'Outubro';
        ELSIF NRPERIODOORCA  = 11 THEN
           DESCNRPERIODOORCA := 'Novembro';
        ELSIF NRPERIODOORCA  = 12 THEN
           DESCNRPERIODOORCA := 'Dezembro';
        END IF;
     ELSIF IDPERIODOORCA = 'BIMESTRAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := '1º Bimestre';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := '2º Bimestre';
        ELSIF NRPERIODOORCA  = 3 THEN
           DESCNRPERIODOORCA := '3º Bimestre';
        ELSIF NRPERIODOORCA  = 4 THEN
           DESCNRPERIODOORCA := '4º Bimestre';
        ELSIF NRPERIODOORCA  = 5 THEN
           DESCNRPERIODOORCA := '5º Bimestre';
        ELSIF NRPERIODOORCA  = 6 THEN
           DESCNRPERIODOORCA := '6º Bimestre';
        END IF;
     ELSIF IDPERIODOORCA = 'TRIMESTRAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := '1º Trimestre';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := '2º Trimestre';
        ELSIF NRPERIODOORCA  = 3 THEN
           DESCNRPERIODOORCA := '3º Trimestre';
        ELSIF NRPERIODOORCA  = 4 THEN
           DESCNRPERIODOORCA := '4º Trimestre';
        END IF;
     ELSIF IDPERIODOORCA = 'QUADRIMESTRAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := '1º Quadrimestre';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := '2º Quadrimestre';
        ELSIF NRPERIODOORCA  = 3 THEN
           DESCNRPERIODOORCA := '3º Quadrimestre';
        END IF;
     ELSIF IDPERIODOORCA = 'SEMESTRAL' THEN
        IF NRPERIODOORCA  = 1 THEN
           DESCNRPERIODOORCA := '1º Semestre';
        ELSIF NRPERIODOORCA  = 2 THEN
           DESCNRPERIODOORCA := '2º Semestre';
        END IF;
     END IF;

     RETURN DESCNRPERIODOORCA;
  END STRPERIODO;
BEGIN
/* IDTIPOOPER - '1' - Inclusão, '2' - Alteração, '3' - Exclusão*/
   V_TIPO          := '0';
   V_DESC          := '';
   V_ITPESQ        := '';
   V_NMOPERADOR    := '';
   V_CDOPERADOR   := :NEW.CDOPERULTATU;
   V_CDFILLOGOPER  := '';
   V_NMTABELA      := 'FILIAL';
   V_NRPERIODOORCA := 0;
   V_IDPERIODOORCA := '';
   
   V_DESCUPD      := 'Preparação do Orçamento';

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

   V_DSSERVERRDM := 'gop00240_preparacao_do_orcamento';
   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   
   SELECT NRPERIODOORCA, IDPERIODOORCA 
     INTO V_NRPERIODOORCA, V_IDPERIODOORCA
     FROM ORCAMENTOGOP O 
    WHERE O.NRORCAMENTOGOP = :NEW.NRORCAMENTOGOP;
    
   V_DESC := V_DESC || STRPERIODO(V_NRPERIODOORCA, V_IDPERIODOORCA);
   
   IF INSERTING THEN
      V_TIPO         := '1';

      V_DESCUPD := 'Operador: ' || :NEW.CDOPERINCLUSAO || ' - ' || V_NMOPERADOR || 'Preparou Orçamento com os parâmetros:' || chr(10);
      V_DESCUPD := V_DESCUPD || 'Tipo do Orcamento: ' || :NEW.IDPERIODOORCA || chr(10) || 'Ano: ' || :OLD.NRANOORCAGOP || chr(10);
      IF TO_CHAR(:NEW.IDPERIODOORCA) <> 'ANUAL' THEN
         V_DESCUPD := V_DESCUPD || 'Periodo: ' || STRPERIODO(:OLD.NRPERIODOORCA, :OLD.IDPERIODOORCA) || chr(10);
      END IF;
   ELSIF UPDATING THEN
      V_TIPO         := '2';
   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;