USP_DATALIST_REVENUEBATCHDEFAULTAPPLICATION
Provides lookup info for a constituent's commitments.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | Constituent ID |
@AMOUNT | money | IN | Amount |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@SECURITYFEATUREID | uniqueidentifier | IN | Input parameter indicating the ID of the feature to use for site security checking. |
@SECURITYFEATURETYPE | tinyint | IN | Input parameter indicating the type of the feature to use for site security checking. |
@APPLICATIONCURRENCYID | uniqueidentifier | IN | Application currency |
@PDACCOUNTSYSTEMID | uniqueidentifier | IN | PDACCOUNTSYSTEMID |
Definition
Copy
CREATE procedure [dbo].[USP_DATALIST_REVENUEBATCHDEFAULTAPPLICATION]
(
@CONSTITUENTID uniqueidentifier = null,
@AMOUNT money = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@APPLICATIONCURRENCYID uniqueidentifier = null,
@PDACCOUNTSYSTEMID uniqueidentifier = null
)
as
set nocount on;
declare @ISSYSADMIN bit = 0
select @ISSYSADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
declare @BASICGLINSTALLED bit = 0
select @BASICGLINSTALLED = dbo.UFN_VALID_BASICGL_INSTALLED()
if object_id('tempdb..#TMP_REVENUEBATCHDEFAULTAPPLICATION_SITE') is not null
drop table #TMP_REVENUEBATCHDEFAULTAPPLICATION_SITE;
create table #TMP_REVENUEBATCHDEFAULTAPPLICATION_SITE
(
SITEID uniqueidentifier unique clustered
);
if object_id('tempdb..#TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION') is not null
drop table #TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION;
create table #TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION
(
VALUE nvarchar(60) collate DATABASE_DEFAULT,
LABEL nvarchar(max) collate DATABASE_DEFAULT,
SEQUENCE tinyint,
CONSTITUENTID uniqueidentifier,
REVENUEID uniqueidentifier,
SOURCEREVENUECONSTITUENTID uniqueidentifier
);
insert into #TMP_REVENUEBATCHDEFAULTAPPLICATION_SITE(SITEID)
select SITESFORUSER.SITEID from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) SITESFORUSER
if @APPLICATIONCURRENCYID is null
set @APPLICATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
if @PDACCOUNTSYSTEMID is null
set @PDACCOUNTSYSTEMID = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B';
declare @CURRENTDATE datetime;
set @CURRENTDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate());
declare @HOUSEHOLDSCANBEDONORS bit;
set @HOUSEHOLDSCANBEDONORS = dbo.UFN_INSTALLATIONINFO_GETHOUSEHOLDSCANBEDONORS();
declare @HOUSEHOLDID uniqueidentifier;
select top(1)
@HOUSEHOLDID = GROUPMEMBER.GROUPID
from
dbo.GROUPMEMBER
left outer join dbo.GROUPDATA on GROUPDATA.ID = GROUPMEMBER.GROUPID
where
GROUPMEMBER.MEMBERID = @CONSTITUENTID
and GROUPDATA.GROUPTYPECODE = 0
and dbo.UFN_GROUPMEMBER_ISCURRENTMEMBER(GROUPMEMBER.ID) = 1
and @HOUSEHOLDSCANBEDONORS = 1;
declare @VALIDCONSTITUENT table
(
ID uniqueidentifier
)
-- include (1) the constituent, (2) the household a constituent is a member of, (3) members of that household, (4) members of the constituent if it is a household
insert into @VALIDCONSTITUENT(ID)
(
select @HOUSEHOLDID as ID
union
select
case
when dbo.UFN_CONSTITUENT_ISHOUSEHOLD(@CONSTITUENTID) = 1
then(
case
when @HOUSEHOLDSCANBEDONORS = 1
then @CONSTITUENTID
else null
end
)
else @CONSTITUENTID
end
union
select
GROUPMEMBER.MEMBERID
from
dbo.GROUPMEMBER
left outer join dbo.GROUPMEMBERDATERANGE on GROUPMEMBER.ID = GROUPMEMBERDATERANGE.GROUPMEMBERID
where
(GROUPMEMBER.GROUPID = @HOUSEHOLDID
or GROUPMEMBER.GROUPID = @CONSTITUENTID
)
and (
(GROUPMEMBERDATERANGE.DATEFROM is null
and (GROUPMEMBERDATERANGE.DATETO is null or GROUPMEMBERDATERANGE.DATETO > @CURRENTDATE)
)
or (GROUPMEMBERDATERANGE.DATETO is null
and (GROUPMEMBERDATERANGE.DATEFROM is null or GROUPMEMBERDATERANGE.DATEFROM <= @CURRENTDATE)
)
or (GROUPMEMBERDATERANGE.DATEFROM <= @CURRENTDATE and GROUPMEMBERDATERANGE.DATETO > @CURRENTDATE)
)
)
/*
The VALUE column holds a string that contains a coded application type as an integer.
Those application types are:
0 - Not an application (Donation, Other, Unapplied matching gift payment, etc.)
1 - Sponsorship
2 - Membership
3 - Order/Reservation
4 - Recurring gift
5 - Pledge
6 - Planned gift
7 - Event registration
8 - Matching gift claim
9 - Grant award
10 - Donor challenge
These are also defined by the ApplicationInfo class in RevenueBatchHelper.vb.
*/
-- 1. Sponsorships
insert into #TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION(VALUE, LABEL, SEQUENCE, CONSTITUENTID, REVENUEID, SOURCEREVENUECONSTITUENTID)
select
cast(REVENUE.ID as varchar(36)) + ':1:' + cast(REVENUE.TRANSACTIONAMOUNT as varchar(20)),
'Recurring gift for <REPLACE_WITH_NAME> '
+ convert(varchar(10), REVENUESCHEDULE.NEXTTRANSACTIONDATE, 101)
+ '<REPLACE_WITH_DESIGNATIONS>'
+ ' - '
+ cast(REVENUE.TRANSACTIONAMOUNT as varchar(20)) + ' ' + dbo.UFN_CURRENCY_GETISO(REVENUE.TRANSACTIONCURRENCYID),
case
when REVENUE.TRANSACTIONAMOUNT = @AMOUNT
then 1
else 11
end,
REVENUE.CONSTITUENTID,
REVENUE.ID,
null
from
dbo.FINANCIALTRANSACTION as REVENUE
inner join @VALIDCONSTITUENT VALIDCONSTITUENT on VALIDCONSTITUENT.ID = REVENUE.CONSTITUENTID
inner join dbo.REVENUESCHEDULE on REVENUE.ID = REVENUESCHEDULE.ID
where
REVENUE.TYPECODE = 2
and REVENUESCHEDULE.STATUSCODE in (0,5)
and REVENUESCHEDULE.ISPENDING = 0
and REVENUE.TRANSACTIONAMOUNT > 0
and exists(
select 1
from
dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = REVENUE.ID and REVENUESPLIT_EXT.TYPECODE = 9
)
and REVENUE.TRANSACTIONCURRENCYID = @APPLICATIONCURRENCYID
and REVENUE.DELETEDON is null
-- 3. Order/Reservation, 5. Pledge, 6. Planned gift, 8. Matching gift claim, 9. Grant award, 10. Donor challenge
insert into #TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION(VALUE, LABEL, SEQUENCE, CONSTITUENTID, REVENUEID, SOURCEREVENUECONSTITUENTID)
select
cast(REVENUE.ID as varchar(36)) + ':'
+ case REVENUE.TYPECODE
when 5 then '3'
when 1 then '5'
when 4 then '6'
when 3 then '8'
when 6 then '9'
when 8 then '10'
end
+ ':' + cast(INSTALLMENTBALANCEBULK.BALANCE as varchar(20)),
case REVENUE.TYPECODE
when 5 then 'Order for <REPLACE_WITH_NAME> '
when 1 then 'Pledge for <REPLACE_WITH_NAME> '
when 4 then 'Planned gift for <REPLACE_WITH_NAME> '
when 3 then 'Matching gift claim for <REPLACE_WITH_NAME> - <REPLACE_WITH_SOURCE_NAME> '
when 6 then 'Grant award from <REPLACE_WITH_NAME> '
when 8 then 'Donor challenge claim from <REPLACE_WITH_NAME> '
end
+ convert(varchar(10), INSTALLMENT.DATE, 101)
+ '<REPLACE_WITH_DESIGNATIONS>'
+ ' - ' + cast(INSTALLMENTBALANCEBULK.BALANCE as varchar(20)) + ' ' + dbo.UFN_CURRENCY_GETISO(REVENUE.TRANSACTIONCURRENCYID),
case
when INSTALLMENTBALANCEBULK.BALANCE = @AMOUNT
then case REVENUE.TYPECODE
when 5 then 3
when 1 then 5
when 4 then 6
when 3 then 8
when 6 then 9
when 8 then 10
end
else case REVENUE.TYPECODE
when 5 then 13
when 1 then 15
when 4 then 16
when 3 then 18
when 6 then 19
when 8 then 20
end
end,
REVENUE.CONSTITUENTID,
REVENUE.ID,
SOURCEREVENUE.CONSTITUENTID
from
dbo.FINANCIALTRANSACTION as REVENUE
inner join @VALIDCONSTITUENT VALIDCONSTITUENT on VALIDCONSTITUENT.ID = REVENUE.CONSTITUENTID
-- Adding join predicate on REVENUE.ID = INSTALLMENT.REVENUEID even though it isn't necessary to get the correct result
-- since without it, a table scan is done on INSTALLMENT.
inner join dbo.INSTALLMENT on (REVENUE.ID = INSTALLMENT.REVENUEID)
inner join dbo.UFN_INSTALLMENT_GETINSTALLMENTBALANCE_BULK() INSTALLMENTBALANCEBULK on INSTALLMENTBALANCEBULK.ID = INSTALLMENT.ID
inner join dbo.UFN_REVENUE_GETNEXTINSTALLMENT_BULK() NEXTINSTALLMENT on NEXTINSTALLMENT.REVENUEID = REVENUE.ID
inner join dbo.REVENUESCHEDULE on REVENUESCHEDULE.ID = REVENUE.ID
left join dbo.REVENUEMATCHINGGIFT on REVENUE.ID = REVENUEMATCHINGGIFT.ID
left join dbo.FINANCIALTRANSACTION SOURCEREVENUE on SOURCEREVENUE.ID = REVENUEMATCHINGGIFT.MGSOURCEREVENUEID
where
INSTALLMENT.ID = NEXTINSTALLMENT.INSTALLMENTID
and REVENUESCHEDULE.ISPENDING = 0
and REVENUE.TYPECODE <> 2
and INSTALLMENTBALANCEBULK.BALANCE > 0
and (REVENUEMATCHINGGIFT.ISACTIVE = 1 or REVENUE.TYPECODE <> 3)
and ((REVENUE.PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID) or (@BASICGLINSTALLED = 0) or (REVENUE.TYPECODE in (3,8))) --MG Claims and donor challenge claims don't post so they won't have an accounting system
and INSTALLMENT.TRANSACTIONCURRENCYID = @APPLICATIONCURRENCYID
and REVENUE.TYPECODE in (0,1,2,3,4,5,6,7,8,9)
and REVENUE.DELETEDON is null
-- 8 (again). Subsidiary matching gift claims (JamesWill WI76028 2011-02-01)
insert into #TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION(VALUE, LABEL, SEQUENCE, CONSTITUENTID, REVENUEID, SOURCEREVENUECONSTITUENTID)
select
cast(REVENUE.ID as varchar(36)) + ':8'
+ ':' + cast(INSTALLMENTBALANCEBULK.BALANCE as varchar(20)),
'Matching gift claim for <REPLACE_WITH_NAME> - <REPLACE_WITH_SOURCE_NAME> '
+ convert(varchar(10), INSTALLMENT.DATE, 101)
+ '<REPLACE_WITH_DESIGNATIONS>'
+ ' - ' + cast(INSTALLMENTBALANCEBULK.BALANCE as varchar(20)) + ' ' + dbo.UFN_CURRENCY_GETISO(REVENUE.TRANSACTIONCURRENCYID),
case
when INSTALLMENTBALANCEBULK.BALANCE = @AMOUNT
then 8
else 18
end,
REVENUE.CONSTITUENTID,
REVENUE.ID,
SOURCEREVENUE.CONSTITUENTID
from
dbo.FINANCIALTRANSACTION as REVENUE
inner join dbo.ORGANIZATIONDATA on ORGANIZATIONDATA.ID = REVENUE.CONSTITUENTID
inner join @VALIDCONSTITUENT VALIDCONSTITUENT on VALIDCONSTITUENT.ID = ORGANIZATIONDATA.PARENTCORPID
-- Adding join predicate on REVENUE.ID = INSTALLMENT.REVENUEID even though it isn't necessary to get the correct result
-- since without it, a table scan is done on INSTALLMENT.
inner join dbo.INSTALLMENT on (REVENUE.ID = INSTALLMENT.REVENUEID)
inner join dbo.UFN_INSTALLMENT_GETINSTALLMENTBALANCE_BULK() INSTALLMENTBALANCEBULK on INSTALLMENTBALANCEBULK.ID = INSTALLMENT.ID
inner join dbo.UFN_REVENUE_GETNEXTINSTALLMENT_BULK() NEXTINSTALLMENT on NEXTINSTALLMENT.REVENUEID = REVENUE.ID
inner join dbo.REVENUESCHEDULE on REVENUESCHEDULE.ID = REVENUE.ID
left join dbo.REVENUEMATCHINGGIFT on REVENUE.ID = REVENUEMATCHINGGIFT.ID
left join dbo.FINANCIALTRANSACTION SOURCEREVENUE on SOURCEREVENUE.ID = REVENUEMATCHINGGIFT.MGSOURCEREVENUEID
where
INSTALLMENT.ID = NEXTINSTALLMENT.INSTALLMENTID
and REVENUESCHEDULE.ISPENDING = 0
and REVENUE.TYPECODE <> 2
and INSTALLMENTBALANCEBULK.BALANCE > 0
and (REVENUEMATCHINGGIFT.ISACTIVE = 1 or REVENUE.TYPECODE <> 3)
and INSTALLMENT.TRANSACTIONCURRENCYID = @APPLICATIONCURRENCYID
and REVENUE.TYPECODE in (0,1,2,3,4,5,6,7,8,9) and REVENUE.DELETEDON is null
-- 4. Recurring gift
insert into #TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION(VALUE, LABEL, SEQUENCE, CONSTITUENTID, REVENUEID, SOURCEREVENUECONSTITUENTID)
select
cast(REVENUE.ID as varchar(36)) + ':4:' + cast(REVENUE.TRANSACTIONAMOUNT as varchar(20)),
'Recurring gift for <REPLACE_WITH_NAME> '
+ convert(varchar(10), REVENUESCHEDULE.NEXTTRANSACTIONDATE, 101)
+ '<REPLACE_WITH_DESIGNATIONS>'
+ ' - ' + cast(REVENUE.TRANSACTIONAMOUNT as varchar(20)) + ' ' + dbo.UFN_CURRENCY_GETISO(REVENUE.TRANSACTIONCURRENCYID),
case
when REVENUE.TRANSACTIONAMOUNT = @AMOUNT and REVENUE.TRANSACTIONCURRENCYID = @APPLICATIONCURRENCYID
then 4
else 14
end,
REVENUE.CONSTITUENTID,
REVENUE.ID,
null
from
dbo.FINANCIALTRANSACTION as REVENUE
inner join @VALIDCONSTITUENT VALIDCONSTITUENT on VALIDCONSTITUENT.ID = REVENUE.CONSTITUENTID
inner join dbo.REVENUESCHEDULE on REVENUE.ID = REVENUESCHEDULE.ID
where
REVENUE.TYPECODE = 2
and REVENUESCHEDULE.STATUSCODE in (0,5)
and REVENUESCHEDULE.ISPENDING = 0
and REVENUE.TRANSACTIONAMOUNT > 0
and not exists(
select 1
from
dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = REVENUE.ID and REVENUESPLIT_EXT.TYPECODE = 9
)
and REVENUE.TRANSACTIONCURRENCYID = @APPLICATIONCURRENCYID
and REVENUE.TYPECODE in (0,1,2,3,4,5,6,7,8,9) and REVENUE.DELETEDON is null
if @ISSYSADMIN = 0
begin
delete #TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION
where
not exists(
select 1
from
dbo.UFN_SITEID_MAPFROM_REVENUEID(#TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION.REVENUEID) as SITE
where
(
exists(
select 1
from
#TMP_REVENUEBATCHDEFAULTAPPLICATION_SITE SITESFORUSER
where
SITESFORUSER.SITEID=[SITE].[SITEID]
or (SITESFORUSER.SITEID is null and [SITE].[SITEID] is null)
)
)
)
end
-- 7. Event registration
insert into #TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION(VALUE, LABEL, SEQUENCE, CONSTITUENTID, REVENUEID, SOURCEREVENUECONSTITUENTID)
select
cast(REGISTRANT.ID as varchar(36)) + ':7:' + cast(dbo.UFN_EVENTREGISTRANT_GETBALANCE(REGISTRANT.ID) as varchar(20)),
[EVENT].NAME + ' registration for <REPLACE_WITH_NAME> ' + convert(varchar(10), [EVENT].STARTDATE, 101)
+ ' - ' + cast(dbo.UFN_EVENTREGISTRANT_GETBALANCE(REGISTRANT.ID) as varchar(20)) + ' ' + dbo.UFN_CURRENCY_GETISO([EVENT].BASECURRENCYID),
case
when dbo.UFN_EVENTREGISTRANT_GETBALANCE(REGISTRANT.ID) = @AMOUNT and EVENT.BASECURRENCYID = @APPLICATIONCURRENCYID
then 7
else 17
end,
REGISTRANT.CONSTITUENTID,
null,
null
from
dbo.REGISTRANT
inner join @VALIDCONSTITUENT VALIDCONSTITUENT on VALIDCONSTITUENT.ID = REGISTRANT.CONSTITUENTID
inner join dbo.[EVENT] on [EVENT].ID = REGISTRANT.EVENTID
where
dbo.UFN_EVENTREGISTRANT_GETBALANCE(REGISTRANT.ID) > 0
and
( --Check site security
select count(*)
from dbo.UFN_SITEID_MAPFROM_REGISTRANTID(REGISTRANT.ID) as SITE
where
(
@ISSYSADMIN = 1
or exists(
select 1
from
#TMP_REVENUEBATCHDEFAULTAPPLICATION_SITE SITESFORUSER
where
SITESFORUSER.SITEID=[SITE].[SITEID]
or (SITESFORUSER.SITEID is null and [SITE].[SITEID] is null)
)
)
) > 0
and EVENT.BASECURRENCYID = @APPLICATIONCURRENCYID;
--BBNT\RyanDow (Ryan Dowacter) 03/01/2012
--Rather than calling the constituent name format function several times and building a designation list several times
--I'm inserting placeholders into the LABEL to be replaced now
update APPLICATIONS
set APPLICATIONS.LABEL = REPLACE(APPLICATIONS.LABEL,'<REPLACE_WITH_NAME>' COLLATE DATABASE_DEFAULT, CONSTITUENT_NF.NAME COLLATE DATABASE_DEFAULT)
from
#TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION APPLICATIONS
cross apply dbo.UFN_CONSTITUENT_DISPLAYNAME(APPLICATIONS.CONSTITUENTID) CONSTITUENT_NF
update APPLICATIONS
set APPLICATIONS.LABEL = REPLACE(APPLICATIONS.LABEL,'<REPLACE_WITH_SOURCE_NAME>' COLLATE DATABASE_DEFAULT, CONSTITUENT_NF.NAME COLLATE DATABASE_DEFAULT)
from
#TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION APPLICATIONS
cross apply dbo.UFN_CONSTITUENT_DISPLAYNAME(APPLICATIONS.SOURCEREVENUECONSTITUENTID) CONSTITUENT_NF;
update APPLICATIONS
set APPLICATIONS.LABEL = REPLACE(APPLICATIONS.LABEL, '<REPLACE_WITH_DESIGNATIONS>' COLLATE DATABASE_DEFAULT, coalesce(' - ' + DESIGNATIONS.DESIGNATIONLIST, '') COLLATE DATABASE_DEFAULT)
from
#TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION APPLICATIONS
outer apply
(
select top 1
dbo.UDA_BUILDLIST(DESIGNATION.USERID) as DESIGNATIONLIST
from
dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
inner join dbo.DESIGNATION on REVENUESPLIT_EXT.DESIGNATIONID = DESIGNATION.ID
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = APPLICATIONS.REVENUEID
) DESIGNATIONS
select VALUE, left(LABEL,255)
from #TMP_REVENUEBATCHDEFAULTAPPLICATION_APPLICATION
order by SEQUENCE