CREATE OR ALTER trigger ttbnfs_parcelamento_b01u for tbnfs_parcelamento
active before update position 0
AS
DECLARE VARIABLE CHEQUE VARCHAR(500);
DECLARE VARIABLE CHEQUE_ITEM INTEGER;
DECLARE VARIABLE COLABORADOR_ID INTEGER;
DECLARE VARIABLE COLABORADOR_CREDITO_ID INTEGER;
declare variable VALOR_SALDO_AUX NUMERIC(10,5);
BEGIN
    
    CHEQUE = COALESCE((SELECT FIRST 1 B.NUMERO_CHEQUE FROM TBCHEQUE_ITEM A INNER JOIN TBCHEQUE B ON B.ID = A.CHEQUE_ID WHERE A.DOCUMENTO_ID = OLD.CONTROLE AND B.TIPO = 'D'), '');
    CHEQUE_ITEM = COALESCE((SELECT FIRST 1 A.ID FROM TBCHEQUE_ITEM A WHERE A.DOCUMENTO_ID = OLD.CONTROLE), 0);

    IF((OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO) OR (OLD.EMPRESA_CODIGO <> NEW.EMPRESA_CODIGO) OR (OLD.NUMERO_NOTAFISCAL <> NEW.NUMERO_NOTAFISCAL) OR (OLD.SERIE <> NEW.SERIE) OR (OLD.PAGAMENTO_FORMA <> NEW.PAGAMENTO_FORMA) OR (OLD.NFS_CONTROLE <> NEW.NFS_CONTROLE))THEN
    BEGIN
        IF(CHEQUE <> '')THEN
        BEGIN
            EXCEPTION "..." 'PARCELA: '||NEW.PARCELA||', DOC '||NEW.NUMERO_NOTAFISCAL||', SERIE '||NEW.SERIE||' VINCULADA AO CHEQUE Nº'||CHEQUE||' ALTERAÇÃO NÃO AUTORIZADA!';
        END
    END

    IF(NEW.VALOR_SALDO < 0)THEN
    BEGIN
       EXCEPTION "..." 'PARCELA '||NEW.PARCELA||', DOC '||NEW.NUMERO_NOTAFISCAL||', SERIE '||NEW.SERIE||' COM SALDO NEGATIVO, OPERAÇÃO CANCELADA!';
    END ELSE
    BEGIN


        IF(NEW.VALOR_SALDO <> OLD.VALOR_SALDO AND NEW.PDV_CFE_FORMA_PAGAMENTO_ID > 0) THEN
        BEGIN
            IF(NEW.VALOR_SALDO < OLD.VALOR_SALDO) THEN
            BEGIN
                :VALOR_SALDO_AUX = (OLD.VALOR_SALDO - NEW.VALOR_SALDO);
            END ELSE
            BEGIN
                :VALOR_SALDO_AUX = (NEW.VALOR_SALDO - OLD.VALOR_SALDO) * -1.00;

            END

            FOR SELECT FIRST 1
                C.COLABORADOR_ID,
                CC.ID
            FROM TBPDV_CFE C, TBPDV_CFE_FORMA_PAGAMENTO P, TBPAGAMENTO_FORMA PF, TBCOLABORADOR_CREDITO CC
            WHERE C.ID = P.PDV_CFE_ID
            AND P.PAGAMENTO_FORMA_ID = PF.CODIGO
            AND PF.PDV_TIPO = 6
            AND P.ID = NEW.PDV_CFE_FORMA_PAGAMENTO_ID
            AND CC.COLABORADOR_ID = C.COLABORADOR_ID
          INTO :COLABORADOR_ID, :COLABORADOR_CREDITO_ID
          DO BEGIN
                IF(:COLABORADOR_ID > 0 AND :COLABORADOR_CREDITO_ID > 0) THEN
                BEGIN
                    UPDATE TBCOLABORADOR_CREDITO SET SALDO = SALDO + (:VALOR_SALDO_AUX)
                        WHERE COLABORADOR_ID = :COLABORADOR_ID;

                    EXECUTE PROCEDURE SPI_INTEGRACAO('TBCOLABORADOR_CREDITO', :COLABORADOR_CREDITO_ID, 2);

                END
          END
            

        END

    END
END;