create or replace TRIGGER LOG_FCT_COMPETENCIANEGOCONT BEFORE 
    DELETE OR UPDATE ON FCT_COMPETENCIANEGOCONT 
    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;
        V_IDTPCALCVENCOLD     VARCHAR2(100);
        V_IDTPCALCVENCNEW     VARCHAR2(100);

    BEGIN
    
        BEGIN
              SELECT NRSEQCONTRATO
              INTO V_NRSEQCONTRATO
              FROM FCT_NEGOCIACAOCONTRATO
              WHERE NRNEGOCIACAOCONTRATO = :NEW.NRNEGOCIACAOCONTRATO;
        EXCEPTION
              WHEN NO_DATA_FOUND THEN BEGIN
                 V_NRSEQCONTRATO := NULL;
              END;
        END;

        IF UPDATING THEN
            V_CAMPOALTERADO := 'Competencia da Negociacao - ';
            
            IF (NVL(:OLD.NRDIACOMPETINI,0) ) <> ( NVL(:NEW.NRDIACOMPETINI,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 da Competencia Inicial',
                            :OLD.NRDIACOMPETINI,
                            :NEW.NRDIACOMPETINI,
                            :NEW.NRORG,
                            SYSDATE,
                            :NEW.CDOPERULTATU,
                            :NEW.NRNEGOCIACAOCONTRATO
                        );
                    END IF;
                    
                     IF (NVL(:OLD.IDMESCOMPETINI,0) ) <> ( NVL(:NEW.IDMESCOMPETINI,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||'Mes da Competencia Inicial',
                            :OLD.IDMESCOMPETINI,
                            :NEW.IDMESCOMPETINI,
                            :NEW.NRORG,
                            SYSDATE,
                            :NEW.CDOPERULTATU,
                            :NEW.NRNEGOCIACAOCONTRATO
                        );
                    END IF;
                    
                    IF (NVL(:OLD.NRDIACOMPETFIN,0) ) <> ( NVL(:NEW.NRDIACOMPETFIN,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 da Competencia Final ',
                            :OLD.NRDIACOMPETFIN,
                            :NEW.NRDIACOMPETFIN,
                            :NEW.NRORG,
                            SYSDATE,
                            :NEW.CDOPERULTATU,
                            :NEW.NRNEGOCIACAOCONTRATO
                        );
                    END IF;
                    
                    IF (NVL(:OLD.IDMESCOMPETFIN,0) ) <> ( NVL(:NEW.IDMESCOMPETFIN,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||'Mes da Competencia Final',
                            :OLD.IDMESCOMPETFIN,
                            :NEW.IDMESCOMPETFIN,
                            :NEW.NRORG,
                            SYSDATE,
                            :NEW.CDOPERULTATU,
                            :NEW.NRNEGOCIACAOCONTRATO
                        );
                    END IF;
                    
                    IF (NVL(:OLD.QTDIASAPURACAO,0) ) <> ( NVL(:NEW.QTDIASAPURACAO,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 a Apuracao',
                            :OLD.QTDIASAPURACAO,
                            :NEW.QTDIASAPURACAO,
                            :NEW.NRORG,
                            SYSDATE,
                            :NEW.CDOPERULTATU,
                            :NEW.NRNEGOCIACAOCONTRATO
                        );
                    END IF;
                    
                    IF (NVL(:OLD.IDTPCALCVENC,0) ) <> ( NVL(:NEW.IDTPCALCVENC,0) ) THEN
                        NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);

                        IF (:OLD.IDTPCALCVENC = '1') THEN
                            V_IDTPCALCVENCOLD := 'Dia fixo para a data de vencimento';
                        ELSE 
                            IF (:OLD.IDTPCALCVENC = '2') THEN
                                V_IDTPCALCVENCOLD := 'Quantidade de dias apos a data de emissao';
                            ELSE
                                V_IDTPCALCVENCOLD := NULL;
                            END IF;
                        END IF;

                        IF (:NEW.IDTPCALCVENC = '1') THEN
                            V_IDTPCALCVENCNEW := 'Dia fixo para a data de vencimento';
                        ELSE 
                            IF (:NEW.IDTPCALCVENC = '2') THEN
                                V_IDTPCALCVENCNEW := 'Quantidade de dias apos a data de emissao';
                            ELSE
                                V_IDTPCALCVENCNEW := NULL;
                            END IF;
                        END IF;

                        INSERT INTO FCT_LOGDADOSCONT (
                            NRLOGDADOSCONT,
                            NRSEQCONTRATO,
                            DSCAMPOALTERADO,
                            VALORANTIGO,
                            VALORNOVO,
                            NRORG,
                            DTALTERACAO,
                            CDOPERALTERACAO,
                            NRITEMOCONTRATO
                        ) VALUES (
                            V_NRLOGDADOSCONT,
                            V_NRSEQCONTRATO,
                            V_CAMPOALTERADO||'Tipo de Calculo do Vencimento',
                            V_IDTPCALCVENCOLD,
                            V_IDTPCALCVENCNEW,
                            :NEW.NRORG,
                            SYSDATE,
                            :NEW.CDOPERULTATU,
                            :NEW.NRNEGOCIACAOCONTRATO
                        );
                    END IF;
                    
                    IF (NVL(:OLD.NRDIACALCVENC,0) ) <> ( NVL(:NEW.NRDIACALCVENC,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.NRDIACALCVENC,
                            :NEW.NRDIACALCVENC,
                            :NEW.NRORG,
                            SYSDATE,
                            :NEW.CDOPERULTATU,
                            :NEW.NRNEGOCIACAOCONTRATO
                        );
                    END IF;
                    
                    IF (NVL(:OLD.IDMESCALCVENC,0) ) <> ( NVL(:NEW.IDMESCALCVENC,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||'Mes para Calculo do Vencimento',
                            :OLD.IDMESCALCVENC,
                            :NEW.IDMESCALCVENC,
                            :NEW.NRORG,
                            SYSDATE,
                            :NEW.CDOPERULTATU,
                            :NEW.NRNEGOCIACAOCONTRATO
                        );
                    END IF;
                    
                    IF (NVL(:OLD.QTDIASFATUVENC,0) ) <> ( NVL(:NEW.QTDIASFATUVENC,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||'Dias Minimos entre Faturamento e Vencimento',
                            :OLD.QTDIASFATUVENC,
                            :NEW.QTDIASFATUVENC,
                            :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,
                     'Competencia da Negociacao deletada',
                     NULL,
                     NULL,
                     :OLD.NRORG,
                     SYSDATE,
                     :OLD.CDOPERULTATU,
                     :NEW.NRNEGOCIACAOCONTRATO
                );
            END IF;
        END IF;
    COMMIT;
END;
/