UFN_RECURRINGGIFT_GETREVALUEDORGANIZATIONPASTDUEAMOUNTASOF

Returns the balance of total payments made to a recurring gift, as a revalued organization currency amount, as of a given date.

Return

Return Type
money

Parameters

Parameter Parameter Type Mode Description
@RECURRINGID uniqueidentifier IN
@ASOFDATE datetime IN
@USEPREVIOUSREVALUATION bit IN

Definition

Copy


            create function dbo.UFN_RECURRINGGIFT_GETREVALUEDORGANIZATIONPASTDUEAMOUNTASOF
            (
                @RECURRINGID uniqueidentifier,
                @ASOFDATE datetime,
                @USEPREVIOUSREVALUATION bit = 0
            ) 
            returns money
            with execute as caller
            as begin
                declare @RESULT money;
                declare @REVALUATIONID uniqueidentifier;
                declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
                declare @BASEEXCHANGERATEID uniqueidentifier;

                set @REVALUATIONID = dbo.UFN_REVENUE_GETREVALUATIONASOF(@RECURRINGID, @ASOFDATE);

                declare @FOUNDPREVIOUSREVALUATION bit = 0;

                if @USEPREVIOUSREVALUATION = 1 --We want to use the previous revaluation

                begin
                    --Get the info for the current revaluation we'll need to figure out which other revaluation is the previous one.

                    declare @CURRENTREVALUATIONDATE datetime;
                    declare @CURRENTREVALUATIONSEQUENCE int;
                    select 
                        @CURRENTREVALUATIONDATE = DATE,
                        @CURRENTREVALUATIONSEQUENCE = SEQUENCE
                    from COMMITMENTREVALUATION
                    where ID = @REVALUATIONID

                    --Get the revaluation immediately before the currency

                    select top 1 @REVALUATIONID = COMMITMENTREVALUATION.ID, @FOUNDPREVIOUSREVALUATION = 1
                    from dbo.COMMITMENTREVALUATION
                        inner join dbo.REVENUECOMMITMENTREVALUATION on REVENUECOMMITMENTREVALUATION.COMMITMENTREVALUATIONID = COMMITMENTREVALUATION.ID
                    where REVENUECOMMITMENTREVALUATION.REVENUEID = @RECURRINGID
                        and(
                            (@CURRENTREVALUATIONDATE = COMMITMENTREVALUATION.DATE
                                and @CURRENTREVALUATIONSEQUENCE > COMMITMENTREVALUATION.SEQUENCE
                            )
                            or @CURRENTREVALUATIONDATE > COMMITMENTREVALUATION.DATE 
                        )
                    order by COMMITMENTREVALUATION.DATE desc, COMMITMENTREVALUATION.SEQUENCE desc
                end

                --If we're using the current revaluation or the previous, and we found one, get the rate from the revaluation record.

                if @REVALUATIONID is not null
                    and (@USEPREVIOUSREVALUATION = 0
                        or(
                            @USEPREVIOUSREVALUATION = 1
                            and @FOUNDPREVIOUSREVALUATION = 1
                        )
                    )
                begin
                    select 
                        @BASEEXCHANGERATEID = BASEEXCHANGERATEID,
                        @ORGANIZATIONEXCHANGERATEID = ORGANIZATIONEXCHANGERATEID
                    from dbo.COMMITMENTREVALUATION
                    where ID = @REVALUATIONID;
                end
                else
                begin
                    --The revaluation we were looking for, so get the rate from the revenue record.

                    select 
                        @BASEEXCHANGERATEID = BASEEXCHANGERATEID,
                        @ORGANIZATIONEXCHANGERATEID = ORGANIZATIONEXCHANGERATEID
                    from dbo.REVENUE
                    where REVENUE.ID = @RECURRINGID                
                end

                declare @TRANSACTIONBALANCE money;
                declare @BASEBALANCE money;
                set @TRANSACTIONBALANCE = dbo.UFN_RECURRINGGIFT_GETPASTDUEAMOUNT(@RECURRINGID, @ASOFDATE);
                set @BASEBALANCE = dbo.UFN_CURRENCY_CONVERT(@TRANSACTIONBALANCE, @BASEEXCHANGERATEID);

                set @RESULT = dbo.UFN_CURRENCY_CONVERTTOORGANIZATIONCURRENCY(@BASEBALANCE, @ORGANIZATIONEXCHANGERATEID, @TRANSACTIONBALANCE);

                return @RESULT;
            end