UFN_PLANNEDGIFTDESIGNATION_CONVERTAMOUNTSINXML
Fills in multicurrency fields in the given designations XML.
Return
Return Type |
---|
xml |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DESIGNATIONS | xml | IN | |
@BASECURRENCYID | uniqueidentifier | IN | |
@ORGANIZATIONEXCHANGERATEID | uniqueidentifier | IN | |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | |
@BASEEXCHANGERATEID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_PLANNEDGIFTDESIGNATION_CONVERTAMOUNTSINXML(
@DESIGNATIONS 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(DESIGNATIONSITEM.ELEMENT.value('AMOUNT[1]', 'money'))
from @DESIGNATIONS.nodes('/DESIGNATION/ITEM') DESIGNATIONSITEM(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,
getdate(), --This doesn't matter, as it is only used to look up an org exchange rate, and we are passing that in.
@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/DESIGNATIONID)[1]','uniqueidentifier') as DESIGNATIONID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/CATEGORYCODEID)[1]','uniqueidentifier') as CATEGORYCODEID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/TYPECODEID)[1]','uniqueidentifier') as TYPECODEID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/USECODEID)[1]','uniqueidentifier') as USECODEID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/DATE)[1]','datetime') as DATE,
ITEMLISTCONVERTED.ITEM.value('(ITEM/SEQUENCE)[1]','tinyint') as SEQUENCE,
ITEMLISTCONVERTED.ITEM.value('(ITEM/AMOUNT)[1]','money') as TRANSACTIONAMOUNT, --rename AMOUNT field
BASEAMOUNT AMOUNT,
ORGANIZATIONAMOUNT ORGANIZATIONAMOUNT,
@BASECURRENCYID BASECURRENCYID,
@ORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID,
@TRANSACTIONCURRENCYID TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID BASEEXCHANGERATEID
from dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML(
@DESIGNATIONS,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@ORGANIZATIONCURRENCYID,
@FULLAMOUNTTRANSACTIONCURRENCY,
@FULLAMOUNTBASECURRENCY,
@DECIMALDIGITSBASECURRENCY,
@FULLAMOUNTORGANIZATIONCURRENCY,
@DECIMALDIGITSORGANIZATIONCURRENCY
) ITEMLISTCONVERTED
for xml raw('ITEM'),type,elements,root('DESIGNATION'),BINARY BASE64
);
end