SET TERM ^ ;

CREATE OR ALTER procedure SPU_VALOR_ADIANT_PRE_PED (
    PRE_PEDIDO_ID integer)
as
DECLARE VARIABLE AGRUPAMENTO_ID INTEGER;
DECLARE VARIABLE ADIANTAMENTO_ID INTEGER;
DECLARE VARIABLE VALOR_PRE_PEDIDO_AUX NUMERIC(15,2);
DECLARE VARIABLE VALOR_PRE_PEDIDO NUMERIC(15,2);
DECLARE VARIABLE SALDO_ADIANTAMENTO NUMERIC(15,2);
DECLARE VARIABLE VALOR_ADIANTAMENTO NUMERIC(15,2);
DECLARE VARIABLE VALOR_PRE_PEDIDOS NUMERIC(15,2);
DECLARE VARIABLE SALDO_PRE_PEDIDOS NUMERIC(15,2);
DECLARE VARIABLE VALOR_UTILIZADO NUMERIC(15,2);
DECLARE VARIABLE VALOR_UTILIZADO_UPD NUMERIC(15,2);

BEGIN

    :AGRUPAMENTO_ID = COALESCE((SELECT FIRST 1 T.ADIANTAMENTO_ID FROM TBADIANTAMENTO_PRE_PEDIDOS T WHERE T.PRE_PEDIDO_ID = :PRE_PEDIDO_ID), 0);

    IF(COALESCE(:AGRUPAMENTO_ID, 0) > 0) THEN
    BEGIN

        FOR SELECT
            T.ADIANTAMENTO_ID,
            T.VALOR,
            COALESCE((SELECT FIRST 1 SUM(K.VALOR_LIQUIDO) FROM TBPDV_CONFERENCIA_ITEM K WHERE K.PDV_CONFERENCIA_ID = T.PRE_PEDIDO_ID AND K.SITUACAO = 0), 0) AS VALOR_PRE_PEDIDO,
            COALESCE((SELECT FIRST 1 SUM(K.SALDO) FROM TBPDV_MOVIMENTO_ANTECIPACAO K WHERE K.AGRUPAMENTO_ID = T.ADIANTAMENTO_ID), 0) AS SALDO_ADIANTAMENTO,
            COALESCE((SELECT FIRST 1 SUM(K.VALOR) FROM TBPDV_MOVIMENTO_ANTECIPACAO K WHERE K.AGRUPAMENTO_ID = T.ADIANTAMENTO_ID), 0) AS VALOR_ADIANTAMENTO,
            COALESCE((SELECT FIRST 1 SUM(K.VALOR) FROM TBADIANTAMENTO_PRE_PEDIDOS K WHERE K.ADIANTAMENTO_ID = T.ADIANTAMENTO_ID AND K.PRE_PEDIDO_ID <> T.PRE_PEDIDO_ID), 0) AS VALOR_PRE_PEDIDOS,
            COALESCE((SELECT FIRST 1 SUM(K.SALDO) FROM TBADIANTAMENTO_PRE_PEDIDOS K WHERE K.ADIANTAMENTO_ID = T.ADIANTAMENTO_ID AND K.PRE_PEDIDO_ID <> T.PRE_PEDIDO_ID), 0) AS SALDO_PRE_PEDIDOS
        FROM TBADIANTAMENTO_PRE_PEDIDOS T
        WHERE T.PRE_PEDIDO_ID = :PRE_PEDIDO_ID
        INTO :ADIANTAMENTO_ID, :VALOR_PRE_PEDIDO_AUX, :VALOR_PRE_PEDIDO, :SALDO_ADIANTAMENTO, :VALOR_ADIANTAMENTO, :VALOR_PRE_PEDIDOS, :SALDO_PRE_PEDIDOS
        DO BEGIN

            :VALOR_UTILIZADO_UPD = 0;

            IF(:SALDO_ADIANTAMENTO <> :VALOR_ADIANTAMENTO) THEN
            BEGIN
                :VALOR_UTILIZADO = :SALDO_ADIANTAMENTO - :SALDO_PRE_PEDIDOS;
                
                IF(:VALOR_UTILIZADO >= :VALOR_PRE_PEDIDO) THEN
                BEGIN
                    :VALOR_UTILIZADO_UPD = :VALOR_PRE_PEDIDO;
                END ELSE
                BEGIN
                    :VALOR_UTILIZADO_UPD = :VALOR_UTILIZADO;
                END

            END ELSE
            BEGIN
                :VALOR_UTILIZADO = :VALOR_ADIANTAMENTO - :VALOR_PRE_PEDIDOS;

                IF(:VALOR_UTILIZADO >= :VALOR_PRE_PEDIDO) THEN
                BEGIN
                    :VALOR_UTILIZADO_UPD = :VALOR_PRE_PEDIDO;
                END ELSE
                BEGIN
                    :VALOR_UTILIZADO_UPD = :VALOR_UTILIZADO;
                END

            END

            IF(:VALOR_UTILIZADO_UPD < 0) THEN
            BEGIN
                :VALOR_UTILIZADO_UPD = 0;
            END

            IF(:VALOR_UTILIZADO_UPD >= 0) THEN
            BEGIN
                UPDATE TBADIANTAMENTO_PRE_PEDIDOS T SET T.VALOR = :VALOR_UTILIZADO_UPD WHERE T.PRE_PEDIDO_ID = :PRE_PEDIDO_ID AND T.ADIANTAMENTO_ID = :ADIANTAMENTO_ID;
            END


        END


    END

    
END
^

SET TERM ; ^

