UFN_DESIGNATION_GETPLANNEDGIFTREVENUEINCURRENCY

Returns the planned gift revenue for a given designation in a given currency.

Return

Return Type
money

Parameters

Parameter Parameter Type Mode Description
@DESIGNATIONID uniqueidentifier IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@ROLLUPTOTAL bit IN
@CURRENCYID uniqueidentifier IN

Definition

Copy


        CREATE function dbo.UFN_DESIGNATION_GETPLANNEDGIFTREVENUEINCURRENCY
        (
            @DESIGNATIONID uniqueidentifier,
            @STARTDATE datetime = null,
            @ENDDATE datetime = null,
            @ROLLUPTOTAL bit = 0,
            @CURRENCYID uniqueidentifier = null
        )
        returns money
        with execute as caller
        as begin
            declare @RESULT money;
            set @RESULT = 0;

            select @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE),
                    @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);

            declare @ORGANIZATIONCURRENCYID uniqueidentifier;
            set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(); 

            if @ROLLUPTOTAL = 0
                begin
                select @RESULT = 
                    coalesce(sum(AMOUNTINCURRENCY), 0)
                from 
                    ( select
                            case 
                                when @CURRENCYID = @ORGANIZATIONCURRENCYID
                                    then REVENUESPLIT.ORGANIZATIONAMOUNT
                                when @CURRENCYID = REVENUESPLIT.BASECURRENCYID
                                    then REVENUESPLIT.AMOUNT
                                else dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY(REVENUESPLIT.ID, @CURRENCYID)
                            end as AMOUNTINCURRENCY
                        from dbo.REVENUESPLIT
                        inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID
                        where
                            (REVENUE.DATE >= @STARTDATE or @STARTDATE is null) and
                            (REVENUE.DATE <= @ENDDATE or @ENDDATE is null) and
                            REVENUESPLIT.DESIGNATIONID = @DESIGNATIONID and
                            REVENUE.TRANSACTIONTYPECODE = 4 ) RS
                end
            else
                begin
                declare @DL1ID uniqueidentifier;
                declare @DL2ID uniqueidentifier;
                declare @DL3ID uniqueidentifier;
                declare @DL4ID uniqueidentifier;
                declare @DL5ID uniqueidentifier;

                select @DL1ID = DESIGNATIONLEVEL1ID,
                        @DL2ID = DESIGNATIONLEVEL2ID,
                        @DL3ID = DESIGNATIONLEVEL3ID,
                        @DL4ID = DESIGNATIONLEVEL4ID,
                        @DL5ID = DESIGNATIONLEVEL5ID
                from dbo.DESIGNATION
                where DESIGNATIONLEVEL1ID = @DESIGNATIONID;

                with DESIGNATIONS_CTE as (
                    select ID 
                    from dbo.DESIGNATION
                    where DESIGNATIONLEVEL1ID = @DL1ID and
                        (DESIGNATIONLEVEL2ID = @DL2ID or @DL2ID is null) and 
                        (DESIGNATIONLEVEL3ID = @DL3ID or @DL3ID is null) and 
                        (DESIGNATIONLEVEL4ID = @DL4ID or @DL4ID is null) and 
                        (DESIGNATIONLEVEL5ID = @DL5ID or @DL5ID is null)
                    )

                select @RESULT = 
                    coalesce(sum(AMOUNTINCURRENCY), 0)
                from 
                    ( select
                            case 
                                when @CURRENCYID = @ORGANIZATIONCURRENCYID
                                    then REVENUESPLIT.ORGANIZATIONAMOUNT
                                when @CURRENCYID = REVENUESPLIT.BASECURRENCYID
                                    then REVENUESPLIT.AMOUNT
                                else dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY(REVENUESPLIT.ID, @CURRENCYID)
                            end as AMOUNTINCURRENCY
                        from dbo.REVENUESPLIT 
                        inner join DESIGNATIONS_CTE on REVENUESPLIT.DESIGNATIONID = DESIGNATIONS_CTE.ID
                        inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID    
                        where
                            (REVENUE.DATE >= @STARTDATE or @STARTDATE is null) and
                            (REVENUE.DATE <= @ENDDATE or @ENDDATE is null) and
                            REVENUE.TRANSACTIONTYPECODE = 4) RS
                end

            return @RESULT;
        end