UFN_CONSTITUENTRECOGNITION_GETCOUNT_BYASOFDATE

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

Return

Return Type
int

Parameters

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

Definition

Copy


CREATE function dbo.UFN_CONSTITUENTRECOGNITION_GETCOUNT_BYASOFDATE
(
  @ASOFDATE datetime,
  @PROGRAMID uniqueidentifier,                
  @SORTID uniqueidentifier,
  @GROUPBY tinyint
)
returns int
as
begin
  set @ASOFDATE = dbo.UFN_DATE_GETLATESTTIME(@ASOFDATE);
  declare @VALUE int = 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
                         --The "GETEARLIESTTIME" date function has been inlined here for performance (the part with "cast(@DATE as date)")...

                         and cast(CR2.JOINDATE as date) <= @ASOFDATE
                         and ((CR2.EXPIRATIONDATE >= @ASOFDATE) 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;
--        and

--        dbo.UFN_DATE_GETEARLIESTTIME(CR.JOINDATE) <= @ASOFDATE

--        and

--        ((dbo.UFN_DATE_GETLATESTTIME(CR.EXPIRATIONDATE) >= @ASOFDATE) or (CR.EXPIRATIONDATE is null and RP.TYPECODE = 1));    


  return @value;
end