USP_DONOR_INFO_HELPER_ADDTORESULTS

Parameters

Parameter Parameter Type Mode Description
@SQL nvarchar(max) IN
@FROM datetime IN
@TO datetime IN
@REVENUEFILTERID uniqueidentifier IN

Definition

Copy

CREATE procedure [dbo].[USP_DONOR_INFO_HELPER_ADDTORESULTS] (
  @SQL nvarchar(max)
  ,@FROM datetime
  ,@TO as datetime
  ,@REVENUEFILTERID uniqueidentifier
  )
  with execute as owner
as
set nocount off;

declare @FROM2 datetime = @FROM
  ,@TO2 datetime = @TO
  ,@REVENUEFILTERID2 uniqueidentifier = @REVENUEFILTERID;

--declare @debugging bit = 0

--  ,@debugMsg nvarchar(1000)

--  ,@debugStartTime datetime = getdate();

if len(@SQL) > 0
begin
  --if @debugging = 1

  --begin

  --  set @debugMsg = '**BEFORE executing dynamic SQL to populate temp table ';

  --  set @debugStartTime = getdate();

  --  raiserror (@debugMsg,0,1)

  --  with nowait;

  --end

  exec sp_executeSQL @SQL
    ,N'@FROM2 datetime, @TO2 datetime, @REVENUEFILTERID2 uniqueidentifier'
    ,@FROM2
    ,@TO2
    ,@REVENUEFILTERID2;
    --if @debugging = 1

    --begin

    --  set @debugMsg = CONVERT(varchar, (getdate() - @debugStartTime), 108) + ' executing dynamic SQL to populate temp table ';

    --  set @debugStartTime = getdate();

    --  raiserror (@debugMsg,0,1)

    --  with nowait;

    --end;

end;

--if @debugging = 1

--begin

--  set @debugMsg = '**BEFORE adding aggregates from temp table to results ';

--  set @debugStartTime = getdate();

--  raiserror (@debugMsg,0,1)

--  with nowait;

--end;

with CAMPAIGNS_CTE
as (
  select TEMPLINEITEMS.TRANSACTIONID
    ,dbo.UDA_BUILDLIST(distinct CAMPAIGN.[NAME]) CAMPAIGNNAMES
  from dbo.REVENUESPLITCAMPAIGN RSC
  inner join dbo.CAMPAIGN on RSC.CAMPAIGNID = CAMPAIGN.ID
  inner join #TMP_DONOR_INFO_DATA_TO_AGGREGATE TEMPLINEITEMS on RSC.REVENUESPLITID = TEMPLINEITEMS.LINEITEMID
    and TEMPLINEITEMS.SPID = @@SPID
  group by TEMPLINEITEMS.TRANSACTIONID
  )
insert into #TMP_DATA_DONOR_INFO_RESULTS (
  [SPID]
  ,[TRANSACTIONID]
  ,[CONSTITUENTID]
  ,[DATE]
  ,[TRANSACTIONTYPE]
  ,[CAMPAIGNS]
  ,[ISSPLIT]
  ,[TYPECODE]
  ,[AMOUNT]
  ,[TOTALPAID]
  ,[WRITEOFFS]
  ,[BALANCE]
  ,[NUMPAYMENTS]
  ,[LASTPAYMENTDATE]
  ,[DESIGNATION]
  ,[APPLICATION]
  ,[TRANSACTIONCURRENCYID]
  ,[ORIGTRANSACTIONAMOUNT]
  ,[GIVENANONYMOUSLY]
  )
select [SPID] = @@SPID
  ,[TRANSACTIONID] = FT.ID
  ,[CONSTITUENTID] = FT.[CONSTITUENTID]
  ,[DATE] = cast(case 
      when FT.TYPECODE = 2
        then (
            select top 1 [STARTDATE]
            from dbo.REVENUESCHEDULE
            where ID = FT.ID
            )
      else FT.[DATE]
      end as datetime) --NOTE: this could result in a date outside the date range specified - this is by design for recurring gifts    ,[TRANSACTIONTYPE]=FT.[TYPE]

  ,[TRANSACTIONTYPE] = FT.[TYPE]
  ,[CAMPAIGNS] = CAMPAIGNS_CTE.CAMPAIGNNAMES
  ,[ISSPLIT] = TT.[DEFINITELYSPLIT]
  ,[TYPECODE] = FT.[TYPECODE]
  ,[AMOUNT] = case 
    when FT.TYPECODE = 0
      then - TT.TOTALPAID
    else TT.AMOUNT
    end
  ,[TOTALPAID] = case 
    when FT.TYPECODE in (0,7)
      then null
    else TT.TOTALPAID
    end
  ,[WRITEOFFS] = case 
    when FT.TYPECODE in (
        0
        ,2
        ,3
        ,8
        )
      then null
    else TT.WRITEOFFS
    end
  ,[BALANCE] = case 
    when FT.TYPECODE in (
        0
        ,2
        ,7
        )
      then null
    else TT.BALANCE
    end
  ,[NUMPAYMENTS] = case 
    when FT.TYPECODE in (0,7)
      then null
    else TT.NUMPAYMENTS
    end
  ,[LASTPAYMENTDATE] = case 
    when FT.TYPECODE in (0,7)
      then null
    else TT.LASTPAYMENTDATE
    end
  ,[DESIGNATION] = TT.DESIGNATIONS
  ,[APPLICATION] = TT.[APPLICATION]
  ,[TRANSACTIONCURRENCYID] = FT.[TRANSACTIONCURRENCYID]
  ,[ORIGTRANSACTIONAMOUNT] = case 
    when FT.TYPECODE in (
        0
        ,1
        )
      then FT.TRANSACTIONAMOUNT
    else null
    end
  ,[GIVENANONYMOUSLY] = isnull(REVENUE_EXT.GIVENANONYMOUSLY, 0)
from (
  select TRANSACTIONID
    ,[AMOUNT] = sum(case 
        when T.[TYPECODE] in (
            0
            ,20
            )
          then null
        else T.[AMOUNT]
        end)
    ,[TOTALPAID] = sum(case 
        when T.[TYPECODE] = 0
          then - T.[AMOUNT]
        else 0
        end)
    ,[WRITEOFFS] = sum(case 
        when T.[TYPECODE] = 20
          then - T.[AMOUNT]
        else 0
        end)
    ,[BALANCE] = sum(T.[AMOUNT])
    ,[NUMPAYMENTS] = count(distinct T.PAYMENTID)
    ,[LASTPAYMENTDATE] = MAX(case 
        when T.[TYPECODE] = 0
          then T.[DATE]
        else null
        end)
    ,[APPLICATION] = dbo.UDA_BUILDLIST(distinct T.[APPLICATION])
    ,[DESIGNATIONS] = dbo.UDA_BUILDLIST(distinct D.USERID)
    ,[DEFINITELYSPLIT] = cast(case 
        when count(distinct T.[DESIGNATIONID]) > 1
          then 1
        else 0
        end as bit)
    ,[MEETSCRITERIACOUNT] = SUM(case 
        when T.MEETSCRITERIA = 1
          then 1
        else 0
        end)
  from #TMP_DONOR_INFO_DATA_TO_AGGREGATE T
  inner join dbo.DESIGNATION D on T.DESIGNATIONID = D.ID
    and T.SPID = @@SPID
  group by T.[TRANSACTIONID]
  ) TT
inner join dbo.FINANCIALTRANSACTION FT on TT.TRANSACTIONID = FT.ID
  and TT.[MEETSCRITERIACOUNT] > 0
inner join dbo.REVENUE_EXT on FT.ID = REVENUE_EXT.ID
left join CAMPAIGNS_CTE on FT.ID = CAMPAIGNS_CTE.TRANSACTIONID;

--if @debugging = 1

--begin

--  set @debugMsg = CONVERT(varchar, (getdate() - @debugStartTime), 108) + ' >> selected stuff ';

--  set @debugStartTime = getdate();

--  raiserror (@debugMsg,0,1)

--  with nowait;

--end;

--get rid of the temporary data since we have already used it

--truncate table #TMP_DONOR_INFO_DATA_TO_AGGREGATE

delete
from #TMP_DONOR_INFO_DATA_TO_AGGREGATE
where SPID = @@SPID;
  --if @debugging = 1

  --begin

  --  set @debugMsg = CONVERT(varchar, (getdate() - @debugStartTime), 108) + ' deleting rows from temp table ';

  --  set @debugStartTime = getdate();

  --  raiserror (@debugMsg,0,1)

  --  with nowait;

  --end;