UFN_APPEAL_REVENUECOUNTS_2

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@STARTDATE datetime IN
@ENDDATE datetime IN

Definition

Copy



create function dbo.[UFN_APPEAL_REVENUECOUNTS_2]
(
  @STARTDATE datetime, -- expects EARLIESTTIME

  @ENDDATE datetime    -- expects LATESTTIME

)
returns table
as
return
(
  -- the CTE is necessary because selecting and aggregating at the same time may distort DONORCOUNT

  -- (a person may give multiple types of gifts)

  with [APPEALREVENUE] as
  (
    select distinct
      [BASEREVENUE].[APPEALID],
      [BASEREVENUE].[ID] as [REVENUEID],
      [FT].[CONSTITUENTID],
      case when ([FT].[TYPECODE] = 0 and [REVENUESPLIT].[APPLICATIONCODE] = 3) then [BASEREVENUE].[ID] else null end as [REGULARREVENUEID]
    from dbo.[REVENUE_EXT] as [BASEREVENUE]
    inner join dbo.[FINANCIALTRANSACTION] as [FT] on [FT].[ID] = [BASEREVENUE].[ID]
    inner join dbo.[FINANCIALTRANSACTIONLINEITEM] as [LI] on [LI].[FINANCIALTRANSACTIONID] = [FT].[ID]
    inner join dbo.[REVENUESPLIT_EXT] as [REVENUESPLIT] on [LI].[ID] = [REVENUESPLIT].[ID]
    left outer join dbo.[DESIGNATION] on [REVENUESPLIT].[DESIGNATIONID] = [DESIGNATION].[ID]
    where [BASEREVENUE].[APPEALID] is not null
    and (cast([FT].[DATE] as datetime) >= @STARTDATE or @STARTDATE is null)
    and (cast([FT].[DATE] as datetime) <= @ENDDATE or @ENDDATE is null)
    and [FT].[TYPECODE] in (0,1,2,3,4,5,6,7,8,9)
    and [LI].[DELETEDON] is null and [LI].[TYPECODE] <> 1
  )
  select
    [APPEALREVENUE].[APPEALID],
    count(distinct [CONSTITUENTID]) as [DONORCOUNT],
    count(distinct [REVENUEID]) as [GIFTCOUNT],
    count(distinct [REGULARREVENUEID]) as [REGULARGIFTCOUNT],
    count(distinct [REVENUEID]) - count(distinct [REGULARREVENUEID]) as [CASHGIFTCOUNT]
  from [APPEALREVENUE]
  group by [APPEALREVENUE].[APPEALID]
);