UFN_GLDISTRIBUTION_AUCTIONPURCHASE_CONVERTAMOUNTSINXML

Fills in multicurrency fields in the given GL distribution XML for auction purchases.

Return

Return Type
xml

Parameters

Parameter Parameter Type Mode Description
@GLDISTRIBUTION xml IN
@REVENUEID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_GLDISTRIBUTION_AUCTIONPURCHASE_CONVERTAMOUNTSINXML
            (
                @GLDISTRIBUTION xml,
                @REVENUEID uniqueidentifier
            )
            returns xml
            as begin

                declare @DATE datetime = getdate();

                declare @NEWDISTRIBUTIONS xml;

                declare @TEMPDISTRIBUTIONS table
                (
                    ID uniqueidentifier,
                    ACCOUNT nvarchar(100),
                    AMOUNT money,
                    GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier, 
                    PROJECT nvarchar(100), 
                    REFERENCE nvarchar(100), 
                    TRANSACTIONCURRENCYID uniqueidentifier, 
                    TRANSACTIONTYPECODE tinyint,
                    BASECURRENCYID uniqueidentifier,
                    BASEEXCHANGERATEID uniqueidentifier,
                    ORGANIZATIONEXCHANGERATEID uniqueidentifier,
                    TRANSACTIONAMOUNT money,
                    ORGANIZATIONAMOUNT money
                )

                insert into @TEMPDISTRIBUTIONS
                (
                    ID,
                    ACCOUNT,
                    GLPAYMENTMETHODREVENUETYPEMAPPINGID,
                    PROJECT,
                    REFERENCE,
                    TRANSACTIONAMOUNT,
                    TRANSACTIONCURRENCYID,
                    TRANSACTIONTYPECODE,
                    BASECURRENCYID,
                    BASEEXCHANGERATEID,
                    ORGANIZATIONEXCHANGERATEID
                )
                select
                    PURCHASEDISTRIBUTIONS.ID,
                    PURCHASEDISTRIBUTIONS.ACCOUNT,
                    PURCHASEDISTRIBUTIONS.GLPAYMENTMETHODREVENUETYPEMAPPINGID,
                    PURCHASEDISTRIBUTIONS.PROJECT,
                    PURCHASEDISTRIBUTIONS.REFERENCE,
                    PURCHASEDISTRIBUTIONS.AMOUNT,
                    PURCHASEDISTRIBUTIONS.TRANSACTIONCURRENCYID,
                    PURCHASEDISTRIBUTIONS.TRANSACTIONTYPECODE,
                    V.BASECURRENCYID,
                    FT.BASEEXCHANGERATEID,
                    FT.ORGEXCHANGERATEID
                from
                    dbo.UFN_REVENUE_GETAUCTIONPURCHASEGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION) PURCHASEDISTRIBUTIONS
                    inner join dbo.JOURNALENTRY JE on JE.ID = PURCHASEDISTRIBUTIONS.ID
                    inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = JE.FINANCIALTRANSACTIONLINEITEMID
                    inner join dbo.FINANCIALTRANSACTION FT on FT.ID = LI.FINANCIALTRANSACTIONID
                    inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V on V.FINANCIALTRANSACTIONID = FT.ID


                -- Grab this information for new distribution rows

                declare @TRANSACTIONCURRENCYID uniqueidentifier;
                declare @BASECURRENCYID uniqueidentifier;
                declare @BASEEXCHANGERATEID uniqueidentifier;
                declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;

                select top 1
                    @TRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
                    @BASECURRENCYID = REVENUE.BASECURRENCYID,
                    @BASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID,
                    @ORGANIZATIONEXCHANGERATEID = REVENUE.ORGANIZATIONEXCHANGERATEID                
                from dbo.REVENUE
                where REVENUE.ID = @REVENUEID;

                update TEMP
                set
                    TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
                    BASECURRENCYID = @BASECURRENCYID,
                    BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
                    ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID
                from
                    @TEMPDISTRIBUTIONS TEMP
                    left join dbo.AUCTIONPURCHASEGLDISTRIBUTION on TEMP.ID = AUCTIONPURCHASEGLDISTRIBUTION.ID
                where
                    AUCTIONPURCHASEGLDISTRIBUTION.ID is null

                update TEMP
                set 
                    TEMP.AMOUNT = 
                        case
                            when (AUCTIONPURCHASEGLDISTRIBUTION.ID is null) or (AUCTIONPURCHASEGLDISTRIBUTION.TRANSACTIONAMOUNT <> TEMP.TRANSACTIONAMOUNT) then
                                CURRENCYVALUES.BASEAMOUNT
                            else
                                AUCTIONPURCHASEGLDISTRIBUTION.AMOUNT
                        end,
                    TEMP.ORGANIZATIONAMOUNT = 
                        case
                            when(AUCTIONPURCHASEGLDISTRIBUTION.ID is null) or (AUCTIONPURCHASEGLDISTRIBUTION.TRANSACTIONAMOUNT <> TEMP.TRANSACTIONAMOUNT) then
                                CURRENCYVALUES.ORGANIZATIONAMOUNT
                            else
                                AUCTIONPURCHASEGLDISTRIBUTION.ORGANIZATIONAMOUNT
                        end
                from
                    @TEMPDISTRIBUTIONS TEMP
                    left join dbo.AUCTIONPURCHASEGLDISTRIBUTION on AUCTIONPURCHASEGLDISTRIBUTION.ID = TEMP.ID
                    outer apply dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(TEMP.TRANSACTIONAMOUNT,@DATE,TEMP.BASECURRENCYID,TEMP.BASEEXCHANGERATEID,TEMP.TRANSACTIONCURRENCYID,null,null,null,TEMP.ORGANIZATIONEXCHANGERATEID,0) CURRENCYVALUES

                set @NEWDISTRIBUTIONS = 
                    (
                        select
                            ACCOUNT, 
                            AMOUNT, 
                            GLPAYMENTMETHODREVENUETYPEMAPPINGID, 
                            ID,  
                            PROJECT, 
                            REFERENCE, 
                            TRANSACTIONCURRENCYID, 
                            TRANSACTIONTYPECODE,
                            BASECURRENCYID,
                            BASEEXCHANGERATEID,
                            ORGANIZATIONEXCHANGERATEID,
                            TRANSACTIONAMOUNT,
                            ORGANIZATIONAMOUNT
                        from @TEMPDISTRIBUTIONS
                        for xml raw('ITEM'),type,elements,root('GLDISTRIBUTION'),BINARY BASE64
                    );

                return @NEWDISTRIBUTIONS

            end