UFN_INSTALLMENT_CONVERTAMOUNTSINXML
Fills in multicurrency fields in the given splits XML.
Return
Return Type |
---|
xml |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@INSTALLMENTS | xml | IN | |
@BASECURRENCYID | uniqueidentifier | IN | |
@ORGANIZATIONEXCHANGERATEID | uniqueidentifier | IN | |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | |
@BASEEXCHANGERATEID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_INSTALLMENT_CONVERTAMOUNTSINXML
(
@INSTALLMENTS xml,
@BASECURRENCYID uniqueidentifier,
@ORGANIZATIONEXCHANGERATEID uniqueidentifier,
@TRANSACTIONCURRENCYID uniqueidentifier,
@BASEEXCHANGERATEID uniqueidentifier
)
returns xml
as
begin
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @MULTICURRENCYENABLED bit;
set @MULTICURRENCYENABLED = dbo.UFN_CONDITIONSETTING_EVALUATEEXISTSCONDITION('Multicurrency');
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
if @MULTICURRENCYENABLED = 0 or ((@TRANSACTIONCURRENCYID = @BASECURRENCYID) and (@TRANSACTIONCURRENCYID = @ORGANIZATIONCURRENCYID))
begin
set @INSTALLMENTS = (
select
INSTALLMENTSITEM.ELEMENT.value('ID[1]','uniqueidentifier') as ID,
INSTALLMENTSITEM.ELEMENT.value('DATE[1]','datetime') as DATE,
INSTALLMENTSITEM.ELEMENT.value('BALANCE[1]','money') as BALANCE,
INSTALLMENTSITEM.ELEMENT.value('APPLIED[1]','money') as APPLIED,
INSTALLMENTSITEM.ELEMENT.value('SEQUENCE[1]','tinyint') as SEQUENCE,
INSTALLMENTSITEM.ELEMENT.query('INSTALLMENTSPLITS[1]'),
INSTALLMENTSITEM.ELEMENT.value('AMOUNT[1]','money') as TRANSACTIONAMOUNT,
INSTALLMENTSITEM.ELEMENT.value('AMOUNT[1]','money') as AMOUNT,
INSTALLMENTSITEM.ELEMENT.value('AMOUNT[1]','money') as ORGANIZATIONAMOUNT,
@BASECURRENCYID BASECURRENCYID,
@ORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID,
@TRANSACTIONCURRENCYID TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID BASEEXCHANGERATEID,
INSTALLMENTSITEM.ELEMENT.value('RECEIPTAMOUNT[1]','money') as TRANSACTIONRECEIPTAMOUNT,
INSTALLMENTSITEM.ELEMENT.value('RECEIPTAMOUNT[1]','money') as RECEIPTAMOUNT,
INSTALLMENTSITEM.ELEMENT.value('RECEIPTAMOUNT[1]','money') as ORGANIZATIONRECEIPTAMOUNT
from @INSTALLMENTS.nodes('/INSTALLMENTS/ITEM') INSTALLMENTSITEM(ELEMENT)
for xml raw('ITEM'),type,elements,root('INSTALLMENTS'),BINARY BASE64);
end
else
begin
--Get the full transaction amount from the installments collection.
declare @FULLAMOUNTTRANSACTIONCURRENCY money;
set @FULLAMOUNTTRANSACTIONCURRENCY = coalesce(
(
select sum(INSTALLMENTSITEM.ELEMENT.value('AMOUNT[1]', 'money'))
from @INSTALLMENTS.nodes('/INSTALLMENTS/ITEM') INSTALLMENTSITEM(ELEMENT)
)
,0
);
--Get the full base and full org amounts, as well as the organization currency
declare @FULLAMOUNTBASECURRENCY money;
declare @FULLAMOUNTORGANIZATIONCURRENCY money;
select
@FULLAMOUNTBASECURRENCY = BASEAMOUNT,
@FULLAMOUNTORGANIZATIONCURRENCY = ORGANIZATIONAMOUNT,
@ORGANIZATIONCURRENCYID = ORGANIZATIONCURRENCYID
from dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(
@FULLAMOUNTTRANSACTIONCURRENCY,
null,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
default,
default,
default,
@ORGANIZATIONEXCHANGERATEID,
0
);
--Get the full transaction amount from the installments collection.
declare @FULLRECEIPTAMOUNTTRANSACTIONCURRENCY money;
set @FULLRECEIPTAMOUNTTRANSACTIONCURRENCY = coalesce(
(
select sum(INSTALLMENTSITEM.ELEMENT.value('RECEIPTAMOUNT[1]', 'money'))
from @INSTALLMENTS.nodes('/INSTALLMENTS/ITEM') INSTALLMENTSITEM(ELEMENT)
)
,0
);
declare @FULLRECEIPTAMOUNTBASECURRENCY money;
declare @FULLRECEIPTAMOUNTORGANIZATIONCURRENCY money;
select
@FULLRECEIPTAMOUNTBASECURRENCY = BASEAMOUNT,
@FULLRECEIPTAMOUNTORGANIZATIONCURRENCY = ORGANIZATIONAMOUNT
from dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(
@FULLRECEIPTAMOUNTTRANSACTIONCURRENCY,
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;
set @INSTALLMENTS = (select
ITEMLISTCONVERTED.ITEM.value('(ITEM/ID)[1]','uniqueidentifier') as ID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/DATE)[1]','datetime') as DATE,
ITEMLISTCONVERTED.ITEM.value('(ITEM/BALANCE)[1]','money') as BALANCE,
ITEMLISTCONVERTED.ITEM.value('(ITEM/APPLIED)[1]','money') as APPLIED,
ITEMLISTCONVERTED.ITEM.value('(ITEM/SEQUENCE)[1]','tinyint') as SEQUENCE,
ITEMLISTCONVERTED.ITEM.query('(ITEM/INSTALLMENTSPLITS)[1]'),
ITEMLISTCONVERTED.ITEM.value('(ITEM/AMOUNT)[1]','money') as AMOUNT,
ITEMLISTCONVERTED.ITEM.value('(ITEM/RECEIPTAMOUNT)[1]','money') as TRANSACTIONRECEIPTAMOUNT,
BASEAMOUNT as RECEIPTAMOUNT,
ORGANIZATIONAMOUNT as ORGANIZATIONRECEIPTAMOUNT
from dbo.UFN_INSTALLMENTS_GETCURRENCYVALUESBYPROPORTIONINXML(
@INSTALLMENTS,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@ORGANIZATIONCURRENCYID,
@FULLRECEIPTAMOUNTTRANSACTIONCURRENCY,
@FULLRECEIPTAMOUNTBASECURRENCY,
@DECIMALDIGITSBASECURRENCY,
@FULLRECEIPTAMOUNTORGANIZATIONCURRENCY,
@DECIMALDIGITSORGANIZATIONCURRENCY
) ITEMLISTCONVERTED
for xml raw('ITEM'),type,elements,root('INSTALLMENTS'),BINARY BASE64)
--Use UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML to get the correct base and org amounts and then build the output XML.
set @INSTALLMENTS = (
select
ITEMLISTCONVERTED.ITEM.value('(ITEM/ID)[1]','uniqueidentifier') as ID,
ITEMLISTCONVERTED.ITEM.value('(ITEM/DATE)[1]','datetime') as DATE,
ITEMLISTCONVERTED.ITEM.value('(ITEM/BALANCE)[1]','money') as BALANCE,
ITEMLISTCONVERTED.ITEM.value('(ITEM/APPLIED)[1]','money') as APPLIED,
ITEMLISTCONVERTED.ITEM.value('(ITEM/SEQUENCE)[1]','tinyint') as SEQUENCE,
ITEMLISTCONVERTED.ITEM.query('(ITEM/INSTALLMENTSPLITS)[1]'),
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/TRANSACTIONRECEIPTAMOUNT)[1]','money') as TRANSACTIONRECEIPTAMOUNT,
ITEMLISTCONVERTED.ITEM.value('(ITEM/RECEIPTAMOUNT)[1]','money') as RECEIPTAMOUNT,
ITEMLISTCONVERTED.ITEM.value('(ITEM/ORGANIZATIONRECEIPTAMOUNT)[1]','money') as ORGANIZATIONRECEIPTAMOUNT
from dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML(
@INSTALLMENTS,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@ORGANIZATIONCURRENCYID,
@FULLAMOUNTTRANSACTIONCURRENCY,
@FULLAMOUNTBASECURRENCY,
@DECIMALDIGITSBASECURRENCY,
@FULLAMOUNTORGANIZATIONCURRENCY,
@DECIMALDIGITSORGANIZATIONCURRENCY
) ITEMLISTCONVERTED
for xml raw('ITEM'),type,elements,root('INSTALLMENTS'),BINARY BASE64
);
end
return @INSTALLMENTS;
end