UFN_SMARTQUERY_REVENUE_LYBUNT_DONORS

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@THISYEAR_DATERANGE tinyint IN
@THISYEAR_NMONTHS tinyint IN
@THISYEAR_STARTDATE datetime IN
@THISYEAR_ENDDATE datetime IN
@SELECTIONID uniqueidentifier IN
@LASTYEAR_DATERANGE tinyint IN
@LASTYEAR_NMONTHS tinyint IN
@LASTYEAR_STARTDATE datetime IN
@LASTYEAR_ENDDATE datetime IN
@CURRENTAPPUSERID uniqueidentifier IN
@MAXROWS int IN

Definition

Copy

create function dbo.UFN_SMARTQUERY_REVENUE_LYBUNT_DONORS (
  @THISYEAR_DATERANGE tinyint = 0 --0=This calendar year , 1=NMonths, 2=Specific range

  ,@THISYEAR_NMONTHS tinyint = 12
  ,@THISYEAR_STARTDATE datetime = null
  ,@THISYEAR_ENDDATE datetime = null
  ,@SELECTIONID uniqueidentifier = null
  ,@LASTYEAR_DATERANGE tinyint = 0 --0=Last calendar year , 1=NMonths prior to this year, 2=Specific range

  ,@LASTYEAR_NMONTHS tinyint = 12
  ,@LASTYEAR_STARTDATE datetime = null
  ,@LASTYEAR_ENDDATE datetime = null
  ,@CURRENTAPPUSERID uniqueidentifier = null
  ,@MAXROWS int = 500
  )
returns @T table (
  ID uniqueidentifier not null
  ,LASTGIFTDATE datetime
  ,LASTYEARGIFTDATE datetime
  ,[NAME] nvarchar(154)
  ,ADDRESSBLOCK nvarchar(150)
  ,CITY nvarchar(50)
  ,[STATE] nvarchar(50)
  ,POSTCODE nvarchar(12)
  ,LOOKUPID nvarchar(36)
  )
as
begin
  declare @ISADMIN bit;

  set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);

  declare @ids table (ID uniqueidentifier primary key);

  if @SELECTIONID is not null
  begin
    insert into @ids
    select ID
    from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@SELECTIONID);
  end

  if (@THISYEAR_DATERANGE is null)
    or (
      @THISYEAR_DATERANGE not in (
        0
        ,1
        ,2
        )
      )
    set @THISYEAR_DATERANGE = 0;

  declare @NOW datetime;

  set @NOW = GETDATE();

  --Calculate this year date range

  if @THISYEAR_DATERANGE = 0
  begin
    set @THISYEAR_STARTDATE = dbo.UFN_DATE_THISCALENDARYEAR_FIRSTDAY(@NOW, 0);
    set @THISYEAR_ENDDATE = dbo.UFN_DATE_THISCALENDARYEAR_LASTDAY(@NOW, 1);
  end
  else
    if @THISYEAR_DATERANGE = 1
    begin
      set @THISYEAR_ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@NOW);
      set @THISYEAR_STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(DATEADD(month, - @THISYEAR_NMONTHS, @NOW));
    end
    else
      if @THISYEAR_DATERANGE = 2
      begin
        if @THISYEAR_STARTDATE is null
          and @THISYEAR_ENDDATE is null
          return;

        if @THISYEAR_STARTDATE is null
          set @THISYEAR_STARTDATE = '1900-01-01';

        if @THISYEAR_ENDDATE is null
          set @THISYEAR_ENDDATE = '2900-01-01';
        set @THISYEAR_STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@THISYEAR_STARTDATE);
        set @THISYEAR_ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@THISYEAR_ENDDATE);
      end

  --Calculate last year date range

  if @LASTYEAR_DATERANGE = 0
  begin
    set @LASTYEAR_STARTDATE = dbo.UFN_DATE_LASTCALENDARYEAR_FIRSTDAY(@NOW, 0);
    set @LASTYEAR_ENDDATE = dbo.UFN_DATE_LASTCALENDARYEAR_LASTDAY(@NOW, 1);
  end
  else
    if @LASTYEAR_DATERANGE = 1
    begin
      set @LASTYEAR_ENDDATE = dbo.UFN_DATE_GETLATESTTIME(DATEADD(day, - 1, @THISYEAR_STARTDATE));
      set @LASTYEAR_STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(DATEADD(month, - @LASTYEAR_NMONTHS, @LASTYEAR_ENDDATE));
    end
    else
      if @LASTYEAR_DATERANGE = 2
      begin
        if @LASTYEAR_STARTDATE is null
          and @LASTYEAR_ENDDATE is null
          return;

        if @LASTYEAR_STARTDATE is null
          set @LASTYEAR_STARTDATE = '1900-01-01';

        if @LASTYEAR_ENDDATE is null
          set @LASTYEAR_ENDDATE = '2900-01-01';
        set @LASTYEAR_STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@LASTYEAR_STARTDATE);
        set @LASTYEAR_ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@LASTYEAR_ENDDATE);
      end;

  with REVENUE_CTE
  as (
    select FTRANS.ID
      ,cast(FTRANS.[DATE] as datetime) as [DATE]
      ,FTRANS.CONSTITUENTID
    from dbo.FINANCIALTRANSACTION FTRANS with (
        nolock
        ,index (IX_FINANCIALTRANSACTION_CONSTITUENTID_TYPECODE_DATE)
        )
    inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on FTRANS.ID = FTLI.FINANCIALTRANSACTIONID
    inner join dbo.REVENUESPLIT_EXT RS on FTLI.ID = RS.ID
    where RS.TYPECODE in (
        0
        ,1
        ,2
        ,3
        ,4
        ,8
        ,9
        ,12
        ,15
      ,17
        )
      and FTRANS.DELETEDON is null
      and FTLI.DELETEDON is null
      and cast(FTRANS.[DATE] as datetime) >= @LASTYEAR_STARTDATE --this smart query never cares about transaction before the start of last year, so eliminate them

      and (
        @SELECTIONID is null
        or FTRANS.CONSTITUENTID in (
          select ID
          from @ids
          )
        )
      and (
        @ISADMIN = 1
        or dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORREVENUE(@CURRENTAPPUSERID, '0DAC425D-A4C8-4dcd-891F-F3F3F6C07A75', FTRANS.ID) = 1
        )
    )
  insert into @T
  select top (@MAXROWS) C.ID
    ,(
      select MAX([DATE]) as LGD
      from REVENUE_CTE as R
      where R.CONSTITUENTID = C.ID
      ) as LASTGIFTDATE
    ,(
      select MAX([DATE]) as TYGD
      from REVENUE_CTE as R
      where R.CONSTITUENTID = C.ID
        and R.[DATE] between @LASTYEAR_STARTDATE and @LASTYEAR_ENDDATE
      ) as LASTYEARGIFTDATE
    ,C.[NAME]
    ,A.ADDRESSBLOCK
    ,A.CITY
    ,[STATE].DESCRIPTION
    ,A.POSTCODE
    ,C.LOOKUPID
  from dbo.CONSTITUENT as C with (nolock)
  left join dbo.ADDRESS as A with (nolock) on A.CONSTITUENTID = C.ID
    and A.ISPRIMARY = 1
  left join dbo.[STATE] on [STATE].ID = A.STATEID
  where exists (
      --Donors with a gift last year

      select top 1 1
      from REVENUE_CTE as R
      where R.[DATE] between @LASTYEAR_STARTDATE and @LASTYEAR_ENDDATE
        and R.CONSTITUENTID = C.ID
      )
    and not exists (
      --Donors with a gift this year

      select top 1 1
      from REVENUE_CTE as R
      where R.[DATE] between @THISYEAR_STARTDATE and @THISYEAR_ENDDATE
        and R.CONSTITUENTID = C.ID
      )
    and (
      @ISADMIN = 1
      or (
        dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT(@CURRENTAPPUSERID, '0DAC425D-A4C8-4dcd-891F-F3F3F6C07A75', C.ID) = 1
        and dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT_BYSITE(@CURRENTAPPUSERID, '0DAC425D-A4C8-4dcd-891F-F3F3F6C07A75', C.ID) = 1
        )
      )
  order by LASTGIFTDATE desc;

  return;
end;