CREATE OR REPLACE TRIGGER LOG_FCT_PARCELANEGOCONT
BEFORE DELETE OR UPDATE ON FCT_PARCELANEGOCONT 
FOR EACH ROW
DECLARE
    PRAGMA AUTONOMOUS_TRANSACTION;
    V_NRLOGDADOSCONT      NUMBER;
    V_CAMPOALTERADO       VARCHAR2(100);
    V_NOMEITEM            VARCHAR2(250);
    V_DSVRANTIGOLISTFIX   VARCHAR2(100);
    V_DSVRNOVOLISTFIX     VARCHAR2(100);
    V_NRSEQCONTRATO       NUMBER;
BEGIN
    BEGIN
        SELECT NRSEQCONTRATO
        INTO V_NRSEQCONTRATO
        FROM FCT_NEGOCIACAOCONTRATO
        WHERE NRNEGOCIACAOCONTRATO = :OLD.NRNEGOCIACAOCONTRATO;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN BEGIN
            V_NRSEQCONTRATO := NULL;
        END;
    END;

    IF (V_NRSEQCONTRATO IS NOT NULL) THEN

        IF UPDATING THEN
            V_CAMPOALTERADO := 'Parcelas da Negociacao - ';    

            IF (NVL(:OLD.QTDIASFATURAMENTO,0) ) <> ( NVL(:NEW.QTDIASFATURAMENTO,0) ) THEN
                NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);
                INSERT INTO FCT_LOGDADOSCONT (
                    NRLOGDADOSCONT,
                    NRSEQCONTRATO,
                    DSCAMPOALTERADO,
                    VALORANTIGO,
                    VALORNOVO,
                    NRORG,
                    DTALTERACAO,
                    CDOPERALTERACAO,
                    NRITEMOCONTRATO
                ) VALUES (
                    V_NRLOGDADOSCONT,
                    V_NRSEQCONTRATO,
                    V_CAMPOALTERADO||'Quantidade de Dias para Faturamento',
                    :OLD.QTDIASFATURAMENTO,
                    :NEW.QTDIASFATURAMENTO,
                    :NEW.NRORG,
                    SYSDATE,
                    :NEW.CDOPERULTATU,
                    :NEW.NRNEGOCIACAOCONTRATO
                );
            END IF;
            
            IF (NVL(:OLD.NRDIAVENCIMENTO,0) ) <> ( NVL(:NEW.NRDIAVENCIMENTO,0) ) THEN
                NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);
                INSERT INTO FCT_LOGDADOSCONT (
                    NRLOGDADOSCONT,
                    NRSEQCONTRATO,
                    DSCAMPOALTERADO,
                    VALORANTIGO,
                    VALORNOVO,
                    NRORG,
                    DTALTERACAO,
                    CDOPERALTERACAO,
                    NRITEMOCONTRATO
                ) VALUES (
                    V_NRLOGDADOSCONT,
                    V_NRSEQCONTRATO,
                    V_CAMPOALTERADO||'Dia de Vencimento',
                    :OLD.NRDIAVENCIMENTO,
                    :NEW.NRDIAVENCIMENTO,
                    :NEW.NRORG,
                    SYSDATE,
                    :NEW.CDOPERULTATU,
                    :NEW.NRNEGOCIACAOCONTRATO
                );
            END IF;
            
            IF (NVL(:OLD.VRPARCELA,0) ) <> ( NVL(:NEW.VRPARCELA,0) ) THEN
                NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);
                INSERT INTO FCT_LOGDADOSCONT (
                    NRLOGDADOSCONT,
                    NRSEQCONTRATO,
                    DSCAMPOALTERADO,
                    VALORANTIGO,
                    VALORNOVO,
                    NRORG,
                    DTALTERACAO,
                    CDOPERALTERACAO,
                    NRITEMOCONTRATO
                ) VALUES (
                    V_NRLOGDADOSCONT,
                    V_NRSEQCONTRATO,
                    V_CAMPOALTERADO||'Valor da Parcela',
                    'R$'||TO_CHAR(:OLD.VRPARCELA , 'FM999G999G999G999G999D90', 'NLS_NUMERIC_CHARACTERS = ''.,'''),
                    'R$'||TO_CHAR(:NEW.VRPARCELA , 'FM999G999G999G999G999D90', 'NLS_NUMERIC_CHARACTERS = ''.,'''),
                    :NEW.NRORG,
                    SYSDATE,
                    :NEW.CDOPERULTATU,
                    :NEW.NRNEGOCIACAOCONTRATO
                );
            END IF;
        ELSE
            IF DELETING THEN
                NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);
                INSERT INTO FCT_LOGDADOSCONT (
                     NRLOGDADOSCONT,
                     NRSEQCONTRATO,
                     DSCAMPOALTERADO,
                     VALORANTIGO,
                     VALORNOVO,
                     NRORG,
                     DTALTERACAO,
                     CDOPERALTERACAO,
                     NRITEMOCONTRATO
                  ) VALUES (
                    V_NRLOGDADOSCONT,
                    V_NRSEQCONTRATO,
                     'Parcela Deletada',
                     NULL,
                     NULL,
                     :OLD.NRORG,
                     SYSDATE,
                     :OLD.CDOPERULTATU,
                     :NEW.NRNEGOCIACAOCONTRATO
                );
            END IF;
        END IF;
        
        COMMIT;

    END IF; --V_NRSEQCONTRATO IS NOT NULL
END;
/