USP_GROUP_5YEARGIVINGGET
Returns the 5 year giving history for a group.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@DESIGNATIONLEVELCATEGORYCODEID | uniqueidentifier | IN | |
@DESIGNATIONID | uniqueidentifier | IN | |
@CAMPAIGNID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@SITEFILTERMODE | tinyint | IN | |
@SITESSELECTED | xml | IN | |
@SECURITYFEATUREID | uniqueidentifier | IN | |
@SECURITYFEATURETYPE | tinyint | IN | |
@CURRENCYCODE | tinyint | IN |
Definition
Copy
CREATE procedure dbo.USP_GROUP_5YEARGIVINGGET
(
@CONSTITUENTID uniqueidentifier,
@DESIGNATIONLEVELCATEGORYCODEID uniqueidentifier = null,
@DESIGNATIONID uniqueidentifier = null,
@CAMPAIGNID uniqueidentifier = null,
@CURRENTAPPUSERID 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 @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
declare @USERISSYSADMIN bit = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID)
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;
declare @ISHOUSEHOLD bit, @GROUPINCLUDESMEMBERGIVING bit;
select
@GROUPINCLUDESMEMBERGIVING =
case
when GD.GROUPTYPECODE = 0 then 1
when GD.GROUPTYPECODE = 1 then GT.INCLUDEMEMBERGIVING
end,
@ISHOUSEHOLD =
case
when GD.GROUPTYPECODE = 0 then 1
else 0
end
from dbo.GROUPDATA GD
left join dbo.GROUPTYPE GT on GD.GROUPTYPEID = GT.ID
where GD.ID=@CONSTITUENTID;
declare @STARTDATE datetime = dateadd(year,-5,dbo.UFN_DATE_THISFISCALYEAR_LASTDAY(@CURRENTDATE,1));
declare @ENDDATE datetime = dateadd(year,1,dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(@CURRENTDATE,0));
with MYSITESREV_CTE as
(
select
ID,
CONSTITUENTID,
TRANSACTIONTYPECODE,
DATE,
dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(DATE,0) FISCALYEAR
from
dbo.REVENUE
where
(
REVENUE.CONSTITUENTID = @CONSTITUENTID
or
REVENUE.CONSTITUENTID in
(
select GROUPMEMBER.MEMBERID
from dbo.GROUPMEMBER
where GROUPMEMBER.GROUPID = @CONSTITUENTID
)
)
and DATE > @STARTDATE
and DATE < @ENDDATE
and exists
(
select top 1 RSSUB.ID from dbo.REVENUESPLIT RSSUB
left join dbo.UFN_SITEID_MAPFROM_REVENUESPLITID_BULK() REVSITES on REVSITES.ID = RSSUB.ID
where RSSUB.REVENUEID = REVENUE.ID
/*next line is #SITEEXTENTION code*/
and (@USERISSYSADMIN = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[REVSITES].[SITEID] or (SITEID is null and [REVSITES].[SITEID] is null)))
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)
)
)
and exists
(
select top 1 1
from dbo.UFN_REVENUE_USERHASDESIGNATIONSITEACCESS_BULK(@CURRENTAPPUSERID) REVGRANTED
where
REVGRANTED.ID = REVENUE.ID
and REVGRANTED.ACCESSGRANTED = 1
)
)
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,
isnull(sum(
case
when @ISHOUSEHOLD = 1 and (TYPE = 0 or TYPE = 1) then TAXCLAIMAMOUNT
else 0
end
), 0) TAXCLAIMAMOUNT,
@CURRENCYISOCODE ISO4217,
@CURRENCYDECIMALDIGITS DECIMALDIGITS,
@CURRENCYSYMBOL CURRENCYSYMBOL,
@CURRENCYSYMBOLDISPLAYSETTINGCODE SYMBOLDISPLAYSETTINGCODE
from
(
-- group member gifts, pledges, or payments
select
MYSITESREV_CTE.ID as REVENUEID,
case
when MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE in (0, 3) then 0 -- Gift
when MYSITESREV_CTE.TRANSACTIONTYPECODE = 1 then 1 --Pledge
when MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 2 then 2 --Payment (Pledge payment)
when MYSITESREV_CTE.TRANSACTIONTYPECODE = 7 then 0 --Auction donation
end as TYPE,
REVENUESPLIT.AMOUNTINCURRENCY AMOUNT,
MYSITESREV_CTE.FISCALYEAR,
case when MYSITESREV_CTE.TRANSACTIONTYPECODE = 1 then (select dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID, @SELECTEDCURRENCYID)) else 0 end as PLEDGEBALANCE,
isnull(REVENUESPLITGIFTAID.TAXCLAIMAMOUNTINCURRENCY, 0) TAXCLAIMAMOUNT
from MYSITESREV_CTE
left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) REVENUESPLIT on REVENUESPLIT.REVENUEID = MYSITESREV_CTE.ID
inner join dbo.GROUPMEMBER GM on MYSITESREV_CTE.CONSTITUENTID = GM.MEMBERID
left join dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.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.REVENUESPLITCAMPAIGN on REVENUESPLIT.ID = REVENUESPLITCAMPAIGN.REVENUESPLITID
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
@GROUPINCLUDESMEMBERGIVING = 1
and GM.GROUPID = @CONSTITUENTID
and (@DESIGNATIONLEVELCATEGORYCODEID is null or @DESIGNATIONLEVELCATEGORYCODEID = DESIGNATIONLEVEL1.DESIGNATIONLEVELCATEGORYCODEID)
and (@DESIGNATIONID is null or DESIGNATION.ID = @DESIGNATIONID)
and (@CAMPAIGNID is null or REVENUESPLITCAMPAIGN.CAMPAIGNID = @CAMPAIGNID)
and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO >= MYSITESREV_CTE.DATE))
or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= MYSITESREV_CTE.DATE))
or (GMDR.DATEFROM <= MYSITESREV_CTE.DATE and GMDR.DATETO >= MYSITESREV_CTE.DATE))
union all
-- group gifts, pledges, or payments
select
MYSITESREV_CTE.ID as REVENUEID,
case
when MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE in (0, 3) then 0 -- Gift
when MYSITESREV_CTE.TRANSACTIONTYPECODE = 1 then 1 --Pledge
when MYSITESREV_CTE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 2 then 2 --Payment (Pledge payment)
when MYSITESREV_CTE.TRANSACTIONTYPECODE = 7 then 0 --Auction donation
end as TYPE,
REVENUESPLIT.AMOUNTINCURRENCY AMOUNT,
MYSITESREV_CTE.FISCALYEAR,
case when MYSITESREV_CTE.TRANSACTIONTYPECODE = 1 then (select dbo.UFN_PLEDGE_GETBALANCEINCURRENCY(MYSITESREV_CTE.ID, @SELECTEDCURRENCYID)) else 0 end as PLEDGEBALANCE,
0 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.REVENUESPLITCAMPAIGN on REVENUESPLIT.ID = REVENUESPLITCAMPAIGN.REVENUESPLITID
left join dbo.UFN_REVENUESPLITGIFTAID_GETELIGIBLE(1) ELIGIBLEREVENUESPLITGIFTAID on ELIGIBLEREVENUESPLITGIFTAID.ID = REVENUESPLIT.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 (@DESIGNATIONLEVELCATEGORYCODEID is null or @DESIGNATIONLEVELCATEGORYCODEID = DESIGNATIONLEVEL1.DESIGNATIONLEVELCATEGORYCODEID)
and (@DESIGNATIONID is null or DESIGNATION.ID = @DESIGNATIONID)
and (@CAMPAIGNID is null or REVENUESPLITCAMPAIGN.CAMPAIGNID = @CAMPAIGNID)
union all
-- group member write offs
select
MYSITESREV_CTE.ID as REVENUEID,
3 as TYPE, -- WRITE-OFF
WRITEOFFSPLIT.AMOUNTINCURRENCY as AMOUNT,
MYSITESREV_CTE.FISCALYEAR,
0 as PLEDGEBALANCE,
0 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
inner join dbo.GROUPMEMBER GM on MYSITESREV_CTE.CONSTITUENTID = GM.MEMBERID
left join dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GM.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
@GROUPINCLUDESMEMBERGIVING = 1
and GM.GROUPID = @CONSTITUENTID
and (@DESIGNATIONLEVELCATEGORYCODEID is null or @DESIGNATIONLEVELCATEGORYCODEID = DESIGNATIONLEVEL1.DESIGNATIONLEVELCATEGORYCODEID)
and (@DESIGNATIONID is null or DESIGNATION.ID = @DESIGNATIONID)
and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO >= MYSITESREV_CTE.DATE))
or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= MYSITESREV_CTE.DATE))
or (GMDR.DATEFROM <= MYSITESREV_CTE.DATE and GMDR.DATETO >= MYSITESREV_CTE.DATE))
union all
-- group write offs
select
MYSITESREV_CTE.ID as REVENUEID,
3 as TYPE, -- WRITE-OFF
WRITEOFFSPLIT.AMOUNTINCURRENCY as AMOUNT,
MYSITESREV_CTE.FISCALYEAR,
0 as PLEDGEBALANCE,
0 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 (@DESIGNATIONLEVELCATEGORYCODEID is null or @DESIGNATIONLEVELCATEGORYCODEID = DESIGNATIONLEVEL1.DESIGNATIONLEVELCATEGORYCODEID)
and (@DESIGNATIONID is null or DESIGNATION.ID = @DESIGNATIONID)
) as DATA
where TYPE is not NULL
group by FISCALYEAR;