UFN_INSTALLMENTSPLIT_CONVERTAMOUNTSINXML

Fills in multicurrency fields in the given installment splits XML.

Return

Return Type
xml

Parameters

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

Definition

Copy


            CREATE function dbo.UFN_INSTALLMENTSPLIT_CONVERTAMOUNTSINXML(
                @INSTALLMENTSPLITS xml,
                @BASECURRENCYID uniqueidentifier,
                @ORGANIZATIONEXCHANGERATEID uniqueidentifier,
                @TRANSACTIONCURRENCYID uniqueidentifier,
                @BASEEXCHANGERATEID uniqueidentifier
            )
            returns xml
            as
            begin

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

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

                --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/INSTALLMENTID)[1]','uniqueidentifier') as INSTALLMENTID, 
                        ITEMLISTCONVERTED.ITEM.value('(ITEM/DESIGNATIONID)[1]','uniqueidentifier') as DESIGNATIONID, 
                        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/REVENUESPLITID)[1]', 'uniqueidentifier') as REVENUESPLITID
                    from dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML(
                            @INSTALLMENTSPLITS,
                            @TRANSACTIONCURRENCYID,
                            @BASECURRENCYID,
                            @ORGANIZATIONCURRENCYID,
                            @FULLAMOUNTTRANSACTIONCURRENCY,
                            @FULLAMOUNTBASECURRENCY,
                            @DECIMALDIGITSBASECURRENCY,
                            @FULLAMOUNTORGANIZATIONCURRENCY,
                            @DECIMALDIGITSORGANIZATIONCURRENCY
                        ) ITEMLISTCONVERTED
                    order by ITEMLISTCONVERTED.ROW
                    for xml raw('ITEM'),type,elements,root('INSTALLMENTSPLITS'),BINARY BASE64
                );

            end