UFN_GLDISTRIBUTION_CONVERTAMOUNTSINXML

Fills in multicurrency fields in the given GL distribution XML.

Return

Return Type
xml

Parameters

Parameter Parameter Type Mode Description
@GLDISTRIBUTION xml IN
@BASECURRENCYID uniqueidentifier IN
@DEBITORGANIZATIONEXCHANGERATEID uniqueidentifier IN
@TRANSACTIONCURRENCYID uniqueidentifier IN
@DEBITBASEEXCHANGERATEID uniqueidentifier IN
@CREDITORGANIZATIONEXCHANGERATEID uniqueidentifier IN
@CREDITBASEEXCHANGERATEID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_GLDISTRIBUTION_CONVERTAMOUNTSINXML(
                @GLDISTRIBUTION xml,
                @BASECURRENCYID uniqueidentifier,
                @DEBITORGANIZATIONEXCHANGERATEID uniqueidentifier,
                @TRANSACTIONCURRENCYID uniqueidentifier,
                @DEBITBASEEXCHANGERATEID uniqueidentifier,
                @CREDITORGANIZATIONEXCHANGERATEID uniqueidentifier,
                @CREDITBASEEXCHANGERATEID uniqueidentifier
            )
            returns xml
            as
            begin

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

                declare @FULLAMOUNTTRANSACTIONCURRENCY money;
                set @FULLAMOUNTTRANSACTIONCURRENCY = coalesce(
                    (
                        select sum(GLDISTRIBUTIONITEM.ELEMENT.value('AMOUNT[1]', 'money'))
                        from @GLDISTRIBUTION.nodes('/GLDISTRIBUTION/ITEM') GLDISTRIBUTIONITEM(ELEMENT)
                        where GLDISTRIBUTIONITEM.ELEMENT.value('TRANSACTIONTYPECODE[1]', 'tinyint') = 0
                    )
                    ,0
                );

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

                declare @FULLDEBITAMOUNTBASECURRENCY money;
                declare @FULLDEBITAMOUNTORGANIZATIONCURRENCY money;
                declare @FULLCREDITAMOUNTBASECURRENCY money;
                declare @FULLCREDITAMOUNTORGANIZATIONCURRENCY money;
                declare @ORGANIZATIONCURRENCYID uniqueidentifier;
                select 
                    @FULLDEBITAMOUNTBASECURRENCY = BASEAMOUNT,
                    @FULLDEBITAMOUNTORGANIZATIONCURRENCY = ORGANIZATIONAMOUNT,
                    @ORGANIZATIONCURRENCYID = ORGANIZATIONCURRENCYID
                from dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(
                    @FULLAMOUNTTRANSACTIONCURRENCY,
                    null,
                    @BASECURRENCYID,
                    @DEBITBASEEXCHANGERATEID,
                    @TRANSACTIONCURRENCYID,
                    default,
                    default,
                    default,
                    @DEBITORGANIZATIONEXCHANGERATEID,
                    0
                );

                select 
                    @FULLCREDITAMOUNTBASECURRENCY = BASEAMOUNT,
                    @FULLCREDITAMOUNTORGANIZATIONCURRENCY = ORGANIZATIONAMOUNT
                from dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(
                    @FULLAMOUNTTRANSACTIONCURRENCY,
                    null,
                    @BASECURRENCYID,
                    @CREDITBASEEXCHANGERATEID,
                    @TRANSACTIONCURRENCYID,
                    default,
                    default,
                    default,
                    @CREDITORGANIZATIONEXCHANGERATEID,
                    0
                );

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

                --Replace the <GLDISTRIBUTION>...</GLDISTRIBUTION> wrapping the given XML with <ITEMLIST>...</ITEMLIST> (no longer necessary) and

                --filter out non-debit items for use by UFN_CURRENCY_CONVERTBYPROPORTIONINXML.

                declare @DEBITITEMLIST xml = (
                    select 
                        GLDISTRIBUTION.ELEMENT.query('(ITEM[TRANSACTIONTYPECODE = 0])')
                    from 
                        @GLDISTRIBUTION.nodes('/GLDISTRIBUTION') GLDISTRIBUTION(ELEMENT)            
                    for xml raw(''),type,elements,root('ITEMLIST'),BINARY BASE64
                );

                --Replace the <GLDISTRIBUTION>...</GLDISTRIBUTION> wrapping the given XML with <ITEMLIST>...</ITEMLIST> (no longer necessary) and

                --filter out non-credit items for use by UFN_CURRENCY_CONVERTBYPROPORTIONINXML.

                declare @CREDITITEMLIST xml = (
                    select 
                        GLDISTRIBUTION.ELEMENT.query('(ITEM[TRANSACTIONTYPECODE = 1])')
                    from 
                        @GLDISTRIBUTION.nodes('/GLDISTRIBUTION') GLDISTRIBUTION(ELEMENT)            
                    for xml raw(''),type,elements,root('ITEMLIST'),BINARY BASE64
                );

                return (
                    select * from (
                        select         
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/ID)[1]','uniqueidentifier') as ID,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/TRANSACTIONTYPECODE)[1]','tinyint') as TRANSACTIONTYPECODE, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/GLPAYMENTMETHODREVENUETYPEMAPPINGID)[1]','uniqueidentifier') as GLPAYMENTMETHODREVENUETYPEMAPPINGID, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/ACCOUNT)[1]','nvarchar(100)') as ACCOUNT, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/PROJECT)[1]','nvarchar(100)') as PROJECT, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/REFERENCE)[1]','nvarchar(255)') as REFERENCE, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/AMOUNT)[1]','money') as TRANSACTIONAMOUNT, --rename AMOUNT field

                            BASEAMOUNT AMOUNT,
                            ORGANIZATIONAMOUNT ORGANIZATIONAMOUNT,
                            @BASECURRENCYID BASECURRENCYID,
                            @DEBITORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID,        
                            @TRANSACTIONCURRENCYID TRANSACTIONCURRENCYID,
                            @DEBITBASEEXCHANGERATEID BASEEXCHANGERATEID,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/GLACCOUNTID)[1]','uniqueidentifier') as GLACCOUNTID    ,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/GLTRANSACTIONID)[1]','uniqueidentifier') as GLTRANSACTIONID,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/REVENUEBENEFITID)[1]','uniqueidentifier') as REVENUEBENEFITID,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/FINANCIALTRANSACTIONLINEITEMID)[1]','uniqueidentifier') as FINANCIALTRANSACTIONLINEITEMID                             
                        from dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML(
                                @DEBITITEMLIST,
                                @TRANSACTIONCURRENCYID,
                                @BASECURRENCYID,
                                @ORGANIZATIONCURRENCYID,
                                @FULLAMOUNTTRANSACTIONCURRENCY,
                                @FULLDEBITAMOUNTBASECURRENCY,
                                @DECIMALDIGITSBASECURRENCY,
                                @FULLDEBITAMOUNTORGANIZATIONCURRENCY,
                                @DECIMALDIGITSORGANIZATIONCURRENCY
                            ) ITEMLISTCONVERTED

                        union all

                        select         
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/ID)[1]','uniqueidentifier') as ID,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/TRANSACTIONTYPECODE)[1]','tinyint') as TRANSACTIONTYPECODE, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/GLPAYMENTMETHODREVENUETYPEMAPPINGID)[1]','uniqueidentifier') as GLPAYMENTMETHODREVENUETYPEMAPPINGID, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/ACCOUNT)[1]','nvarchar(100)') as ACCOUNT, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/PROJECT)[1]','nvarchar(100)') as PROJECT, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/REFERENCE)[1]','nvarchar(255)') as REFERENCE, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/AMOUNT)[1]','money') as TRANSACTIONAMOUNT, --rename AMOUNT field

                            BASEAMOUNT AMOUNT,
                            ORGANIZATIONAMOUNT ORGANIZATIONAMOUNT,
                            @BASECURRENCYID BASECURRENCYID,
                            @CREDITORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID,        
                            @TRANSACTIONCURRENCYID TRANSACTIONCURRENCYID,
                            @CREDITBASEEXCHANGERATEID BASEEXCHANGERATEID,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/GLACCOUNTID)[1]','uniqueidentifier') as GLACCOUNTID    ,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/GLTRANSACTIONID)[1]','uniqueidentifier') as GLTRANSACTIONID,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/REVENUEBENEFITID)[1]','uniqueidentifier') as REVENUEBENEFITID,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/FINANCIALTRANSACTIONLINEITEMID)[1]','uniqueidentifier') as FINANCIALTRANSACTIONLINEITEMID                            
                        from dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML(
                                @CREDITITEMLIST,
                                @TRANSACTIONCURRENCYID,
                                @BASECURRENCYID,
                                @ORGANIZATIONCURRENCYID,
                                @FULLAMOUNTTRANSACTIONCURRENCY,
                                @FULLCREDITAMOUNTBASECURRENCY,
                                @DECIMALDIGITSBASECURRENCY,
                                @FULLCREDITAMOUNTORGANIZATIONCURRENCY,
                                @DECIMALDIGITSORGANIZATIONCURRENCY
                            ) ITEMLISTCONVERTED
                    ) DATA
                for xml raw('ITEM'),type,elements,root('GLDISTRIBUTION'),BINARY BASE64
                );
            end