UFN_DONORCHALLENGESPLIT_CONVERTAMOUNTSINXML

Fills in multicurrency fields for the given donor challenge splits XML.

Return

Return Type
xml

Parameters

Parameter Parameter Type Mode Description
@SPLITS xml IN
@BASECURRENCYID uniqueidentifier IN
@ORGANIZATIONEXCHANGERATEID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_DONORCHALLENGESPLIT_CONVERTAMOUNTSINXML(
    @SPLITS xml,
    @BASECURRENCYID uniqueidentifier,
    @ORGANIZATIONEXCHANGERATEID uniqueidentifier
)
returns xml
as
begin

    --Get the full transaction amount from the splits collection.

    declare @FULLAMOUNTBASECURRENCY money;
    set @FULLAMOUNTBASECURRENCY = coalesce(
        (
            select sum(SPLITSITEM.ELEMENT.value('AMOUNT[1]', 'money'))
            from @SPLITS.nodes('/SPLITS/ITEM') SPLITSITEM(ELEMENT)
        )
        ,0
    );

    --Get the full base and full org amounts, as well as the organization currency

    declare @FULLAMOUNTORGANIZATIONCURRENCY money;
    declare @ORGANIZATIONCURRENCYID uniqueidentifier;
    select 
        @FULLAMOUNTORGANIZATIONCURRENCY = ORGANIZATIONAMOUNT,
        @ORGANIZATIONCURRENCYID = ORGANIZATIONCURRENCYID
    from dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(
        @FULLAMOUNTBASECURRENCY,
        null,
        @BASECURRENCYID,
        null,
        @BASECURRENCYID,
        @FULLAMOUNTBASECURRENCY,
        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/AMOUNT)[1]','money') as AMOUNT,
            ORGANIZATIONAMOUNT ORGANIZATIONAMOUNT,
            @BASECURRENCYID BASECURRENCYID,
            @ORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID
        from dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML(
                @SPLITS,
                @BASECURRENCYID,
                @BASECURRENCYID,
                @ORGANIZATIONCURRENCYID,
                @FULLAMOUNTBASECURRENCY,
                @FULLAMOUNTBASECURRENCY,
                @DECIMALDIGITSBASECURRENCY,
                @FULLAMOUNTORGANIZATIONCURRENCY,
                @DECIMALDIGITSORGANIZATIONCURRENCY
            ) ITEMLISTCONVERTED
        for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64
    );
end