CREATE OR REPLACE TRIGGER LOG_FCT_NEGOCIACAOCONTRATO
BEFORE UPDATE OR INSERT OR DELETE ON FCT_NEGOCIACAOCONTRATO
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_NMESTRUTURAOLD      VARCHAR2(100);
    V_NMESTRUTURANEW      VARCHAR2(100);
    V_NMMUNICIPIOFATOLD   VARCHAR2(100);
    V_NMMUNICIPIOFATNEW   VARCHAR2(100);
    V_NMTIPOOPERACOLD     VARCHAR2(100);
    V_NMTIPOOPERACNEW     VARCHAR2(100);
    V_NMFILIALOLD         VARCHAR2(100);
    V_NMFILIALNEW         VARCHAR2(100);
    V_IDTPFATURAOLD       VARCHAR2(100);
    V_IDTPFATURANEW       VARCHAR2(100);
    V_IDNATUOPEROLD       VARCHAR2(100);
    V_IDNATUOPERNEW       VARCHAR2(100);
    V_IDTPDESCONTOOLD     VARCHAR2(100);
    V_IDTPDESCONTONEW     VARCHAR2(100);
        
BEGIN

    IF UPDATING THEN
        V_CAMPOALTERADO := 'Negociacao de Valores - ';
                    
        IF (NVL(:OLD.VRTOTITEM,0) ) <> ( NVL(:NEW.VRTOTITEM,0) ) THEN
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);
            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO
            ) VALUES (
                V_NRLOGDADOSCONT,
                :NEW.NRSEQCONTRATO,
                V_CAMPOALTERADO||'Valor Total',
                'R$'||TO_CHAR(:OLD.VRTOTITEM , 'FM999G999G999G999G999D90', 'NLS_NUMERIC_CHARACTERS = ''.,'''),
                'R$'||TO_CHAR(:NEW.VRTOTITEM , 'FM999G999G999G999G999D90', 'NLS_NUMERIC_CHARACTERS = ''.,'''),
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU
            );
        END IF;
        
        IF (NVL(:OLD.VRPERCDESCITEM,0) ) <> ( NVL(:NEW.VRPERCDESCITEM,0) ) THEN
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);
            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO
            ) VALUES (
                V_NRLOGDADOSCONT,
                :NEW.NRSEQCONTRATO,
                V_CAMPOALTERADO||'Percentual de Desconto',
                :OLD.VRPERCDESCITEM,
                :NEW.VRPERCDESCITEM,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU
            );
        END IF;
        
        IF (NVL(:OLD.VRDESCITEM,0) ) <> ( NVL(:NEW.VRDESCITEM,0) ) THEN
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);
            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO
            ) VALUES (
                V_NRLOGDADOSCONT,
                :NEW.NRSEQCONTRATO,
                V_CAMPOALTERADO||'Valor do Desconto',
                'R$'||TO_CHAR(:OLD.VRDESCITEM , 'FM999G999G999G999G999D90', 'NLS_NUMERIC_CHARACTERS = ''.,'''),
                'R$'||TO_CHAR(:NEW.VRDESCITEM , 'FM999G999G999G999G999D90', 'NLS_NUMERIC_CHARACTERS = ''.,'''),
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU
            );
        END IF;
        
        IF (NVL(:OLD.IDTPDESCONTO,0) ) <> ( NVL(:NEW.IDTPDESCONTO,0) ) THEN
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);


            IF (:OLD.IDTPDESCONTO = 'P') THEN
                V_IDTPDESCONTOOLD := 'Na quantidade medida total (vendida + adicional)';
            ELSE 
                IF (:OLD.IDTPDESCONTO = 'V') THEN
                    V_IDTPDESCONTOOLD := 'Apenas na quantidade vendida';
                ELSE
                    V_IDTPDESCONTOOLD := NULL;
                END IF;
            END IF;

            IF (:NEW.IDTPDESCONTO = 'P') THEN
                V_IDTPDESCONTONEW := 'Na quantidade medida total (vendida + adicional)';
            ELSE 
                IF (:NEW.IDTPDESCONTO = 'V') THEN
                    V_IDTPDESCONTONEW := 'Apenas na quantidade vendida';
                ELSE
                    V_IDTPDESCONTONEW := NULL;
                END IF;
            END IF;


            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO
            ) VALUES (
                V_NRLOGDADOSCONT,
                :NEW.NRSEQCONTRATO,
                V_CAMPOALTERADO||'Tipo de Desconto',
                V_IDTPDESCONTOOLD,
                V_IDTPDESCONTONEW,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU
            );
        END IF;
        
        IF (NVL(:OLD.VRTOTITEMCOMDESC,0) ) <> ( NVL(:NEW.VRTOTITEMCOMDESC,0) ) THEN
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);
            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO
            ) VALUES (
                V_NRLOGDADOSCONT,
                :NEW.NRSEQCONTRATO,
                V_CAMPOALTERADO||'Valor Total Com Desconto',
                'R$'||TO_CHAR(:OLD.VRTOTITEMCOMDESC , 'FM999G999G999G999G999D90', 'NLS_NUMERIC_CHARACTERS = ''.,'''),
                'R$'||TO_CHAR(:NEW.VRTOTITEMCOMDESC , 'FM999G999G999G999G999D90', 'NLS_NUMERIC_CHARACTERS = ''.,'''),
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU
            );
        END IF;
        
        IF (NVL(:OLD.IDTPFATURA,0) ) <> ( NVL(:NEW.IDTPFATURA,0) ) THEN
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);

            IF (:OLD.IDTPFATURA = 'A') THEN
                V_IDTPFATURAOLD := 'Periodico (valor de parcela fixo)';
            ELSE 
                IF (:OLD.IDTPFATURA = 'X') THEN
                    V_IDTPFATURAOLD := 'Periodico (Valor Apurado por Medicao)';
                ELSE 
                    IF (:OLD.IDTPFATURA = 'P') THEN
                        V_IDTPFATURAOLD := 'Parcelamento (Quantidade de Parcelas)';
                    ELSE
                        V_IDTPFATURAOLD := NULL;
                    END IF;
                END IF;
            END IF;

            IF (:NEW.IDTPFATURA = 'A') THEN
                V_IDTPFATURANEW := 'Periodico (valor de parcela fixo)';
            ELSE 
                IF (:NEW.IDTPFATURA = 'X') THEN
                    V_IDTPFATURANEW := 'Periodico (Valor Apurado por Medicao)';
                ELSE 
                    IF (:NEW.IDTPFATURA = 'P') THEN
                        V_IDTPFATURANEW := 'Parcelamento (Quantidade de Parcelas)';
                    ELSE
                        V_IDTPFATURANEW := NULL;
                    END IF;
                END IF;
            END IF;


            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO
            ) VALUES (
                V_NRLOGDADOSCONT,
                :NEW.NRSEQCONTRATO,
                V_CAMPOALTERADO||'Tipo de Faturamento',
                V_IDTPFATURAOLD,
                V_IDTPFATURANEW,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU
            );
        END IF;
            
        IF (NVL(:OLD.CDFILIALFATURA,0) ) <> ( NVL(:NEW.CDFILIALFATURA,0) ) THEN
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);

            SELECT NMFILIAL
            INTO V_NMFILIALOLD
            FROM FILIAL 
            WHERE CDFILIAL = :OLD.CDFILIALFATURA;
            
            SELECT NMFILIAL
            INTO V_NMFILIALNEW
            FROM FILIAL 
            WHERE CDFILIAL = :NEW.CDFILIALFATURA;

            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO
            ) VALUES (
                V_NRLOGDADOSCONT,
                :NEW.NRSEQCONTRATO,
                V_CAMPOALTERADO||'Unidade para Faturamento',
                V_NMFILIALOLD,
                V_NMFILIALNEW,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU
            );
        END IF;
        
        IF (NVL(:OLD.CDTIPOOPERFATURA,0) ) <> ( NVL(:NEW.CDTIPOOPERFATURA,0) ) THEN
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);

            SELECT NMTIPOOPER
            INTO V_NMTIPOOPERACOLD
            FROM TIPOOPERAC 
            WHERE CDTIPOOPER = :OLD.CDTIPOOPERFATURA;
            
            SELECT NMTIPOOPER
            INTO V_NMTIPOOPERACNEW
            FROM TIPOOPERAC 
            WHERE CDTIPOOPER = :NEW.CDTIPOOPERFATURA;

            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO
            ) VALUES (
                V_NRLOGDADOSCONT,
                :NEW.NRSEQCONTRATO,
                V_CAMPOALTERADO||'Tipo de Operacao da NF',
                V_NMTIPOOPERACOLD,
                V_NMTIPOOPERACNEW,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU
            );
        END IF;
        
        IF (NVL(:OLD.CDMUNICIPIOFAT, 0) <> NVL(:NEW.CDMUNICIPIOFAT, 0)) THEN
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);

            IF (:OLD.CDMUNICIPIOFAT IS NULL) THEN
                V_NMMUNICIPIOFATOLD := NULL;
            ELSE
                SELECT NMMUNICIPIO
                  INTO V_NMMUNICIPIOFATOLD
                  FROM MUNICIPIO 
                 WHERE CDMUNICIPIO = :OLD.CDMUNICIPIOFAT;
            END IF;
            
            SELECT NMMUNICIPIO
              INTO V_NMMUNICIPIOFATNEW
              FROM MUNICIPIO 
             WHERE CDMUNICIPIO = :NEW.CDMUNICIPIOFAT;

            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO
            ) VALUES (
                V_NRLOGDADOSCONT,
                :NEW.NRSEQCONTRATO,
                V_CAMPOALTERADO||'Municipio para Faturamento',
                V_NMMUNICIPIOFATOLD,
                V_NMMUNICIPIOFATNEW,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU
            );
        END IF;
       
        IF (NVL(:OLD.IDNATUOPER,0) ) <> ( NVL(:NEW.IDNATUOPER,0) ) THEN

            IF (:OLD.IDNATUOPER = '01') THEN
                V_IDNATUOPEROLD := '01 - Tributacao no Municipio';
            ELSE 
                IF (:OLD.IDNATUOPER = '02') THEN
                    V_IDNATUOPEROLD := '02 - Tributacao Fora do Municipio';
                ELSE 
                    IF (:OLD.IDNATUOPER = '03') THEN
                        V_IDNATUOPEROLD := '03 - Isencao';
                    ELSE 
                        IF (:OLD.IDNATUOPER = '04') THEN
                            V_IDNATUOPEROLD := '04 - Imune';
                        ELSE 
                            IF (:OLD.IDNATUOPER = '05') THEN
                                V_IDNATUOPEROLD := '05 - Exigibilidade Suspensa por Decisao Judicial';
                            ELSE 
                                IF (:OLD.IDNATUOPER = '06') THEN
                                    V_IDNATUOPEROLD := '06 - Exigibilidade Suspensa por Procedimento Administrativo';
                                ELSE 
                                    IF (:OLD.IDNATUOPER = '07') THEN
                                        V_IDNATUOPEROLD := '07 - Nao Incidencia';
                                    ELSE 
                                        IF (:OLD.IDNATUOPER = '08') THEN
                                            V_IDNATUOPEROLD := '08 - Exportacao';
                                        ELSE
                                            V_IDNATUOPEROLD := NULL;
                                        END IF;
                                    END IF;
                                END IF;
                            END IF;
                        END IF;
                    END IF;
                END IF;
            END IF;

            IF (:NEW.IDNATUOPER = '01') THEN
                V_IDNATUOPERNEW := '01 - Tributacao no Municipio';
            ELSE 
                IF (:NEW.IDNATUOPER = '02') THEN
                    V_IDNATUOPERNEW := '02 - Tributacao Fora do Municipio';
                ELSE 
                    IF (:NEW.IDNATUOPER = '03') THEN
                        V_IDNATUOPERNEW := '03 - Isencao';
                    ELSE 
                        IF (:NEW.IDNATUOPER = '04') THEN
                            V_IDNATUOPERNEW := '04 - Imune';
                        ELSE 
                            IF (:NEW.IDNATUOPER = '05') THEN
                                V_IDNATUOPERNEW := '05 - Exigibilidade Suspensa por Decisao Judicial';
                            ELSE 
                                IF (:NEW.IDNATUOPER = '06') THEN
                                    V_IDNATUOPERNEW := '06 - Exigibilidade Suspensa por Procedimento Administrativo';
                                ELSE 
                                    IF (:NEW.IDNATUOPER = '07') THEN
                                        V_IDNATUOPERNEW := '07 - Nao Incidencia';
                                    ELSE 
                                        IF (:NEW.IDNATUOPER = '08') THEN
                                            V_IDNATUOPERNEW := '08 - Exportacao';
                                        ELSE
                                            V_IDNATUOPERNEW := NULL;
                                        END IF;
                                    END IF;
                                END IF;
                            END IF;
                        END IF;
                    END IF;
                END IF;
            END IF;
            

            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);
            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO
            ) VALUES (
                V_NRLOGDADOSCONT,
                :NEW.NRSEQCONTRATO,
                V_CAMPOALTERADO||'Natureza da Operacao',
                V_IDNATUOPEROLD,
                V_IDNATUOPERNEW,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU
            );
        END IF;
        
        IF (NVL(:OLD.CDTRIBPRODPADR,0) ) <> ( NVL(:NEW.CDTRIBPRODPADR,0) ) THEN
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);
            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO
            ) VALUES (
                V_NRLOGDADOSCONT,
                :NEW.NRSEQCONTRATO,
                V_CAMPOALTERADO||'Codigo de Tributacao do Servico',
                :OLD.CDTRIBPRODPADR,
                :NEW.CDTRIBPRODPADR,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU
            );
        END IF;
        
        IF (NVL(:OLD.CDSERIENF,0) ) <> ( NVL(:NEW.CDSERIENF,0) ) THEN
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);
            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO
            ) VALUES (
                V_NRLOGDADOSCONT,
                :NEW.NRSEQCONTRATO,
                V_CAMPOALTERADO||'Serie da Nota Fiscal',
                :OLD.CDSERIENF,
                :NEW.CDSERIENF,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU
            );
        END IF;
        
        IF (NVL(:OLD.NRESTRUTURAM,0) ) <> ( NVL(:NEW.NRESTRUTURAM,0) ) THEN
            
            SELECT NMESTRUTURAM
            INTO V_NMESTRUTURAOLD
            FROM ESTRUTURAM 
            WHERE NRESTRUTURAM = :OLD.NRESTRUTURAM;
            
            SELECT NMESTRUTURAM
            INTO V_NMESTRUTURANEW
            FROM ESTRUTURAM 
            WHERE NRESTRUTURAM = :NEW.NRESTRUTURAM;
            
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);
            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO
            ) VALUES (
                V_NRLOGDADOSCONT,
                :NEW.NRSEQCONTRATO,
                V_CAMPOALTERADO||'Local de Atendimento',
                V_NMESTRUTURAOLD,
                V_NMESTRUTURANEW,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU
            );
        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
              ) VALUES (
                V_NRLOGDADOSCONT,
                 :OLD.NRSEQCONTRATO,
                 'Negociacao de Valores deletada',
                 NULL,
                 NULL,
                 :OLD.NRORG,
                 SYSDATE,
                 :OLD.CDOPERULTATU
            );
        ELSE
            IF INSERTING THEN

            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);
            INSERT INTO FCT_LOGDADOSCONT (
                 NRLOGDADOSCONT,
                 NRSEQCONTRATO,
                 DSCAMPOALTERADO,
                 VALORANTIGO,
                 VALORNOVO,
                 NRORG,
                 DTALTERACAO,
                 CDOPERALTERACAO,
                 DSVALORANTIGO,
                 DSVALORNOVO
              ) VALUES (
                V_NRLOGDADOSCONT,
                 :NEW.NRSEQCONTRATO,
                 'Negociacao de Valores inserida',
                 NULL,
                 NULL,
                 :NEW.NRORG,
                 SYSDATE,
                 :NEW.CDOPERULTATU,
                 NULL,
                 NULL
            );
            END IF;
        END IF;
    END IF;
    
    COMMIT;
END;
/