USP_DATALIST_RULESTHATDISQUALIFYREVENUEAPPLICATION
This datalist returns a list of the gift aid disqualification rules applicable to the given revenue application.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUESPLITID | uniqueidentifier | IN | Input parameter indicating the context ID for the data list. |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_RULESTHATDISQUALIFYREVENUEAPPLICATION
(
@REVENUESPLITID uniqueidentifier
)
as
declare @RULES table(
ID uniqueidentifier,
DisqType nvarchar(25)
);
declare @results table (
CATEGORY nvarchar(255),
DESCRIPTION nvarchar(max)
);
declare @APPEALID uniqueidentifier;
declare @PAYMENTMETHODCODE tinyint;
declare @CREDITTYPECODEID uniqueidentifier;
declare @TRANSACTIONTYPECODE tinyint;
declare @REVENUEID uniqueidentifier;
declare @DESIGNATIONID uniqueidentifier;
declare @AMOUNT money;
declare @TYPECODE tinyint;
declare @APPLICATIONCODE tinyint;
declare @CONSTITUENTID uniqueidentifier;
declare @EVENTID uniqueidentifier;
declare @MEMBERSHIPID uniqueidentifier;
declare @REGISTRANTID uniqueidentifier;
-- Retrieve revenue/revenue application information
select
@REVENUEID = REVENUESPLIT.REVENUEID,
@APPEALID = REVENUE.APPEALID,
@CONSTITUENTID = REVENUE.CONSTITUENTID,
@TRANSACTIONTYPECODE = REVENUE.TRANSACTIONTYPECODE,
@DESIGNATIONID = REVENUESPLIT.DESIGNATIONID,
@TYPECODE = REVENUESPLIT.TYPECODE,
@APPLICATIONCODE = REVENUESPLIT.APPLICATIONCODE,
@PAYMENTMETHODCODE = REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE,
@CREDITTYPECODEID = CREDITCARDPAYMENTMETHODDETAIL.CREDITTYPECODEID
from dbo.REVENUESPLIT
inner join dbo.REVENUE
on REVENUESPLIT.REVENUEID = REVENUE.ID
inner join dbo.REVENUEPAYMENTMETHOD
on REVENUESPLIT.REVENUEID = REVENUEPAYMENTMETHOD.REVENUEID
left outer join dbo.CREDITCARDPAYMENTMETHODDETAIL
on REVENUEPAYMENTMETHOD.ID = CREDITCARDPAYMENTMETHODDETAIL.ID
where REVENUESPLIT.ID = @REVENUESPLITID;
-- Retrieve current Disqualification rules
insert into @RULES(ID,DisqType)
select ID,BASEDON
from dbo.UFN_GIFTAIDDISQ_GETRECORDS();
--********************************************************************************************************
--Appeals, Credit Card Types, and Payment Methods are all at the REVENUE record level
if @TRANSACTIONTYPECODE != 0
--if exists(select ID from @RULES where ID = @APPEALID and DisqType = 'Appeal')
insert into @results
select
'Appeal',
APPEAL.NAME
from dbo.GIFTAIDDISQUALIFIEDBYAPPEAL
inner join dbo.APPEAL
on GIFTAIDDISQUALIFIEDBYAPPEAL.ID = APPEAL.ID
where GIFTAIDDISQUALIFIEDBYAPPEAL.ID = @APPEALID;
-- no reason to test if exists...if doesn't exist, insert will not do anything...
--if exists(select ID from dbo.GIFTAIDDISQUALIFIEDBYPAYMENTMETHOD where PAYMENTMETHOD = @PAYMENTMETHODCODE)
insert into @results
select
'Payment method',
DESCRIPTION
from dbo.GIFTAIDDISQUALIFIEDBYPAYMENTMETHOD
where PAYMENTMETHOD = @PAYMENTMETHODCODE;
-- credit card a special case
if @PAYMENTMETHODCODE = 2
insert into @results
select
'Credit card type',
CREDITTYPECODE.DESCRIPTION
from dbo.GIFTAIDDISQUALIFIEDBYCREDITCARDTYPE
inner join dbo.CREDITTYPECODE
on GIFTAIDDISQUALIFIEDBYCREDITCARDTYPE.ID = CREDITTYPECODE.ID
where GIFTAIDDISQUALIFIEDBYCREDITCARDTYPE.ID = @CREDITTYPECODEID;
--if exists(select ID from @RULES where DisqType = 'CreditCardType' and ID = @CREDITTYPECODEID)
-- set @STATUS = 0; --Credit Card Type is disqualified
--If this record is a payment, determine where to look for the appeal. Donations, Other, and Membership payments should use
-- the global appeal specified in the mailing section(the one passed in by the payment to this procedure). If it is on a
-- Recurring Gift, Pledge, or Event Registration, then use the appeal associated with that record. Event and membership
-- checks are placed below, with the other checks for them. Planned gift, matching gift, and grant can never be qualified,
-- so if this split is applied to any of them, automatically disqualify the split
if @TRANSACTIONTYPECODE = 0
begin
if @APPLICATIONCODE = 0
begin
--donation - check global appeal
insert into @results
select
'Appeal',
APPEAL.NAME
from dbo.GIFTAIDDISQUALIFIEDBYAPPEAL
inner join dbo.APPEAL
on GIFTAIDDISQUALIFIEDBYAPPEAL.ID = APPEAL.ID
where GIFTAIDDISQUALIFIEDBYAPPEAL.ID = @APPEALID;
end
else if @APPLICATIONCODE = 2
begin
--pledge - check pledge's appeal
insert into @results
select
'Appeal',
APPEAL.NAME
from dbo.GIFTAIDDISQUALIFIEDBYAPPEAL
inner join dbo.APPEAL
on GIFTAIDDISQUALIFIEDBYAPPEAL.ID = APPEAL.ID
where GIFTAIDDISQUALIFIEDBYAPPEAL.ID = (
select APPEALID
from dbo.REVENUE where ID = (
select PLEDGEID
from dbo.INSTALLMENTSPLITPAYMENT
where PAYMENTID = @REVENUESPLITID
)
);
end
else if @APPLICATIONCODE = 3
begin
--recurring gift - check recurring gift's appeal
insert into @results
select
'Appeal',
APPEAL.NAME
from dbo.GIFTAIDDISQUALIFIEDBYAPPEAL
inner join dbo.APPEAL
on GIFTAIDDISQUALIFIEDBYAPPEAL.ID = APPEAL.ID
where GIFTAIDDISQUALIFIEDBYAPPEAL.ID = (
select APPEALID
from dbo.REVENUE where ID = (
select SOURCEREVENUEID
from dbo.RECURRINGGIFTACTIVITY
where PAYMENTREVENUEID = @REVENUESPLITID
)
)
end
else if @APPLICATIONCODE = 4
begin
--other - check global appeal
insert into @results
select
'Appeal',
APPEAL.NAME
from dbo.GIFTAIDDISQUALIFIEDBYAPPEAL
inner join dbo.APPEAL
on GIFTAIDDISQUALIFIEDBYAPPEAL.ID = APPEAL.ID
where GIFTAIDDISQUALIFIEDBYAPPEAL.ID = @APPEALID;
end
-- Other applications (Planned gift, Matching gift, grant) are automatically disqualified
-- no need to return application type as a disqualification reason
-- also, the link to the page that uses this datalist should not be visible
end
--check Designation and its associated appeals first, since Designation is in the REVENUESPLIT records
insert into @results
select
'Designation',
DESIGNATION.NAME
from dbo.GIFTAIDDISQUALIFIEDBYDESIGNATION
inner join dbo.DESIGNATION
on GIFTAIDDISQUALIFIEDBYDESIGNATION.ID = DESIGNATION.ID
where GIFTAIDDISQUALIFIEDBYDESIGNATION.ID = @DESIGNATIONID;
--if the designation is not disqualified, see if any of its appeals are, which would disqualify this split
insert into @results
select
'Appeal',
APPEAL.NAME
from dbo.GIFTAIDDISQUALIFIEDBYAPPEAL
inner join dbo.APPEAL
on GIFTAIDDISQUALIFIEDBYAPPEAL.ID = APPEAL.ID
where GIFTAIDDISQUALIFIEDBYAPPEAL.ID in (
select APPEALID
from dbo.APPEALDESIGNATION
where DESIGNATIONID = @DESIGNATIONID
)
--only check these for payments
if @TRANSACTIONTYPECODE = 0
begin
--check Event and Membership based upon the TYPECODE value
--get the Event ID
select @REGISTRANTID = REGISTRANTID from dbo.EVENTREGISTRANTPAYMENT where PAYMENTID = @REVENUESPLITID;
select @EVENTID = EVENTID from dbo.REGISTRANT where ID = @REGISTRANTID;
--get the Membership ID
select @MEMBERSHIPID = MEMBERSHIPPROGRAMID from dbo.MEMBERSHIP where ID =
(select MEMBERSHIPID from dbo.MEMBERSHIPTRANSACTION where REVENUESPLITID = @REVENUESPLITID);
if @TYPECODE = 1 and @EVENTID is not null --event registration
begin
insert into @results
select
'Event',
EVENT.NAME
from dbo.GIFTAIDDISQUALIFIEDBYEVENT
inner join dbo.EVENT
on GIFTAIDDISQUALIFIEDBYEVENT.ID = EVENT.ID
where GIFTAIDDISQUALIFIEDBYEVENT.ID = @EVENTID;
--check appeals on events to try to disqualify the record
insert into @results
select
'Appeal',
APPEAL.NAME
from dbo.GIFTAIDDISQUALIFIEDBYAPPEAL
inner join dbo.APPEAL
on GIFTAIDDISQUALIFIEDBYAPPEAL.ID = APPEAL.ID
where GIFTAIDDISQUALIFIEDBYAPPEAL.ID = (
select APPEALID
from dbo.EVENT
where ID = @EVENTID
)
end
else if @TYPECODE = 2 and @MEMBERSHIPID is not null --membership
begin
--check the global appeal, as memberships do not have an associated appeal
insert into @results
select
'Appeal',
APPEAL.NAME
from dbo.GIFTAIDDISQUALIFIEDBYAPPEAL
inner join dbo.APPEAL
on GIFTAIDDISQUALIFIEDBYAPPEAL.ID = APPEAL.ID
where GIFTAIDDISQUALIFIEDBYAPPEAL.ID = @APPEALID;
insert into @results
select
'Membership program',
MEMBERSHIPPROGRAM.NAME
from dbo.GIFTAIDDISQUALIFIEDBYMEMBERSHIPPROGRAM
inner join dbo.MEMBERSHIPPROGRAM
on GIFTAIDDISQUALIFIEDBYMEMBERSHIPPROGRAM.ID = MEMBERSHIPPROGRAM.ID
where GIFTAIDDISQUALIFIEDBYMEMBERSHIPPROGRAM.ID = @MEMBERSHIPID;
end
end
--check associated Campaigns
insert into @results
select
'Campaign',
CAMPAIGN.NAME
from dbo.GIFTAIDDISQUALIFIEDBYCAMPAIGN
inner join dbo.CAMPAIGN
on GIFTAIDDISQUALIFIEDBYCAMPAIGN.ID = CAMPAIGN.ID
where GIFTAIDDISQUALIFIEDBYCAMPAIGN.ID in (
select CAMPAIGNID
from dbo.REVENUESPLITCAMPAIGN
where REVENUESPLITID = @REVENUESPLITID
);
--check Revenue Category
insert into @results
select
'Revenue category',
GLREVENUECATEGORYMAPPING.REVENUECATEGORYNAME
from dbo.GIFTAIDDISQUALIFIEDBYREVENUECATEGORY
inner join dbo.REVENUECATEGORY
on GIFTAIDDISQUALIFIEDBYREVENUECATEGORY.ID = REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID
inner join dbo.GLREVENUECATEGORYMAPPING
on GIFTAIDDISQUALIFIEDBYREVENUECATEGORY.ID = GLREVENUECATEGORYMAPPING.ID
where REVENUECATEGORY.ID = @REVENUESPLITID;
select
CATEGORY,
DESCRIPTION
from @results
order by CATEGORY;