UFN_REVENUERECOGNITION_CONVERTAMOUNTSINXML
Fills in multicurrency fields in the given recognitions XML.
Return
Return Type |
---|
xml |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@RECOGNITIONS | xml | IN | |
@BASECURRENCYID | uniqueidentifier | IN | |
@ORGANIZATIONEXCHANGERATEID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_REVENUERECOGNITION_CONVERTAMOUNTSINXML(
@RECOGNITIONS xml,
@BASECURRENCYID uniqueidentifier,
@ORGANIZATIONEXCHANGERATEID uniqueidentifier
)
returns xml
as
begin
--Get the full base amount from the splits collection.
declare @FULLAMOUNTBASECURRENCY money
set @FULLAMOUNTBASECURRENCY = coalesce(
(
select sum(RECOGNITIONSITEM.ELEMENT.value('AMOUNT[1]', 'money'))
from @RECOGNITIONS.nodes('/RECOGNITIONS/ITEM') RECOGNITIONSITEM(ELEMENT)
)
,0
);
--Get the full org amount, as well as the organization currency
declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @FULLAMOUNTORGANIZATIONCURRENCY money = dbo.UFN_CURRENCY_CONVERT(@FULLAMOUNTBASECURRENCY, @ORGANIZATIONEXCHANGERATEID)
--Retrieve decimal digits for use by UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML.
declare @DECIMALDIGITSORGANIZATIONCURRENCY tinyint;
select @DECIMALDIGITSORGANIZATIONCURRENCY = DECIMALDIGITS from dbo.CURRENCY where ID = @ORGANIZATIONCURRENCYID;
--Use UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML to get the correct org amount and then build the output XML.
--Have to cheat since this function assumes that you have transaction amount to start and we have base. Since the "transaction"
--amount is what we start with and it gives us the "base" and "org", we will just say our value is the transaction and it
--will return our orgamounts. Will set base and org parameters to the same since base doesn't really exist.
return (
select
ITEMLISTCONVERTED.ITEM.value('(ITEM/ID)[1]','uniqueidentifier') as ID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/CONSTITUENTID)[1]','uniqueidentifier') as CONSTITUENTID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/NAME)[1]','nvarchar(154)') as NAME,
ITEMLISTCONVERTED.ITEM.value('(ITEM/AMOUNT)[1]','money') as AMOUNT,
ITEMLISTCONVERTED.ITEM.value('(ITEM/EFFECTIVEDATE)[1]','datetime') as EFFECTIVEDATE,
ITEMLISTCONVERTED.ITEM.value('(ITEM/REVENUERECOGNITIONTYPECODEID)[1]','uniqueidentifier') as REVENUERECOGNITIONTYPECODEID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/RECOGNITIONTYPE)[1]','nvarchar(100)') as RECOGNITIONTYPE,
ITEMLISTCONVERTED.ITEM.value('(ITEM/GROSSAMOUNT)[1]','money') as GROSSAMOUNT,
@BASECURRENCYID BASECURRENCYID,
ORGANIZATIONAMOUNT ORGANIZATIONAMOUNT,
@ORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID
from dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML(
@RECOGNITIONS,
@BASECURRENCYID, --transaction
@ORGANIZATIONCURRENCYID, --base
@ORGANIZATIONCURRENCYID, --org
@FULLAMOUNTBASECURRENCY, --transaction
@FULLAMOUNTORGANIZATIONCURRENCY, --base
@DECIMALDIGITSORGANIZATIONCURRENCY, --base
@FULLAMOUNTORGANIZATIONCURRENCY, --organization
@DECIMALDIGITSORGANIZATIONCURRENCY --organization
) ITEMLISTCONVERTED
for xml raw('ITEM'),type,elements,root('RECOGNITIONS'),BINARY BASE64
)
end