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

BEGIN
/* IDTIPOOPER - '1' - Inclusao, '2' - Alteracao, '3' - Exclusao*/
   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 NVL(TO_CHAR(:NEW.CDFILIAL), '')  = 'T' OR NVL(TO_CHAR(:NEW.CDFILIAL), '')  =  'P' THEN
       V_UNIDADE   :=  'Unidade: Padrao';
    ELSE
        SELECT MAX(NMFILIAL) INTO V_NMFILIAL FROM FILIAL WHERE CDFILIAL = NVL(:NEW.CDFILIAL, '');
        V_UNIDADE   :=  'Unidade: '|| NVL(TO_CHAR(:NEW.CDFILIAL), ' ') || ' - ' || V_NMFILIAL;
    END IF;
    
    SELECT MAX(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';
        
        IF :NEW.IDDETALHESERVICO = 'RETIRADA' THEN
            V_DESC := '-> Consumo -> Detalhamento de Servicos ' || chr(10) || chr(10) || V_UNIDADE || 'Detalhamento: '|| NVL(TO_CHAR(:NEW.CDSERVFILI), ' ') || ' - ' || V_NMSERVICO || chr(10) || 'Ordem: ' || NVL(TO_CHAR(:NEW.CDORDEM), ' ') ||  chr(10) || '% para PU: ' || NVL(TO_CHAR(:NEW.VRPERCENTPU), ' ');

        ELSIF :NEW.IDDETALHESERVICO = 'EFETIVO' THEN
            V_DESC := '-> Faturamento -> Medicao Efetivo -> Detalhamento (Medicao de Efetivos) ' || chr(10) || chr(10) || V_UNIDADE || 'Detalhamento: '|| NVL(TO_CHAR(:NEW.CDSERVFILI), ' ') || ' - ' || V_NMSERVICO || chr(10) || 'Ordem: ' || NVL(TO_CHAR(:NEW.CDORDEM), ' ');

        END IF;

    ELSIF UPDATING THEN
        V_TIPO         := '2';

        IF :NEW.IDDETALHESERVICO = 'RETIRADA' THEN
            V_DESCUPD :=  V_DESCUPD || '-> Consumo -> Detalhamento de Servicos ' || chr(10) || chr(10) || V_UNIDADE || 'Detalhamento: ' || NVL(TO_CHAR(:NEW.CDSERVFILI), ' ') || ' - ' || V_NMSERVICO;

            IF NVL(:OLD.CDORDEM, 0) <> NVL(:NEW.CDORDEM, 0) THEN
                V_DESC := V_DESC || chr(10) || 'Ordem alterada de ' || NVL(TO_CHAR(:OLD.CDORDEM), ' ') ||  ' para ' || NVL(TO_CHAR(: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 -> Medicao Efetivo -> Detalhamento (Medicao de Efetivos) ' || chr(10) || chr(10) || V_UNIDADE  || NVL(TO_CHAR(: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;