UFN_CONSTITUENT_ISDONOR

This functions returns whether a constituent is a donor as of the given date.

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_CONSTITUENT_ISDONOR(@CONSTITUENTID uniqueidentifier)
returns bit
with execute as caller
as begin
    declare @DONORCONSTITUENCYDEFTYPECODE int;
    declare @DONORCONSTITUENCYDEFLASTYEARS int;
    declare @DONORCONSTITUENCYDEFSTARTDATE datetime;
    declare @MAJORDONORCONSTITUENCYDEFCONSIDERRECOGNITION bit;

    select top 1 
        @MAJORDONORCONSTITUENCYDEFCONSIDERRECOGNITION = MAJORDONORCONSTITUENCYDEFCONSIDERRECOGNITION
    from 
        dbo.CONSTITUENCYCRITERIASPOUSE;

    select top 1
        @DONORCONSTITUENCYDEFTYPECODE = DONORCONSTITUENCYDEFTYPECODE, 
        @DONORCONSTITUENCYDEFLASTYEARS = DONORCONSTITUENCYDEFLASTYEARS, 
        @DONORCONSTITUENCYDEFSTARTDATE = DONORCONSTITUENCYDEFSTARTDATE
    from 
        dbo.INSTALLATIONINFO;

    declare @CURRENTDATE datetime;
    set @CURRENTDATE = getdate();

    declare @UPPERBOUND datetime;
    declare @LOWERBOUND datetime;

    set @UPPERBOUND = dbo.UFN_DATE_GETLATESTTIME(@CURRENTDATE);

    if @DONORCONSTITUENCYDEFTYPECODE = 0
    begin
        declare @SQLMINDATE datetime = '17530101';

        if datediff(year, @SQLMINDATE, dbo.UFN_DATE_GETLATESTTIME(getdate())) >= @DONORCONSTITUENCYDEFLASTYEARS
            set @LOWERBOUND = dateadd(year, 0 - @DONORCONSTITUENCYDEFLASTYEARS, dbo.UFN_DATE_GETLATESTTIME(@CURRENTDATE));
        else
            set @LOWERBOUND = @SQLMINDATE;
    end
    else
        set @LOWERBOUND = dbo.UFN_DATE_GETEARLIESTTIME(@DONORCONSTITUENCYDEFSTARTDATE);

    if @MAJORDONORCONSTITUENCYDEFCONSIDERRECOGNITION = 1
    begin
        if exists(
            select top 1
                1
            from 
                dbo.FINANCIALTRANSACTION as FT
                inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI  with (nolock) on FTLI.FINANCIALTRANSACTIONID = FT.ID
            where FT.CONSTITUENTID = @CONSTITUENTID
                and (FT.[DATE] between @LOWERBOUND and @UPPERBOUND)
                and FTLI.ID in (select ID from dbo.UFN_REVENUEFILTER_DEFAULT())    
                and FT.DELETEDON is null)

      return 1;

        else if exists(
            select top 1
                1
            from 
                dbo.REVENUERECOGNITION with (nolock)
                inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI  with (nolock) on FTLI.ID = REVENUERECOGNITION.REVENUESPLITID
                inner join dbo.FINANCIALTRANSACTION as FT with (nolock) on FTLI.FINANCIALTRANSACTIONID = FT.ID
            where 
                REVENUERECOGNITION.CONSTITUENTID = @CONSTITUENTID
                and (FT.[DATE] between @LOWERBOUND and @UPPERBOUND)
                and FTLI.ID in (select ID from dbo.UFN_REVENUEFILTER_DEFAULT())
                and FT.DELETEDON is null)                

      return 1;

        else if exists(
            select top 1
                1
            from 
                dbo.RECOGNITIONCREDIT with (nolock)
                inner join dbo.DONORCHALLENGEENCUMBERED with (nolock) on RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID = DONORCHALLENGEENCUMBERED.ID
                inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI  with (nolock) on FTLI.ID = DONORCHALLENGEENCUMBERED.REVENUESPLITID
                inner join dbo.FINANCIALTRANSACTION as FT with (nolock) on FTLI.FINANCIALTRANSACTIONID = FT.ID
            where 
                RECOGNITIONCREDIT.CONSTITUENTID = @CONSTITUENTID and RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 1
                and (FT.[DATE] between @LOWERBOUND and @UPPERBOUND)
                and FTLI.ID in (select ID from dbo.UFN_REVENUEFILTER_DEFAULT()))

            return 1;
    end
    else
    begin
        if exists(
            select top 1
                1
            from 
                dbo.FINANCIALTRANSACTIONLINEITEM as FTLI  with (nolock)
                inner join dbo.FINANCIALTRANSACTION as FT  with (nolock) on FTLI.FINANCIALTRANSACTIONID = FT.ID
            where FT.CONSTITUENTID = @CONSTITUENTID
                and (FT.[DATE] between @LOWERBOUND and @UPPERBOUND)
                and FTLI.ID in (select ID from dbo.UFN_REVENUEFILTER_DEFAULT())
                and FT.DELETEDON is null
        ) 

            return 1;
    end

            return 0;
end