USP_REVENUEBATCH_GETDEFAULTBENEFITS
Parameters
| Parameter | Parameter Type | Mode | Description |
|---|---|---|---|
| @APPLICATIONINFO | nvarchar(60) | IN | |
| @REVENUESTREAMS | xml | IN | |
| @APPEALID | uniqueidentifier | IN | |
| @AMOUNT | money | IN | |
| @DATE | datetime | IN | |
| @TRANSACTIONCURRENCYID | uniqueidentifier | IN | |
| @BASECURRENCYID | uniqueidentifier | IN | |
| @BENEFITS | xml | INOUT | |
| @PERCENTAGEBENEFITS | xml | INOUT | |
| @EXCHANGERATE | decimal(20, 8) | IN | |
| @BASEEXCHANGERATEID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_REVENUEBATCH_GETDEFAULTBENEFITS
(
@APPLICATIONINFO nvarchar(60),
@REVENUESTREAMS xml,
@APPEALID uniqueidentifier,
@AMOUNT money,
@DATE datetime,
@TRANSACTIONCURRENCYID uniqueidentifier,
@BASECURRENCYID uniqueidentifier,
@BENEFITS xml output,
@PERCENTAGEBENEFITS xml output,
@EXCHANGERATE decimal(20, 8),
@BASEEXCHANGERATEID uniqueidentifier
)
as
declare @DEFAULTMONEYBENEFITS as table
(
ID uniqueidentifier,
BENEFITID uniqueidentifier,
QUANTITY smallint,
UNITVALUE money,
SEQUENCE int,
BENEFITCURRENCYID uniqueidentifier
);
if @APPEALID is not null
begin
insert into
@DEFAULTMONEYBENEFITS
select
newid() as ID,
BENEFITDETAILS.BENEFITID,
BENEFITDETAILS.QUANTITY,
BENEFITDETAILS.VALUE,
BENEFITDETAILS.SEQUENCE,
BENEFIT.BASECURRENCYID as BENEFITCURRENCYID
from
dbo.UFN_APPEAL_GETBENEFITDETAILS_ALL_2(@APPEALID, @AMOUNT, @TRANSACTIONCURRENCYID, @BASECURRENCYID) as BENEFITDETAILS
left join
dbo.BENEFIT on BENEFITDETAILS.BENEFITID = BENEFIT.ID
where
BENEFITDETAILS.USEPERCENT = 0;
end
declare @ROLLINGMAXSEQUENCE int = coalesce((select max(SEQUENCE) from @DEFAULTMONEYBENEFITS), 0);
insert into
@DEFAULTMONEYBENEFITS
select
newid() as ID,
BENEFITDETAILS.BENEFITID,
BENEFITDETAILS.QUANTITY,
BENEFITDETAILS.VALUE,
@ROLLINGMAXSEQUENCE + BENEFITDETAILS.SEQUENCE,
BENEFIT.BASECURRENCYID as BENEFITCURRENCYID
from
dbo.UFN_REVENUEBATCH_EVENTREGISTRANT_GETBENEFITS(@AMOUNT, @APPLICATIONINFO, @REVENUESTREAMS, @TRANSACTIONCURRENCYID, @BASECURRENCYID, @EXCHANGERATE,
@BASEEXCHANGERATEID) as BENEFITDETAILS
left join
dbo.BENEFIT on BENEFITDETAILS.BENEFITID = BENEFIT.ID;
--Store the total benefit amount so we can calculate the percentage amounts for percent benefits
declare @ROLLINGBENEFITAMOUNT money = 0;
select
@ROLLINGBENEFITAMOUNT = @ROLLINGBENEFITAMOUNT + (MONEYBENEFITS.QUANTITY * MONEYBENEFITS.UNITVALUE)
from
@DEFAULTMONEYBENEFITS as MONEYBENEFITS
where
MONEYBENEFITS.BENEFITCURRENCYID = @TRANSACTIONCURRENCYID;
select
@ROLLINGBENEFITAMOUNT = @ROLLINGBENEFITAMOUNT + dbo.UFN_CURRENCY_CONVERT(MONEYBENEFITS.QUANTITY * MONEYBENEFITS.UNITVALUE,
dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(MONEYBENEFITS.BENEFITCURRENCYID, @TRANSACTIONCURRENCYID, @DATE, 1, null))
from
@DEFAULTMONEYBENEFITS as MONEYBENEFITS
where
MONEYBENEFITS.BENEFITCURRENCYID <> @TRANSACTIONCURRENCYID;
declare @DEFAULTPERCENTAGEBENEFITS as table
(
ID uniqueidentifier,
BENEFITID uniqueidentifier,
VALUEPERCENT int,
PERCENTAPPLICABLEAMOUNT money,
SEQUENCE int,
BENEFITCURRENCYID uniqueidentifier
);
insert into
@DEFAULTPERCENTAGEBENEFITS
select
newid() as ID,
BENEFITDETAILS.BENEFITID,
BENEFITDETAILS.VALUEPERCENT,
0 as PERCENTAPPLICABLEAMOUNT,
BENEFITDETAILS.SEQUENCE,
BENEFIT.BASECURRENCYID as BENEFITCURRENCYID
from
dbo.UFN_APPEAL_GETBENEFITDETAILS_ALL_2(@APPEALID, @AMOUNT, @TRANSACTIONCURRENCYID, @BASECURRENCYID) as BENEFITDETAILS
left join
dbo.BENEFIT on BENEFITDETAILS.BENEFITID = BENEFIT.ID
where
BENEFITDETAILS.USEPERCENT = 1;
--Update the percentage benefits with their applicable amount (total gift amount minus the benefit amount of prior benefits)
declare PERCENTAGEBENEFITAMOUNTCURSOR cursor local fast_forward for
select
ID,
VALUEPERCENT
from
@DEFAULTPERCENTAGEBENEFITS
order by
SEQUENCE;
declare @CURRENTPERCENTAGEBENEFITID uniqueidentifier;
declare @CURRENTPERCENTAGEBENEFITVALUEPERCENT int;
open PERCENTAGEBENEFITAMOUNTCURSOR;
fetch next from PERCENTAGEBENEFITAMOUNTCURSOR into @CURRENTPERCENTAGEBENEFITID, @CURRENTPERCENTAGEBENEFITVALUEPERCENT;
while (@@FETCH_STATUS = 0)
begin
declare @CURRENTPERCENTAGEBENEFITAPPLICABLEAMOUNT money = (@AMOUNT - @ROLLINGBENEFITAMOUNT);
update
DEFAULTPERCENTAGEBENEFITS
set
DEFAULTPERCENTAGEBENEFITS.PERCENTAPPLICABLEAMOUNT = @CURRENTPERCENTAGEBENEFITAPPLICABLEAMOUNT
from
@DEFAULTPERCENTAGEBENEFITS as DEFAULTPERCENTAGEBENEFITS
where
DEFAULTPERCENTAGEBENEFITS.ID = @CURRENTPERCENTAGEBENEFITID;
set @ROLLINGBENEFITAMOUNT = @ROLLINGBENEFITAMOUNT + (@CURRENTPERCENTAGEBENEFITAPPLICABLEAMOUNT * (@CURRENTPERCENTAGEBENEFITVALUEPERCENT / 100.00))
fetch next from PERCENTAGEBENEFITAMOUNTCURSOR into @CURRENTPERCENTAGEBENEFITID, @CURRENTPERCENTAGEBENEFITVALUEPERCENT;
end
close PERCENTAGEBENEFITAMOUNTCURSOR;
deallocate PERCENTAGEBENEFITAMOUNTCURSOR;
select
@BENEFITS =
(
select
ID,
BENEFITID,
QUANTITY,
UNITVALUE,
SEQUENCE,
BENEFITCURRENCYID,
'' as DETAILS
from
@DEFAULTMONEYBENEFITS
for xml path('ITEM'), type, elements, root('BENEFITS'), binary base64
);
select
@PERCENTAGEBENEFITS =
(
select
ID,
BENEFITID,
VALUEPERCENT,
PERCENTAPPLICABLEAMOUNT,
SEQUENCE,
BENEFITCURRENCYID,
'' as DETAILS
from
@DEFAULTPERCENTAGEBENEFITS
for xml path('ITEM'), type, elements, root('PERCENTAGEBENEFITS'), binary base64
);