SET TERM ^ ;

CREATE OR ALTER procedure SPU_SALDO_ADIANT_PRE (
    PDV_CFE_ID integer)
as
declare variable AGRUPAMENTO_ID integer;
declare variable PRE_PEDIDO_ID integer;
declare variable SALDO numeric(15,2);
declare variable SALDO_ADIAN_AUX2 numeric(15,2);
declare variable SALDO_ADIAN_AUX3 numeric(15,2);
declare variable SALDO_UTILIZADO numeric(15,2);
declare variable VALOR_PRE_PEDIDO numeric(15,2);
declare variable SALDO_SOMADO_ADIANTAMENTO numeric(15,2);
BEGIN
    :SALDO_SOMADO_ADIANTAMENTO = 0;

    FOR SELECT DISTINCT
        T.AGRUPAMENTO_ID,
        SUM(T.SALDO) AS SALDO
    FROM TBPDV_CFE_ANTECIPACAO_SALDO T
    WHERE T.PDV_CFE_ID = :PDV_CFE_ID
    GROUP BY 1
    INTO :AGRUPAMENTO_ID, :SALDO
    DO BEGIN

        :SALDO_ADIAN_AUX2           = 0;
        :SALDO_ADIAN_AUX3           = 0;
        :SALDO_SOMADO_ADIANTAMENTO  = :SALDO_SOMADO_ADIANTAMENTO + :SALDO;

        FOR SELECT DISTINCT
            W.CONFERENCIA_ID
        FROM TBPDV_CFE_ITEM W
        WHERE W.PDV_CFE_ID = :PDV_CFE_ID
        GROUP BY 1
        INTO :PRE_PEDIDO_ID
        DO BEGIN

            :VALOR_PRE_PEDIDO = COALESCE((SELECT FIRST 1 SUM(K.VALOR) FROM TBADIANTAMENTO_PRE_PEDIDOS K WHERE K.ADIANTAMENTO_ID = :AGRUPAMENTO_ID AND K.PRE_PEDIDO_ID = :PRE_PEDIDO_ID), 0);

            IF(:VALOR_PRE_PEDIDO = 0)THEN
            BEGIN

                
            END ELSE
            BEGIN

                :SALDO_ADIAN_AUX2 = :SALDO_SOMADO_ADIANTAMENTO - :SALDO - :SALDO_ADIAN_AUX3;

                IF(:VALOR_PRE_PEDIDO <= :SALDO_ADIAN_AUX2 OR :SALDO_ADIAN_AUX2 <= 0) THEN
                BEGIN
                    :SALDO_UTILIZADO = :VALOR_PRE_PEDIDO;
                END ELSE
                BEGIN
                    
                    IF(:SALDO >= :SALDO_ADIAN_AUX2 AND :SALDO_ADIAN_AUX2 > 0) THEN
                    BEGIN
                        :SALDO_UTILIZADO = :SALDO;
                    END ELSE
                    BEGIN
                        IF(:SALDO_ADIAN_AUX2 >= :SALDO_ADIAN_AUX3) THEN
                        BEGIN
                            :SALDO_UTILIZADO = :SALDO_ADIAN_AUX3;
                        END ELSE
                        BEGIN
                            IF(:SALDO_ADIAN_AUX2 < 0) THEN
                            BEGIN
                                :SALDO_UTILIZADO = 0;
                            END ELSE
                            BEGIN
                                :SALDO_UTILIZADO = :SALDO_ADIAN_AUX2;
                            END

                        END

                    END

                END
    
                :SALDO_ADIAN_AUX3 = :SALDO_ADIAN_AUX3 + :SALDO_UTILIZADO;
    
    
                UPDATE TBADIANTAMENTO_PRE_PEDIDOS K SET K.VALOR = :SALDO_UTILIZADO, K.SALDO = 0, K.FLAG_FATURAMENTO = 1 WHERE K.ADIANTAMENTO_ID = :AGRUPAMENTO_ID AND K.PRE_PEDIDO_ID = :PRE_PEDIDO_ID;

            END


        END
        

    END

END
^

SET TERM ; ^

