USP_CONSTITUENT_GETGIVINGHISTORY_2
Returns the data for the Constituent Giving History List 2.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@INCLUDESOFTCREDIT | bit | IN | |
@NUMBERTOSHOWCODE | smallint | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@SITEFILTERMODE | tinyint | IN | |
@SITESSELECTED | xml | IN | |
@SECURITYFEATUREID | uniqueidentifier | IN | |
@SECURITYFEATURETYPE | tinyint | IN | |
@INCLUDEGROUPMEMBERGIVING | bit | IN | |
@CURRENCYCODE | tinyint | IN |
Definition
Copy
CREATE procedure dbo.USP_CONSTITUENT_GETGIVINGHISTORY_2
(
@CONSTITUENTID uniqueidentifier,
@INCLUDESOFTCREDIT bit,
@NUMBERTOSHOWCODE smallint,
@CURRENTAPPUSERID uniqueidentifier = null,
@SITEFILTERMODE tinyint = 0,
@SITESSELECTED xml = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@INCLUDEGROUPMEMBERGIVING bit = 0,
@CURRENCYCODE tinyint = null
) as
set nocount on;
declare @CURRENTDATE datetime = getdate();
declare @ISSYSADMIN bit = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
declare @NODATELIMITS bit = 0
if @NUMBERTOSHOWCODE in (0,1,2)
set @NODATELIMITS = 1;
declare @ENDDATE datetime = dbo.UFN_DATE_GETLATESTTIME(@CURRENTDATE);
declare @STARTDATE datetime =
CASE @NUMBERTOSHOWCODE
when 3 then dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,-29,@CURRENTDATE)) -- last 30 days
when 4 then dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,-89,@CURRENTDATE)) -- last 90 days
when 5 then dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,1,dateadd(year,-1,@CURRENTDATE))) -- last year
else @CURRENTDATE
end;
declare @NUMBERTOSHOW int;
set @NUMBERTOSHOW =
CASE @NUMBERTOSHOWCODE
when 1 then 5
when 2 then 10
else 1000000 -- an extremely large number that no donor's gift count will ever approach; i.e., show everything
end;
declare @CURRENCYID uniqueidentifier
declare @ORGTOMYBASEEXCHANGERATE uniqueidentifier = null
declare @MULTICURRENCYENABLED bit;
set @MULTICURRENCYENABLED = dbo.UFN_CONDITIONSETTING_EVALUATEEXISTSCONDITION('Multicurrency');
if @MULTICURRENCYENABLED = 0
set @CURRENCYCODE = 1
if @CURRENCYCODE = 1
set @CURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
if @CURRENCYCODE = 3
set @CURRENCYID = dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID);
-- ChrisFal, 12/17/09 - there is a performance trade-off that may need further testing: this CTE
-- avoids the perf hit from using TempDB, but places locks for the duration of this
-- sproc. The main alternative is to use a table variable, which takes the TempDB perf
-- hit but minimizes the locking.
with CONSTITUENTIDS_CTE as
(
select
@CONSTITUENTID ID, null DATEFROM, null DATETO
union all
select
GROUPMEMBER.MEMBERID ID, DATEFROM, DATETO
from
dbo.GROUPMEMBER
left join
dbo.GROUPMEMBERDATERANGE on GROUPMEMBERDATERANGE.GROUPMEMBERID = GROUPMEMBER.ID
where
@INCLUDEGROUPMEMBERGIVING = 1
and
GROUPMEMBER.GROUPID = @CONSTITUENTID
),
REV_CTE as
(
select
REVENUEID,
CONSTITUENTIDS_CTE.ID CONSTITUENTID,
sum(SPLITAMOUNT) AMOUNT,
TRANSACTIONTYPE,
TRANSACTIONTYPECODE,
[DATE],
REV.DATEADDED,
case when @INCLUDEGROUPMEMBERGIVING = 1 then (select NAME from dbo.CONSTITUENT where ID = CONSTITUENTIDS_CTE.ID) else null end CONSTITUENTNAME,
TRANSACTIONCURRENCYID,
BASECURRENCYID,
TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT
from
CONSTITUENTIDS_CTE
cross apply dbo.UFN_CONSTITUENT_GIVINGHISTORY_2(
CONSTITUENTIDS_CTE.ID,
@CURRENTAPPUSERID,
@SITEFILTERMODE,
@SITESSELECTED,
@SECURITYFEATUREID,
@SECURITYFEATURETYPE) REV
where
((CONSTITUENTIDS_CTE.DATEFROM is null or REV.DATE >= CONSTITUENTIDS_CTE.DATEFROM) and
(CONSTITUENTIDS_CTE.DATETO is null or REV.DATE <= CONSTITUENTIDS_CTE.DATETO))
and
(@NODATELIMITS = 1 or
REV.DATE between @STARTDATE and @ENDDATE)
group by
REVENUEID, CONSTITUENTIDS_CTE.ID, TRANSACTIONTYPE, TRANSACTIONTYPECODE, [DATE], REV.DATEADDED,TRANSACTIONCURRENCYID,BASECURRENCYID,TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT
)
select top(@NUMBERTOSHOW) * from (
select
REVENUEID ID,
CONSTITUENTID,
CONSTITUENTNAME,
REVENUEID as RECORDID,
REV.[DATE],
REV.DATEADDED,
case @CURRENCYCODE
when 0 then REV.AMOUNT
when 1 then REV.ORGANIZATIONAMOUNT
when 2 then REV.TRANSACTIONAMOUNT
when 3 then case @CURRENCYID
when REV.TRANSACTIONCURRENCYID then REV.TRANSACTIONAMOUNT
else dbo.UFN_REVENUE_GETAMOUNTINCURRENCY(REVENUEID,@CURRENCYID)
end
end as AMOUNT,
case TRANSACTIONTYPECODE
when 1 then case @CURRENCYCODE
when 0 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT_2(REVENUEID,0)
when 1 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT_2(REVENUEID,2)
when 2 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT_2(REVENUEID,1)
when 3 then case @CURRENCYID
when REV.TRANSACTIONCURRENCYID then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNT_2(REVENUEID,1)
else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGEGROSSAMOUNTINCURRENCY(REVENUEID,@CURRENCYID)
end
end
else case @CURRENCYCODE
when 0 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(REVENUEID,1,0)
when 1 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(REVENUEID,1,2)
when 2 then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(REVENUEID,1,1)
when 3 then case @CURRENCYID
when REV.TRANSACTIONCURRENCYID then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNT_2(REVENUEID,1,1)
else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEGROSSAMOUNTINCURRENCY(REVENUEID,1,@CURRENCYID)
end
end
end as GROSSAMOUNT,
case TRANSACTIONTYPECODE
when 1 then case @CURRENCYCODE
when 2 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(REVENUEID,REV.TRANSACTIONCURRENCYID)
when 0 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(REVENUEID,REV.BASECURRENCYID)
else
dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(REVENUEID,@CURRENCYID)
end
when 4 then case @CURRENCYCODE
when 2 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(REVENUEID,REV.TRANSACTIONCURRENCYID)
when 0 then dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(REVENUEID,REV.BASECURRENCYID)
else
dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(REVENUEID,@CURRENCYID)
end
else null
end as BALANCE,
TRANSACTIONTYPECODE,
TRANSACTIONTYPE,
isnull((select min(REVENUESPLIT.TYPE) from dbo.REVENUESPLIT where REVENUESPLIT.REVENUEID = REV.REVENUEID group by REVENUESPLIT.REVENUEID having min(REVENUESPLIT.TYPECODE)=max(REVENUESPLIT.TYPECODE)),'<Split>') REVENUETYPE,
dbo.UFN_REVENUE_DESIGNATIONLIST(REVENUEID) as DESIGNATION,
(
select
dbo.UDA_BUILDLIST(distinct CAMPAIGN.NAME)
from
dbo.CAMPAIGN
inner join
dbo.REVENUESPLITCAMPAIGN on CAMPAIGN.ID = REVENUESPLITCAMPAIGN.CAMPAIGNID
inner join
dbo.REVENUESPLIT on REVENUESPLITCAMPAIGN.REVENUESPLITID = REVENUESPLIT.ID
where
REVENUESPLIT.REVENUEID = REV.REVENUEID
) as CAMPAIGNS,
dbo.UFN_REVENUE_BUILDSITELIST(REVENUEID) SITES,
case @CURRENCYCODE
when 2 then REV.TRANSACTIONCURRENCYID
when 0 then REV.BASECURRENCYID
else @CURRENCYID
end as DISPLAYCURRENCY
from
REV_CTE REV) TOPREV
order by
DATE desc, DATEADDED desc, AMOUNT desc;