USP_REVENUEBENEFITS_ADDBENEFITS
Adds appeal and membership benefits to a revenue.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@RECEIPTAMOUNT | money | INOUT |
Definition
Copy
CREATE procedure dbo.USP_REVENUEBENEFITS_ADDBENEFITS(
@REVENUEID uniqueidentifier,
@RECEIPTAMOUNT money output
)
as
set nocount on;
declare @CHANGEAGENTID uniqueidentifier;
declare @CHANGEDATE datetime;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
begin try
declare @APPEALID uniqueidentifier;
declare @AMOUNT money;
declare @GIFTDATE datetime;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
--benefits cursor variables
declare @BENEFITID uniqueidentifier;
declare @QUANTITY int;
declare @UNITVALUE money;
declare @VALUEPERCENT numeric(20,4);
declare @USEPERCENT bit;
declare @SEQUENCE int;
declare @RUNNINGAMOUNT money;
declare @PERCENTAPPLICABLEAMOUNT money;
declare @BASECURRENCYID uniqueidentifier;
select
@APPEALID = APPEALID,
@AMOUNT = TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID = TRANSACTIONCURRENCYID,
@GIFTDATE = DATE
from dbo.REVENUE where @REVENUEID = ID
declare @BENEFITDETAILS table
(
ID uniqueidentifier,
QUANTITY int,
UNITVALUE money,
VALUEPERCENT numeric(20,4),
USEPERCENT bit,
SEQUENCE int,
BASECURRENCYID uniqueidentifier
);
if @APPEALID is not null
begin
--Insert unit and percent appeal benefits
insert into @BENEFITDETAILS(
ID,
QUANTITY,
UNITVALUE,
VALUEPERCENT,
USEPERCENT,
SEQUENCE,
BASECURRENCYID
)select
BENEFITID,
QUANTITY,
VALUE,
VALUEPERCENT,
USEPERCENT,
SEQUENCE,
BASECURRENCYID
from dbo.UFN_APPEAL_GETBENEFITDETAILS_ALL(@APPEALID,@AMOUNT)
end
--Insert unit and percent value membership benefits
insert into @BENEFITDETAILS(
ID,
QUANTITY,
UNITVALUE,
VALUEPERCENT,
USEPERCENT,
SEQUENCE,
BASECURRENCYID
)select
BENEFIT.ID,
MEMBERSHIPLEVELBENEFIT.QUANTITY,
MEMBERSHIPLEVELBENEFIT.UNITVALUE,
MEMBERSHIPLEVELBENEFIT.VALUEPERCENT,
BENEFIT.USEPERCENT,
MEMBERSHIPLEVELBENEFIT.SEQUENCE,
MEMBERSHIPLEVELBENEFIT.BASECURRENCYID
from dbo.REVENUESPLIT
inner join dbo.MEMBERSHIPTRANSACTION on REVENUESPLIT.ID = MEMBERSHIPTRANSACTION.REVENUESPLITID
inner join dbo.MEMBERSHIPLEVELBENEFIT on MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID = MEMBERSHIPLEVELBENEFIT.MEMBERSHIPLEVELID
inner join dbo.BENEFIT on MEMBERSHIPLEVELBENEFIT.BENEFITID = BENEFIT.ID
where REVENUESPLIT.REVENUEID = @REVENUEID
--set remaining amount to the total revenue amount
set @RUNNINGAMOUNT = @AMOUNT
-- Loop through benefits
declare BENEFITS_CURSOR cursor local fast_forward for
select
ID,
QUANTITY,
UNITVALUE,
VALUEPERCENT,
USEPERCENT,
SEQUENCE,
BASECURRENCYID
from @BENEFITDETAILS
order by USEPERCENT, SEQUENCE
open BENEFITS_CURSOR
fetch next from BENEFITS_CURSOR into
@BENEFITID,
@QUANTITY,
@UNITVALUE,
@VALUEPERCENT,
@USEPERCENT,
@SEQUENCE,
@BASECURRENCYID
while @@FETCH_STATUS = 0
begin
if @USEPERCENT = 0
begin
--adjust the remaining amount by subtracting benefit value from remaining amount
declare @MULTICURRENCYENABLED bit;
set @MULTICURRENCYENABLED = dbo.UFN_CONDITIONSETTING_EVALUATEEXISTSCONDITION('Multicurrency');
if @MULTICURRENCYENABLED = 0
begin
set @RUNNINGAMOUNT = @RUNNINGAMOUNT - @UNITVALUE;
end
else
begin
declare @BASEEXCHANGERATEID uniqueidentifier;
set @BASEEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID,@TRANSACTIONCURRENCYID,@GIFTDATE,1,null);
set @RUNNINGAMOUNT = @RUNNINGAMOUNT - dbo.UFN_CURRENCY_CONVERT(@UNITVALUE,@BASEEXCHANGERATEID);
end
--set applicable amount to the value of the benefit
set @PERCENTAPPLICABLEAMOUNT = 0;
end
else
begin
--calc percent amount based on remaining amount * percentage value of benefit
set @PERCENTAPPLICABLEAMOUNT = @RUNNINGAMOUNT
--adjust remaining amount
set @RUNNINGAMOUNT = @RUNNINGAMOUNT - (@PERCENTAPPLICABLEAMOUNT * @VALUEPERCENT / 100);
end
if @RUNNINGAMOUNT < 0
set @RUNNINGAMOUNT = 0;
insert into dbo.REVENUEBENEFIT(
REVENUEID,
BENEFITID,
QUANTITY,
UNITVALUE,
PERCENTAPPLICABLEAMOUNT,
VALUEPERCENT,
SEQUENCE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)select
@REVENUEID,
@BENEFITID,
@QUANTITY,
@UNITVALUE,
@PERCENTAPPLICABLEAMOUNT,
@VALUEPERCENT,
@SEQUENCE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
fetch next from BENEFITS_CURSOR into
@BENEFITID,
@QUANTITY,
@UNITVALUE,
@VALUEPERCENT,
@USEPERCENT,
@SEQUENCE,
@BASECURRENCYID
end
close BENEFITS_CURSOR
deallocate BENEFITS_CURSOR
set @RECEIPTAMOUNT = @RUNNINGAMOUNT
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch