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(4000);
  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_DSDESPADMFAT            VARCHAR2(100);
  V_DSORCAMENTOMO           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' - Inclusao, '2' - Alteracao, '3' - Exclusao*/
   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 MAX(PDG.IDDESPPREV), MAX(PR.CDDESPPREV), MAX(D.NMDESPPREV), MAX(PR.CDPRODUTO), MAX(P.CDARVPROD), MAX(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;
             
   SELECT MAX(O.DSORCAMENTOMO), MAX(DF.DSDESPADMFAT)
     INTO V_DSORCAMENTOMO, V_DSDESPADMFAT
     FROM DESPADMFATUR DF INNER JOIN DESPORCAMO DO ON DF.CDDESPADMFAT = DO.CDDESPADMFAT
                          INNER JOIN ORCAMENTOMO O ON DO.CDORCAMENTOMO = O.CDORCAMENTOMO
                                                  AND O.CDFILIAL = DO.CDFILIAL
                                                  AND DO.CDDESPADMFAT = DF.CDDESPADMFAT
                          LEFT  JOIN PERCITEMDETALGOP PDG ON PDG.CDORCAMENTOMO = DO.CDORCAMENTOMO
    WHERE DO.CDORCAMENTOMO =:NEW.CDORCAMENTOMO
      AND O.CDFILIAL = :NEW.CDFILIALMO;

   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;
         
         IF :NEW.CDDESPADMFAT IS NOT NULL THEN 
            V_DESC := chr(10) || chr(10) || 'Orcamento: ' || :NEW.CDORCAMENTOMO || ' - ' || V_DSORCAMENTOMO || chr(10) ||
                                            ' - Despesa: ' || :NEW.CDDESPADMFAT || ' - ' || V_DSDESPADMFAT || 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;
/