CREATE OR REPLACE TRIGGER LOG_FCT_ITNEGOCIACAOCONTRATO
BEFORE DELETE OR UPDATE ON FCT_ITNEGOCIACAOCONTRATO
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_ITEMCONTRATOOLD     VARCHAR2(250);
    V_ITEMCONTRATONEW     VARCHAR2(250);
    V_NMPRODUTOOLD        VARCHAR2(100);
    V_NMPRODUTONEW        VARCHAR2(100);
    V_NMPARCEIROOLD       VARCHAR2(250);
    V_NMPARCEIRONEW       VARCHAR2(250);
    V_IDTPDESCONTOOLD     VARCHAR2(100);
    V_IDTPDESCONTONEW     VARCHAR2(100);
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 UPDATING THEN
        
        V_CAMPOALTERADO := 'Itens da Negociacao - ';
        
        
        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,
                NRITEMOCONTRATO
            ) VALUES (
                V_NRLOGDADOSCONT,
                V_NRSEQCONTRATO,
                V_CAMPOALTERADO||'Percentual de Desconto',
                'R$'||TO_CHAR(:OLD.VRPERCDESCITEM , 'FM999G999G999G999G999D90', 'NLS_NUMERIC_CHARACTERS = ''.,'''),
                'R$'||TO_CHAR(:NEW.VRPERCDESCITEM , 'FM999G999G999G999G999D90', 'NLS_NUMERIC_CHARACTERS = ''.,'''),
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU,
                :NEW.NRITEMOCONTRATO
            );
        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,
                NRITEMOCONTRATO
            ) VALUES (
                V_NRLOGDADOSCONT,
                V_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,
                :NEW.NRITEMOCONTRATO
            );
        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,
                NRITEMOCONTRATO
            ) VALUES (
                V_NRLOGDADOSCONT,
                V_NRSEQCONTRATO,
                V_CAMPOALTERADO||'Valor Total',
                'R$'||TO_CHAR(:OLD.VRTOTITEMCOMDESC , 'FM999G999G999G999G999D90', 'NLS_NUMERIC_CHARACTERS = ''.,'''),
                'R$'||TO_CHAR(:NEW.VRTOTITEMCOMDESC , 'FM999G999G999G999G999D90', 'NLS_NUMERIC_CHARACTERS = ''.,'''),
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU,
                :NEW.NRITEMOCONTRATO
            );
        END IF;
        
        IF (NVL(:OLD.NRPARCFATURA,0) ) <> ( NVL(:NEW.NRPARCFATURA,0) ) THEN
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);

            SELECT NMSECUNDARIPARC 
            INTO V_NMPARCEIROOLD
            FROM PARCNEGOCIO 
            WHERE NRPARCNEGOCIO = :OLD.NRPARCFATURA;
            
            SELECT NMSECUNDARIPARC 
            INTO V_NMPARCEIRONEW
            FROM PARCNEGOCIO 
            WHERE NRPARCNEGOCIO = :NEW.NRPARCFATURA;

            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO,
                NRITEMOCONTRATO
            ) VALUES (
                V_NRLOGDADOSCONT,
                V_NRSEQCONTRATO,
                V_CAMPOALTERADO||'Parceiro de Negocio para Faturamento',
                V_NMPARCEIROOLD,
                V_NMPARCEIRONEW,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU,
                :NEW.NRITEMOCONTRATO
            );
        END IF;
        
        IF (NVL(:OLD.CDPRODFATURA,0) ) <> ( NVL(:NEW.CDPRODFATURA,0) ) THEN
            NOVO_CODIGO_SC('FCT_LOGDADOSCONT', V_NRLOGDADOSCONT, 1);

            SELECT NMPRODUTO 
            INTO V_NMPRODUTOOLD
            FROM PRODUTO 
            WHERE CDPRODUTO = :OLD.CDPRODFATURA;
            
            SELECT NMPRODUTO 
            INTO V_NMPRODUTONEW
            FROM PRODUTO 
            WHERE CDPRODUTO = :NEW.CDPRODFATURA;

            INSERT INTO FCT_LOGDADOSCONT (
                NRLOGDADOSCONT,
                NRSEQCONTRATO,
                DSCAMPOALTERADO,
                VALORANTIGO,
                VALORNOVO,
                NRORG,
                DTALTERACAO,
                CDOPERALTERACAO,
                NRITEMOCONTRATO
            ) VALUES (
                V_NRLOGDADOSCONT,
                V_NRSEQCONTRATO,
                V_CAMPOALTERADO||'Produto para Faturamento',
                V_NMPRODUTOOLD,
                V_NMPRODUTONEW,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU,
                :NEW.NRITEMOCONTRATO
            );
        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,
                NRITEMOCONTRATO
            ) VALUES (
                V_NRLOGDADOSCONT,
                V_NRSEQCONTRATO,
                V_CAMPOALTERADO||'Tipo de Desconto',
                V_IDTPDESCONTOOLD,
                V_IDTPDESCONTONEW,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU,
                :NEW.NRITEMOCONTRATO
            );
        END IF;
        
        IF (NVL(:OLD.NRITEMOCONTRATO,0) ) <> ( NVL(:NEW.NRITEMOCONTRATO,0) ) THEN
        
            SELECT NMITEMCONTRATO 
            INTO V_ITEMCONTRATOOLD
            FROM FCT_ITEMCONTRATO 
            WHERE NRITEMOCONTRATO = :OLD.NRITEMOCONTRATO;
            
            SELECT NMITEMCONTRATO 
            INTO V_ITEMCONTRATONEW
            FROM FCT_ITEMCONTRATO 
            WHERE NRITEMOCONTRATO = :NEW.NRITEMOCONTRATO;
            
            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||'Item do Contrato',
                V_ITEMCONTRATOOLD,
                V_ITEMCONTRATONEW,
                :NEW.NRORG,
                SYSDATE,
                :NEW.CDOPERULTATU,
                :NEW.NRITEMOCONTRATO
            );
        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,
             'Item da Negociacao deletado',
             NULL,
             NULL,
             :OLD.NRORG,
             SYSDATE,
             :OLD.CDOPERULTATU,
             :NEW.NRITEMOCONTRATO
        );
        END IF;
    END IF;

    COMMIT;
END;
/