UFN_GIFTFEE_CONVERTAMOUNTSINXML
Fills in multicurrency fields in the given gift fees XML.
Return
Return Type |
---|
xml |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@GIFTFEES | xml | IN | |
@BASECURRENCYID | uniqueidentifier | IN | |
@ORGANIZATIONEXCHANGERATEID | uniqueidentifier | IN | |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | |
@BASEEXCHANGERATEID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_GIFTFEE_CONVERTAMOUNTSINXML(
@GIFTFEES xml,
@BASECURRENCYID uniqueidentifier,
@ORGANIZATIONEXCHANGERATEID uniqueidentifier,
@TRANSACTIONCURRENCYID uniqueidentifier,
@BASEEXCHANGERATEID uniqueidentifier
)
returns xml
as
begin
--Get the full transaction amount from the splits collection.
declare @FULLAMOUNTTRANSACTIONCURRENCY money;
set @FULLAMOUNTTRANSACTIONCURRENCY = coalesce(
(
select sum(GIFTFEESITEM.ELEMENT.value('TRANSACTIONFEE[1]', 'money'))
from @GIFTFEES.nodes('/GIFTFEES/ITEM') GIFTFEESITEM(ELEMENT)
)
,0
);
--Get the full base and full org amounts, as well as the organization currency
declare @FULLAMOUNTBASECURRENCY money;
declare @FULLAMOUNTORGANIZATIONCURRENCY money;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
select
@FULLAMOUNTBASECURRENCY = BASEAMOUNT,
@FULLAMOUNTORGANIZATIONCURRENCY = ORGANIZATIONAMOUNT,
@ORGANIZATIONCURRENCYID = ORGANIZATIONCURRENCYID
from dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(
@FULLAMOUNTTRANSACTIONCURRENCY,
null,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
default,
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;
--Replace the <GIFTFEES>...</GIFTFEES> wrapping the given XML with <ITEMLIST>...</ITEMLIST> (no longer necessary) and
--rename <TRANSACTIONFEE>...</TRANSACTIONFEE> to <AMOUNT>...</AMOUNT> for use by UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML.
declare @ITEMLIST xml = (
select GIFTFEES.ITEM.value('(ID)[1]','uniqueidentifier') as ID,
GIFTFEES.ITEM.value('(TRANSACTIONFEE)[1]','money') as AMOUNT,
GIFTFEES.ITEM.value('(WAIVED)[1]','bit') as WAIVED,
GIFTFEES.ITEM.value('(TRANSACTIONCURRENCYID)[1]','uniqueidentifier') as TRANSACTIONCURRENCYID
from @GIFTFEES.nodes('/GIFTFEES/ITEM') GIFTFEES(ITEM)
for xml raw('ITEM'),type,elements,root('ITEMLIST'),BINARY BASE64
);
--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/AMOUNT)[1]','money') as TRANSACTIONFEE,
ITEMLISTCONVERTED.ITEM.value('(ITEM/WAIVED)[1]','bit') as WAIVED,
BASEAMOUNT FEE,
ORGANIZATIONAMOUNT ORGANIZATIONFEE,
@BASECURRENCYID BASECURRENCYID,
@ORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID,
@TRANSACTIONCURRENCYID TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID BASEEXCHANGERATEID
from dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML(
@ITEMLIST,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@ORGANIZATIONCURRENCYID,
@FULLAMOUNTTRANSACTIONCURRENCY,
@FULLAMOUNTBASECURRENCY,
@DECIMALDIGITSBASECURRENCY,
@FULLAMOUNTORGANIZATIONCURRENCY,
@DECIMALDIGITSORGANIZATIONCURRENCY
) ITEMLISTCONVERTED
for xml raw('ITEM'),type,elements,root('GIFTFEES'),BINARY BASE64
);
end