UFN_CONSTITUENTRECOGNITION_GETCOUNT_BYDATERANGE

Returns a count of recognitions for a particular program and date range.

Return

Return Type
int

Parameters

Parameter Parameter Type Mode Description
@PROGRAMID uniqueidentifier IN
@SORTID uniqueidentifier IN
@GROUPBY tinyint IN
@STARTDATE datetime IN
@ENDDATE datetime IN

Definition

Copy


            create function dbo.UFN_CONSTITUENTRECOGNITION_GETCOUNT_BYDATERANGE(
                @PROGRAMID uniqueidentifier,                
                @SORTID uniqueidentifier,
                @GROUPBY tinyint,
                @STARTDATE datetime,
                @ENDDATE datetime
            )
            returns int
            as
            begin
                -- NOTE:  This function is based on UFN_CONSTITUENTRECOGNITION_GETCOUNT_BYASOFDATE


                set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
                set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);
                declare @VALUE int;
                set @VALUE = 0;

                -- Get program-related revenue

                with CONSTITRECS_CTE as (
                    select CR.ID, CR.CONSTITUENTID, CR.RECOGNITIONLEVELID, CR.RECOGNITIONPROGRAMID, CR.STATUSCODE
                    from dbo.CONSTITUENTRECOGNITION CR
                    where CR.JOINDATE = (select max(CR2.JOINDATE) from dbo.CONSTITUENTRECOGNITION CR2
                                            where CR2.CONSTITUENTID = CR.CONSTITUENTID
                                                and CR2.RECOGNITIONPROGRAMID = @PROGRAMID
                                                and CR2.JOINDATE >= @STARTDATE
                                                and CR2.JOINDATE <= @ENDDATE
                                                and ((CR2.EXPIRATIONDATE >= @ENDDATE) or (CR.EXPIRATIONDATE is null)))
                    )    

                select
                    @VALUE = count(distinct CR.ID)
                from
                    CONSTITRECS_CTE as CR
                    inner join dbo.RECOGNITIONLEVEL as RL on CR.RECOGNITIONLEVELID = RL.ID
                    inner join dbo.RECOGNITIONPROGRAM as RP on CR.RECOGNITIONPROGRAMID = RP.ID
                where
                    CR.RECOGNITIONPROGRAMID = @PROGRAMID                    
                    and
                    (
                        (    @GROUPBY = 1
                            and
                            CR.RECOGNITIONLEVELID = @SORTID
                        )
                        or
                        (    @GROUPBY = 0 and
                            (
                                (@SORTID = RL.TIERCODEID and @SORTID is not null
                                or 
                                (@SORTID is null and RL.TIERCODEID is null)
                            )    
                        )
                    )
                    and
                    CR.STATUSCODE <> 1;    

                    return @value;
                end