UFN_REVENUE_REVENUESTREAMS_CONVERTAMOUNTSINXML

Fills in multicurrency fields in the given revenue streams XML.

Return

Return Type
xml

Parameters

Parameter Parameter Type Mode Description
@REVENUESTREAMS xml IN
@BASECURRENCYID uniqueidentifier IN
@ORGANIZATIONEXCHANGERATEID uniqueidentifier IN
@TRANSACTIONCURRENCYID uniqueidentifier IN
@BASEEXCHANGERATEID uniqueidentifier IN

Definition

Copy


            create function dbo.UFN_REVENUE_REVENUESTREAMS_CONVERTAMOUNTSINXML(
                @REVENUESTREAMS xml,
                @BASECURRENCYID uniqueidentifier,
                @ORGANIZATIONEXCHANGERATEID uniqueidentifier,
                @TRANSACTIONCURRENCYID uniqueidentifier,
                @BASEEXCHANGERATEID uniqueidentifier
            )
            returns xml
            as
            begin

                /*
                *** Note: Do not call this function with an incomplete set of revenue streams. For example,
                USP_REVENUE_UPDATEREVENUESTREAMS calls this function, deletes some applications and then calls
                USP_REVENUE_APPLYTOREVENUESTREAMS. If USP_REVENUE_APPLYTOREVENUESTREAMS were to call this function
                again, the converted amounts would be wrong for some situations.
                */

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

                declare @FULLAMOUNTTRANSACTIONCURRENCY money;
                set @FULLAMOUNTTRANSACTIONCURRENCY = coalesce(
                    (
                        select sum(REVENUESTREAMSITEM.ELEMENT.value('APPLIED[1]', 'money'))
                        from @REVENUESTREAMS.nodes('/REVENUESTREAMS/ITEM') REVENUESTREAMSITEM(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,
                    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;

                --Rename <APPLIED>...</APPLIED> to <AMOUNT>...</AMOUNT> for use by UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML.

                declare @ITEMLIST xml = (
                    select    REVENUESTREAMS.ITEM.query('./*'),
                            REVENUESTREAMS.ITEM.value('(APPLIED)[1]','money') as AMOUNT
                    from @REVENUESTREAMS.nodes('/REVENUESTREAMS/ITEM') REVENUESTREAMS(ITEM)
                    for xml raw('ITEM'),type,elements,root('ITEMLIST'),BINARY BASE64
                );

                --Use UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML to get the correct base and org amounts and then build the output XML.

                return (
                    select         
                        ITEMLISTCONVERTED.ITEM.query('ITEM/*[
                            local-name() != "APPLIEDBASEAMOUNT"
                            and local-name() != "APPLIEDORGANIZATIONAMOUNT"
                            and local-name() != "BASECURRENCYID"
                            and local-name() != "ORGANIZATIONEXCHANGERATEID"
                            and local-name() != "TRANSACTIONCURRENCYID"
                            and local-name() != "BASEEXCHANGERATEID"]'),
                        BASEAMOUNT APPLIEDBASEAMOUNT,
                        ORGANIZATIONAMOUNT APPLIEDORGANIZATIONAMOUNT,
                        @BASECURRENCYID BASECURRENCYID,
                        @ORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID,        
                        @TRANSACTIONCURRENCYID TRANSACTIONCURRENCYID,
                        @BASEEXCHANGERATEID BASEEXCHANGERATEID    
                    from dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML(
                            @ITEMLIST,
                            @TRANSACTIONCURRENCYID,
                            @BASECURRENCYID,
                            @ORGANIZATIONCURRENCYID,
                            @FULLAMOUNTTRANSACTIONCURRENCY,
                            @FULLAMOUNTBASECURRENCY,
                            @DECIMALDIGITSBASECURRENCY,
                            @FULLAMOUNTORGANIZATIONCURRENCY,
                            @DECIMALDIGITSORGANIZATIONCURRENCY
                        ) ITEMLISTCONVERTED
                    for xml raw('ITEM'),type,elements,root('REVENUESTREAMS'),BINARY BASE64
                );
            end