UFN_REVENUEBENEFIT_CONVERTAMOUNTSINXML_2
Fills in multicurrency fields in the given benefits XML.
Return
Return Type |
---|
xml |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@BENEFITS | xml | IN | |
@REVENUETRANSACTIONCURRENCYID | uniqueidentifier | IN | |
@REVENUEBASECURRENCYID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_REVENUEBENEFIT_CONVERTAMOUNTSINXML_2
(
@BENEFITS xml,
@REVENUETRANSACTIONCURRENCYID uniqueidentifier,
@REVENUEBASECURRENCYID uniqueidentifier
)
returns xml
as
begin
declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @CURRENTDATE datetime = getdate();
declare @ORIGINCODE tinyint;
select @ORIGINCODE = coalesce(ORGANIZATIONAMOUNTORIGINCODE, 0)
from dbo.MULTICURRENCYCONFIGURATION
return (
select
ID,
BENEFITID,
QUANTITY,
UNITVALUE,
TOTALVALUE,
DETAILS,
SEQUENCE,
PERCENTAPPLICABLEAMOUNT,
VALUEPERCENT,
USEPERCENT,
BASECURRENCYID,
@REVENUETRANSACTIONCURRENCYID TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONEXCHANGERATEID,
CONVERSION.TRANSACTIONTOTALVALUE,
REVENUESPLITID,
case
when @ORIGINCODE = 0 then
case
when BASECURRENCYID = @ORGANIZATIONCURRENCYID
then TOTALVALUE
else dbo.UFN_CURRENCY_CONVERT(TOTALVALUE, ORGANIZATIONEXCHANGERATEID)
end
when @ORIGINCODE = 1 then
case
when @REVENUETRANSACTIONCURRENCYID = @ORGANIZATIONCURRENCYID
then CONVERSION.TRANSACTIONTOTALVALUE
else dbo.UFN_CURRENCY_CONVERT(CONVERSION.TRANSACTIONTOTALVALUE, ORGANIZATIONEXCHANGERATEID)
end
end ORGANIZATIONTOTALVALUE
from(
select
REVBENEFITSFROMXML.ID,
REVBENEFITSFROMXML.BENEFITID,
REVBENEFITSFROMXML.QUANTITY,
REVBENEFITSFROMXML.UNITVALUE,
cast(coalesce((REVBENEFITSFROMXML.QUANTITY * REVBENEFITSFROMXML.UNITVALUE),0) + coalesce((REVBENEFITSFROMXML.PERCENTAPPLICABLEAMOUNT * REVBENEFITSFROMXML.VALUEPERCENT/100),0) as money) TOTALVALUE,
REVBENEFITSFROMXML.DETAILS,
REVBENEFITSFROMXML.SEQUENCE,
REVBENEFITSFROMXML.PERCENTAPPLICABLEAMOUNT,
REVBENEFITSFROMXML.VALUEPERCENT,
REVBENEFITSFROMXML.USEPERCENT,
REVBENEFITSFROMXML.BASECURRENCYID,
REVBENEFITSFROMXML.REVENUESPLITID,
case
when REVBENEFITSFROMXML.BASECURRENCYID <> @REVENUETRANSACTIONCURRENCYID
then dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(REVBENEFITSFROMXML.BASECURRENCYID,@REVENUETRANSACTIONCURRENCYID, @CURRENTDATE, 1, null)
else null
end BASEEXCHANGERATEID,
case
when @ORIGINCODE = 0 then
case
when REVBENEFITSFROMXML.BASECURRENCYID <> @ORGANIZATIONCURRENCYID
then dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(REVBENEFITSFROMXML.BASECURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENTDATE, 0, null)
else null
end
when @ORIGINCODE = 1 then
case
when @REVENUETRANSACTIONCURRENCYID <> @ORGANIZATIONCURRENCYID
then dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@REVENUETRANSACTIONCURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENTDATE, 0, null)
else null
end
end ORGANIZATIONEXCHANGERATEID
from ( --Bug 92734 - AdamBu 5/19/10 - Created subselect so that case/coalesce to figure out base currency only needs to happen once.
select
REVBENEFITSFROMXML.ID,
REVBENEFITSFROMXML.BENEFITID,
REVBENEFITSFROMXML.QUANTITY,
REVBENEFITSFROMXML.UNITVALUE,
REVBENEFITSFROMXML.DETAILS,
REVBENEFITSFROMXML.SEQUENCE,
REVBENEFITSFROMXML.PERCENTAPPLICABLEAMOUNT,
REVBENEFITSFROMXML.VALUEPERCENT,
REVBENEFITSFROMXML.USEPERCENT,
REVBENEFITSFROMXML.REVENUESPLITID,
case
when REVBENEFITSFROMXML.BENEFITID = REVENUEBENEFIT.BENEFITID
--Bug 92734 - AdamBu 5/19/10 - We did't change the benefit on an existing revenue benefit,
-- so use the old base currency.
then REVENUEBENEFIT.BASECURRENCYID
else
--Bug 92734 - AdamBu 5/19/10 - This is a new revenue benefit, or we have changed the benefit
-- on an old one, so we pull the base currency from the benefit table (for unit benefits)
-- or the revenue transaction (for percent benefits).
coalesce(BENEFIT.BASECURRENCYID,@REVENUEBASECURRENCYID)
end BASECURRENCYID
from dbo.UFN_REVENUE_GETBENEFITS_3_FROMITEMLISTXML(@BENEFITS) REVBENEFITSFROMXML
inner join dbo.BENEFIT on REVBENEFITSFROMXML.BENEFITID = BENEFIT.ID
left join dbo.REVENUEBENEFIT on REVBENEFITSFROMXML.ID = REVENUEBENEFIT.ID
) REVBENEFITSFROMXML
) BENEFITS
cross apply(
select
case
when BASECURRENCYID <> @REVENUETRANSACTIONCURRENCYID
then dbo.UFN_CURRENCY_CONVERT(TOTALVALUE, BASEEXCHANGERATEID)
else TOTALVALUE
end TRANSACTIONTOTALVALUE
) CONVERSION
for xml raw('ITEM'),type,elements,root('BENEFITS'),BINARY BASE64
)
end