USP_REPORT_REVENUEANNUALSTATEMENT
Returns the data for the Revenue Annual Statement report.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUETRANSACTIONQUERY | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@REPORTUSERID | nvarchar(128) | IN | |
@ALTREPORTUSERID | nvarchar(128) | IN |
Definition
Copy
CREATE procedure [dbo].[USP_REPORT_REVENUEANNUALSTATEMENT]
(
@REVENUETRANSACTIONQUERY uniqueidentifier = null,
@CONSTITUENTID uniqueidentifier = null,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@REPORTUSERID nvarchar(128) = null,
@ALTREPORTUSERID nvarchar(128) = null
)
with execute as owner
as
set nocount on;
set transaction isolation level read uncommitted;
declare @CURRENTAPPUSERID uniqueidentifier;
declare @ISADMIN bit;
declare @APPUSER_IN_NONRACROLE bit;
declare @APPUSER_IN_NOSECGROUPROLE bit;
declare @APPUSER_IN_NONSITEROLE 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 @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);
declare @CHECKSITESECURITY bit = 1;
declare @BASICPROGRAMSINSTALLED bit = 0;
if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('BB1C17BC-9E0B-4683-B490-EE40D511FA05') = 1
set @BASICPROGRAMSINSTALLED = 1;
if @ISADMIN = 1 or @APPUSER_IN_NONSITEROLE = 1
set @CHECKSITESECURITY = 0;
else if not exists(select top 1 1 from dbo.[SITE])
set @CHECKSITESECURITY = 0;
declare @SQLTOEXEC nvarchar(max);
declare @DBOBJECTNAME nvarchar(128);
declare @DBOBJECTTYPE smallint;
if @REVENUETRANSACTIONQUERY is not null begin
if not exists(select ID from dbo.IDSETREGISTER where ID = @REVENUETRANSACTIONQUERY) raiserror('ID set does not exist in the database.', 15, 1);
select @DBOBJECTNAME = DBOBJECTNAME, @DBOBJECTTYPE = OBJECTTYPE from dbo.IDSETREGISTER where ID = @REVENUETRANSACTIONQUERY;
if @DBOBJECTTYPE = 1 set @DBOBJECTNAME = @DBOBJECTNAME + '()';
else if @DBOBJECTTYPE = 2 set @DBOBJECTNAME = @DBOBJECTNAME + '(''' + convert(nvarchar(36), @REVENUETRANSACTIONQUERY) + ''')';
end
set @SQLTOEXEC =
';with REVENUE_CTE as (
select
c.ID,
case c.ISORGANIZATION when 1 then
case c.KEYNAMEPREFIX when '''' then c.KEYNAME else c.KEYNAMEPREFIX + '' '' + c.KEYNAME end
else
case c.ISGROUP when 1 then
case c.DISPLAYNAME when '''' then c.KEYNAME else c.DISPLAYNAME end
else
case c.FIRSTNAME when '''' then '''' else c.FIRSTNAME + '' '' end
+
case c.MIDDLENAME when '''' then '''' else LEFT(c.MIDDLENAME,1) + ''. '' end
+
c.KEYNAME
end
end as NAME,
case when a.ID is null then null else dbo.UFN_BUILDFULLADDRESS(a.ID, a.ADDRESSBLOCK, a.CITY, a.STATEID, a.POSTCODE, a.COUNTRYID) end [ADDRESS],
FINANCIALTRANSACTION.DATE,
case FINANCIALTRANSACTION.TYPECODE
when 0 then N''Payment''
when 1 then N''Pledge''
when 2 then N''Recurring gift''
when 3 then N''Matching gift claim''
when 4 then N''Planned gift''
when 5 then N''Order''
when 6 then N''Grant award''
when 7 then N''Auction donation''
when 8 then N''Donor challenge claim''
when 9 then N''Pending gift''
end as TRANSACTIONTYPE,
FINANCIALTRANSACTION.TRANSACTIONAMOUNT,
(select top 1 RR.RECEIPTNUMBER from dbo.REVENUERECEIPT RR where RR.REVENUEID = FINANCIALTRANSACTION.ID order by RR.RECEIPTPROCESSDATE desc) as RECEIPTNUMBER,
REVENUE_EXT.RECEIPTAMOUNT,
CURRENCY.ISO4217 [ISOCURRENCYCODE],
CURRENCY.CURRENCYSYMBOL,
CURRENCY.SYMBOLDISPLAYSETTINGCODE [CURRENCYSYMBOLDISPLAYSETTINGCODE],
CURRENCY.DECIMALDIGITS,
FINANCIALTRANSACTION.[ID] as [REVENUEID],
c.KEYNAME,
c.FIRSTNAME,
c.MIDDLENAME
from
dbo.FINANCIALTRANSACTION with (NOLOCK)
inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
inner join dbo.CONSTITUENT c with (NOLOCK) on FINANCIALTRANSACTION.CONSTITUENTID = c.ID
left join dbo.ADDRESS a with (NOLOCK) on a.CONSTITUENTID = c.ID and a.ISPRIMARY = 1
inner join dbo.CURRENCY on FINANCIALTRANSACTION.TRANSACTIONCURRENCYID = CURRENCY.ID' + nchar(13);
if @REVENUETRANSACTIONQUERY is not null
set @SQLTOEXEC += 'inner join dbo.' + @DBOBJECTNAME + ' as SELECTION on FINANCIALTRANSACTION.[ID] = SELECTION.[ID]' + nchar(13);
set @SQLTOEXEC += 'where (FINANCIALTRANSACTION.[TYPECODE] in (0,7))
and FINANCIALTRANSACTION.DELETEDON is null' + nchar(13);
if @CHECKSITESECURITY = 1
set @SQLTOEXEC += '
and exists(
select FINANCIALTRANSACTIONLINEITEM.ID
from dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID=FINANCIALTRANSACTION.ID
and (
(REVENUESPLIT_EXT.APPLICATIONCODE=1
and REVENUESPLIT_EXT.TYPECODE=1
and dbo.UFN_EVENTREGISTRANTPAYMENT_USERHASSITEACCESS(FINANCIALTRANSACTIONLINEITEM.ID,@CURRENTAPPUSERID) = 1
)
or(
not(
REVENUESPLIT_EXT.APPLICATIONCODE=1
and REVENUESPLIT_EXT.TYPECODE=1
)))
and exists
(
select HASPERMISSION
from dbo.UFN_SITEID_MAPFROM_REVENUEID(FINANCIALTRANSACTION.ID) REVSITES
cross apply dbo.UFN_REPORT_HASUSERSITEPERMISSION(@CURRENTAPPUSERID, ''FAB95CFF-3EED-4AC4-84D5-F586DDA61AB6'', REVSITES.SITEID)
)) ';
if @STARTDATE is not null
set @SQLTOEXEC += 'and (FINANCIALTRANSACTION.DATE >= @STARTDATE)' + nchar(13);
if @ENDDATE is not null
set @SQLTOEXEC += 'and (FINANCIALTRANSACTION.DATE <= @ENDDATE)' + nchar(13);
if @CONSTITUENTID is not null
set @SQLTOEXEC += 'and (c.ID = @CONSTITUENTID)' + nchar(13);
if not (@ISADMIN = 1 or @APPUSER_IN_NONRACROLE = 1 or (@CONSTITUENTID is not null and dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, @CONSTITUENTID, @APPUSER_IN_NOSECGROUPROLE) = 1))
set @SQLTOEXEC += 'and (dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, c.ID, @APPUSER_IN_NOSECGROUPROLE) = 1)' + nchar(13);
set @SQLTOEXEC += ')' + nchar(13);
if @BASICPROGRAMSINSTALLED = 1
set @SQLTOEXEC += ',
REFUND_CTE as (
select
coalesce([CREDITPAYMENT].[REVENUEID], [FINANCIALTRANSACTIONLINEITEM].[FINANCIALTRANSACTIONID]) as [REVENUEID],
[CREDITPAYMENT].[AMOUNT],
[FINANCIALTRANSACTION].[CONSTITUENTID],
dbo.UFN_BUILDFULLADDRESS(ADDRESS.ID, ADDRESS.ADDRESSBLOCK, ADDRESS.CITY, ADDRESS.STATEID, ADDRESS.POSTCODE, ADDRESS.COUNTRYID) [ADDRESS],
[FINANCIALTRANSACTION].[DATEADDED] as DATE,
[FINANCIALTRANSACTIONLINEITEM].[ID] as [REVENUESPLITID],
[CREDITPAYMENT].[ID] as [CREDITPAYMENTID],
[CONSTITUENT].[KEYNAME],
[CONSTITUENT].[FIRSTNAME],
[CONSTITUENT].[MIDDLENAME],
case [CONSTITUENT].ISORGANIZATION when 1 then
case [CONSTITUENT].KEYNAMEPREFIX when '''' then [CONSTITUENT].KEYNAME else [CONSTITUENT].KEYNAMEPREFIX + '' '' + [CONSTITUENT].KEYNAME end
else
case [CONSTITUENT].ISGROUP when 1 then
case [CONSTITUENT].DISPLAYNAME when '''' then [CONSTITUENT].KEYNAME else [CONSTITUENT].DISPLAYNAME end
else
case [CONSTITUENT].FIRSTNAME when '''' then '''' else [CONSTITUENT].FIRSTNAME + '' '' end
+
case [CONSTITUENT].MIDDLENAME when '''' then '''' else LEFT([CONSTITUENT].MIDDLENAME,1) + ''. '' end
+
[CONSTITUENT].KEYNAME
end
end as NAME
from dbo.[CREDITPAYMENT]
inner join dbo.[FINANCIALTRANSACTION] on [CREDITPAYMENT].[CREDITID] = [FINANCIALTRANSACTION].[ID]
inner join dbo.[CONSTITUENT] on [CONSTITUENT].[ID] = [FINANCIALTRANSACTION].[CONSTITUENTID]
left join dbo.[FINANCIALTRANSACTIONLINEITEM] on [CREDITPAYMENT].[REVENUESPLITID] = [FINANCIALTRANSACTIONLINEITEM].[ID]
left join dbo.[ADDRESS] with (NOLOCK) on [ADDRESS].[CONSTITUENTID] = [FINANCIALTRANSACTION].[CONSTITUENTID] and [ADDRESS].[ISPRIMARY] = 1
where FINANCIALTRANSACTION.DELETEDON is null
and FINANCIALTRANSACTION.TYPECODE in (0,1,2,3,4,5,6,7,8,9)
and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
)' + nchar(13);
set @SQLTOEXEC += '
select
[ID],
[NAME],
[ADDRESS],
convert(datetime,[DATE]) as [DATE],
[TRANSACTIONTYPE],
[TRANSACTIONAMOUNT],
[RECEIPTNUMBER],
[RECEIPTAMOUNT],
[ISOCURRENCYCODE],
[CURRENCYSYMBOL],
[CURRENCYSYMBOLDISPLAYSETTINGCODE],
[DECIMALDIGITS],
[KEYNAME],
[FIRSTNAME],
[MIDDLENAME]
from REVENUE_CTE' + nchar(13);
if @BASICPROGRAMSINSTALLED = 1
set @SQLTOEXEC += '
union all
select
[REFUNDS].[CONSTITUENTID],
[REFUNDS].[NAME],
[REFUNDS].[ADDRESS],
convert(datetime,[REFUNDS].[DATE]),
[REVENUE].[TRANSACTIONTYPE] as [TRANSACTIONTYPE],
-1 * [REFUNDS].[AMOUNT],
null as [RECEIPTNUMBER],
-1 * dbo.UFN_CREDITPAYMENT_GETRECEIPTAMOUNT([REFUNDS].[CREDITPAYMENTID]) as [RECEIPTAMOUNT],
[REVENUE].[ISOCURRENCYCODE],
[REVENUE].[CURRENCYSYMBOL],
[REVENUE].[CURRENCYSYMBOLDISPLAYSETTINGCODE],
[REVENUE].[DECIMALDIGITS],
[REFUNDS].[KEYNAME],
[REFUNDS].[FIRSTNAME],
[REFUNDS].[MIDDLENAME]
from REFUND_CTE [REFUNDS]
inner join REVENUE_CTE [REVENUE] on [REFUNDS].[REVENUEID] = [REVENUE].[REVENUEID]' + nchar(13);
set @SQLTOEXEC += 'order by KEYNAME, FIRSTNAME, MIDDLENAME, DATE asc' + nchar(13);
exec sp_executesql @SQLTOEXEC,
N'@CONSTITUENTID uniqueidentifier, @STARTDATE datetime, @ENDDATE datetime, @ISADMIN bit, @APPUSER_IN_NONRACROLE bit, @APPUSER_IN_NOSECGROUPROLE bit, @CURRENTAPPUSERID uniqueidentifier',
@CONSTITUENTID=@CONSTITUENTID, @STARTDATE=@STARTDATE, @ENDDATE=@ENDDATE, @ISADMIN=@ISADMIN, @APPUSER_IN_NONRACROLE=@APPUSER_IN_NONRACROLE, @APPUSER_IN_NOSECGROUPROLE=@APPUSER_IN_NOSECGROUPROLE, @CURRENTAPPUSERID=@CURRENTAPPUSERID;