UFN_REVENUE_REVENUESTREAMS_CONVERTAMOUNTSINXML
Fills in multicurrency fields in the given revenue streams XML.
Return
Return Type |
---|
xml |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUESTREAMS | xml | IN | |
@BASECURRENCYID | uniqueidentifier | IN | |
@ORGANIZATIONEXCHANGERATEID | uniqueidentifier | IN | |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | |
@BASEEXCHANGERATEID | uniqueidentifier | IN |
Definition
Copy
create function dbo.UFN_REVENUE_REVENUESTREAMS_CONVERTAMOUNTSINXML(
@REVENUESTREAMS xml,
@BASECURRENCYID uniqueidentifier,
@ORGANIZATIONEXCHANGERATEID uniqueidentifier,
@TRANSACTIONCURRENCYID uniqueidentifier,
@BASEEXCHANGERATEID uniqueidentifier
)
returns xml
as
begin
/*
*** Note: Do not call this function with an incomplete set of revenue streams. For example,
USP_REVENUE_UPDATEREVENUESTREAMS calls this function, deletes some applications and then calls
USP_REVENUE_APPLYTOREVENUESTREAMS. If USP_REVENUE_APPLYTOREVENUESTREAMS were to call this function
again, the converted amounts would be wrong for some situations.
*/
--Get the full transaction amount from the splits collection.
declare @FULLAMOUNTTRANSACTIONCURRENCY money;
set @FULLAMOUNTTRANSACTIONCURRENCY = coalesce(
(
select sum(REVENUESTREAMSITEM.ELEMENT.value('APPLIED[1]', 'money'))
from @REVENUESTREAMS.nodes('/REVENUESTREAMS/ITEM') REVENUESTREAMSITEM(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;
--Rename <APPLIED>...</APPLIED> to <AMOUNT>...</AMOUNT> for use by UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML.
declare @ITEMLIST xml = (
select REVENUESTREAMS.ITEM.query('./*'),
REVENUESTREAMS.ITEM.value('(APPLIED)[1]','money') as AMOUNT
from @REVENUESTREAMS.nodes('/REVENUESTREAMS/ITEM') REVENUESTREAMS(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.query('ITEM/*[
local-name() != "APPLIEDBASEAMOUNT"
and local-name() != "APPLIEDORGANIZATIONAMOUNT"
and local-name() != "BASECURRENCYID"
and local-name() != "ORGANIZATIONEXCHANGERATEID"
and local-name() != "TRANSACTIONCURRENCYID"
and local-name() != "BASEEXCHANGERATEID"]'),
BASEAMOUNT APPLIEDBASEAMOUNT,
ORGANIZATIONAMOUNT APPLIEDORGANIZATIONAMOUNT,
@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('REVENUESTREAMS'),BINARY BASE64
);
end