UFN_GENERATETRANSACTIONS_GETRECURRINGGIFTMULTICURRENCYVALUES

Returns multicurrency values for a recurring gift being processed in the generate transactions process.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@RECURRINGGIFTID uniqueidentifier IN
@AMOUNT money IN
@PAYMENTDATE datetime IN
@PDACCOUNTSYSTEMID uniqueidentifier IN

Definition

Copy


            create function dbo.UFN_GENERATETRANSACTIONS_GETRECURRINGGIFTMULTICURRENCYVALUES
            (
                @RECURRINGGIFTID uniqueidentifier,
                @AMOUNT money,
                @PAYMENTDATE datetime,
                @PDACCOUNTSYSTEMID uniqueidentifier
            )
            returns @MULTICURRENCYVALUES table
            (
                AMOUNT money,
                AMOUNTINRECURRINGGIFTCURRENCY money,
                TRANSACTIONCURRENCYID uniqueidentifier,
                BASECURRENCYID uniqueidentifier,
                EXCHANGERATEID uniqueidentifier
            )
            with execute as caller
            as begin
                declare
                    @RECURRINGGIFTTRANSACTIONCURRENCYID uniqueidentifier;

                select @RECURRINGGIFTTRANSACTIONCURRENCYID = TRANSACTIONCURRENCYID
                from dbo.REVENUE
                where
                    ID = @RECURRINGGIFTID;

                declare
                    @OUTPUTAMOUNT money,
                    @OUTPUTTRANSACTIONCURRENCYID uniqueidentifier,
                    @OUTPUTBASECURRENCYID uniqueidentifier,
                    @OUTPUTBASEEXCHANGERATEID uniqueidentifier;

                select 
                    @OUTPUTBASECURRENCYID = BASECURRENCYID 
                from dbo.PDACCOUNTSYSTEM 
                left join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID 
                where 
                    PDACCOUNTSYSTEM.ID = @PDACCOUNTSYSTEMID;

                if exists(    select 
                                PDACCOUNTSYSTEM.ID
                            from dbo.PDACCOUNTSYSTEM
                            inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
                            inner join dbo.CURRENCYSETTRANSACTIONCURRENCY on CURRENCYSET.ID = CURRENCYSETTRANSACTIONCURRENCY.CURRENCYSETID
                            where 
                                CURRENCYSETTRANSACTIONCURRENCY.CURRENCYID = @RECURRINGGIFTTRANSACTIONCURRENCYID
                                and CURRENCYSET.BASECURRENCYID != @RECURRINGGIFTTRANSACTIONCURRENCYID
                                and PDACCOUNTSYSTEM.ID = @PDACCOUNTSYSTEMID)
                begin
                    set @OUTPUTAMOUNT = @AMOUNT;
                    set @OUTPUTTRANSACTIONCURRENCYID = @RECURRINGGIFTTRANSACTIONCURRENCYID;
                    set @OUTPUTBASEEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@RECURRINGGIFTTRANSACTIONCURRENCYID, @OUTPUTBASECURRENCYID, @PAYMENTDATE, 1, null);
                end
                else
                begin
                    select 
                        @OUTPUTAMOUNT = case 
                            when @RECURRINGGIFTTRANSACTIONCURRENCYID <> BASECURRENCYID then dbo.UFN_CURRENCY_CONVERT(@AMOUNT, dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@RECURRINGGIFTTRANSACTIONCURRENCYID, BASECURRENCYID, @PAYMENTDATE, 1, null))
                            else @AMOUNT
                        end,
                        @OUTPUTTRANSACTIONCURRENCYID = BASECURRENCYID,
                        @OUTPUTBASEEXCHANGERATEID = null
                    from dbo.PDACCOUNTSYSTEM
                    left join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
                    where
                        PDACCOUNTSYSTEM.ID = @PDACCOUNTSYSTEMID;
                end

                insert into @MULTICURRENCYVALUES (AMOUNT, AMOUNTINRECURRINGGIFTCURRENCY, TRANSACTIONCURRENCYID, BASECURRENCYID, EXCHANGERATEID)
                values (@OUTPUTAMOUNT, @AMOUNT, @OUTPUTTRANSACTIONCURRENCYID, @OUTPUTBASECURRENCYID, @OUTPUTBASEEXCHANGERATEID);                

                return;
            end