USP_CONSTITUENT_5YEARGIVINGGET
Returns the 5 year giving history for a constituent.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@DESIGNATIONLEVELCATEGORYCODEID | uniqueidentifier | IN | |
@DESIGNATIONID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@CAMPAIGNID | uniqueidentifier | IN | |
@SITEFILTERMODE | tinyint | IN | |
@SITESSELECTED | xml | IN | |
@SECURITYFEATUREID | uniqueidentifier | IN | |
@SECURITYFEATURETYPE | tinyint | IN | |
@CURRENCYCODE | tinyint | IN |
Definition
Copy
CREATE procedure dbo.USP_CONSTITUENT_5YEARGIVINGGET
(
@CONSTITUENTID uniqueidentifier,
@DESIGNATIONLEVELCATEGORYCODEID uniqueidentifier = null,
@DESIGNATIONID uniqueidentifier = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@CAMPAIGNID uniqueidentifier = null,
@SITEFILTERMODE tinyint = 0,
@SITESSELECTED xml = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@CURRENCYCODE tinyint = 1 -- (1, null) = organization, 3 = my base
)
as
set nocount on;
declare @ISADMIN bit;
declare @APPUSER_IN_NONRACROLE bit;
declare @APPUSER_IN_NOSECGROUPROLE bit;
declare @APPUSER_IN_NONSITEROLE bit;
declare @APPUSER_IN_NOSITEROLE bit;
set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
set @APPUSER_IN_NONRACROLE = dbo.UFN_SECURITY_APPUSER_IN_NONRACROLE(@CURRENTAPPUSERID);
set @APPUSER_IN_NOSECGROUPROLE = dbo.UFN_SECURITY_APPUSER_IN_NO_SECURITY_GROUP_ROLE(@CURRENTAPPUSERID);
set @APPUSER_IN_NONSITEROLE = dbo.UFN_SECURITY_APPUSER_IN_NONSITEROLE(@CURRENTAPPUSERID);
set @APPUSER_IN_NOSITEROLE = dbo.UFN_SECURITY_APPUSER_IN_NO_SITE_ROLE(@CURRENTAPPUSERID);
declare @RANGESTARTDATE datetime;
set @RANGESTARTDATE = dateadd(year,-5,dbo.UFN_DATE_THISFISCALYEAR_LASTDAY(getdate(),1));
declare @RANGEENDDATE datetime;
set @RANGEENDDATE = dateadd(year,1,dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(getdate(),0));
declare @CURRENTDATEEARLIESTTIME datetime
set @CURRENTDATEEARLIESTTIME = dbo.UFN_DATE_GETEARLIESTTIME(getdate());
declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @SELECTEDCURRENCYID uniqueidentifier;
if @CURRENCYCODE = 3
begin
if dbo.UFN_CURRENCYSET_GETAPPUSERCURRENCYSET(@CURRENTAPPUSERID) is not null
begin
select @SELECTEDCURRENCYID = CURRENCYSET.BASECURRENCYID
from dbo.CURRENCYSET
where
CURRENCYSET.ID = dbo.UFN_CURRENCYSET_GETAPPUSERCURRENCYSET(@CURRENTAPPUSERID);
end
else
begin
select @SELECTEDCURRENCYID = CURRENCYSET.BASECURRENCYID
from dbo.CURRENCYSET
where
CURRENCYSET.ID = dbo.UFN_CURRENCYSET_GETAPPUSERDEFAULTCURRENCYSET();
end
end
else
set @SELECTEDCURRENCYID = @ORGANIZATIONCURRENCYID;
declare @CURRENCYISOCODE nvarchar(3);
declare @CURRENCYDECIMALDIGITS tinyint;
declare @CURRENCYSYMBOL nvarchar(5);
declare @CURRENCYSYMBOLDISPLAYSETTINGCODE tinyint;
declare @CURRENCYROUNDINGTYPECODE tinyint;
select
@CURRENCYISOCODE = CURRENCYPROPERTIES.ISO4217,
@CURRENCYDECIMALDIGITS = CURRENCYPROPERTIES.DECIMALDIGITS,
@CURRENCYSYMBOL = CURRENCYPROPERTIES.CURRENCYSYMBOL,
@CURRENCYSYMBOLDISPLAYSETTINGCODE = CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE,
@CURRENCYROUNDINGTYPECODE = CURRENCYPROPERTIES.ROUNDINGTYPECODE
from
dbo.UFN_CURRENCY_GETPROPERTIES(@SELECTEDCURRENCYID) CURRENCYPROPERTIES;
with MYSITESREV_CTE as
(
select
ID,
CONSTITUENTID,
TRANSACTIONTYPECODE,
DATE
from
dbo.REVENUE
where
REVENUE.CONSTITUENTID = @CONSTITUENTID
and exists
(
select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
cross apply dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(RSSUB.ID) REVSITES
where
RSSUB.REVENUEID = REVENUE.ID
-- Using a case statement since the standard site extension filters
-- resulted in a poor plan
and case
when dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 then 1
when exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)) then 1
else 0
end = 1
and
(
@SITEFILTERMODE = 0
or
exists(select UFN_SITE_BUILDDATALISTSITEFILTER.SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) where UFN_SITE_BUILDDATALISTSITEFILTER.SITEID = REVSITES.SITEID)
)
)
)
select
FISCALYEAR,
sum(case when TYPE in (0) then AMOUNT else 0 end) as GIFTS, -- (Gift)
sum(case when TYPE in (1) then AMOUNT else 0 end) as PLEDGES, -- (Pledge)
sum(case when TYPE in (2) then AMOUNT else 0 end) as PAYMENTS, -- (Pledge Payments)
sum(case when TYPE = 3 then AMOUNT else 0 end) as WRITEOFFS,
count(distinct case when TYPE in (0, 1) then REVENUEID else null end) as NUMBER,
sum(PLEDGEBALANCE) as PLEDGEBALANCE,
sum(TAXCLAIMAMOUNT) as TAXCLAIMAMOUNT,
@CURRENCYISOCODE ISO4217,
@CURRENCYDECIMALDIGITS DECIMALDIGITS,
@CURRENCYSYMBOL CURRENCYSYMBOL,
@CURRENCYSYMBOLDISPLAYSETTINGCODE SYMBOLDISPLAYSETTINGCODE
from
(
select
MYSITESREV_CTE.ID as REVENUEID,
case
when (MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and (REVENUESPLIT.APPLICATIONCODE in (0,3) or (REVENUESPLIT.APPLICATIONCODE = 1 and REVENUESPLIT.TYPECODE = 0))) then 0 -- Gift
when (MYSITESREV_CTE.TRANSACTIONTYPECODE = 1) then 1 -- Pledge
when (MYSITESREV_CTE.TRANSACTIONTYPECODE = 7) then 0 -- Auction donation
when (MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 2) then 2 -- Payment (Pledge payment)
end as TYPE,
REVENUESPLIT.AMOUNTINCURRENCY AMOUNT,
dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(MYSITESREV_CTE.DATE,0) FISCALYEAR,
-- Bug 24790 - AdamBu 3/17/09 - Corrected the condition on which we get pledge balance.
case when MYSITESREV_CTE.TRANSACTIONTYPECODE = 1 then (select dbo.UFN_PLEDGE_GETDESIGNATIONBALANCEINCURRENCY(MYSITESREV_CTE.ID, REVENUESPLIT.DESIGNATIONID, @SELECTEDCURRENCYID)) else 0 end as PLEDGEBALANCE,
case
-- Gift or Pledge
when (MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and (REVENUESPLIT.APPLICATIONCODE in (0,3) or (REVENUESPLIT.APPLICATIONCODE = 1 and REVENUESPLIT.TYPECODE = 0))) or (MYSITESREV_CTE.TRANSACTIONTYPECODE = 1)
then isnull(REVENUESPLITGIFTAID.TAXCLAIMAMOUNTINCURRENCY, 0)
else 0
end as TAXCLAIMAMOUNT
from MYSITESREV_CTE
left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) REVENUESPLIT on REVENUESPLIT.REVENUEID = MYSITESREV_CTE.ID
left join dbo.DESIGNATION DESIGNATION on DESIGNATION.ID = REVENUESPLIT.DESIGNATIONID
left join dbo.DESIGNATIONLEVEL DESIGNATIONLEVEL1 on DESIGNATIONLEVEL1.ID =
case
when DESIGNATION.DESIGNATIONLEVEL5ID is not null then DESIGNATION.DESIGNATIONLEVEL5ID
when DESIGNATION.DESIGNATIONLEVEL4ID is not null then DESIGNATION.DESIGNATIONLEVEL4ID
when DESIGNATION.DESIGNATIONLEVEL3ID is not null then DESIGNATION.DESIGNATIONLEVEL3ID
when DESIGNATION.DESIGNATIONLEVEL2ID is not null then DESIGNATION.DESIGNATIONLEVEL2ID
else DESIGNATION.DESIGNATIONLEVEL1ID
end
left join dbo.UFN_REVENUESPLITGIFTAID_GETELIGIBLE(1) ELIGIBLEREVENUESPLITGIFTAID on ELIGIBLEREVENUESPLITGIFTAID.ID = REVENUESPLIT.ID
left join dbo.UFN_REVENUESPLITGIFTAID_GETAMOUNTSINCURRENCY_BULK(@SELECTEDCURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) REVENUESPLITGIFTAID on REVENUESPLITGIFTAID.ID = ELIGIBLEREVENUESPLITGIFTAID.ID
left join dbo.UFN_PLEDGE_GETDESIGNATIONBALANCEINCURRENCY_BULK(@SELECTEDCURRENCYID) DESIGNATIONPLEDGEBALANCE on DESIGNATIONPLEDGEBALANCE.ID = MYSITESREV_CTE.ID and DESIGNATIONPLEDGEBALANCE.DESIGNATIONID = DESIGNATION.ID
where
MYSITESREV_CTE.CONSTITUENTID = @CONSTITUENTID and
MYSITESREV_CTE.DATE > @RANGESTARTDATE and
MYSITESREV_CTE.DATE < @RANGEENDDATE and
(@DESIGNATIONLEVELCATEGORYCODEID is null or @DESIGNATIONLEVELCATEGORYCODEID = DESIGNATIONLEVEL1.DESIGNATIONLEVELCATEGORYCODEID) and
(@DESIGNATIONID is null or DESIGNATION.ID = @DESIGNATIONID) and
(@CAMPAIGNID is null or exists(select top 1 RSC.ID from REVENUESPLITCAMPAIGN RSC where RSC.CAMPAIGNID = @CAMPAIGNID))
and (@ISADMIN = 1 or
(
(@APPUSER_IN_NONRACROLE = 1 or
dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, MYSITESREV_CTE.CONSTITUENTID, @APPUSER_IN_NOSECGROUPROLE) = 1)
and
(@APPUSER_IN_NONSITEROLE = 1 or
dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT_BYSITE(@CURRENTAPPUSERID, MYSITESREV_CTE.CONSTITUENTID, @APPUSER_IN_NOSITEROLE) = 1)
)
)
union all
select
MYSITESREV_CTE.ID as REVENUEID,
3 as TYPE, -- WRITE-OFF
WRITEOFFSPLIT.AMOUNTINCURRENCY as AMOUNT,
dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(MYSITESREV_CTE.DATE,0) FISCALYEAR,
0 as PLEDGEBALANCE,
0 as TAXCLAIMAMOUNT
from dbo.UFN_WRITEOFFSPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) WRITEOFFSPLIT
left join dbo.WRITEOFF WO on WRITEOFFSPLIT.WRITEOFFID = WO.ID
left join MYSITESREV_CTE on WO.REVENUEID = MYSITESREV_CTE.ID
left join dbo.DESIGNATION DESIGNATION on DESIGNATION.ID = WRITEOFFSPLIT.DESIGNATIONID
left join dbo.DESIGNATIONLEVEL DESIGNATIONLEVEL1 on DESIGNATIONLEVEL1.ID =
case
when DESIGNATION.DESIGNATIONLEVEL5ID is not null then DESIGNATION.DESIGNATIONLEVEL5ID
when DESIGNATION.DESIGNATIONLEVEL4ID is not null then DESIGNATION.DESIGNATIONLEVEL4ID
when DESIGNATION.DESIGNATIONLEVEL3ID is not null then DESIGNATION.DESIGNATIONLEVEL3ID
when DESIGNATION.DESIGNATIONLEVEL2ID is not null then DESIGNATION.DESIGNATIONLEVEL2ID
else DESIGNATION.DESIGNATIONLEVEL1ID
end
where
MYSITESREV_CTE.CONSTITUENTID = @CONSTITUENTID and
MYSITESREV_CTE.DATE > @RANGESTARTDATE and
MYSITESREV_CTE.DATE < @RANGEENDDATE and
MYSITESREV_CTE.TRANSACTIONTYPECODE = 1 and -- Do not include write-offs for other revenue types
(@DESIGNATIONLEVELCATEGORYCODEID is null or @DESIGNATIONLEVELCATEGORYCODEID = DESIGNATIONLEVEL1.DESIGNATIONLEVELCATEGORYCODEID) and
(@DESIGNATIONID is null or DESIGNATION.ID = @DESIGNATIONID)
and (@ISADMIN = 1 or
(
(@APPUSER_IN_NONRACROLE = 1 or
dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, MYSITESREV_CTE.CONSTITUENTID, @APPUSER_IN_NOSECGROUPROLE) = 1)
and
(@APPUSER_IN_NONSITEROLE = 1 or
dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT_BYSITE(@CURRENTAPPUSERID, MYSITESREV_CTE.CONSTITUENTID, @APPUSER_IN_NOSITEROLE) = 1)
)
)
) as DATA
where TYPE is not NULL
group by FISCALYEAR
order by FISCALYEAR;