UFN_INSTALLMENT_CONVERTAMOUNTSINXML

Fills in multicurrency fields in the given splits XML.

Return

Return Type
xml

Parameters

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

Definition

Copy


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

                declare @ORGANIZATIONCURRENCYID uniqueidentifier;
                declare @MULTICURRENCYENABLED bit;

                set @MULTICURRENCYENABLED = dbo.UFN_CONDITIONSETTING_EVALUATEEXISTSCONDITION('Multicurrency'); 
                set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                if @MULTICURRENCYENABLED = 0 or ((@TRANSACTIONCURRENCYID = @BASECURRENCYID) and (@TRANSACTIONCURRENCYID = @ORGANIZATIONCURRENCYID))
                begin
                    set @INSTALLMENTS = (
                        select
                            INSTALLMENTSITEM.ELEMENT.value('ID[1]','uniqueidentifier') as ID,
                            INSTALLMENTSITEM.ELEMENT.value('DATE[1]','datetime') as DATE
                            INSTALLMENTSITEM.ELEMENT.value('BALANCE[1]','money') as BALANCE, 
                            INSTALLMENTSITEM.ELEMENT.value('APPLIED[1]','money') as APPLIED, 
                            INSTALLMENTSITEM.ELEMENT.value('SEQUENCE[1]','tinyint') as SEQUENCE
                            INSTALLMENTSITEM.ELEMENT.query('INSTALLMENTSPLITS[1]'), 
                            INSTALLMENTSITEM.ELEMENT.value('AMOUNT[1]','money') as TRANSACTIONAMOUNT,
                            INSTALLMENTSITEM.ELEMENT.value('AMOUNT[1]','money') as AMOUNT,
                            INSTALLMENTSITEM.ELEMENT.value('AMOUNT[1]','money') as ORGANIZATIONAMOUNT,
                            @BASECURRENCYID BASECURRENCYID,
                            @ORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID,
                            @TRANSACTIONCURRENCYID TRANSACTIONCURRENCYID,
                            @BASEEXCHANGERATEID BASEEXCHANGERATEID,
                            INSTALLMENTSITEM.ELEMENT.value('RECEIPTAMOUNT[1]','money') as TRANSACTIONRECEIPTAMOUNT,
                            INSTALLMENTSITEM.ELEMENT.value('RECEIPTAMOUNT[1]','money') as RECEIPTAMOUNT,
                            INSTALLMENTSITEM.ELEMENT.value('RECEIPTAMOUNT[1]','money') as ORGANIZATIONRECEIPTAMOUNT
                        from @INSTALLMENTS.nodes('/INSTALLMENTS/ITEM') INSTALLMENTSITEM(ELEMENT)
                        for xml raw('ITEM'),type,elements,root('INSTALLMENTS'),BINARY BASE64);
                end
                else
                begin
                    --Get the full transaction amount from the installments collection.

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


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

                    declare @FULLAMOUNTBASECURRENCY money;
                    declare @FULLAMOUNTORGANIZATIONCURRENCY money;

                    select 
                        @FULLAMOUNTBASECURRENCY = BASEAMOUNT,
                        @FULLAMOUNTORGANIZATIONCURRENCY = ORGANIZATIONAMOUNT,
                        @ORGANIZATIONCURRENCYID = ORGANIZATIONCURRENCYID
                    from dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(
                        @FULLAMOUNTTRANSACTIONCURRENCY,
                        null,
                        @BASECURRENCYID,
                        @BASEEXCHANGERATEID,
                        @TRANSACTIONCURRENCYID,
                        default,
                        default,
                        default,
                        @ORGANIZATIONEXCHANGERATEID,
                        0
                    );

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

                    declare @FULLRECEIPTAMOUNTTRANSACTIONCURRENCY money;
                    set @FULLRECEIPTAMOUNTTRANSACTIONCURRENCY = coalesce(
                        (
                            select sum(INSTALLMENTSITEM.ELEMENT.value('RECEIPTAMOUNT[1]', 'money'))
                            from @INSTALLMENTS.nodes('/INSTALLMENTS/ITEM') INSTALLMENTSITEM(ELEMENT)
                        )
                        ,0
                    );

                    declare @FULLRECEIPTAMOUNTBASECURRENCY money;
                    declare @FULLRECEIPTAMOUNTORGANIZATIONCURRENCY money;

                    select 
                        @FULLRECEIPTAMOUNTBASECURRENCY = BASEAMOUNT,
                        @FULLRECEIPTAMOUNTORGANIZATIONCURRENCY = ORGANIZATIONAMOUNT
                    from dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(
                        @FULLRECEIPTAMOUNTTRANSACTIONCURRENCY,
                        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;

                    set @INSTALLMENTS = (select         
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/ID)[1]','uniqueidentifier') as ID,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/DATE)[1]','datetime') as DATE
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/BALANCE)[1]','money') as BALANCE, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/APPLIED)[1]','money') as APPLIED, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/SEQUENCE)[1]','tinyint') as SEQUENCE
                            ITEMLISTCONVERTED.ITEM.query('(ITEM/INSTALLMENTSPLITS)[1]'), 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/AMOUNT)[1]','money') as AMOUNT,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/RECEIPTAMOUNT)[1]','money') as TRANSACTIONRECEIPTAMOUNT,
                            BASEAMOUNT as RECEIPTAMOUNT,
                            ORGANIZATIONAMOUNT as ORGANIZATIONRECEIPTAMOUNT
                        from dbo.UFN_INSTALLMENTS_GETCURRENCYVALUESBYPROPORTIONINXML(
                                @INSTALLMENTS,
                                @TRANSACTIONCURRENCYID,
                                @BASECURRENCYID,
                                @ORGANIZATIONCURRENCYID,
                                @FULLRECEIPTAMOUNTTRANSACTIONCURRENCY,
                                @FULLRECEIPTAMOUNTBASECURRENCY,
                                @DECIMALDIGITSBASECURRENCY,
                                @FULLRECEIPTAMOUNTORGANIZATIONCURRENCY,
                                @DECIMALDIGITSORGANIZATIONCURRENCY
                            ) ITEMLISTCONVERTED
                        for xml raw('ITEM'),type,elements,root('INSTALLMENTS'),BINARY BASE64)

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

                    set @INSTALLMENTS = (
                        select         
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/ID)[1]','uniqueidentifier') as ID,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/DATE)[1]','datetime') as DATE
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/BALANCE)[1]','money') as BALANCE, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/APPLIED)[1]','money') as APPLIED, 
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/SEQUENCE)[1]','tinyint') as SEQUENCE
                            ITEMLISTCONVERTED.ITEM.query('(ITEM/INSTALLMENTSPLITS)[1]'), 
                            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/TRANSACTIONRECEIPTAMOUNT)[1]','money') as TRANSACTIONRECEIPTAMOUNT,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/RECEIPTAMOUNT)[1]','money') as RECEIPTAMOUNT,
                            ITEMLISTCONVERTED.ITEM.value('(ITEM/ORGANIZATIONRECEIPTAMOUNT)[1]','money') as ORGANIZATIONRECEIPTAMOUNT
                        from dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML(
                                @INSTALLMENTS,
                                @TRANSACTIONCURRENCYID,
                                @BASECURRENCYID,
                                @ORGANIZATIONCURRENCYID,
                                @FULLAMOUNTTRANSACTIONCURRENCY,
                                @FULLAMOUNTBASECURRENCY,
                                @DECIMALDIGITSBASECURRENCY,
                                @FULLAMOUNTORGANIZATIONCURRENCY,
                                @DECIMALDIGITSORGANIZATIONCURRENCY
                            ) ITEMLISTCONVERTED
                        for xml raw('ITEM'),type,elements,root('INSTALLMENTS'),BINARY BASE64
                    );
                end

                return @INSTALLMENTS;
            end