CREATE OR REPLACE TRIGGER LOG_FCT_ITEMORCAMENTO 
  BEFORE UPDATE OR INSERT OR DELETE ON FCT_ITEMORCAMENTO 
  FOR EACH ROW 
DECLARE 
PRAGMA AUTONOMOUS_TRANSACTION;
    V_NRLOGDADOSPROP      NUMBER; 
    V_IDSITUACAOORCAMENTO VARCHAR2(30); 
    V_NOMEITEM            VARCHAR2(250); 
    V_DSVRANTIGOLISTFIX   VARCHAR2(100); 
    V_DSVRNOVOLISTFIX     VARCHAR2(100); 
BEGIN 
    BEGIN 
        SELECT IDSITUACAOORCAMENTO 
        INTO   V_IDSITUACAOORCAMENTO 
        FROM   FCT_ORCAMENTO 
        WHERE  ( NRSEQORCAMENTO = :NEW.NRSEQORCAMENTO 
                 AND NRORG = :NEW.NRORG ) 
                OR ( NRSEQORCAMENTO = :OLD.NRSEQORCAMENTO 
                     AND NRORG = :OLD.NRORG ); 
    EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
          BEGIN 
              V_IDSITUACAOORCAMENTO := NULL; 
          END; 
    END;
    
    IF :NEW.IDADICITEMORC = 'S' THEN 
          BEGIN 
              SELECT NMITEMORCAMENTO 
              INTO   V_NOMEITEM 
              FROM   FCT_ITEMORCAMENTO 
              WHERE  (NRSEQORCAMENTO     = :NEW.NRSEQORCAMENTO 
                     AND NRITEMORCAMENTO = :NEW.NRITEMORCAMENTOPAI 
                     AND NRORG           = :NEW.NRORG)
                    OR (NRSEQORCAMENTO   = :OLD.NRSEQORCAMENTO 
                     AND NRITEMORCAMENTO = :OLD.NRITEMORCAMENTOPAI 
                     AND NRORG           = :OLD.NRORG); 
          EXCEPTION 
              WHEN NO_DATA_FOUND THEN 
                BEGIN 
                    V_NOMEITEM := NULL; 
                END; 
          END; 
          
          IF V_NOMEITEM IS NOT NULL THEN
            V_NOMEITEM := V_NOMEITEM||' - ';
          END IF;
        ELSE 
          V_NOMEITEM := NULL; 
    END IF; 

    IF V_IDSITUACAOORCAMENTO = 'CONCLUIDO' THEN 
      IF UPDATING THEN 

        IF ( NVL(:OLD.QTITEMORCAMENTO, 0) ) <> ( NVL(:NEW.QTITEMORCAMENTO, 0) ) 
        THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Quantidade', 
                       :OLD.QTITEMORCAMENTO, 
                       :NEW.QTITEMORCAMENTO, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       TO_CHAR(:OLD.QTITEMORCAMENTO, '999G999G999G990D99'), 
                       TO_CHAR(:NEW.QTITEMORCAMENTO, '999G999G999G990D99') ); 
        END IF; 

        IF ( NVL(:OLD.CDPRODUTO, 0) ) <> ( NVL(:NEW.CDPRODUTO, 0) ) THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Serviço/Produto', 
                       :OLD.CDPRODUTO, 
                       :NEW.CDPRODUTO, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU,
                       :OLD.NMITEMORCAMENTO, 
                       :NEW.NMITEMORCAMENTO ); 
        END IF; 

        IF ( NVL(:OLD.CDSERVORCA, 0) ) <> ( NVL(:NEW.CDSERVORCA, 0) ) THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Serviço/Produto', 
                       :OLD.CDSERVORCA, 
                       :NEW.CDSERVORCA, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       :OLD.NMITEMORCAMENTO, 
                       :NEW.NMITEMORCAMENTO ); 
        END IF; 

        IF ( NVL(:OLD.IDMULTMEDVRTOT, 0) ) <> ( NVL(:NEW.IDMULTMEDVRTOT, 0) ) 
        THEN 
          IF( ( NVL(:OLD.IDMULTMEDVRTOT, 0) ) = 'S' ) THEN 
            V_DSVRANTIGOLISTFIX := 'Sim'; 
          ELSE 
            V_DSVRANTIGOLISTFIX := 'Não'; 
          END IF; 

          IF( ( NVL(:NEW.IDMULTMEDVRTOT, 0) ) = 'S' ) THEN 
            V_DSVRNOVOLISTFIX := 'Sim'; 
          ELSE 
            V_DSVRNOVOLISTFIX := 'Não'; 
          END IF; 

          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Utiliza Quantidade de Medida?', 
                       :OLD.IDMULTMEDVRTOT, 
                       :NEW.IDMULTMEDVRTOT, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       V_DSVRANTIGOLISTFIX, 
                       V_DSVRNOVOLISTFIX ); 
        END IF; 

        IF ( NVL(:OLD.CDTPMEDIDASERV, 0) ) <> ( NVL(:NEW.CDTPMEDIDASERV, 0) ) 
        THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Tipo de Medida', 
                       :OLD.CDTPMEDIDASERV, 
                       :NEW.CDTPMEDIDASERV, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       (SELECT DSTPMEDIDASERV 
                        FROM   FCT_TIPOMEDIDASERV 
                        WHERE  CDTPMEDIDASERV = :OLD.CDTPMEDIDASERV 
                               AND NRORG = :NEW.NRORG), 
                       (SELECT DSTPMEDIDASERV 
                        FROM   FCT_TIPOMEDIDASERV 
                        WHERE  CDTPMEDIDASERV = :NEW.CDTPMEDIDASERV 
                               AND NRORG = :NEW.NRORG) ); 
        END IF; 

        IF ( NVL(:OLD.QTMEDIDAORCA, 0) ) <> ( NVL(:NEW.QTMEDIDAORCA, 0) ) THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Quantidade de Medida', 
                       :OLD.QTMEDIDAORCA, 
                       :NEW.QTMEDIDAORCA, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       TO_CHAR(:OLD.QTMEDIDAORCA, '999G999G999G990D99'), 
                       TO_CHAR(:NEW.QTMEDIDAORCA, '999G999G999G990D99') ); 
        END IF; 

        IF ( NVL(:OLD.VRUNITITEMORCA, 0) ) <> ( NVL(:NEW.VRUNITITEMORCA, 0) ) 
        THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Valor Unitário', 
                       :OLD.VRUNITITEMORCA, 
                       :NEW.VRUNITITEMORCA, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       'R$' 
                       ||TO_CHAR(:OLD.VRUNITITEMORCA, '999G999G999G990D99'), 
                       'R$' 
                       ||TO_CHAR(:NEW.VRUNITITEMORCA, '999G999G999G990D99') ); 
        END IF; 

        IF ( NVL(:OLD.IDTPDESCORCA, 0) ) <> ( NVL(:NEW.IDTPDESCORCA, 0) ) THEN 
          IF NVL(:OLD.IDTPDESCORCA, 0) = 'S' THEN 
            V_DSVRANTIGOLISTFIX := 'Sem Ajuste'; 
          ELSE 
            IF NVL(:OLD.IDTPDESCORCA, 0) = 'V' THEN 
              V_DSVRANTIGOLISTFIX := 'Desconto (valor)'; 
            ELSE 
              IF NVL(:OLD.IDTPDESCORCA, 0) = 'P' THEN 
                V_DSVRANTIGOLISTFIX := 'Desconto (porcentagem)'; 
              ELSE 
                IF NVL(:OLD.IDTPDESCORCA, 0) = 'X' THEN 
                  V_DSVRANTIGOLISTFIX := 'Acréscimo (valor)'; 
                ELSE 
                  IF NVL(:OLD.IDTPDESCORCA, 0) = 'Y' THEN 
                    V_DSVRANTIGOLISTFIX := 'Acréscimo (porcentagem)'; 
                  ELSE 
                    V_DSVRANTIGOLISTFIX := NULL; 
                  END IF; 
                END IF; 
              END IF; 
            END IF; 
          END IF; 

          IF NVL(:NEW.IDTPDESCORCA, 0) = 'S' THEN 
            V_DSVRNOVOLISTFIX := 'Sem Ajuste'; 
          ELSE 
            IF NVL(:NEW.IDTPDESCORCA, 0) = 'V' THEN 
              V_DSVRNOVOLISTFIX := 'Desconto (valor)'; 
            ELSE 
              IF NVL(:NEW.IDTPDESCORCA, 0) = 'P' THEN 
                V_DSVRNOVOLISTFIX := 'Desconto (porcentagem)'; 
              ELSE 
                IF NVL(:NEW.IDTPDESCORCA, 0) = 'X' THEN 
                  V_DSVRNOVOLISTFIX := 'Acréscimo (valor)'; 
                ELSE 
                  IF NVL(:NEW.IDTPDESCORCA, 0) = 'Y' THEN 
                    V_DSVRNOVOLISTFIX := 'Acréscimo (porcentagem)'; 
                  ELSE 
                    V_DSVRNOVOLISTFIX := NULL; 
                  END IF; 
                END IF; 
              END IF; 
            END IF; 
          END IF; 

          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Ajuste', 
                       :OLD.IDTPDESCORCA, 
                       :NEW.IDTPDESCORCA, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       V_DSVRANTIGOLISTFIX, 
                       V_DSVRNOVOLISTFIX ); 
        END IF; 

        IF ( NVL(:OLD.VRPERCDESCORCA, 0) ) <> ( NVL(:NEW.VRPERCDESCORCA, 0) ) 
        THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Valor do Ajuste', 
                       :OLD.VRPERCDESCORCA, 
                       :NEW.VRPERCDESCORCA, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       TO_CHAR(:OLD.VRPERCDESCORCA, '999G999G999G990D99'), 
                       TO_CHAR(:NEW.VRPERCDESCORCA, '999G999G999G990D99') ); 
        END IF; 

        IF ( NVL(:OLD.VRITEMSEMDESC, 0) ) <> ( NVL(:NEW.VRITEMSEMDESC, 0) ) THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Valor sem Ajuste', 
                       :OLD.VRITEMSEMDESC, 
                       :NEW.VRITEMSEMDESC, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       'R$' 
                       ||TO_CHAR(:OLD.VRITEMSEMDESC, '999G999G999G990D99'), 
                       'R$' 
                       ||TO_CHAR(:NEW.VRITEMSEMDESC, '999G999G999G990D99') ); 
        END IF; 

        IF ( NVL(:OLD.VRTOTALITEMORCA, 0) ) <> ( NVL(:NEW.VRTOTALITEMORCA, 0) ) 
        THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Valor Total', 
                       :OLD.VRTOTALITEMORCA, 
                       :NEW.VRTOTALITEMORCA, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       'R$' 
                       ||TO_CHAR(:OLD.VRTOTALITEMORCA, '999G999G999G990D99'), 
                       'R$' 
                       ||TO_CHAR(:NEW.VRTOTALITEMORCA, '999G999G999G990D99') ); 
        END IF; 

        IF ( NVL(:OLD.NRTIPOORCAMENTO, 0) ) <> ( NVL(:NEW.NRTIPOORCAMENTO, 0) ) 
        THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Escopo da Proposta', 
                       :OLD.NRTIPOORCAMENTO, 
                       :NEW.NRTIPOORCAMENTO, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       (SELECT NMTIPOORCAMENTO 
                        FROM   FCT_TIPOORCAMENTO 
                        WHERE  NRTIPOORCAMENTO = :OLD.NRTIPOORCAMENTO 
                               AND NRORG = :NEW.NRORG), 
                       (SELECT NMTIPOORCAMENTO 
                        FROM   FCT_TIPOORCAMENTO 
                        WHERE  NRTIPOORCAMENTO = :NEW.NRTIPOORCAMENTO 
                               AND NRORG = :NEW.NRORG) ); 
        END IF; 

        IF ( NVL(:OLD.IDFATURAORCA, 0) ) <> ( NVL(:NEW.IDFATURAORCA, 0) ) THEN 
          IF NVL(:OLD.IDFATURAORCA, 0) = 'A' THEN 
            V_DSVRANTIGOLISTFIX := 'Periódico'; 
          ELSE 
            IF NVL(:OLD.IDFATURAORCA, 0) = 'O' THEN 
              V_DSVRANTIGOLISTFIX := 'Modalidade de Pagamento'; 
            ELSE 
              IF NVL(:OLD.IDFATURAORCA, 0) = 'P' THEN 
                V_DSVRANTIGOLISTFIX := 'Parcelamento'; 
              ELSE 
                IF NVL(:OLD.IDFATURAORCA, 0) = 'X' THEN 
                  V_DSVRANTIGOLISTFIX := 'Apuração'; 
                ELSE 
                  V_DSVRANTIGOLISTFIX := NULL; 
                END IF; 
              END IF; 
            END IF; 
          END IF; 

          IF NVL(:NEW.IDFATURAORCA, 0) = 'A' THEN 
            V_DSVRNOVOLISTFIX := 'Periódico'; 
          ELSE 
            IF NVL(:NEW.IDFATURAORCA, 0) = 'O' THEN 
              V_DSVRNOVOLISTFIX := 'Modalidade de Pagamento'; 
            ELSE 
              IF NVL(:NEW.IDFATURAORCA, 0) = 'P' THEN 
                V_DSVRNOVOLISTFIX := 'Parcelamento'; 
              ELSE 
                IF NVL(:NEW.IDFATURAORCA, 0) = 'X' THEN 
                  V_DSVRNOVOLISTFIX := 'Apuração'; 
                ELSE 
                  V_DSVRNOVOLISTFIX := NULL; 
                END IF; 
              END IF; 
            END IF; 
          END IF; 

          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Tipo de Faturamento', 
                       :OLD.IDFATURAORCA, 
                       :NEW.IDFATURAORCA, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       V_DSVRANTIGOLISTFIX, 
                       V_DSVRNOVOLISTFIX ); 
        END IF; 

        IF ( NVL(:OLD.CDMODPGTO, 0) ) <> ( NVL(:NEW.CDMODPGTO, 0) ) THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Modalidade de Pagamento', 
                       :OLD.CDMODPGTO, 
                       :NEW.CDMODPGTO, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       (SELECT DSMODPGTO 
                        FROM   MODPGTO 
                        WHERE  CDMODPGTO = :OLD.CDMODPGTO 
                               AND NRORG = :NEW.NRORG), 
                       (SELECT DSMODPGTO 
                        FROM   MODPGTO 
                        WHERE  CDMODPGTO = :NEW.CDMODPGTO 
                               AND NRORG = :NEW.NRORG) ); 
        END IF; 

        IF ( NVL(:OLD.QTPARCELASFATU, 0) ) <> ( NVL(:NEW.QTPARCELASFATU, 0) ) 
        THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Quantidade de Parcelas', 
                       :OLD.QTPARCELASFATU, 
                       :NEW.QTPARCELASFATU, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       NULL, 
                       NULL ); 
        END IF; 

        IF ( NVL(:OLD.NRDIAVENCPARCELASFATU, 0) ) <> ( 
           NVL(:NEW.NRDIAVENCPARCELASFATU, 0) ) THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Dia para Vencimento', 
                       :OLD.NRDIAVENCPARCELASFATU, 
                       :NEW.NRDIAVENCPARCELASFATU, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       NULL, 
                       NULL ); 
        END IF; 

        IF ( NVL(:OLD.NRGRUPOFATURA, 0) ) <> ( NVL(:NEW.NRGRUPOFATURA, 0) ) THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Grupo de Faturamento', 
                       :OLD.NRGRUPOFATURA, 
                       :NEW.NRGRUPOFATURA, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       (SELECT NMGRUPOFATURA 
                        FROM   FCT_GRUPOFATURA 
                        WHERE  NRGRUPOFATURA = :OLD.NRGRUPOFATURA 
                               AND NRORG = :NEW.NRORG), 
                       (SELECT NMGRUPOFATURA 
                        FROM   FCT_GRUPOFATURA 
                        WHERE  NRGRUPOFATURA = :NEW.NRGRUPOFATURA 
                               AND NRORG = :NEW.NRORG) ); 
        END IF; 

        IF ( NVL(TO_CHAR(:OLD.DTINICFATORC), 0) ) <> ( 
           NVL(TO_CHAR(:NEW.DTINICFATORC), 0) ) THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Data Início do Faturamento', 
                       :OLD.DTINICFATORC, 
                       :NEW.DTINICFATORC, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       NULL, 
                       NULL ); 
        END IF; 

        IF ( NVL(:OLD.IDIMPRESSAOORCA, 0) ) <> ( NVL(:NEW.IDIMPRESSAOORCA, 0) ) 
        THEN 
          IF( ( NVL(:OLD.IDIMPRESSAOORCA, 0) ) = 'S' ) THEN 
            V_DSVRANTIGOLISTFIX := 'Sim'; 
          ELSE 
            V_DSVRANTIGOLISTFIX := 'Não'; 
          END IF; 

          IF( ( NVL(:NEW.IDIMPRESSAOORCA, 0) ) = 'S' ) THEN 
            V_DSVRNOVOLISTFIX := 'Sim'; 
          ELSE 
            V_DSVRNOVOLISTFIX := 'Não'; 
          END IF; 

          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       || 
          'O item deve ser exibido no documento referente à proposta?', 
                       :OLD.IDIMPRESSAOORCA, 
                       :NEW.IDIMPRESSAOORCA, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       V_DSVRANTIGOLISTFIX, 
                       V_DSVRNOVOLISTFIX ); 
        END IF; 

        IF ( NVL(:OLD.TXFORMULAITORCA, 0) ) <> ( NVL(:NEW.TXFORMULAITORCA, 0) ) 
        THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Itens - ' 
                       || V_NOMEITEM 
                       ||'Observações referentes ao serviço', 
                       :OLD.TXFORMULAITORCA, 
                       :NEW.TXFORMULAITORCA, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       NULL, 
                       NULL ); 
        END IF; 
      ELSE 
        IF INSERTING THEN 
          NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

          INSERT INTO FCT_LOGDADOSPROP 
                      (NRLOGDADOSPROP, 
                       NRSEQORCAMENTO, 
                       NRITEMORCAMENTO, 
                       DSCAMPOALTERADO, 
                       VALORANTIGO, 
                       VALORNOVO, 
                       NRORG, 
                       DTALTERACAO, 
                       CDOPERALTERACAO, 
                       DSVALORANTIGO, 
                       DSVALORNOVO) 
          VALUES      ( V_NRLOGDADOSPROP, 
                       :NEW.NRSEQORCAMENTO, 
                       :NEW.NRITEMORCAMENTO, 
                       'Item Inserido', 
                       NULL, 
                       NULL, 
                       :NEW.NRORG, 
                       SYSDATE, 
                       :NEW.CDOPERULTATU, 
                       NULL, 
                       :NEW.NMITEMORCAMENTO ); 
        ELSE 
          IF DELETING THEN 
            NOVO_CODIGO_SC('FCT_LOGDADOSPROP', V_NRLOGDADOSPROP, 1); 

            INSERT INTO FCT_LOGDADOSPROP 
                        (NRLOGDADOSPROP, 
                         NRSEQORCAMENTO, 
                         NRITEMORCAMENTO, 
                         DSCAMPOALTERADO, 
                         VALORANTIGO, 
                         VALORNOVO, 
                         NRORG, 
                         DTALTERACAO, 
                         CDOPERALTERACAO, 
                         DSVALORANTIGO, 
                         DSVALORNOVO) 
            VALUES      ( V_NRLOGDADOSPROP, 
                         :OLD.NRSEQORCAMENTO, 
                         :OLD.NRITEMORCAMENTO, 
                         'Item Deletado', 
                         NULL, 
                         NULL, 
                         :OLD.NRORG, 
                         SYSDATE, 
                         :OLD.CDOPERULTATU, 
                         :OLD.NMITEMORCAMENTO, 
                         NULL ); 
          END IF; 
        END IF; 
      END IF; 
    END IF; 
  COMMIT;
END; 
/
