UFN_MATCHINGGIFTCLAIM_REPROPORTIONAMOUNTS
This function is used to adjust matching gift split amounts proportionally based on change to the matching gift amount.
Return
Return Type |
---|
xml |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SPLITS | xml | IN | |
@ADJUSTEDNEWMATCHINGGIFTAMOUNT | money | IN | |
@OLDMATCHINGGIFTAMOUNT | money | IN | |
@DECIMALDIGITS | smallint | IN | |
@ROUNDINGTYPECODE | smallint | IN |
Definition
Copy
create function dbo.UFN_MATCHINGGIFTCLAIM_REPROPORTIONAMOUNTS(@SPLITS xml , @ADJUSTEDNEWMATCHINGGIFTAMOUNT money, @OLDMATCHINGGIFTAMOUNT money, @DECIMALDIGITS smallint, @ROUNDINGTYPECODE smallint)
RETURNS XML
as
begin
declare @TOTALRATIO money;
declare @CURRENTRATIO money;
declare @NEWTOTAL money;
declare @CURRENTAMOUNT money;
declare @TEMPAMOUNT money;
declare @COUNTER smallint;
declare @TOTALROWS smallint;
declare @TEMPTABLE table (ID uniqueidentifier, AMOUNT money, ROWNUMBER integer)
insert into @TEMPTABLE(ID,AMOUNT, ROWNUMBER)
select
ID, AMOUNT,ROW_NUMBER() OVER(ORDER BY ID)
from
dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@SPLITS) SPLIT
select @TOTALROWS = count(AMOUNT) from @TEMPTABLE;
set @COUNTER = 1;
set @TOTALRATIO = @OLDMATCHINGGIFTAMOUNT;
SET @NEWTOTAL = @ADJUSTEDNEWMATCHINGGIFTAMOUNT;
While @COUNTER <= @TOTALROWS
begin
select @CURRENTRATIO = AMOUNT from @TEMPTABLE where ROWNUMBER = @COUNTER;
set @TEMPAMOUNT = (@CURRENTRATIO/@TOTALRATIO ) ;
If @TOTALRATIO <> 0
set @CURRENTAMOUNT = dbo.UFN_CURRENCY_ROUND(@TEMPAMOUNT * @NEWTOTAL,@DECIMALDIGITS, @ROUNDINGTYPECODE) ;
Else
set @CURRENTAMOUNT = 0;
set @TOTALRATIO = @TOTALRATIO - @CURRENTRATIO
set @NEWTOTAL = @NEWTOTAL- @CURRENTAMOUNT
update @TEMPTABLE set AMOUNT = @CURRENTAMOUNT where ROWNUMBER = @COUNTER;
set @COUNTER = @COUNTER + 1;
end
return (select
SPLIT.ID,
SPLIT.APPLICATIONCODE as APPLICATIONCODE,
SPLIT.TYPECODE as TYPECODE,
SPLIT.DESIGNATIONID as DESIGNATIONID,
TEMP.AMOUNT as AMOUNT, --rename AMOUNT field
SPLIT.AMOUNT BASEAMOUNT,
SPLIT.ORGANIZATIONAMOUNT ORGANIZATIONAMOUNT,
SPLIT.BASECURRENCYID BASECURRENCYID,
SPLIT.ORGANIZATIONEXCHANGERATEID,
SPLIT.TRANSACTIONCURRENCYID,
SPLIT.BASEEXCHANGERATEID
from @TEMPTABLE TEMP
inner join dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@SPLITS) SPLIT on TEMP.ID = SPLIT.ID
for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64);
end