UFN_REVENUERECOGNITION_CONVERTAMOUNTSINXML

Fills in multicurrency fields in the given recognitions XML.

Return

Return Type
xml

Parameters

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

Definition

Copy


            CREATE function dbo.UFN_REVENUERECOGNITION_CONVERTAMOUNTSINXML(
                @RECOGNITIONS xml,
                @BASECURRENCYID uniqueidentifier,
                @ORGANIZATIONEXCHANGERATEID uniqueidentifier
            )
            returns xml
            as
            begin
                --Get the full base amount from the splits collection.

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

                --Get the full org amount, as well as the organization currency

                declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
                declare @FULLAMOUNTORGANIZATIONCURRENCY money = dbo.UFN_CURRENCY_CONVERT(@FULLAMOUNTBASECURRENCY, @ORGANIZATIONEXCHANGERATEID)

                --Retrieve decimal digits for use by UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML.

                declare @DECIMALDIGITSORGANIZATIONCURRENCY tinyint;
                select @DECIMALDIGITSORGANIZATIONCURRENCY = DECIMALDIGITS from dbo.CURRENCY where ID = @ORGANIZATIONCURRENCYID;

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

                --Have to cheat since this function assumes that you have transaction amount to start and we have base.  Since the "transaction"

                --amount is what we start with and it gives us the "base" and "org", we will just say our value is the transaction and it

                --will return our orgamounts.  Will set base and org parameters to the same since base doesn't really exist.

                return (
                    select 
                        ITEMLISTCONVERTED.ITEM.value('(ITEM/ID)[1]','uniqueidentifier') as ID,
                        ITEMLISTCONVERTED.ITEM.value('(ITEM/CONSTITUENTID)[1]','uniqueidentifier') as CONSTITUENTID,
                        ITEMLISTCONVERTED.ITEM.value('(ITEM/NAME)[1]','nvarchar(154)') as NAME,
                        ITEMLISTCONVERTED.ITEM.value('(ITEM/AMOUNT)[1]','money') as AMOUNT,
                        ITEMLISTCONVERTED.ITEM.value('(ITEM/EFFECTIVEDATE)[1]','datetime') as EFFECTIVEDATE,
                        ITEMLISTCONVERTED.ITEM.value('(ITEM/REVENUERECOGNITIONTYPECODEID)[1]','uniqueidentifier') as REVENUERECOGNITIONTYPECODEID,
                        ITEMLISTCONVERTED.ITEM.value('(ITEM/RECOGNITIONTYPE)[1]','nvarchar(100)') as RECOGNITIONTYPE,
                        ITEMLISTCONVERTED.ITEM.value('(ITEM/GROSSAMOUNT)[1]','money') as GROSSAMOUNT,
                        @BASECURRENCYID BASECURRENCYID,
                        ORGANIZATIONAMOUNT ORGANIZATIONAMOUNT,
                        @ORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID

                    from dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML(
                            @RECOGNITIONS,
                            @BASECURRENCYID,                    --transaction

                            @ORGANIZATIONCURRENCYID,            --base

                            @ORGANIZATIONCURRENCYID,            --org

                            @FULLAMOUNTBASECURRENCY,            --transaction

                            @FULLAMOUNTORGANIZATIONCURRENCY,    --base

                            @DECIMALDIGITSORGANIZATIONCURRENCY, --base

                            @FULLAMOUNTORGANIZATIONCURRENCY,    --organization

                            @DECIMALDIGITSORGANIZATIONCURRENCY  --organization

                        ) ITEMLISTCONVERTED
                    for xml raw('ITEM'),type,elements,root('RECOGNITIONS'),BINARY BASE64
                )
            end