UFN_AUCTIONITEM_GETRESERVATIONAMOUNT

Returns the reservation amount for an auction item.

Return

Return Type
money

Parameters

Parameter Parameter Type Mode Description
@AUCTIONITEMID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_AUCTIONITEM_GETRESERVATIONAMOUNT
            (
                @AUCTIONITEMID uniqueidentifier
            )
            returns money
            as begin
                declare @TYPECODE int;
                declare @PURCHASEAMOUNT money;
                declare @VALUE money;
                declare @PACKAGEID uniqueidentifier;
                declare @PACKAGEPURCHASEAMOUNT money;
                declare @ITEMTRANSACTIONCURRENCYDECIMALDIGITS integer;

                select
                    @VALUE = AUCTIONITEM.TRANSACTIONVALUE,
                    @TYPECODE = AUCTIONITEM.TYPECODE,
                    @PACKAGEID = AUCTIONITEM.PACKAGEID,
                    @PURCHASEAMOUNT = AUCTIONITEMRESERVATION.PURCHASEAMOUNT,
                    @PACKAGEPURCHASEAMOUNT = PACKAGERESERVATION.PURCHASEAMOUNT,
                    @ITEMTRANSACTIONCURRENCYDECIMALDIGITS = TRANSACTION_CURRENCY.DECIMALDIGITS
                from 
                dbo.AUCTIONITEM
                left join dbo.AUCTIONITEMRESERVATION on AUCTIONITEMRESERVATION.AUCTIONITEMID = AUCTIONITEM.ID
                left join dbo.AUCTIONITEM PACKAGE on PACKAGE.ID = AUCTIONITEM.PACKAGEID
                left join dbo.AUCTIONITEMRESERVATION PACKAGERESERVATION on PACKAGERESERVATION.AUCTIONITEMID = PACKAGE.ID
                left join dbo.CURRENCY TRANSACTION_CURRENCY on AUCTIONITEM.TRANSACTIONCURRENCYID = TRANSACTION_CURRENCY.ID
                where AUCTIONITEM.ID = @AUCTIONITEMID;

                if (@TYPECODE = 1 or @PACKAGEID is null)
                    return @PURCHASEAMOUNT;
                else 
                begin
                    declare @PACKAGEVALUE money;
                    select @PACKAGEVALUE = TRANSACTIONVALUE from dbo.UFN_AUCTIONITEM_GETVALUES_INCURRENCY(@PACKAGEID)

                    declare @ITEMCOUNT int = 0;
                    declare @PACKAGEITEMS table
                    (
                        ID uniqueidentifier,
                        TRANSACTIONVALUE money
                    )

                    insert into @PACKAGEITEMS
                    (
                        ID, 
                        TRANSACTIONVALUE
                    )
                    (
                        select 
                            AUCTIONITEM.ID, 
                            AUCTIONITEM.TRANSACTIONVALUE
                        from 
                            dbo.AUCTIONITEM 
                        where 
                            PACKAGEID = @PACKAGEID
                    )

                    select @ITEMCOUNT = count(ID)
                    from @PACKAGEITEMS

                    declare @CURRENTITEMNUMBER integer = 0;
                    declare @PACKAGECURSOR_AUCTIONITEMID uniqueidentifier;
                    declare @PACKAGECURSOR_TRANSACTIONVALUE money;
                    declare @DISTRIBUTED_TRANSACTIONAMOUNT money = 0;
                    declare @TOTALDISTRIBUTED_TRANSACTIONAMOUNT money = 0;

                    declare PACKAGECURSOR cursor local fast_forward
                    for 
                        select 
                            ID, 
                            TRANSACTIONVALUE
                        from 
                            @PACKAGEITEMS
                        order by ID

                    open PACKAGECURSOR
                    fetch next from PACKAGECURSOR into 
                        @PACKAGECURSOR_AUCTIONITEMID
                        @PACKAGECURSOR_TRANSACTIONVALUE

                    while @@FETCH_STATUS = 0
                    begin
                        set @CURRENTITEMNUMBER = @CURRENTITEMNUMBER + 1;

                        if @CURRENTITEMNUMBER <> @ITEMCOUNT
                        begin
                            select 
 @DISTRIBUTED_TRANSACTIONAMOUNT = dbo.UFN_CURRENCY_CONVERTBYPROPORTION(@PACKAGECURSOR_TRANSACTIONVALUE, @PACKAGEVALUE, @PACKAGEPURCHASEAMOUNT, @ITEMTRANSACTIONCURRENCYDECIMALDIGITS)

                            -- Keep track of how much we have already distributed

                            set @TOTALDISTRIBUTED_TRANSACTIONAMOUNT = @TOTALDISTRIBUTED_TRANSACTIONAMOUNT + @DISTRIBUTED_TRANSACTIONAMOUNT;
                        end
                        else
                        begin
                            set @DISTRIBUTED_TRANSACTIONAMOUNT = @PACKAGEPURCHASEAMOUNT - @TOTALDISTRIBUTED_TRANSACTIONAMOUNT;
                        end

                        if @AUCTIONITEMID = @PACKAGECURSOR_AUCTIONITEMID
                            return @DISTRIBUTED_TRANSACTIONAMOUNT

                        fetch next from PACKAGECURSOR into 
                        @PACKAGECURSOR_AUCTIONITEMID
                        @PACKAGECURSOR_TRANSACTIONVALUE

                    end

                    close PACKAGECURSOR
                    deallocate PACKAGECURSOR

                end
                return -1; -- The function should never reach this

            end