USP_AUCTIONPURCHASE_ADDPAYMENTTOPACKAGE
Adds a payment to an auction package.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@AMOUNT | money | IN | |
@PACKAGEID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_AUCTIONPURCHASE_ADDPAYMENTTOPACKAGE
(
@REVENUEID uniqueidentifier,
@AMOUNT money,
@PACKAGEID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@CHANGEDATE datetime
)
as
set nocount on;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @ORGANIZATIONCURRENCYDECIMALDIGITS integer;
select @ORGANIZATIONCURRENCYDECIMALDIGITS = CURRENCY.DECIMALDIGITS from dbo.CURRENCY where ID = @ORGANIZATIONCURRENCYID;
declare @PACKAGETRANSACTIONCURRENCYID uniqueidentifier;
declare @PACKAGEBASECURRENCYID uniqueidentifier;
declare @REVENUEDATE datetime;
declare @PAYMENTBASECURRENCYID uniqueidentifier;
declare @PAYMENTTRANSACTIONCURRENCYID uniqueidentifier;
declare @PAYMENTBASEEXCHANGERATEID uniqueidentifier;
declare @PAYMENTORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @PAYMENTBASECURRENCYDECIMALDIGITS integer;
declare @PAYMENTTRANSACTIONCURRENCYDECIMALDIGITS integer;
declare @TOTALREVENUETRANSACTIONAMOUNT money;
declare @TOTALREVENUEBASEAMOUNT money;
declare @TOTALREVENUEORGANIZATIONAMOUNT money;
declare @BASEAMOUNT money;
declare @ORGANIZATIONAMOUNT money;
select
@REVENUEDATE = REVENUE.DATE,
@PAYMENTBASECURRENCYID = REVENUE.BASECURRENCYID,
@PAYMENTTRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
@PAYMENTBASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID,
@PAYMENTORGANIZATIONEXCHANGERATEID = REVENUE.ORGANIZATIONEXCHANGERATEID,
@PAYMENTBASECURRENCYDECIMALDIGITS = BASE_CURRENCY.DECIMALDIGITS,
@PAYMENTTRANSACTIONCURRENCYDECIMALDIGITS = TRANSACTION_CURRENCY.DECIMALDIGITS,
@TOTALREVENUETRANSACTIONAMOUNT = REVENUE.TRANSACTIONAMOUNT,
@TOTALREVENUEBASEAMOUNT = REVENUE.AMOUNT,
@TOTALREVENUEORGANIZATIONAMOUNT = REVENUE.ORGANIZATIONAMOUNT
from
dbo.REVENUE
left join dbo.CURRENCY BASE_CURRENCY on REVENUE.BASECURRENCYID = BASE_CURRENCY.ID
left join dbo.CURRENCY TRANSACTION_CURRENCY on REVENUE.TRANSACTIONCURRENCYID = TRANSACTION_CURRENCY.ID
where
REVENUE.ID = @REVENUEID;
exec dbo.USP_CURRENCY_GETCURRENCYVALUESBYPROPORTION
@AMOUNT = @AMOUNT,
@TOTALAMOUNT = @TOTALREVENUETRANSACTIONAMOUNT,
@BASECURRENCYID = @PAYMENTBASECURRENCYID,
@TOTALBASEAMOUNT = @TOTALREVENUEBASEAMOUNT,
@BASECURRENCYDECIMALDIGITS = @PAYMENTBASECURRENCYDECIMALDIGITS,
@TRANSACTIONCURRENCYID = @PAYMENTTRANSACTIONCURRENCYID,
@BASEAMOUNT = @BASEAMOUNT output,
@ORGANIZATIONCURRENCYID = @ORGANIZATIONCURRENCYID,
@TOTALORGANIZATIONAMOUNT = @TOTALREVENUEORGANIZATIONAMOUNT,
@ORGANIZATIONCURRENCYDECIMALDIGITS = @ORGANIZATIONCURRENCYDECIMALDIGITS,
@ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT output
declare @REVENUESPLITID uniqueidentifier;
declare @TRANSACTIONAMOUNT_TO_DISTRIBUTE money = 0;
declare @AMOUNT_TO_DISTRIBUTE money = 0;
declare @ORGANIZATIONAMOUNT_TO_DISTRIBUTE money = 0;
declare @DISTRIBUTED_TRANSACTIONAMOUNT money = 0;
declare @DISTRIBUTED_AMOUNT money = 0;
declare @DISTRIBUTED_ORGANIZATIONAMOUNT money = 0;
declare @TOTALDISTRIBUTED_TRANSACTIONAMOUNT money = 0;
declare @TOTALDISTRIBUTED_AMOUNT money = 0;
declare @TOTALDISTRIBUTED_ORGANIZATIONAMOUNT money = 0;
declare @TOTALPACKAGETRANSACTIONVALUE money = 0;
declare @TOTALPACKAGEBASEVALUE money = 0;
declare @TOTALPACKAGEORGANIZATIONVALUE money = 0;
select
@TOTALPACKAGETRANSACTIONVALUE = sum(AUCTIONITEM.TRANSACTIONVALUE),
@TOTALPACKAGEBASEVALUE = sum(AUCTIONITEM.VALUE),
@TOTALPACKAGEORGANIZATIONVALUE = sum(AUCTIONITEM.ORGANIZATIONVALUE)
from dbo.AUCTIONITEM where PACKAGEID = @PACKAGEID;
declare @ITEMCOUNT int = 0;
declare @PACKAGEITEMS table
(
ID uniqueidentifier,
TRANSACTIONVALUE money,
BASEVALUE money,
ORGANIZATIONVALUE money,
DESIGNATIONID uniqueidentifier
)
if dbo.UFN_AUCTIONITEMPURCHASE_VALIDATEPPURCHASEEXCHANGERATE(@PACKAGEID) <> 1
raiserror('BBERR_AUCTIONPURCHASE_EXCHANGERATE', 13, 1);
insert into @PACKAGEITEMS
(
ID,
TRANSACTIONVALUE,
BASEVALUE,
ORGANIZATIONVALUE,
DESIGNATIONID
)
(
select
AUCTIONITEM.ID,
AUCTIONITEM.TRANSACTIONVALUE,
AUCTIONITEM.VALUE,
AUCTIONITEM.ORGANIZATIONVALUE,
DESIGNATIONID
from
dbo.AUCTIONITEM
left join dbo.REVENUESPLIT on AUCTIONITEM.REVENUEAUCTIONDONATIONID = REVENUESPLIT.REVENUEID
where
PACKAGEID = @PACKAGEID
)
select @ITEMCOUNT = count(ID)
from @PACKAGEITEMS
declare @CURRENTITEMNUMBER integer = 0;
declare @PACKAGECURSOR_AUCTIONITEMID uniqueidentifier;
declare @PACKAGECURSOR_TRANSACTIONVALUE money;
declare @PACKAGECURSOR_BASEVALUE money;
declare @PACKAGECURSOR_ORGANIZATIONVALUE money;
declare @PACKAGECURSOR_DESIGNATIONID uniqueidentifier;
declare @BASEPURCHASEAMOUNT money;
declare @ORGANIZATIONPURCHASEAMOUNT money;
declare PACKAGECURSOR cursor local fast_forward
for
select
ID,
TRANSACTIONVALUE,
BASEVALUE,
ORGANIZATIONVALUE,
DESIGNATIONID
from
@PACKAGEITEMS
order by ID
open PACKAGECURSOR
fetch next from PACKAGECURSOR into
@PACKAGECURSOR_AUCTIONITEMID,
@PACKAGECURSOR_TRANSACTIONVALUE,
@PACKAGECURSOR_BASEVALUE,
@PACKAGECURSOR_ORGANIZATIONVALUE,
@PACKAGECURSOR_DESIGNATIONID
while @@FETCH_STATUS = 0
begin
set @REVENUESPLITID = newid()
set @CURRENTITEMNUMBER = @CURRENTITEMNUMBER + 1;
if @CURRENTITEMNUMBER <> @ITEMCOUNT
begin
select
@DISTRIBUTED_TRANSACTIONAMOUNT = dbo.UFN_AUCTIONPACKAGE_CONVERTBYPROPORTION_UNROUNDED(@PACKAGECURSOR_TRANSACTIONVALUE, @TOTALPACKAGETRANSACTIONVALUE, @AMOUNT, @PAYMENTTRANSACTIONCURRENCYDECIMALDIGITS),
@DISTRIBUTED_AMOUNT = dbo.UFN_AUCTIONPACKAGE_CONVERTBYPROPORTION_UNROUNDED(@PACKAGECURSOR_TRANSACTIONVALUE, @TOTALPACKAGETRANSACTIONVALUE, @BASEAMOUNT, @PAYMENTBASECURRENCYDECIMALDIGITS),
@DISTRIBUTED_ORGANIZATIONAMOUNT = dbo.UFN_AUCTIONPACKAGE_CONVERTBYPROPORTION_UNROUNDED(@PACKAGECURSOR_TRANSACTIONVALUE, @TOTALPACKAGETRANSACTIONVALUE, @ORGANIZATIONAMOUNT, @ORGANIZATIONCURRENCYDECIMALDIGITS)
-- Keep track of how much we have already distributed
set @TOTALDISTRIBUTED_TRANSACTIONAMOUNT = @TOTALDISTRIBUTED_TRANSACTIONAMOUNT + @DISTRIBUTED_TRANSACTIONAMOUNT;
set @TOTALDISTRIBUTED_AMOUNT = @TOTALDISTRIBUTED_AMOUNT + @DISTRIBUTED_AMOUNT;
set @TOTALDISTRIBUTED_ORGANIZATIONAMOUNT = @TOTALDISTRIBUTED_ORGANIZATIONAMOUNT + @DISTRIBUTED_ORGANIZATIONAMOUNT;
end
else
begin
set @DISTRIBUTED_TRANSACTIONAMOUNT = @AMOUNT - @TOTALDISTRIBUTED_TRANSACTIONAMOUNT;
set @DISTRIBUTED_AMOUNT = @BASEAMOUNT - @TOTALDISTRIBUTED_AMOUNT;
set @DISTRIBUTED_ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT - @TOTALDISTRIBUTED_ORGANIZATIONAMOUNT
end
insert into dbo.REVENUESPLIT
(
ID,
REVENUEID,
AMOUNT,
TYPECODE,
APPLICATIONCODE,
DESIGNATIONID,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
DATEADDED,
DATECHANGED,
ADDEDBYID,
CHANGEDBYID
)
values
(
@REVENUESPLITID,
@REVENUEID,
@DISTRIBUTED_AMOUNT,
12,
12,
@PACKAGECURSOR_DESIGNATIONID,
@PAYMENTBASECURRENCYID,
@DISTRIBUTED_ORGANIZATIONAMOUNT,
@PAYMENTORGANIZATIONEXCHANGERATEID,
@DISTRIBUTED_TRANSACTIONAMOUNT,
@PAYMENTTRANSACTIONCURRENCYID,
@PAYMENTBASEEXCHANGERATEID,
@CHANGEDATE,
@CHANGEDATE,
@CHANGEAGENTID,
@CHANGEAGENTID
);
insert into dbo.AUCTIONITEMPURCHASE(ID,AUCTIONITEMID,PURCHASEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values(newid(),@PACKAGECURSOR_AUCTIONITEMID,@REVENUESPLITID,@CHANGEAGENTID,@CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE)
insert into dbo.AUCTIONITEMREVENUEPURCHASE(ID,AUCTIONITEMID,REVENUEPURCHASEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values(newid(),@PACKAGECURSOR_AUCTIONITEMID,@REVENUEID,@CHANGEAGENTID,@CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE)
-- create recognitions
exec dbo.USP_REVENUEDETAIL_CREATERECOGNITIONS @REVENUESPLITID, @CHANGEAGENTID, @CHANGEDATE;
fetch next from PACKAGECURSOR into
@PACKAGECURSOR_AUCTIONITEMID,
@PACKAGECURSOR_TRANSACTIONVALUE,
@PACKAGECURSOR_BASEVALUE,
@PACKAGECURSOR_ORGANIZATIONVALUE,
@PACKAGECURSOR_DESIGNATIONID
end
close PACKAGECURSOR
deallocate PACKAGECURSOR