UFN_GIFTFEE_CONVERTAMOUNTSINXML

Fills in multicurrency fields in the given gift fees XML.

Return

Return Type
xml

Parameters

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

Definition

Copy


            CREATE function dbo.UFN_GIFTFEE_CONVERTAMOUNTSINXML(
                @GIFTFEES xml,
                @BASECURRENCYID uniqueidentifier,
                @ORGANIZATIONEXCHANGERATEID uniqueidentifier,
                @TRANSACTIONCURRENCYID uniqueidentifier,
                @BASEEXCHANGERATEID uniqueidentifier
            )
            returns xml
            as
            begin
                --Get the full transaction amount from the splits collection.

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

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

                --rename <TRANSACTIONFEE>...</TRANSACTIONFEE> to <AMOUNT>...</AMOUNT> for use by UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML.

                declare @ITEMLIST xml = (
                    select    GIFTFEES.ITEM.value('(ID)[1]','uniqueidentifier') as ID,
                            GIFTFEES.ITEM.value('(TRANSACTIONFEE)[1]','money') as AMOUNT,
                            GIFTFEES.ITEM.value('(WAIVED)[1]','bit') as WAIVED,
                            GIFTFEES.ITEM.value('(TRANSACTIONCURRENCYID)[1]','uniqueidentifier') as TRANSACTIONCURRENCYID
                    from @GIFTFEES.nodes('/GIFTFEES/ITEM') GIFTFEES(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.value('(ITEM/ID)[1]','uniqueidentifier') as ID,
                        ITEMLISTCONVERTED.ITEM.value('(ITEM/AMOUNT)[1]','money') as TRANSACTIONFEE, 
                        ITEMLISTCONVERTED.ITEM.value('(ITEM/WAIVED)[1]','bit') as WAIVED,
                        BASEAMOUNT FEE,
                        ORGANIZATIONAMOUNT ORGANIZATIONFEE,
                        @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('GIFTFEES'),BINARY BASE64
                );
            end