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

   V_NMIMPOSTO               VARCHAR2(100);
   V_CDARVPROD               VARCHAR2(100);
   V_NMPRODUTO               VARCHAR2(100);
   V_DSDESPADMFAT            VARCHAR2(100);
   V_DSORCAMENTOMO           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 = 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';

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

   V_DESCUPD      := 'Percentual por Item Operacional -> Geral';
   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 MAX(NMIMPOSTO) INTO V_NMIMPOSTO FROM IMPOSTO WHERE CDIMPOSTO = :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 MAX(CDARVPROD), MAX(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 || ' -> Mao de Obra -> Detalhamento' || chr(10) || chr(10);
         SELECT MAX(DSORCAMENTOMO) 
           INTO V_DSORCAMENTOMO 
           FROM ORCAMENTOMO 
          WHERE CDORCAMENTOMO = :NEW.CDORCAMENTOMO
            AND CDFILIAL = :NEW.CDFILIALMO; 
         V_DESC := 'Descricao: ' || :NEW.CDORCAMENTOMO || ' - ' || V_DSORCAMENTOMO || chr(10) || 'Percentual (%): ' || :NEW.VRPERCENTUAL; 

      ELSIF :NEW.NRPERCITEMGOP = 5 THEN
         V_DESCUPD := V_DESCUPD || ' -> Despesas da Matriz -> Detalhamento' || chr(10) || chr(10);
         SELECT MAX(NMDESPPREV) INTO V_NMDESPPREV FROM DESPPREV WHERE CDDESPPREV = :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 MAX(NMDESPPREV) INTO V_NMDESPPREV FROM DESPPREV WHERE CDDESPPREV = :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 MAX(NMDESPPREV) INTO V_NMDESPPREV FROM DESPPREV WHERE CDDESPPREV = :NEW.CDDESPPREV; 
            V_DESC := 'Despesa: ' || :NEW.CDDESPPREV || ' - ' || V_NMDESPPREV || chr(10) || 'Percentual (%): ' || :NEW.VRPERCENTUAL;
         ELSIF :NEW.CDTIPOOPER IS NOT NULL THEN
            SELECT MAX(NMTIPOOPER) INTO V_NMTIPOOPER FROM TIPOOPERAC WHERE CDTIPOOPER = :NEW.CDTIPOOPER AND IDENTRSAIDOP = :NEW.IDENTRSAIDOP;
            V_DESC := 'Tipo de Operacao: ' || :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 MAX(NMIMPOSTO) INTO V_NMIMPOSTO FROM IMPOSTO WHERE CDIMPOSTO = :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 MAX(NMIMPOSTO) INTO V_NMIMPOSTO FROM IMPOSTO WHERE CDIMPOSTO = :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 MAX(NMINVEST) INTO V_NMINVEST FROM INVESTIMENTOS WHERE CDINVEST = :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 MAX(NMIMPOSTO) INTO V_NMIMPOSTO FROM IMPOSTO WHERE CDIMPOSTO = :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 MAX(CDARVPROD), MAX(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 || ' -> Mao de Obra -> Detalhamento' || chr(10) || chr(10);
            SELECT MAX(DSORCAMENTOMO) INTO V_DSORCAMENTOMO FROM ORCAMENTOMO WHERE CDORCAMENTOMO = :OLD.CDORCAMENTOMO; 
            V_DESC := 'Mao de Obra: ' || :NEW.CDORCAMENTOMO || ' - ' || V_DSORCAMENTOMO || 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 MAX(NMDESPPREV) INTO V_NMDESPPREV FROM DESPPREV WHERE CDDESPPREV = :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 MAX(NMDESPPREV) INTO V_NMDESPPREV FROM DESPPREV WHERE CDDESPPREV = :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 MAX(NMDESPPREV) INTO V_NMDESPPREV FROM DESPPREV WHERE CDDESPPREV = :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 MAX(NMTIPOOPER) INTO V_NMTIPOOPER FROM TIPOOPERAC WHERE CDTIPOOPER = :NEW.CDTIPOOPER AND IDENTRSAIDOP = :NEW.IDENTRSAIDOP; 
               V_DESC := 'Tipo de Operacao: ' || :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 MAX(NMIMPOSTO) INTO V_NMIMPOSTO FROM IMPOSTO WHERE CDIMPOSTO = :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 MAX(NMIMPOSTO) INTO V_NMIMPOSTO FROM IMPOSTO WHERE CDIMPOSTO = :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 MAX(NMINVEST) INTO V_NMINVEST FROM INVESTIMENTOS WHERE CDINVEST = :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;
/

-- VERSAO --
BEGIN ATUVEROBJ('LOG_GOP_PERCITEMDETALGOP','6.19.xxx'); END;
/