UFN_INSTALLMENTSPLIT_CONVERTAMOUNTSINXML
Fills in multicurrency fields in the given installment splits XML.
Return
Return Type |
---|
xml |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@INSTALLMENTSPLITS | xml | IN | |
@BASECURRENCYID | uniqueidentifier | IN | |
@ORGANIZATIONEXCHANGERATEID | uniqueidentifier | IN | |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | |
@BASEEXCHANGERATEID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_INSTALLMENTSPLIT_CONVERTAMOUNTSINXML(
@INSTALLMENTSPLITS xml,
@BASECURRENCYID uniqueidentifier,
@ORGANIZATIONEXCHANGERATEID uniqueidentifier,
@TRANSACTIONCURRENCYID uniqueidentifier,
@BASEEXCHANGERATEID uniqueidentifier
)
returns xml
as
begin
--Get the full transaction amount from the installment splits collection.
declare @FULLAMOUNTTRANSACTIONCURRENCY money;
set @FULLAMOUNTTRANSACTIONCURRENCY = coalesce(
(
select sum(INSTALLMENTSPLITSITEM.ELEMENT.value('AMOUNT[1]', 'money'))
from @INSTALLMENTSPLITS.nodes('/INSTALLMENTSPLITS/ITEM') INSTALLMENTSPLITSITEM(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;
--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/INSTALLMENTID)[1]','uniqueidentifier') as INSTALLMENTID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/DESIGNATIONID)[1]','uniqueidentifier') as DESIGNATIONID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/AMOUNT)[1]','money') as TRANSACTIONAMOUNT, --rename AMOUNT field
BASEAMOUNT AMOUNT,
ORGANIZATIONAMOUNT ORGANIZATIONAMOUNT,
@BASECURRENCYID BASECURRENCYID,
@ORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID,
@TRANSACTIONCURRENCYID TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID BASEEXCHANGERATEID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/REVENUESPLITID)[1]', 'uniqueidentifier') as REVENUESPLITID
from dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML(
@INSTALLMENTSPLITS,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@ORGANIZATIONCURRENCYID,
@FULLAMOUNTTRANSACTIONCURRENCY,
@FULLAMOUNTBASECURRENCY,
@DECIMALDIGITSBASECURRENCY,
@FULLAMOUNTORGANIZATIONCURRENCY,
@DECIMALDIGITSORGANIZATIONCURRENCY
) ITEMLISTCONVERTED
order by ITEMLISTCONVERTED.ROW
for xml raw('ITEM'),type,elements,root('INSTALLMENTSPLITS'),BINARY BASE64
);
end