SET TERM ^ ;

CREATE OR ALTER PROCEDURE SPC_ADIANTAMENTOS_PRE_PEDIDOS (
    PRE_PEDIDO_ID INTEGER)
RETURNS (
    ANTECIPACAO_ID INTEGER,
    ANTECIPACAO_VALOR NUMERIC(15,2),
    ANTECIPACAO_SALDO NUMERIC(15,2),
    AGRUPAMENTO_ID INTEGER)
AS
DECLARE VARIABLE ADIANTAMENTO_ID INTEGER;
DECLARE VARIABLE VALOR_MAXIMO_PRE NUMERIC(15,2);
DECLARE VARIABLE VALOR_TEMP NUMERIC(15,2);
declare variable ANTECIPACAO_ID_AUX INTEGER;
declare variable ANTECIPACAO_VALOR_AUX NUMERIC(15,2);
declare variable ANTECIPACAO_SALDO_AUX NUMERIC(15,2);
BEGIN
    FOR SELECT  
        X.ADIANTAMENTO_ID,
        X.VALOR AS VALOR_MAXIMO_PRE
    FROM TBADIANTAMENTO_PRE_PEDIDOS X
    WHERE X.PRE_PEDIDO_ID = :PRE_PEDIDO_ID
    AND X.SALDO > 0
    ORDER BY X.ADIANTAMENTO_ID ASC
    INTO :ADIANTAMENTO_ID, :VALOR_MAXIMO_PRE
    DO BEGIN
        :VALOR_TEMP = :VALOR_MAXIMO_PRE;

        FOR SELECT
            ANT.ID,
            ANT.VALOR,
            ANT.SALDO
        FROM TBPDV_MOVIMENTO_ANTECIPACAO ANT
        WHERE ANT.AGRUPAMENTO_ID = :ADIANTAMENTO_ID
        AND ANT.SALDO > 0
        ORDER BY ANT.ID ASC
        INTO :ANTECIPACAO_ID_AUX, :ANTECIPACAO_VALOR_AUX, :ANTECIPACAO_SALDO_AUX
        DO BEGIN
            :VALOR_TEMP = :VALOR_TEMP - :ANTECIPACAO_SALDO_AUX;

            IF(:VALOR_TEMP >= 0) THEN
            BEGIN
                :ANTECIPACAO_ID     = :ANTECIPACAO_ID_AUX;
                :ANTECIPACAO_VALOR  = :ANTECIPACAO_VALOR_AUX;
                :ANTECIPACAO_SALDO  = :ANTECIPACAO_SALDO_AUX;
                :AGRUPAMENTO_ID     = :ADIANTAMENTO_ID;
                SUSPEND;
            END
        END
        

    END

END
^

SET TERM ; ^

