USP_DATALIST_DESIGNATIONLEVELDONORS_3
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@DONORSEARCHTEXT | nvarchar(100) | IN | |
@DESIGNATIONID | uniqueidentifier | IN | |
@DATERANGE | tinyint | IN | |
@FROM | datetime | IN | |
@TO | datetime | IN | |
@TRANSACTIONTYPEOPTIONCODE | int | IN | |
@REVENUEFILTERID | uniqueidentifier | IN | |
@CAMPAIGNFILTERMODE | tinyint | IN | |
@CAMPAIGNSSELECTED | xml | IN |
Definition
Copy
CREATE procedure [dbo].[USP_DATALIST_DESIGNATIONLEVELDONORS_3] (
@ID uniqueidentifier = null
,@DONORSEARCHTEXT nvarchar(100) = null
,@DESIGNATIONID uniqueidentifier = null
,@DATERANGE tinyint = 29
,@FROM datetime = null
,@TO datetime = null
,@TRANSACTIONTYPEOPTIONCODE int = null
,@REVENUEFILTERID uniqueidentifier = null
,@CAMPAIGNFILTERMODE tinyint = 0
,@CAMPAIGNSSELECTED xml = null
)
with execute as owner
as
set nocount off;
--********************************************************************
--DUPLICATING THE INPUT PARAMETERS AND USING THE DUPLICATES IN THE SQL
--IS INTENTIONAL AND RESULTS IN A BETTER QUERY PLAN (http://stackoverflow.com/questions/421275/different-execution-plan-when-executing-statement-directly-and-from-stored-proce)
--********************************************************************
declare @ID2 uniqueidentifier = @ID
,@DONORSEARCHTEXT2 nvarchar(100) = @DONORSEARCHTEXT
,@DESIGNATIONID2 uniqueidentifier = @DESIGNATIONID
,@DATERANGE2 tinyint = @DATERANGE
,@FROM2 datetime = @FROM
,@TO2 datetime = @TO
,@TRANSACTIONTYPEOPTIONCODE2 int = @TRANSACTIONTYPEOPTIONCODE
,@REVENUEFILTERID2 uniqueidentifier = @REVENUEFILTERID
,@CAMPAIGNFILTERMODE2 tinyint = @CAMPAIGNFILTERMODE
,@CAMPAIGNSSELECTED2 xml = @CAMPAIGNSSELECTED
,@ABORT bit = 0;
declare @debugging bit = 0
,@debugMsg nvarchar(1000)
,@debugStartTime datetime = getdate();
if isnull(@TRANSACTIONTYPEOPTIONCODE2, - 1) = - 1
set @TRANSACTIONTYPEOPTIONCODE2 = null;
if @DATERANGE2 is null
set @DATERANGE2 = 10;--all dates
if @DATERANGE2 = 0
begin
set @FROM2 = dbo.UFN_DATE_GETEARLIESTTIME(@FROM2);
set @TO2 = dbo.UFN_DATE_GETLATESTTIME(@TO2);
end
else
exec [dbo].[USP_RESOLVEDATEFILTER] @DATERANGE2
,@FROM2 output
,@TO2 output;
--NOTE: please note that this routine DOES NOT drop any temporary tables - this means that if you
-- change the structure of any of these temp tables you WILL NEED TO ADD A REVISION to drop
-- the temp tables before the spec is reloaded
--if object_id('tempdb..#TMP_DONOR_INFO_FILTEREDIDS') is not null
-- drop table #TMP_DONOR_INFO_FILTEREDIDS;
if object_id('tempdb..#TMP_DONOR_INFO_FILTEREDIDS') is null
begin
create table #TMP_DONOR_INFO_FILTEREDIDS (
[SPID] int
,[ID] uniqueidentifier
,[RECORDTYPE] smallint primary key (
[SPID]
,[ID]
,[RECORDTYPE]
) --0=DESIGNATIONID, 1=CAMPAIGNID, 2=CONSTITUENTID
);
end
else
begin
delete
from #TMP_DONOR_INFO_FILTEREDIDS
where SPID = @@SPID;
end
if @DESIGNATIONID2 is not null
insert into #TMP_DONOR_INFO_FILTEREDIDS
select @@SPID
,ID
,0
from dbo.DESIGNATION with (nolock)
where DESIGNATION.ID = @DESIGNATIONID2
else
insert into #TMP_DONOR_INFO_FILTEREDIDS
select @@SPID
,ID
,0
from dbo.DESIGNATION with (nolock)
where (
DESIGNATION.DESIGNATIONLEVEL1ID = @ID2
or DESIGNATION.DESIGNATIONLEVEL2ID = @ID2
or DESIGNATION.DESIGNATIONLEVEL3ID = @ID2
or DESIGNATION.DESIGNATIONLEVEL4ID = @ID2
or DESIGNATION.DESIGNATIONLEVEL5ID = @ID2
);
if @@ROWCOUNT < 1
set @ABORT = 1
if @CAMPAIGNFILTERMODE2 != 0
begin
insert into #TMP_DONOR_INFO_FILTEREDIDS (
SPID
,ID
,RECORDTYPE
)
select distinct @@SPID
,T.c.value('(ID)[1]', 'uniqueidentifier')
,1
from @CAMPAIGNSSELECTED2.nodes('/CAMPAIGNSSELECTED/ITEM') T(c);
if @@ROWCOUNT < 1
set @ABORT = 1
end
exec dbo.USP_DONOR_INFO_HELPER_GETCONSTITS @DONORSEARCHTEXT = @DONORSEARCHTEXT2 output
,@ABORT = @ABORT output;
--if object_id('tempdb..#TMP_DONOR_INFO_DATA_TO_AGGREGATE') is not null
-- drop table #TMP_DONOR_INFO_DATA_TO_AGGREGATE;
if object_id('tempdb..#TMP_DONOR_INFO_DATA_TO_AGGREGATE') is null
begin
create table #TMP_DONOR_INFO_DATA_TO_AGGREGATE (
[SPID] int
,[TRANSACTIONID] uniqueidentifier
,[LINEITEMID] uniqueidentifier
,[DATE] datetime
,[DESIGNATIONID] uniqueidentifier
,[AMOUNT] money
,[SOURCELINEITEMID] uniqueidentifier unique (
[SPID]
,[SOURCELINEITEMID]
,[LINEITEMID]
)
,[PAYMENTID] uniqueidentifier
,[APPLICATION] nvarchar(50) collate DATABASE_DEFAULT
,[MEETSCRITERIA] bit
,[TYPECODE] smallint
);
CREATE CLUSTERED INDEX IX_#TMP_DONOR_INFO_DATA_TO_AGGREGATE ON #TMP_DONOR_INFO_DATA_TO_AGGREGATE (SPID, TRANSACTIONID, TYPECODE, LINEITEMID, DESIGNATIONID, MEETSCRITERIA)
end
else
begin
delete
from #TMP_DONOR_INFO_DATA_TO_AGGREGATE
where SPID = @@SPID;
end
--if object_id('tempdb..#TMP_DONOR_INFO_COMMITMENTAPPS') is not null
-- drop table #TMP_DONOR_INFO_COMMITMENTAPPS;
if object_id('tempdb..#TMP_DONOR_INFO_COMMITMENTAPPS') is null
begin
create table #TMP_DONOR_INFO_COMMITMENTAPPS (
[SPID] int
,[TYPECODE] tinyint
,[APPLICATIONCODE] tinyint primary key (
[SPID]
,[TYPECODE]
,[APPLICATIONCODE]
)
);
end
else
begin
delete
from #TMP_DONOR_INFO_COMMITMENTAPPS
where SPID = @@SPID;
end
insert into #TMP_DONOR_INFO_COMMITMENTAPPS
select @@SPID
,1
,2
where isnull(@TRANSACTIONTYPEOPTIONCODE2, 1) = 1 --pledges
union all
select @@SPID
,6
,8
where isnull(@TRANSACTIONTYPEOPTIONCODE2, 6) = 6 --grant awards
union all
select @@SPID
,4
,6
where isnull(@TRANSACTIONTYPEOPTIONCODE2, 4) = 4 --planned gifts
union all
select @@SPID
,3
,7
where isnull(@TRANSACTIONTYPEOPTIONCODE2, 3) = 3 --matching gift claims
union all
select @@SPID
,7
,12
where isnull(@TRANSACTIONTYPEOPTIONCODE2, 7) = 7 --auction donation
union all
select @@SPID
,15
,19
where isnull(@TRANSACTIONTYPEOPTIONCODE2, 15) = 15 --membership installment plan
union all
select @@SPID
,8
,13
where isnull(@TRANSACTIONTYPEOPTIONCODE2, 8) = 8 --donor challenge claim
--if object_id('tempdb..#TMP_DATA_DONOR_INFO_RESULTS') is not null
-- drop table #TMP_DATA_DONOR_INFO_RESULTS;
if object_id('tempdb..#TMP_DATA_DONOR_INFO_RESULTS') is null
begin
create table #TMP_DATA_DONOR_INFO_RESULTS (
[SPID] int
,[TRANSACTIONID] uniqueidentifier
,[CONSTITUENTID] uniqueidentifier primary key (
[SPID]
,[TRANSACTIONID]
,[CONSTITUENTID]
,[TYPECODE]
)
,[DATE] datetime
,[TRANSACTIONTYPE] nvarchar(50) collate DATABASE_DEFAULT
,[AMOUNT] money
,[TOTALPAID] money
,[BALANCE] money
,[NUMPAYMENTS] int
,[LASTPAYMENTDATE] datetime
,[ORIGTRANSACTIONAMOUNT] money
,[WRITEOFFS] money
,[DESIGNATION] nvarchar(1000) collate DATABASE_DEFAULT
,[CAMPAIGNS] nvarchar(1000) collate DATABASE_DEFAULT
,[ORIGTRANSACTIONCURRENCYID] uniqueidentifier
,[TRANSACTIONCURRENCYID] uniqueidentifier
,[ISSPLIT] bit
,[GIVENANONYMOUSLY] bit
,[TYPECODE] smallint
,[APPLICATION] nvarchar(50) collate DATABASE_DEFAULT
);
end
else
begin
delete
from #TMP_DATA_DONOR_INFO_RESULTS
where SPID = @@SPID;
end
declare @SQL nvarchar(max) = '';
declare @FILTERCRITERIA nvarchar(1000) = '';
if @DONORSEARCHTEXT2 is not null
set @FILTERCRITERIA += ' and exists(select 1 from #TMP_DONOR_INFO_FILTEREDIDS FILTER where FILTER.ID=#CONSTITUENTID AND FILTER.RECORDTYPE=2 AND FILTER.SPID=@@SPID)'
if @CAMPAIGNFILTERMODE2 != 0
set @FILTERCRITERIA += ' and exists(select 1 from dbo.REVENUESPLITCAMPAIGN RSC inner join #TMP_DONOR_INFO_FILTEREDIDS FILTER on RSC.CAMPAIGNID = FILTER.ID AND FILTER.RECORDTYPE=1 AND FILTER.SPID=@@SPID where RSC.REVENUESPLITID = #SPLITID)'
if @REVENUEFILTERID2 is not null
begin
if @ABORT = 0
and not exists (
select 1
from dbo.UFN_REVENUEFILTER_BYID(@REVENUEFILTERID2)
)
set @ABORT = 1
set @FILTERCRITERIA += ' and exists(select 1 from dbo.UFN_REVENUEFILTER_BYID(@REVENUEFILTERID2) FILTER where FILTER.ID=#SPLITID)'
end
set @FILTERCRITERIA = '(#DATE between @FROM2 and @TO2)' + @FILTERCRITERIA
set nocount off;
if @ABORT = 0
begin
begin try
if isnull(@TRANSACTIONTYPEOPTIONCODE2, - 1) not in (
0
,2
)
begin
set @SQL =
'
--payments that meet criteria
--WI#461782:Patton Hilliard - incorrect pledge payment totals
--changed dynamic SQL below to account for adjusted pledges
WITH ISP_CTE AS (
SELECT ISP.PAYMENTID, ISP.PLEDGEID, SUM(ISP.AMOUNT) AMOUNT from dbo.INSTALLMENTSPLITPAYMENT ISP GROUP BY ISP.PAYMENTID, ISP.PLEDGEID
)
insert into #TMP_DONOR_INFO_DATA_TO_AGGREGATE
select
[SPID]= @@SPID
,[TRANSACTIONID]= COMMITMENT.ID
,[LINEITEMID]= PAYMENTLINEITEM.ID
,[DATE]= PAYMENT.[DATE]
,[DESIGNATIONID]= DESIGNATIONFILTER.ID
,[AMOUNT]= -ISP.AMOUNT
,[SOURCELINEITEMID]= COMMITMENTLINEITEM.ID
,[PAYMENTID]= PAYMENT.ID
,[APPLICATION]= null
,[MEETSCRITERIA]= 1
,[TYPECODE]= PAYMENT.TYPECODE
from
dbo.FINANCIALTRANSACTION PAYMENT with (NOLOCK)
inner join dbo.FINANCIALTRANSACTIONLINEITEM PAYMENTLINEITEM with (NOLOCK) on PAYMENT.ID=PAYMENTLINEITEM.FINANCIALTRANSACTIONID and PAYMENT.TYPECODE=0 and PAYMENT.DELETEDON is null
inner join ISP_CTE ISP with (NOLOCK) on PAYMENTLINEITEM.ID=ISP.PAYMENTID and PAYMENTLINEITEM.DELETEDON is null
inner join dbo.REVENUESPLIT_EXT PAYMENTAPPINFO with (NOLOCK) on PAYMENTLINEITEM.ID = PAYMENTAPPINFO.ID
inner join #TMP_DONOR_INFO_FILTEREDIDS DESIGNATIONFILTER with (NOLOCK) on PAYMENTAPPINFO.DESIGNATIONID = DESIGNATIONFILTER.ID and DESIGNATIONFILTER.RECORDTYPE=0 and DESIGNATIONFILTER.SPID=@@SPID
inner join dbo.FINANCIALTRANSACTION COMMITMENT with (NOLOCK) on ISP.PLEDGEID=COMMITMENT.ID and COMMITMENT.DELETEDON is null
inner join #TMP_DONOR_INFO_COMMITMENTAPPS APPFILTER with (NOLOCK) on COMMITMENT.TYPECODE=APPFILTER.TYPECODE and PAYMENTAPPINFO.APPLICATIONCODE=APPFILTER.APPLICATIONCODE and APPFILTER.SPID=@@SPID
inner join dbo.FINANCIALTRANSACTIONLINEITEM COMMITMENTLINEITEM with (NOLOCK) on COMMITMENT.ID=COMMITMENTLINEITEM.FINANCIALTRANSACTIONID and COMMITMENTLINEITEM.DELETEDON is null
inner join dbo.REVENUESPLIT_EXT COMMITMENTLINEITEMAPPINFO with (NOLOCK) on COMMITMENTLINEITEM.ID=COMMITMENTLINEITEMAPPINFO.ID and COMMITMENTLINEITEMAPPINFO.DESIGNATIONID = PAYMENTAPPINFO.DESIGNATIONID
where '
+ replace(replace(replace(@FILTERCRITERIA, '#CONSTITUENTID', 'PAYMENT.CONSTITUENTID'), '#SPLITID', 'PAYMENTLINEITEM.ID'), '#DATE', 'PAYMENT.[DATE]')
set @SQL +=
';
--writeoffs that meet criteria
with ISCTE as (
select ISPLIT.PLEDGEID, ISPLIT.REVENUESPLITID, ISWO.WRITEOFFID, ISPLIT.DESIGNATIONID, SUM(ISWO.TRANSACTIONAMOUNT) AMOUNT from
dbo.INSTALLMENTSPLITWRITEOFF ISWO with (NOLOCK)
inner join dbo.INSTALLMENTSPLIT ISPLIT with (NOLOCK) on ISWO.INSTALLMENTSPLITID=ISPLIT.ID
inner join #TMP_DONOR_INFO_FILTEREDIDS DESIGNATIONFILTER with (NOLOCK) on ISPLIT.DESIGNATIONID = DESIGNATIONFILTER.ID and DESIGNATIONFILTER.RECORDTYPE=0 and DESIGNATIONFILTER.SPID=@@SPID
group by ISPLIT.PLEDGEID, ISPLIT.REVENUESPLITID, ISWO.WRITEOFFID, ISPLIT.DESIGNATIONID
)
insert into #TMP_DONOR_INFO_DATA_TO_AGGREGATE
select
[SPID]= @@SPID
,[TRANSACTIONID]= COMMITMENT.ID
,[LINEITEMID]= WRITEOFFLINEITEM.ID
,[DATE]= WRITEOFF.[DATE] --REVISIT question whether this should be getting the breakdown from the installmentsplits...
,[DESIGNATIONID]= ISWO.DESIGNATIONID
,[AMOUNT]= -ISWO.AMOUNT
,[SOURCELINEITEMID]= COMMITMENTLINEITEM.ID
,[PAYMENTID]= null
,[APPLICATION]= null
,[MEETSCRITERIA]= 1
,[TYPECODE]= WRITEOFF.TYPECODE
from
ISCTE ISWO with (NOLOCK)
inner join dbo.FINANCIALTRANSACTION WRITEOFF with (NOLOCK) on ISWO.WRITEOFFID=WRITEOFF.ID and WRITEOFF.DELETEDON is null
inner join dbo.FINANCIALTRANSACTIONLINEITEM COMMITMENTLINEITEM on ISWO.REVENUESPLITID=COMMITMENTLINEITEM.ID and COMMITMENTLINEITEM.DELETEDON is null
inner join dbo.FINANCIALTRANSACTION COMMITMENT with (NOLOCK) on ISWO.PLEDGEID =COMMITMENT.ID and COMMITMENT.DELETEDON is null
inner join #TMP_DONOR_INFO_COMMITMENTAPPS APPFILTER with (NOLOCK) on COMMITMENT.TYPECODE=APPFILTER.TYPECODE and APPFILTER.SPID=@@SPID
inner join dbo.FINANCIALTRANSACTIONLINEITEM WRITEOFFLINEITEM with (NOLOCK) on WRITEOFF.ID=WRITEOFFLINEITEM.FINANCIALTRANSACTIONID and WRITEOFFLINEITEM.DELETEDON is null
inner join dbo.REVENUESPLIT_EXT WRITEOFFAPPINFO with (NOLOCK) on WRITEOFFLINEITEM.ID=WRITEOFFAPPINFO.ID and ISWO.DESIGNATIONID =WRITEOFFAPPINFO.DESIGNATIONID
where WRITEOFF.TYPECODE=20
and '
+ replace(replace(replace(@FILTERCRITERIA, '#CONSTITUENTID', 'COMMITMENT.CONSTITUENTID'), '#SPLITID', 'WRITEOFFLINEITEM.ID'), '#DATE', 'WRITEOFF.[DATE]')
set @SQL +=
'
union all
select
[SPID]= @@SPID
,[TRANSACTIONID]= COMMITMENT.ID
,[LINEITEMID]= WRITEOFFLINEITEM.ID
,[DATE]= WRITEOFF.[DATE] --REVISIT question whether this should be getting the breakdown from the installmentsplits...
,[DESIGNATIONID]= DESIGNATIONFILTER.ID
,[AMOUNT]= -WRITEOFFLINEITEM.TRANSACTIONAMOUNT
,[SOURCELINEITEMID]= COMMITMENTLINEITEM.ID
,[PAYMENTID]= null
,[APPLICATION]= null
,[MEETSCRITERIA]= 1
,[TYPECODE]= WRITEOFF.TYPECODE
from
dbo.FINANCIALTRANSACTION WRITEOFF with (NOLOCK)
inner join dbo.FINANCIALTRANSACTIONLINEITEM WRITEOFFLINEITEM with (NOLOCK) on WRITEOFF.ID=WRITEOFFLINEITEM.FINANCIALTRANSACTIONID and WRITEOFF.DELETEDON is null
inner join dbo.REVENUESPLIT_EXT WRITEOFFLINEITEMAPPINFO with (NOLOCK) on WRITEOFFLINEITEM.ID = WRITEOFFLINEITEMAPPINFO.ID and WRITEOFFLINEITEM.DELETEDON is null
inner join #TMP_DONOR_INFO_FILTEREDIDS DESIGNATIONFILTER with (NOLOCK) on WRITEOFFLINEITEMAPPINFO.DESIGNATIONID = DESIGNATIONFILTER.ID and DESIGNATIONFILTER.RECORDTYPE=0 and DESIGNATIONFILTER.SPID=@@SPID
inner join dbo.FINANCIALTRANSACTION COMMITMENT with (NOLOCK) on WRITEOFF.PARENTID=COMMITMENT.ID and COMMITMENT.DELETEDON is null and COMMITMENT.TYPECODE=7 --Auction donations writeoffs don't follow same pattern
inner join dbo.FINANCIALTRANSACTIONLINEITEM COMMITMENTLINEITEM with (NOLOCK) on COMMITMENT.ID = COMMITMENTLINEITEM.FINANCIALTRANSACTIONID and COMMITMENTLINEITEM.DELETEDON is null
inner join dbo.REVENUESPLIT_EXT COMMITMENTLINEITEMAPPINFO with (NOLOCK) on COMMITMENTLINEITEM.ID=COMMITMENTLINEITEMAPPINFO.ID and COMMITMENTLINEITEMAPPINFO.DESIGNATIONID=DESIGNATIONFILTER.ID
where '
+ case
when isnull(@TRANSACTIONTYPEOPTIONCODE2, 7) = 7
then '1'
else '0'
end + '=1 and WRITEOFF.TYPECODE=20
and ' + replace(replace(replace(@FILTERCRITERIA, '#CONSTITUENTID', 'COMMITMENT.CONSTITUENTID'), '#SPLITID', 'WRITEOFFLINEITEM.ID'), '#DATE', 'WRITEOFF.[DATE]')
set @SQL +=
'
--Get parents that meet criteria
union all
select
[SPID]=@@SPID
,[TRANSACTIONID]=COMMITMENT.ID
,[LINEITEMID]=COMMITMENTLINEITEM.ID
,[DATE]=COMMITMENT.[DATE]
,[DESIGNATIONID]=DESIGNATIONFILTER.ID
,[AMOUNT]=COMMITMENTLINEITEM.TRANSACTIONAMOUNT
,[SOURCELINEITEMID]=null
,[PAYMENTID]=null
,[APPLICATION]=COMMITMENTLINEITEMAPPINFO.APPLICATION
,[MEETSCRITERIA]=1
,[TYPECODE]=COMMITMENT.TYPECODE
from
dbo.FINANCIALTRANSACTION COMMITMENT with (NOLOCK)
inner join dbo.FINANCIALTRANSACTIONLINEITEM COMMITMENTLINEITEM with (NOLOCK) on COMMITMENT.ID=COMMITMENTLINEITEM.FINANCIALTRANSACTIONID and COMMITMENT.DELETEDON is null
inner join dbo.REVENUESPLIT_EXT COMMITMENTLINEITEMAPPINFO with (NOLOCK) on COMMITMENTLINEITEM.ID = COMMITMENTLINEITEMAPPINFO.ID and COMMITMENTLINEITEM.DELETEDON is null
inner join #TMP_DONOR_INFO_FILTEREDIDS DESIGNATIONFILTER with (NOLOCK) on COMMITMENTLINEITEMAPPINFO.DESIGNATIONID = DESIGNATIONFILTER.ID and DESIGNATIONFILTER.RECORDTYPE=0 and DESIGNATIONFILTER.SPID=@@SPID
inner join #TMP_DONOR_INFO_COMMITMENTAPPS APPFILTER with (NOLOCK) on COMMITMENT.TYPECODE=APPFILTER.TYPECODE and APPFILTER.SPID=@@SPID
where '
+ replace(replace(replace(@FILTERCRITERIA, '#CONSTITUENTID', 'COMMITMENT.CONSTITUENTID'), '#SPLITID', 'COMMITMENTLINEITEM.ID'), '#DATE', 'COMMITMENT.[DATE]') + ';'
if @debugging = 1
begin
set @debugMsg = 'BEFORE exec dynamic SQL to get matching temp items ';
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) + ' exec dynamic SQL to get matching temp items ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end;
if @debugging = 1
begin
set @debugMsg = 'BEFORE parents of the payments and writeoffs added above that DONT meet criteria ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end;
--now that we have what actually meets the criteria, we have to get the parents and payments that are linked but don't meet criteria
--parents of the payments and writeoffs added above that DONT meet criteria
with COM_CTE
as (
select T.SOURCELINEITEMID
from #TMP_DONOR_INFO_DATA_TO_AGGREGATE T
where T.SPID = @@SPID
group by T.SOURCELINEITEMID
)
merge #TMP_DONOR_INFO_DATA_TO_AGGREGATE as target
using (
select [TRANSACTIONID] = COMMITMENT.ID
,[LINEITEMID] = COMMITMENTSPLIT.ID
,[DATE] = COMMITMENT.[DATE]
,[DESIGNATIONID] = isnull(SPLITAPPLICATIONINFO.DESIGNATIONID, '00000000-0000-0000-0000-000000000000') --membership installments may not have designationids, but we need an ID since it is part of the PK
,[AMOUNT] = COMMITMENTSPLIT.TRANSACTIONAMOUNT
,[APPLICATION] = SPLITAPPLICATIONINFO.APPLICATION
,[TYPECODE] = COMMITMENT.TYPECODE
from COM_CTE T with (readuncommitted)
inner join dbo.FINANCIALTRANSACTIONLINEITEM COMMITMENTSPLIT with (readuncommitted) on T.SOURCELINEITEMID = COMMITMENTSPLIT.ID
and COMMITMENTSPLIT.DELETEDON is null
inner join dbo.REVENUESPLIT_EXT SPLITAPPLICATIONINFO with (readuncommitted) on COMMITMENTSPLIT.ID = SPLITAPPLICATIONINFO.ID
inner join dbo.FINANCIALTRANSACTION COMMITMENT with (readuncommitted) on COMMITMENTSPLIT.FINANCIALTRANSACTIONID = COMMITMENT.ID
and COMMITMENT.DELETEDON is null
) as source
on target.LINEITEMID = source.[LINEITEMID]
and target.SPID = @@SPID
when not matched
then
insert (
[SPID]
,[TRANSACTIONID]
,[LINEITEMID]
,[DATE]
,[DESIGNATIONID]
,[AMOUNT]
,[SOURCELINEITEMID]
,[PAYMENTID]
,[APPLICATION]
,[MEETSCRITERIA]
,[TYPECODE]
)
values (
@@SPID
,source.[TRANSACTIONID]
,source.[LINEITEMID]
,source.[DATE]
,source.[DESIGNATIONID]
,source.[AMOUNT]
,null
,null
,source.[APPLICATION]
,0
,[TYPECODE]
);
if @debugging = 1
begin
set @debugMsg = CONVERT(varchar, (getdate() - @debugStartTime), 108) + ' finished parents of the payments and writeoffs added above that DONT meet criteria insertion ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end;
if @debugging = 1
begin
set @debugMsg = 'BEFORE payments that DONT meet criteria but are needed ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end;
--payments that DONT meet criteria but are needed
with ISP_CTE
as (
select ISP.PAYMENTID
,ISP.PLEDGEID
,SUM(ISP.AMOUNT) AMOUNT
from dbo.INSTALLMENTSPLITPAYMENT ISP
where exists (
select 1
from #TMP_DONOR_INFO_DATA_TO_AGGREGATE T with (readuncommitted)
where T.TRANSACTIONID = ISP.PLEDGEID
and T.SPID = @@SPID
)
group by ISP.PAYMENTID
,ISP.PLEDGEID
)
merge #TMP_DONOR_INFO_DATA_TO_AGGREGATE as target
using (
select [TRANSACTIONID] = SOURCETRAN.ID
,[LINEITEMID] = PAYMENTLINEITEM.ID
,[DATE] = PAYMENT.[DATE]
,[DESIGNATIONID] = DESIGNATION.ID
,[AMOUNT] = - ISP.AMOUNT
,[SOURCELINEITEMID] = SOURCELINEITEM.ID
,[PAYMENTID] = PAYMENT.ID
,[TYPECODE] = PAYMENT.TYPECODE
from dbo.FINANCIALTRANSACTION PAYMENT with (readuncommitted)
inner join dbo.FINANCIALTRANSACTIONLINEITEM PAYMENTLINEITEM with (readuncommitted) on PAYMENT.ID = PAYMENTLINEITEM.FINANCIALTRANSACTIONID
and PAYMENT.DELETEDON is null
inner join ISP_CTE ISP with (readuncommitted) on PAYMENTLINEITEM.ID = ISP.PAYMENTID
and PAYMENTLINEITEM.DELETEDON is null
inner join dbo.REVENUESPLIT_EXT SPLITAPPLICATIONINFO with (readuncommitted) on PAYMENTLINEITEM.ID = SPLITAPPLICATIONINFO.ID
inner join #TMP_DONOR_INFO_FILTEREDIDS DESIGNATION with (readuncommitted) on SPLITAPPLICATIONINFO.DESIGNATIONID = DESIGNATION.ID
and DESIGNATION.RECORDTYPE = 0
and DESIGNATION.SPID = @@SPID
inner join dbo.FINANCIALTRANSACTION SOURCETRAN with (readuncommitted) on ISP.PLEDGEID = SOURCETRAN.ID
and SOURCETRAN.DELETEDON is null
inner join dbo.FINANCIALTRANSACTIONLINEITEM SOURCELINEITEM with (readuncommitted) on SOURCETRAN.ID = SOURCELINEITEM.FINANCIALTRANSACTIONID
--and PAYMENTLINEITEM.SOURCELINEITEMID = SOURCELINEITEM.ID --must do this to prevent *magic money* from being applied to multiple commitments via the INSTALLMENTSPLITPAYMENT table
and SOURCELINEITEM.DELETEDON is null
--inner join #TMP_DONOR_INFO_DATA_TO_AGGREGATE T with (readuncommitted) on SOURCETRAN.ID=T.TRANSACTIONID and SOURCETRAN.TYPECODE=T.TYPECODE and T.SPID=@@SPID
inner join dbo.REVENUESPLIT_EXT SOURCELINEITEMAPPINFO with (nolock) on SOURCELINEITEM.ID = SOURCELINEITEMAPPINFO.ID
and (
PAYMENTLINEITEM.SOURCELINEITEMID = SOURCELINEITEMAPPINFO.ID
or (
SOURCELINEITEMAPPINFO.DESIGNATIONID = DESIGNATION.ID
and PAYMENTLINEITEM.SOURCELINEITEMID is null
)
)
inner join #TMP_DONOR_INFO_COMMITMENTAPPS APPS with (readuncommitted) on SPLITAPPLICATIONINFO.APPLICATIONCODE = APPS.APPLICATIONCODE
and SOURCETRAN.TYPECODE = APPS.TYPECODE
and APPS.SPID = @@SPID
where PAYMENT.TYPECODE = 0
) as source
on target.LINEITEMID = source.[LINEITEMID]
and target.SPID = @@SPID
when not matched
then
insert (
[SPID]
,[TRANSACTIONID]
,[LINEITEMID]
,[DATE]
,[DESIGNATIONID]
,[AMOUNT]
,[SOURCELINEITEMID]
,[PAYMENTID]
,[APPLICATION]
,[MEETSCRITERIA]
,[TYPECODE]
)
values (
@@SPID
,source.[TRANSACTIONID]
,source.[LINEITEMID]
,source.[DATE]
,source.[DESIGNATIONID]
,source.[AMOUNT]
,source.[SOURCELINEITEMID]
,source.[PAYMENTID]
,null
,0
,source.[TYPECODE]
);
if @debugging = 1
begin
set @debugMsg = CONVERT(varchar, (getdate() - @debugStartTime), 108) + ' finished payments that DONT meet criteria but are needed insertion ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end;
if @debugging = 1
begin
set @debugMsg = 'BEFORE writeoffs that DONT meet criteria but are needed ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end;
--writeoffs that DONT meet criteria but are needed
with ISCTE
as (
select ISPLIT.PLEDGEID
,ISPLIT.REVENUESPLITID
,ISWO.WRITEOFFID
,ISPLIT.DESIGNATIONID
,SUM(ISWO.TRANSACTIONAMOUNT) AMOUNT
from dbo.INSTALLMENTSPLITWRITEOFF ISWO with (readuncommitted)
inner join dbo.INSTALLMENTSPLIT ISPLIT with (readuncommitted) on ISWO.INSTALLMENTSPLITID = ISPLIT.ID
inner join #TMP_DONOR_INFO_FILTEREDIDS DESIGNATION with (readuncommitted) on ISPLIT.DESIGNATIONID = DESIGNATION.ID
and DESIGNATION.RECORDTYPE = 0
and DESIGNATION.SPID = @@SPID
where exists (
select 1
from #TMP_DONOR_INFO_DATA_TO_AGGREGATE T with (readuncommitted)
where T.TRANSACTIONID = ISPLIT.PLEDGEID
and T.SPID = @@SPID
)
group by ISPLIT.PLEDGEID
,ISPLIT.REVENUESPLITID
,ISWO.WRITEOFFID
,ISPLIT.DESIGNATIONID
)
merge #TMP_DONOR_INFO_DATA_TO_AGGREGATE as target
using (
select [TRANSACTIONID] = COMMITMENT.ID
,[LINEITEMID] = WRITEOFFLINEITEM.ID
,[DATE] = WRITEOFF.[DATE] --REVISIT question whether this should be getting the breakdown from the installmentsplits...
,[DESIGNATIONID] = ISCTE.DESIGNATIONID
,[AMOUNT] = - ISCTE.AMOUNT
,[SOURCELINEITEMID] = COMMITMENTLINEITEM.ID
,[PAYMENTID] = null
,[APPLICATION] = null
,[MEETSCRITERIA] = 1
,[TYPECODE] = WRITEOFF.TYPECODE
from ISCTE with (readuncommitted)
inner join dbo.FINANCIALTRANSACTION WRITEOFF with (readuncommitted) on ISCTE.WRITEOFFID = WRITEOFF.ID
and WRITEOFF.DELETEDON is null
inner join dbo.FINANCIALTRANSACTIONLINEITEM COMMITMENTLINEITEM on ISCTE.REVENUESPLITID = COMMITMENTLINEITEM.ID
and COMMITMENTLINEITEM.DELETEDON is null
inner join dbo.FINANCIALTRANSACTION COMMITMENT on ISCTE.PLEDGEID = COMMITMENT.ID
and COMMITMENT.DELETEDON is null
inner join dbo.FINANCIALTRANSACTIONLINEITEM WRITEOFFLINEITEM on WRITEOFF.ID = WRITEOFFLINEITEM.FINANCIALTRANSACTIONID
and WRITEOFFLINEITEM.DELETEDON is null
inner join dbo.REVENUESPLIT_EXT WRITEOFFAPPINFO on WRITEOFFLINEITEM.ID = WRITEOFFAPPINFO.ID
and ISCTE.DESIGNATIONID = WRITEOFFAPPINFO.DESIGNATIONID
inner join #TMP_DONOR_INFO_COMMITMENTAPPS APPS with (readuncommitted) on COMMITMENT.TYPECODE = APPS.TYPECODE
and APPS.SPID = @@SPID
where WRITEOFF.TYPECODE = 20
union all
select [TRANSACTIONID] = COMMITMENT.ID
,[LINEITEMID] = WRITEOFFLINEITEM.ID
,[DATE] = WRITEOFF.[DATE] --REVISIT question whether this should be getting the breakdown from the installmentsplits...
,[DESIGNATIONID] = DESIGNATION.ID
,[AMOUNT] = - WRITEOFFLINEITEM.TRANSACTIONAMOUNT
,[SOURCELINEITEMID] = COMMITMENTLINEITEM.ID
,[PAYMENTID] = null
,[APPLICATION] = null
,[MEETSCRITERIA] = 1
,[TYPECODE] = WRITEOFF.TYPECODE
from dbo.FINANCIALTRANSACTION WRITEOFF with (readuncommitted)
inner join dbo.FINANCIALTRANSACTIONLINEITEM WRITEOFFLINEITEM with (readuncommitted) on WRITEOFF.ID = WRITEOFFLINEITEM.FINANCIALTRANSACTIONID
and WRITEOFF.DELETEDON is null
inner join dbo.REVENUESPLIT_EXT WRITEOFFAPPINFO with (readuncommitted) on WRITEOFFLINEITEM.ID = WRITEOFFAPPINFO.ID
and WRITEOFFLINEITEM.DELETEDON is null
inner join #TMP_DONOR_INFO_FILTEREDIDS DESIGNATION with (readuncommitted) on WRITEOFFAPPINFO.DESIGNATIONID = DESIGNATION.ID
and DESIGNATION.RECORDTYPE = 0
and DESIGNATION.SPID = @@SPID
inner join dbo.FINANCIALTRANSACTION COMMITMENT with (readuncommitted) on WRITEOFF.PARENTID = COMMITMENT.ID
and COMMITMENT.DELETEDON is null
and COMMITMENT.TYPECODE = 7 --auction donations break pattern
inner join dbo.FINANCIALTRANSACTIONLINEITEM COMMITMENTLINEITEM with (readuncommitted) on COMMITMENT.ID = COMMITMENTLINEITEM.FINANCIALTRANSACTIONID
and COMMITMENTLINEITEM.DELETEDON is null
inner join dbo.REVENUESPLIT_EXT COMMITMENTSPLITAPPINFO with (readuncommitted) on COMMITMENTLINEITEM.ID = COMMITMENTSPLITAPPINFO.ID
and COMMITMENTSPLITAPPINFO.DESIGNATIONID = DESIGNATION.ID
where isnull(@TRANSACTIONTYPEOPTIONCODE2, 7) = 7
and WRITEOFF.TYPECODE = 20
and exists (
select 1
from #TMP_DONOR_INFO_DATA_TO_AGGREGATE T with (readuncommitted)
where T.TRANSACTIONID = COMMITMENT.ID
and T.SPID = @@SPID
)
) as source
on target.LINEITEMID = source.[LINEITEMID]
and target.SPID = @@SPID
when not matched
then
insert (
[SPID]
,[TRANSACTIONID]
,[LINEITEMID]
,[DATE]
,[DESIGNATIONID]
,[AMOUNT]
,[SOURCELINEITEMID]
,[PAYMENTID]
,[APPLICATION]
,[MEETSCRITERIA]
,[TYPECODE]
)
values (
@@SPID
,source.[TRANSACTIONID]
,source.[LINEITEMID]
,source.[DATE]
,source.[DESIGNATIONID]
,source.[AMOUNT]
,source.[SOURCELINEITEMID]
,null
,null
,1
,source.[TYPECODE]
);
if @debugging = 1
begin
set @debugMsg = CONVERT(varchar, (getdate() - @debugStartTime), 108) + ' finished writeoffs that DONT meet criteria but are needed insertion ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end
if @debugging = 1
begin
set @debugMsg = 'BEFORE Adding Results ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end
exec dbo.[USP_DONOR_INFO_HELPER_ADDTORESULTS] ''
,@FROM2
,@TO2
,@REVENUEFILTERID2;
if @debugging = 1
begin
set @debugMsg = CONVERT(varchar, (getdate() - @debugStartTime), 108) + ' Adding Results insertion ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end
end
--recurring gift
if isnull(@TRANSACTIONTYPEOPTIONCODE2, 2) = 2
begin
--Get Recurring Gift Payments
set @SQL =
'insert into #TMP_DONOR_INFO_DATA_TO_AGGREGATE
select
[SPID]= @@SPID
,[TRANSACTIONID]= RGA.SOURCEREVENUEID
,[LINEITEMID]= PAYMENTLINEITEM.ID
,[DATE]= PAYMENT.[DATE]
,[DESIGNATIONID]= DESIGNATION.ID
,[AMOUNT]= -RGA.AMOUNT
,[SOURCELINEITEMID]= null
,[PAYMENTID]= PAYMENTLINEITEM.FINANCIALTRANSACTIONID
,[APPLICATION]= ''Donation''
,[MEETSCRITERIA]= 1
,[TYPECODE]= PAYMENT.TYPECODE
from dbo.RECURRINGGIFTACTIVITY RGA
inner join dbo.REVENUESPLIT_EXT PAYMENTAPPLICATION with (NOLOCK) on PAYMENTAPPLICATION.ID = RGA.PAYMENTREVENUEID and PAYMENTAPPLICATION.APPLICATIONCODE in(3,5)
inner join dbo.FINANCIALTRANSACTIONLINEITEM PAYMENTLINEITEM with (NOLOCK) on PAYMENTLINEITEM.ID = PAYMENTAPPLICATION.ID and PAYMENTLINEITEM.DELETEDON is null
inner join dbo.FINANCIALTRANSACTION PAYMENT with (NOLOCK) on PAYMENT.ID = PAYMENTLINEITEM.FINANCIALTRANSACTIONID and PAYMENT.DELETEDON is null and PAYMENT.TYPECODE = 0
inner join #TMP_DONOR_INFO_FILTEREDIDS DESIGNATION with (NOLOCK) on PAYMENTAPPLICATION.DESIGNATIONID = DESIGNATION.ID and DESIGNATION.RECORDTYPE=0 and DESIGNATION.SPID=@@SPID
where '
+ replace(replace(replace(@FILTERCRITERIA, '#CONSTITUENTID', 'PAYMENT.CONSTITUENTID'), '#SPLITID', 'PAYMENTLINEITEM.ID'), '#DATE', 'PAYMENT.[DATE]')
if @debugging = 1
begin
set @debugMsg = 'BEFORE get recurring gifts ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end
exec dbo.[USP_DONOR_INFO_HELPER_ADDTORESULTS] @SQL
,@FROM2
,@TO2
,@REVENUEFILTERID2;
if @debugging = 1
begin
set @debugMsg = CONVERT(varchar, (getdate() - @debugStartTime), 108) + ' get recurring gifts ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end
end
if isnull(@TRANSACTIONTYPEOPTIONCODE2, 0) = 0
begin
-- Get EVERYTHING ELSE
set @SQL =
'insert into #TMP_DONOR_INFO_DATA_TO_AGGREGATE
select
[SPID]= @@SPID
,[TRANSACTIONID]= PAYMENT.ID
,[LINEITEMID]= PAYMENTLINEITEM.ID
,[DATE]= PAYMENT.[DATE]
,[DESIGNATIONID]= DESIGNATION.ID
,[AMOUNT]= PAYMENTLINEITEM.TRANSACTIONAMOUNT
,[SOURCELINEITEMID]= null
,[PAYMENTID]= null
,[APPLICATION]= PAYMENTAPPLICATION.APPLICATION
,[MEETSCRITERIA]= 1
,[TYPECODE]= PAYMENT.TYPECODE
from
dbo.FINANCIALTRANSACTION PAYMENT with (NOLOCK)
inner join dbo.FINANCIALTRANSACTIONLINEITEM PAYMENTLINEITEM with (NOLOCK) on PAYMENT.ID=PAYMENTLINEITEM.FINANCIALTRANSACTIONID and PAYMENT.DELETEDON is null and PAYMENTLINEITEM.DELETEDON is null and PAYMENT.TYPECODE=0
inner join dbo.REVENUESPLIT_EXT PAYMENTAPPLICATION with (NOLOCK) on PAYMENTLINEITEM.ID = PAYMENTAPPLICATION.ID
inner join #TMP_DONOR_INFO_FILTEREDIDS DESIGNATION with (NOLOCK) on PAYMENTAPPLICATION.DESIGNATIONID = DESIGNATION.ID and DESIGNATION.RECORDTYPE=0 and DESIGNATION.SPID=@@SPID
where (PAYMENTAPPLICATION.APPLICATIONCODE in (0,1,4,9,10,11,12,15,16,18) or (PAYMENTAPPLICATION.APPLICATIONCODE=7 and not exists(select 1 from dbo.INSTALLMENTSPLITPAYMENT where PAYMENTID=PAYMENTLINEITEM.ID))) and '
+ replace(replace(replace(@FILTERCRITERIA, '#CONSTITUENTID', 'PAYMENT.CONSTITUENTID'), '#SPLITID', 'PAYMENTLINEITEM.ID'), '#DATE', 'PAYMENT.[DATE]')
if @debugging = 1
begin
set @debugMsg = 'BEFORE get payments ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end
exec dbo.[USP_DONOR_INFO_HELPER_ADDTORESULTS] @SQL
,@FROM2
,@TO2
,@REVENUEFILTERID2;
if @debugging = 1
begin
set @debugMsg = CONVERT(varchar, (getdate() - @debugStartTime), 108) + ' get payments ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return
end catch;
end
if @debugging = 1
begin
set @debugMsg = 'BEFORE generating results ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end;
/** NOTE: What the following update statements do, could have been done when originally populating
the RESULTS temp table, or could be done in the subsequent output selection, BUT they are split out
here into separate update statements because it leads to better query plans and performance **/
update RESULTS
set ORIGTRANSACTIONAMOUNT = PLOA.TRANSACTIONAMOUNT
,ORIGTRANSACTIONCURRENCYID = PLOA.TRANSACTIONCURRENCYID
from #TMP_DATA_DONOR_INFO_RESULTS RESULTS
inner join dbo.PLEDGEORIGINALAMOUNT PLOA on RESULTS.TRANSACTIONID = PLOA.ID
where RESULTS.SPID = @@SPID
and RESULTS.TYPECODE = 1;
update RESULTS
set ORIGTRANSACTIONAMOUNT = PYOA.TRANSACTIONAMOUNT
,ORIGTRANSACTIONCURRENCYID = PYOA.TRANSACTIONCURRENCYID
from #TMP_DATA_DONOR_INFO_RESULTS RESULTS
inner join dbo.PAYMENTORIGINALAMOUNT PYOA on RESULTS.TRANSACTIONID = PYOA.ID
where RESULTS.SPID = @@SPID
and RESULTS.TYPECODE = 0;
if @debugging = 1
begin
set @debugMsg = CONVERT(varchar, (getdate() - @debugStartTime), 108) + ' updated original transaction amounts ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end;
--whether this is split is based on the entire financial transaction, not just what we are extracting
with ISSPLIT_CTE
as (
select [TRANSACTIONID] = FTL.FINANCIALTRANSACTIONID
,[ISSPLIT] = cast(case
when count(distinct SPLIT.DESIGNATIONID) > 1
then 1
else 0
end as bit)
from dbo.FINANCIALTRANSACTIONLINEITEM FTL
inner join dbo.REVENUESPLIT_EXT SPLIT on FTL.ID = SPLIT.ID
group by FTL.FINANCIALTRANSACTIONID
)
update RESULTS
set ISSPLIT = T.ISSPLIT
from #TMP_DATA_DONOR_INFO_RESULTS RESULTS
inner join ISSPLIT_CTE T on RESULTS.TRANSACTIONID = T.TRANSACTIONID
where RESULTS.SPID = @@SPID
and RESULTS.ISSPLIT = 0
if @debugging = 1
begin
set @debugMsg = CONVERT(varchar, (getdate() - @debugStartTime), 108) + ' updated issplit ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end;
select [TRANSACTIONID] = RESULTS.[TRANSACTIONID]
,[CONSTITUENTID] = [CONSTITUENTID]
,[DONOR] = C.FORMATTEDNAME + ' - Lookup ID: ' + C.LOOKUPID
,[DATE] = RESULTS.[DATE]
,[TRANSACTIONTYPE] = RESULTS.[TRANSACTIONTYPE]
,[AMOUNT] = RESULTS.[AMOUNT]
,[TOTALPAID] = RESULTS.[TOTALPAID]
,[WRITEOFFS] = RESULTS.[WRITEOFFS]
,[BALANCE] = RESULTS.[BALANCE]
,[NUMPAYMENTS] = RESULTS.[NUMPAYMENTS]
,[LASTPAYMENTDATE] = RESULTS.[LASTPAYMENTDATE]
,[ORIGTRANSACTIONAMOUNT] = RESULTS.[ORIGTRANSACTIONAMOUNT]
,[DESIGNATION] = RESULTS.[DESIGNATION]
,[CAMPAIGNS] = RESULTS.[CAMPAIGNS]
,[IMAGEKEY] = case
when RESULTS.ISSPLIT = 1
then case
when RESULTS.GIVENANONYMOUSLY = 1
then 'catalog:Blackbaud.AppFx.Fundraising.Catalog.dll,Blackbaud.AppFx.Fundraising.Catalog.split_gift_anonymous_16.png'
else 'catalog:Blackbaud.AppFx.Fundraising.Catalog.dll,Blackbaud.AppFx.Fundraising.Catalog.split_gift_16.png'
end
else case
when RESULTS.GIVENANONYMOUSLY = 1
then 'catalog:Blackbaud.AppFx.Fundraising.Catalog.dll,Blackbaud.AppFx.Fundraising.Catalog.gift_anonymous_16.png'
else null
end
end
,[ORIGTRANSACTIONCURRENCYID] = RESULTS.[ORIGTRANSACTIONCURRENCYID]
,[DESIGNATIONLEVELID] = @ID2
,null
,[ISORIGINALFUNDING] = isnull(DLR.ISORIGINALFUNDING, 0)
,[ISBENEFACTOR] = isnull(C.ISBENEFACTOR, 0)
,[TYPECODE] = RESULTS.TYPECODE
,[DETAILID] = cast(RESULTS.TRANSACTIONID as char(36)) + ';' + cast(@ID2 as char(36))
,[VIEWFORMID] = case RESULTS.TYPECODE
when 0 --PAYMENT
then 'b1bad889-4460-45aa-a7e5-4f1f6eeec9f3'
when 1 --PLEDGE
then '52cb69a9-5800-4b78-abb6-d6bf99a92f30'
when 6 --GRANT AWARD
then '52cb69a9-5800-4b78-abb6-d6bf99a92f30'
when 15 --MEMBERSHIP INSTALLMENT PLAN
then '52cb69a9-5800-4b78-abb6-d6bf99a92f30'
when 2 --RECURRING GIFT
then 'd0032bf4-4713-47db-a3aa-744979ae9d5b'
when 3 --MATCHING GIFT CLAIM
then '156d44e6-a256-4574-9829-739058268beb'
when 4 --PLANNED GIFT
then '156d44e6-a256-4574-9829-739058268beb'
when 7 --AUCTION DONATION
then '6e2bf7fd-5641-43ba-a1bb-b1ffa8384d25'
when 8 --DONOR CHALLENGE CLAIM
then '156d44e6-a256-4574-9829-739058268beb'
else '74f1a311-2ed9-4c0b-b666-9bf318748d9b'
end
,[APPLICATION] = RESULTS.[APPLICATION]
,[TRANSACTIONCURRENCYID] = RESULTS.[TRANSACTIONCURRENCYID]
from #TMP_DATA_DONOR_INFO_RESULTS RESULTS
inner join (
select case
when ISORGANIZATION = 1
then case KEYNAMEPREFIX
when ''
then KEYNAME
else KEYNAME + ', ' + KEYNAMEPREFIX
end
else RTRIM(RTRIM(RTRIM(KEYNAME + ' ') + ', ' + FIRSTNAME) + ' ' + dbo.UFN_MAKEINITIALS(MIDDLENAME))
end FORMATTEDNAME
,(CAST(isnull(KEYNAME, '') as nchar(100)) + CAST(isnull(KEYNAMEPREFIX, '') as nchar(50)) + CAST(isnull(FIRSTNAME, '') as nchar(50)) + CAST(isnull(MIDDLENAME, '') as nchar(50)) + CAST(isnull(LOOKUPID, '') as nchar(100))) NAMEFORSORT
,CONSTITUENT.ID
,CONSTITUENT.LOOKUPID
,DLD.ISBENEFACTOR
from dbo.CONSTITUENT
left join dbo.DESIGNATIONLEVELDONORINFORMATION DLD on DLD.CONSTITUENTID = CONSTITUENT.ID
and DLD.DESIGNATIONLEVELID = @ID2
) C on RESULTS.CONSTITUENTID = C.ID
left join dbo.DESIGNATIONLEVELREVENUEINFORMATION DLR on RESULTS.TRANSACTIONID = DLR.REVENUEID
and DLR.DESIGNATIONLEVELID = @ID2
where RESULTS.SPID = @@SPID
order by RESULTS.[DATE] desc
,RESULTS.AMOUNT desc
,C.NAMEFORSORT
if @debugging = 1
begin
set @debugMsg = CONVERT(varchar, (getdate() - @debugStartTime), 108) + ' generating results ';
set @debugStartTime = getdate();
raiserror (
@debugMsg
,0
,1
)
with nowait;
end;