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

BEGIN
/* IDTIPOOPER - '1' - Inclusao, '2' - Alteracao, '3' - Exclusao*/
   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(NVL(TO_CHAR(:NEW.NRCALENPREORCAGOP), ' '));

      V_DESCUPD := 'Calendario de Preparacao do Orcamento' || chr(10);
      V_DSSERVERRDM := 'gop02000_calendario_prep_orca';
      V_DESCUPD := V_DESCUPD || 'Tipo do Orcamento: ' || NVL(TO_CHAR(:NEW.IDPERIODOORCA), ' ') || chr(10);
      V_DESCUPD := V_DESCUPD || ' Ano: ' || NVL(TO_CHAR(: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 MAX(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(NVL(TO_CHAR(:NEW.NRCALENPREORCAGOP), ' '));

         V_DESCUPD := 'Calendario de Preparacao do Orcamento' || chr(10);
         V_DSSERVERRDM := 'gop02000_calendario_prep_orca';
         V_DESCUPD := V_DESCUPD || 'Tipo do Orcamento: ' || NVL(TO_CHAR(:OLD.IDPERIODOORCA), ' ') || chr(10);
         V_DESCUPD := V_DESCUPD || 'Ano: ' || NVL(TO_CHAR(: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 MAX(NMGRUPGERENTEOP) INTO V_NMGRUPGERENTEOP FROM GRUPGERENTEOP WHERE CDGRUPGERENTEOP = :OLD.CDGRUPGERENTEOP;
            SELECT MAX(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;