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(4000);
  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 := 'Marco';
        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      := 'Preparacao do Orcamento';

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

   V_DSSERVERRDM := 'gop00240_preparacao_do_orcamento';
   NMOPERADOR(V_CDOPERADOR, V_NMOPERADOR);
   
   V_NRPERIODOORCA := :NEW.NRPERIODOORCA;
   V_IDPERIODOORCA := :NEW.IDPERIODOORCA;
   V_ITPESQ := :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 Orcamento com os parametros:' || chr(10);
      V_DESCUPD := V_DESCUPD || 'Tipo do Orcamento: ' || NVL(TO_CHAR(:NEW.IDPERIODOORCA), ' ') || chr(10) || 'Ano: ' || NVL(TO_CHAR(: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;
/

-- VERSAO --
BEGIN ATUVEROBJ('LOG_GOP_ORCAMENTOGOP','6.29.xxx'); END;
/