UFN_DONORCHALLENGESPLIT_CONVERTAMOUNTSINXML
Fills in multicurrency fields for the given donor challenge splits XML.
Return
Return Type |
---|
xml |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SPLITS | xml | IN | |
@BASECURRENCYID | uniqueidentifier | IN | |
@ORGANIZATIONEXCHANGERATEID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_DONORCHALLENGESPLIT_CONVERTAMOUNTSINXML(
@SPLITS xml,
@BASECURRENCYID uniqueidentifier,
@ORGANIZATIONEXCHANGERATEID uniqueidentifier
)
returns xml
as
begin
--Get the full transaction amount from the splits collection.
declare @FULLAMOUNTBASECURRENCY money;
set @FULLAMOUNTBASECURRENCY = coalesce(
(
select sum(SPLITSITEM.ELEMENT.value('AMOUNT[1]', 'money'))
from @SPLITS.nodes('/SPLITS/ITEM') SPLITSITEM(ELEMENT)
)
,0
);
--Get the full base and full org amounts, as well as the organization currency
declare @FULLAMOUNTORGANIZATIONCURRENCY money;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
select
@FULLAMOUNTORGANIZATIONCURRENCY = ORGANIZATIONAMOUNT,
@ORGANIZATIONCURRENCYID = ORGANIZATIONCURRENCYID
from dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(
@FULLAMOUNTBASECURRENCY,
null,
@BASECURRENCYID,
null,
@BASECURRENCYID,
@FULLAMOUNTBASECURRENCY,
default,
default,
@ORGANIZATIONEXCHANGERATEID,
0
);
--Retrieve decimal digits for use by UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML.
declare @DECIMALDIGITSBASECURRENCY tinyint;
declare @DECIMALDIGITSORGANIZATIONCURRENCY tinyint;
select @DECIMALDIGITSBASECURRENCY = DECIMALDIGITS from dbo.CURRENCY where ID = @BASECURRENCYID;
select @DECIMALDIGITSORGANIZATIONCURRENCY = DECIMALDIGITS from dbo.CURRENCY where ID = @ORGANIZATIONCURRENCYID;
--Use UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML to get the correct base and org amounts and then build the output XML.
return (
select
ITEMLISTCONVERTED.ITEM.value('(ITEM/ID)[1]','uniqueidentifier') as ID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/DESIGNATIONID)[1]','uniqueidentifier') as DESIGNATIONID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/AMOUNT)[1]','money') as AMOUNT,
ORGANIZATIONAMOUNT ORGANIZATIONAMOUNT,
@BASECURRENCYID BASECURRENCYID,
@ORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID
from dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML(
@SPLITS,
@BASECURRENCYID,
@BASECURRENCYID,
@ORGANIZATIONCURRENCYID,
@FULLAMOUNTBASECURRENCY,
@FULLAMOUNTBASECURRENCY,
@DECIMALDIGITSBASECURRENCY,
@FULLAMOUNTORGANIZATIONCURRENCY,
@DECIMALDIGITSORGANIZATIONCURRENCY
) ITEMLISTCONVERTED
for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64
);
end