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