USP_REPORT_TRIBUTEREVENUE
Returns tribute and associated revenue information.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DATETYPE | tinyint | IN | |
@DATERANGEDISPLAY | nvarchar(100) | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@TRIBUTEQUERY | uniqueidentifier | IN | |
@APPEALID | uniqueidentifier | IN | |
@DESIGNATIONID | uniqueidentifier | IN | |
@TRIBUTEID | uniqueidentifier | IN | |
@TRIBUTETYPECODEID | uniqueidentifier | IN | |
@ISUKINSTALLED | tinyint | IN | |
@REPORTUSERID | nvarchar(128) | IN | |
@CURRENCYCODE | tinyint | IN | |
@ALTREPORTUSERID | nvarchar(128) | IN |
Definition
Copy
CREATE procedure dbo.USP_REPORT_TRIBUTEREVENUE
(
@DATETYPE tinyint = null,
@DATERANGEDISPLAY nvarchar(100) = '',
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@TRIBUTEQUERY uniqueidentifier = null,
@APPEALID uniqueidentifier = null,
@DESIGNATIONID uniqueidentifier = null,
@TRIBUTEID uniqueidentifier = null,
@TRIBUTETYPECODEID uniqueidentifier = null,
@ISUKINSTALLED tinyint = null,
@REPORTUSERID nvarchar(128) = null,
@CURRENCYCODE tinyint = null, --3 = My base, (null, 1) = Organization
@ALTREPORTUSERID nvarchar(128) = null
)
with execute as owner
as
set nocount on;
declare @CURRENTAPPUSERID uniqueidentifier;
declare @ISADMIN bit;
declare @APPUSER_IN_NONRACROLE bit;
declare @APPUSER_IN_NOSECGROUPROLE bit;
declare @APPUSER_IN_NONSITEROLE bit;
declare @APPUSER_IN_NOSITEROLE bit;
set @CURRENTAPPUSERID = dbo.UFN_APPUSER_GETREPORTAPPUSERID(@REPORTUSERID, @ALTREPORTUSERID);
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 @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @SELECTEDCURRENCYID uniqueidentifier;
if @CURRENCYCODE = 3
begin
select @SELECTEDCURRENCYID = CURRENCYSET.BASECURRENCYID
from dbo.CURRENCYSET
where CURRENCYSET.ID = dbo.UFN_CURRENCYSET_GETAPPUSERCURRENCYSET(@CURRENTAPPUSERID);
end
else
begin
set @SELECTEDCURRENCYID = @ORGANIZATIONCURRENCYID;
end
declare @SELECTEDCURRENCYISO nvarchar(3);
declare @SELECTEDCURRENCYDECIMALDIGITS tinyint;
declare @SELECTEDCURRENCYSYMBOL nvarchar(5);
declare @SELECTEDCURRENCYSYMBOLDISPLAYSETTINGCODE tinyint;
declare @SELECTEDCURRENCYROUNDINGTYPECODE tinyint;
select
@SELECTEDCURRENCYISO = CURRENCYPROPERTIES.ISO4217,
@SELECTEDCURRENCYDECIMALDIGITS = CURRENCYPROPERTIES.DECIMALDIGITS,
@SELECTEDCURRENCYSYMBOL = CURRENCYPROPERTIES.CURRENCYSYMBOL,
@SELECTEDCURRENCYSYMBOLDISPLAYSETTINGCODE = CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE,
@SELECTEDCURRENCYROUNDINGTYPECODE = CURRENCYPROPERTIES.ROUNDINGTYPECODE
from
dbo.UFN_CURRENCY_GETPROPERTIES(@SELECTEDCURRENCYID) CURRENCYPROPERTIES
--Bug 130390 - AdamBu - Create a temp table for granted tributes.
create table #TRIBUTESGRANTED(
ID uniqueidentifier,
TRIBUTETEXT nvarchar(255) collate DATABASE_DEFAULT,
ISACTIVE bit,
DATEADDED datetime,
TRIBUTEEID uniqueidentifier
)
insert into #TRIBUTESGRANTED
select
ID,
TRIBUTETEXT,
ISACTIVE,
DATEADDED,
TRIBUTEEID
from dbo.TRIBUTE
where (@TRIBUTEID is null or TRIBUTE.ID = @TRIBUTEID)
and (@TRIBUTETYPECODEID is null or TRIBUTE.TRIBUTETYPECODEID = @TRIBUTETYPECODEID)
and (TRIBUTE.TRIBUTEEID is null
or @ISADMIN = 1
or(
(@APPUSER_IN_NONRACROLE = 1
or dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, TRIBUTE.TRIBUTEEID, @APPUSER_IN_NOSECGROUPROLE) = 1
)
and(@APPUSER_IN_NONSITEROLE = 1
or dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT_BYSITE(@CURRENTAPPUSERID, TRIBUTE.TRIBUTEEID, @APPUSER_IN_NOSITEROLE) = 1
)
)
)
--Bug 130390 - AdamBu - If a selection was given, remove the items in the temp table that are not in
-- that selection.
if @TRIBUTEQUERY is not null begin
if not exists(select ID from dbo.IDSETREGISTER where ID = @TRIBUTEQUERY)
raiserror('ID set does not exist in the database.', 13, 1);
declare @DBOBJECTNAME nvarchar(128);
declare @DBOBJECTTYPE smallint;
select @DBOBJECTNAME = DBOBJECTNAME,
@DBOBJECTTYPE = OBJECTTYPE
from dbo.IDSETREGISTER
where ID = @TRIBUTEQUERY;
if @DBOBJECTTYPE = 1
set @DBOBJECTNAME = @DBOBJECTNAME + '()';
else if @DBOBJECTTYPE = 2
set @DBOBJECTNAME = @DBOBJECTNAME + '(''' + convert(nvarchar(36), @TRIBUTEQUERY) + ''')';
declare @SELECTIONSQL nvarchar(max) = '
delete #TRIBUTESGRANTED
where ID not in(
select ID
from dbo.'+@DBOBJECTNAME+'
)'
exec sp_executesql @SELECTIONSQL
end
--Bug 130390 - AdamBu - Use a temp table to hold info about granteed revenue,
-- allowing us to cut down on the number of constituent security checks needed.
-- Site security checks are handled by joining to the designation table variable.
-- Joining to the tribute temp table simply to ensure we don't waste time checking
-- security on records that won't be used anyway.
create table #REVENUEGRANTED(
ID uniqueidentifier,
DATE datetime,
TRANSACTIONTYPE nvarchar(21) collate DATABASE_DEFAULT,
CONSTITUENTID uniqueidentifier,
APPEALID uniqueidentifier
)
insert into #REVENUEGRANTED
select distinct
REVENUE.ID,
REVENUE.DATE,
REVENUE.TRANSACTIONTYPE,
REVENUE.CONSTITUENTID,
REVENUE.APPEALID
from dbo.REVENUE with (nolock)
inner join dbo.REVENUETRIBUTE on REVENUETRIBUTE.REVENUEID=REVENUE.ID
inner join #TRIBUTESGRANTED TRIBUTESGRANTED on TRIBUTESGRANTED.ID = REVENUETRIBUTE.TRIBUTEID
where
(
@ISADMIN = 1
or
(
(
(@APPUSER_IN_NONRACROLE = 1
or dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, REVENUE.CONSTITUENTID, @APPUSER_IN_NOSECGROUPROLE) = 1
)
and(@APPUSER_IN_NONSITEROLE = 1 or
(
-- Evaluate constituent site security
dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT_BYSITE(@CURRENTAPPUSERID, REVENUE.CONSTITUENTID, @APPUSER_IN_NOSITEROLE) = 1 and
-- Evaluate revenue site security
exists
(
select HASPERMISSION
from dbo.UFN_SITEID_MAPFROM_REVENUEID(REVENUE.ID) REVSITES
cross apply dbo.UFN_REPORT_HASUSERSITEPERMISSION(@CURRENTAPPUSERID, '479282cc-a399-48b1-a484-84e09db40548', REVSITES.SITEID)
)
)
)
)
)
);
--Bug 130390 - AdamBu - Call bulk functions in CTEs, to avoid calling them more than necessary.
with CTE_REVENUETRIBUTEBULK
as (
select
ID,
REVENUEID,
TRIBUTEID,
AMOUNTINCURRENCY
from
dbo.UFN_REVENUETRIBUTE_GETAMOUNTSINCURRENCY_BULK(
@SELECTEDCURRENCYID,
@ORGANIZATIONCURRENCYID,
@SELECTEDCURRENCYDECIMALDIGITS,
@SELECTEDCURRENCYROUNDINGTYPECODE
)
),
CTE_REVENUETRIBUTEBULKTAXCLAIM
as (
select
ID,
AMOUNTINCURRENCY
from
dbo.UFN_REVENUETRIBUTETAXCLAIMAMOUNT_GETAMOUNTSINCURRENCY_BULK(
@SELECTEDCURRENCYID,
@ORGANIZATIONCURRENCYID,
@SELECTEDCURRENCYDECIMALDIGITS,
@SELECTEDCURRENCYROUNDINGTYPECODE
)
),
--Bug 130390 - AdamBu - Avoid using a subselect to calculate total amounts.
CTE_TRIBUTES
as (
select
TRIBUTEFILTER.ID,
TRIBUTEFILTER.TRIBUTETEXT,
TRIBUTEFILTER.ISACTIVE,
TRIBUTEFILTER.DATEADDED,
TRIBUTEFILTER.TRIBUTEEID,
isnull(sum(CTE_REVENUETRIBUTEBULK.AMOUNTINCURRENCY), 0) as TOTALREVENUETRIBUTEAMOUNT,
isnull(sum(CTE_REVENUETRIBUTEBULK.AMOUNTINCURRENCY + isnull(CTE_REVENUETRIBUTEBULKTAXCLAIM.AMOUNTINCURRENCY, 0)), 0) as TOTALGROSSAMOUNT
from #TRIBUTESGRANTED TRIBUTEFILTER
inner join CTE_REVENUETRIBUTEBULK on CTE_REVENUETRIBUTEBULK.TRIBUTEID = TRIBUTEFILTER.ID
inner join #REVENUEGRANTED REVENUEGRANTED on CTE_REVENUETRIBUTEBULK.REVENUEID = REVENUEGRANTED.ID
left join CTE_REVENUETRIBUTEBULKTAXCLAIM on CTE_REVENUETRIBUTEBULK.ID = CTE_REVENUETRIBUTEBULKTAXCLAIM.ID
group by
TRIBUTEFILTER.ID,
TRIBUTEFILTER.TRIBUTETEXT,
TRIBUTEFILTER.ISACTIVE,
TRIBUTEFILTER.DATEADDED,
TRIBUTEFILTER.TRIBUTEEID
)
select
'http://www.blackbaud.com/TRIBUTEID?TRIBUTEID=' + CONVERT(nvarchar(36), CTE_TRIBUTES.ID) as TRIBUTEID,
'http://www.blackbaud.com/DONORID?DONORID=' + CONVERT(nvarchar(36), DONOR.ID) as DONORID,
'http://www.blackbaud.com/TRIBUTEEID?TRIBUTEEID=' + CONVERT(nvarchar(36), TRIBUTEE.ID) as TRIBUTEEID,
'http://www.blackbaud.com/REVENUETRANSACTIONID?REVENUETRANSACTIONID=' + CONVERT(nvarchar(36), REVENUEGRANTED.ID) as REVENUETRANSACTIONID,
CTE_TRIBUTES.ID,
CTE_TRIBUTES.TRIBUTETEXT,
TRIBUTEE_NF.NAME as TRIBUTEENAME,
TRIBUTEE.KEYNAME as TRIBUTEEKEYNAME,
TRIBUTEE.FIRSTNAME as TRIBUTEEFIRSTNAME,
CTE_TRIBUTES.ISACTIVE,
CTE_TRIBUTES.DATEADDED as DATECREATED,
CTE_TRIBUTES.TOTALREVENUETRIBUTEAMOUNT,
CTE_REVENUETRIBUTEBULK.AMOUNTINCURRENCY as REVENUETRIBUTEAMOUNT,
CTE_TRIBUTES.TOTALGROSSAMOUNT,
CTE_REVENUETRIBUTEBULK.AMOUNTINCURRENCY + CTE_REVENUETRIBUTEBULKTAXCLAIM.AMOUNTINCURRENCY as GROSSAMOUNT,
REVENUEGRANTED.TRANSACTIONTYPE as REVENUETYPE,
DONOR_NF.NAME as DONORNAME,
DONOR.KEYNAME as DONORKEYNAME,
DONOR.FIRSTNAME as DONORFIRSTNAME,
REVENUEGRANTED.DATE as REVENUEDATE,
@SELECTEDCURRENCYID SELECTEDCURRENCYID,
@SELECTEDCURRENCYISO as SELECTEDCURRENCYISO,
@SELECTEDCURRENCYDECIMALDIGITS as SELECTEDCURRENCYDECIMALDIGITS,
@SELECTEDCURRENCYSYMBOL as SELECTEDCURRENCYSYMBOL,
@SELECTEDCURRENCYSYMBOLDISPLAYSETTINGCODE as SELECTEDCURRENCYSYMBOLDISPLAYSETTINGCODE
from CTE_TRIBUTES
inner join CTE_REVENUETRIBUTEBULK on CTE_TRIBUTES.ID = CTE_REVENUETRIBUTEBULK.TRIBUTEID
inner join #REVENUEGRANTED REVENUEGRANTED on CTE_REVENUETRIBUTEBULK.REVENUEID = REVENUEGRANTED.ID
left join dbo.CONSTITUENT TRIBUTEE with (nolock) on CTE_TRIBUTES.TRIBUTEEID = TRIBUTEE.ID
left join dbo.CONSTITUENT DONOR with (nolock) on REVENUEGRANTED.CONSTITUENTID = DONOR.ID
left join CTE_REVENUETRIBUTEBULKTAXCLAIM on CTE_REVENUETRIBUTEBULK.ID = CTE_REVENUETRIBUTEBULKTAXCLAIM.ID
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(TRIBUTEE.ID) TRIBUTEE_NF
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(DONOR.ID) DONOR_NF
where
(@STARTDATE is null or REVENUEGRANTED.DATE >= dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE))
and (@ENDDATE is null or REVENUEGRANTED.DATE <= dbo.UFN_DATE_GETLATESTTIME(@ENDDATE))
and (@APPEALID is null or REVENUEGRANTED.APPEALID = @APPEALID)
and (@DESIGNATIONID is null or exists (select ID from dbo.REVENUESPLIT where DESIGNATIONID = @DESIGNATIONID and REVENUEID = REVENUEGRANTED.ID))
order by CTE_TRIBUTES.TRIBUTETEXT,TRIBUTEE.KEYNAME,TRIBUTEE.FIRSTNAME,CTE_TRIBUTES.DATEADDED,DONOR.KEYNAME,DONOR.FIRSTNAME
drop table #TRIBUTESGRANTED
drop table #REVENUEGRANTED