USP_REPORT_PLEDGECASHFLOW
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ASOFDATE | date | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@CURRENCYCODE | tinyint | IN | |
@SITEFILTERMODE | tinyint | IN | |
@SITESSELECTED | xml | IN | |
@FROMDATE | datetime | IN | |
@TODATE | datetime | IN | |
@DESIGNATIONID | uniqueidentifier | IN |
Definition
Copy
create procedure dbo.USP_REPORT_PLEDGECASHFLOW
(
@ASOFDATE date = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@CURRENCYCODE tinyint = null,
@SITEFILTERMODE tinyint = 0,
@SITESSELECTED xml = null,
@FROMDATE datetime = null,
@TODATE datetime = null,
@DESIGNATIONID uniqueidentifier = null
)
as
set nocount on;
declare @ISADMIN bit;
declare @APPUSER_IN_NONRACROLE bit;
declare @APPUSER_IN_NOSECGROUPROLE 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);
declare @SELECTEDCURRENCYID uniqueidentifier;
if coalesce(@CURRENCYCODE, 1) = 1
set @SELECTEDCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
else if @CURRENCYCODE = 3
set @SELECTEDCURRENCYID = dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID);
declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @DECIMALDIGITS tinyint;
declare @ROUNDINGTYPECODE tinyint;
declare @ISOCODE nvarchar(3);
declare @SYMBOLDISPLAYSETTINGCODE tinyint;
declare @CURRENCYSYMBOL nvarchar(5);
select
@DECIMALDIGITS = DECIMALDIGITS,
@ROUNDINGTYPECODE = ROUNDINGTYPECODE,
@ISOCODE = ISO4217,
@SYMBOLDISPLAYSETTINGCODE = SYMBOLDISPLAYSETTINGCODE,
@CURRENCYSYMBOL = CURRENCYSYMBOL
from dbo.UFN_CURRENCY_GETPROPERTIES(@SELECTEDCURRENCYID);
declare @USERGRANTEDTRANSACTIONPAGE bit = 0;
declare @USERGRANTEDDESIGNATIONPAGE bit = 0;
if @ISADMIN = 1
begin
set @USERGRANTEDTRANSACTIONPAGE = 1;
set @USERGRANTEDDESIGNATIONPAGE = 1;
end
else
begin
select
@USERGRANTEDTRANSACTIONPAGE = [dbo].[UFN_SECURITY_APPUSER_GRANTED_FORM_IN_SYSTEMROLE](@CURRENTAPPUSERID, 'd00e6c42-2434-4d85-8a04-2323ca6bb2e7'),
@USERGRANTEDDESIGNATIONPAGE = [dbo].[UFN_SECURITY_APPUSER_GRANTED_FORM_IN_SYSTEMROLE](@CURRENTAPPUSERID, '4EADC264-0A44-4DF5-8C8C-D89A1C48746C');
end
-- #774147 - Performance/Filter Changes
if object_id('tempdb..#TMP_PLEDGES_FILTERED') is not null
drop table #TMP_PLEDGES_FILTERED;
create table #TMP_PLEDGES_FILTERED (
ID uniqueidentifier not null,
CONSTITUENTID uniqueidentifier not null,
INSTALLMENTID uniqueidentifier not null,
INSTALLMENTDATE datetime not null,
INSTALLMENTSPLITID uniqueidentifier not null,
INSTALLMENTSPLITDESIGNATIONID uniqueidentifier not null
);
declare @DAYAFTERTODATE date = dateadd(ms, 86399996, @TODATE);
insert into #TMP_PLEDGES_FILTERED
select
PLEDGE.ID,
PLEDGE.CONSTITUENTID,
INSTALLMENT.ID,
INSTALLMENT.DATE,
INSTALLMENTSPLIT.ID,
INSTALLMENTSPLIT.DESIGNATIONID
from
(
select
PLEDGE.ID,
PLEDGE.CONSTITUENTID
from
FINANCIALTRANSACTION PLEDGE
where
(PLEDGE.TYPECODE = 1) and
(dbo.UFN_PLEDGE_GETBALANCEASOF_2(PLEDGE.ID, @DAYAFTERTODATE) > 0) and
(cast(PLEDGE.DATE as date) between @FROMDATE and @TODATE) and
(@SITEFILTERMODE = 0
or exists (
select 1
from dbo.UFN_SITEID_MAPFROM_REVENUEID_2(PLEDGE.ID) REVENUESITE
inner join dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) SITEFILTER on REVENUESITE.SITEID = SITEFILTER.SITEID
)
) and exists (-- Site security filter
select HASPERMISSION
from dbo.UFN_SITEID_MAPFROM_REVENUEID_2(PLEDGE.ID) REVSITES
cross apply dbo.UFN_REPORT_HASUSERSITEPERMISSION(@CURRENTAPPUSERID, '65359276-0c0f-44fa-8b79-e1f2d1cce0c2', REVSITES.SITEID)
)
) PLEDGE
inner join dbo.INSTALLMENT on PLEDGE.ID = INSTALLMENT.REVENUEID
inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLIT.INSTALLMENTID = INSTALLMENT.ID
where (@DESIGNATIONID is null)
or (@DESIGNATIONID is not null and INSTALLMENTSPLIT.DESIGNATIONID = @DESIGNATIONID);
if object_id('tempdb..#TMP_PLEDGES_PAYMENTAMOUNT') is not null
drop table #TMP_PLEDGES_PAYMENTAMOUNT;
create table #TMP_PLEDGES_PAYMENTAMOUNT (
ID uniqueidentifier not null,
PAYMENTAMOUNT money not null
);
insert into #TMP_PLEDGES_PAYMENTAMOUNT
select
#TMP_PLEDGES_FILTERED.INSTALLMENTSPLITID,
SUM(dbo.UFN_INSTALLMENTSPLITPAYMENT_GETAMOUNTINCURRENCY(ISP.ID, @SELECTEDCURRENCYID))
from
#TMP_PLEDGES_FILTERED
inner join INSTALLMENTSPLITPAYMENT ISP on ISP.INSTALLMENTSPLITID = #TMP_PLEDGES_FILTERED.INSTALLMENTSPLITID
inner join FINANCIALTRANSACTIONLINEITEM FTLI on FTLI.ID = ISP.PAYMENTID
inner join FINANCIALTRANSACTION FT on FT.ID = FTLI.FINANCIALTRANSACTIONID
where
@TODATE >= FT.DATE
group by #TMP_PLEDGES_FILTERED.INSTALLMENTSPLITID;
if object_id('tempdb..#TMP_PLEDGES_WRITEOFFAMOUNT') is not null
drop table #TMP_PLEDGES_WRITEOFFAMOUNT;
create table #TMP_PLEDGES_WRITEOFFAMOUNT (
ID uniqueidentifier not null,
WRITEOFFAMOUNT money not null
);
insert into #TMP_PLEDGES_WRITEOFFAMOUNT
select
#TMP_PLEDGES_FILTERED.INSTALLMENTSPLITID,
SUM(dbo.UFN_INSTALLMENTSPLITWRITEOFF_GETAMOUNTINCURRENCY(ISWO.ID, @SELECTEDCURRENCYID))
from
#TMP_PLEDGES_FILTERED
inner join dbo.INSTALLMENTSPLITWRITEOFF ISWO on ISWO.INSTALLMENTSPLITID = #TMP_PLEDGES_FILTERED.INSTALLMENTSPLITID
inner join dbo.WRITEOFF WO on WO.ID = ISWO.WRITEOFFID
where
@TODATE >= cast(WO.DATE as date)
group by #TMP_PLEDGES_FILTERED.INSTALLMENTSPLITID;
select
PLEDGE.ID PLEDGEID,
case when @USERGRANTEDTRANSACTIONPAGE = 1 then 'http://www.blackbaud.com/REVENUEID?REVENUEID=' + convert(nvarchar(36),PLEDGE.ID) else null end PLEDGELINK,
CONSTITUENT.ISORGANIZATION ISORG,
CONSTITUENT.FIRSTNAME FIRSTNAME,
CONSTITUENT.KEYNAME LASTNAME,
'http://www.blackbaud.com/CONSTITUENTID?CONSTITUENTID=' + convert(nvarchar(36),CONSTITUENT.ID) CONSTITUENTLINK,
CONSTITUENT.ID CONSTITUENTID,
PHONE.NUMBER PHONENUMBER,
ADDRESS.DESCRIPTION ADDRESSBLOCK,
EMAILADDRESS.EMAILADDRESS EMAILADDRESS,
DESIGNATION.NAME DESIGNATIONNAME,
DESIGNATION.ID DESIGNATIONID,
case when @USERGRANTEDDESIGNATIONPAGE = 1 then 'http://www.blackbaud.com/DESIGNATIONID?DESIGNATIONID=' + convert(nvarchar(36),DESIGNATION.ID) else null end DESIGNATIONLINK,
PLEDGE.INSTALLMENTDATE INSTALLMENTDUEDATES,
dbo.UFN_INSTALLMENTSPLIT_GETAMOUNTINCURRENCY(PLEDGE.INSTALLMENTSPLITID, @SELECTEDCURRENCYID) INSTALLMENTAMOUNT,
PLEDGE.INSTALLMENTID INSTALLMENTID,
#TMP_PLEDGES_PAYMENTAMOUNT.PAYMENTAMOUNT PAYMENTAMOUNT,
#TMP_PLEDGES_WRITEOFFAMOUNT.WRITEOFFAMOUNT WRITEOFFAMOUNT,
@ISOCODE PLEDGEISOCURRENCYCODE,
@CURRENCYSYMBOL PLEDGECURRENCYSYMBOL,
@SYMBOLDISPLAYSETTINGCODE PLEDGECURRENCYSYMBOLDISPLAYSETTINGCODE,
@DECIMALDIGITS PLEDGEDECIMALDIGITS,
case when CONSTITUENT.ISORGANIZATION = 1 then (case when RELATIONSHIP.ID is null then cast(0 as bit) else cast(1 as bit) end) else cast(0 as bit) end HASPRIMARYCONTACTINFO,
case when CONSTITUENT.ISORGANIZATION = 1 then PRIMARYCONTACTNAME.KEYNAME else null end PCLASTNAME,
case when CONSTITUENT.ISORGANIZATION = 1 then PRIMARYCONTACTNAME.FIRSTNAME else null end PCFIRSTNAME,
case when CONSTITUENT.ISORGANIZATION = 1 then PRIMARYCONTACTEMAIL.EMAILADDRESS else null end PCEMAIL,
case when CONSTITUENT.ISORGANIZATION = 1 then PRIMARYCONTACTPHONE.NUMBER else null end PCPHONE,
case when CONSTITUENT.ISORGANIZATION = 1 then PRIMARYCONTACTADDRESS.DESCRIPTION else null end PCADDRESSBLOCK
from
#TMP_PLEDGES_FILTERED PLEDGE
inner join dbo.DESIGNATION on DESIGNATION.ID = PLEDGE.INSTALLMENTSPLITDESIGNATIONID
inner join dbo.CONSTITUENT on CONSTITUENT.ID = PLEDGE.CONSTITUENTID
left join dbo.ADDRESS on ADDRESS.CONSTITUENTID = CONSTITUENT.ID and ADDRESS.ISPRIMARY =1
left join dbo.PHONE on PHONE.CONSTITUENTID = CONSTITUENT.ID and PHONE.ISPRIMARY =1
left join dbo.EMAILADDRESS on EMAILADDRESS.CONSTITUENTID = CONSTITUENT.ID and EMAILADDRESS.ISPRIMARY =1
left join dbo.RELATIONSHIP on CONSTITUENT.ISORGANIZATION = 1 and RELATIONSHIP.RECIPROCALCONSTITUENTID = CONSTITUENT.ID and RELATIONSHIP.ISPRIMARYCONTACT = 1
left join dbo.CONSTITUENT PRIMARYCONTACTNAME on CONSTITUENT.ISORGANIZATION = 1 and PRIMARYCONTACTNAME.ID = RELATIONSHIP.RELATIONSHIPCONSTITUENTID
left join dbo.ADDRESS PRIMARYCONTACTADDRESS on CONSTITUENT.ISORGANIZATION = 1 and PRIMARYCONTACTADDRESS.CONSTITUENTID = RELATIONSHIP.RELATIONSHIPCONSTITUENTID and PRIMARYCONTACTADDRESS.ISPRIMARY = 1
left join dbo.PHONE PRIMARYCONTACTPHONE on CONSTITUENT.ISORGANIZATION = 1 and RELATIONSHIP.RELATIONSHIPCONSTITUENTID = PRIMARYCONTACTPHONE.CONSTITUENTID and PRIMARYCONTACTPHONE.ISPRIMARY = 1
left join dbo.EMAILADDRESS PRIMARYCONTACTEMAIL on CONSTITUENT.ISORGANIZATION = 1 and RELATIONSHIP.RELATIONSHIPCONSTITUENTID = PRIMARYCONTACTEMAIL.CONSTITUENTID and PRIMARYCONTACTEMAIL.ISPRIMARY = 1
left join #TMP_PLEDGES_PAYMENTAMOUNT on #TMP_PLEDGES_PAYMENTAMOUNT.ID = PLEDGE.INSTALLMENTSPLITID
left join #TMP_PLEDGES_WRITEOFFAMOUNT on #TMP_PLEDGES_WRITEOFFAMOUNT.ID = PLEDGE.INSTALLMENTSPLITID
where
( --constituent security
@ISADMIN = 1 or
@APPUSER_IN_NONRACROLE = 1 or
dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, CONSTITUENT.ID, @APPUSER_IN_NOSECGROUPROLE) = 1
);
drop table #TMP_PLEDGES_WRITEOFFAMOUNT;
drop table #TMP_PLEDGES_PAYMENTAMOUNT;
drop table #TMP_PLEDGES_FILTERED;
return 0;