UFN_REVENUESPLIT_GETDISQUALIFICATIONS

Returns the rules that disqualified an application from receiving Gift Aid.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@REVENUESPLITID uniqueidentifier IN
@RETURNALLDISQUALIFICATIONS bit IN

Definition

Copy


            CREATE function dbo.UFN_REVENUESPLIT_GETDISQUALIFICATIONS
            (
                @REVENUESPLITID uniqueidentifier,
                @RETURNALLDISQUALIFICATIONS bit
            )
            returns @DISQUALIFICATIONS table
            (
                CATEGORY nvarchar(255),
                DESCRIPTION nvarchar(max),
                SUBDESCRIPTION nvarchar(max)
            )
            as
            begin
                declare @RULES table(
                    ID uniqueidentifier, 
                    DisqType nvarchar(25)
                );

                declare @NUMDISQUALIFICATIONS integer = 0;

                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;
                declare @OTHERPAYMENTMETHODCODEID uniqueidentifier;

                -- Retrieve revenue/revenue application information-

                select
                    @REVENUEID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID,
                    @APPEALID = REVENUE_EXT.APPEALID,
                    @CONSTITUENTID = FINANCIALTRANSACTION.CONSTITUENTID,
                    @TRANSACTIONTYPECODE = FINANCIALTRANSACTION.TYPECODE,
                    @DESIGNATIONID = REVENUESPLIT_EXT.DESIGNATIONID,
                    @TYPECODE = REVENUESPLIT_EXT.TYPECODE,
                    @APPLICATIONCODE = REVENUESPLIT_EXT.APPLICATIONCODE,        
                    @PAYMENTMETHODCODE = REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE,
                    @CREDITTYPECODEID = CREDITCARDPAYMENTMETHODDETAIL.CREDITTYPECODEID,
                    @OTHERPAYMENTMETHODCODEID = OTHERPAYMENTMETHODDETAIL.OTHERPAYMENTMETHODCODEID
                from dbo.FINANCIALTRANSACTIONLINEITEM
                inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
                left join dbo.REVENUEPAYMENTMETHOD on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = REVENUEPAYMENTMETHOD.REVENUEID
                left outer join dbo.CREDITCARDPAYMENTMETHODDETAIL on REVENUEPAYMENTMETHOD.ID = CREDITCARDPAYMENTMETHODDETAIL.ID
                left outer join dbo.OTHERPAYMENTMETHODDETAIL on REVENUEPAYMENTMETHOD.ID = OTHERPAYMENTMETHODDETAIL.ID
                where FINANCIALTRANSACTIONLINEITEM.ID = @REVENUESPLITID
                    and FINANCIALTRANSACTION.DELETEDON is null
                    and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
                    and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1;

                -- 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 @APPLICATIONCODE in (4, 6, 7, 8) -- Other, Planned gift, matching gift and grant

                    begin
                        insert into @DISQUALIFICATIONS
                        select
                            'Application',
                            REVENUESPLIT_EXT.APPLICATION,
                            ''
                        from dbo.FINANCIALTRANSACTIONLINEITEM
                        inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                        where FINANCIALTRANSACTIONLINEITEM.ID = @REVENUESPLITID
                            and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
                            and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1;

                        set @NUMDISQUALIFICATIONS = @NUMDISQUALIFICATIONS + @@ROWCOUNT;
                    end

                -- Retrieve current Disqualification rules

                insert into @RULES (ID, DisqType)
                select ID, BASEDON
                from dbo.UFN_GIFTAIDDISQ_GETRECORDS();

                -- short circuit if there are no rules

                if @@ROWCOUNT = 0
                    return;

                --********************************************************************************************************

                --Appeals, Credit Card Types, and Payment Methods are all at the REVENUE record level

                if @TRANSACTIONTYPECODE != 0 and (@NUMDISQUALIFICATIONS = 0 or @RETURNALLDISQUALIFICATIONS = 1)
                begin
                    insert into @DISQUALIFICATIONS
                    select
                        'Appeal',
                        APPEAL.NAME,
                        ''
                    from dbo.GIFTAIDDISQUALIFIEDBYAPPEAL 
                    inner join dbo.APPEAL
                    on GIFTAIDDISQUALIFIEDBYAPPEAL.ID = APPEAL.ID
                    where GIFTAIDDISQUALIFIEDBYAPPEAL.ID = @APPEALID;

                    set @NUMDISQUALIFICATIONS = @@ROWCOUNT;
                end

                -- Change payment method to account for other specific payment methods

                if (@NUMDISQUALIFICATIONS = 0 or @RETURNALLDISQUALIFICATIONS = 1) and @PAYMENTMETHODCODE != 10
                begin
                    insert into @DISQUALIFICATIONS
                    select
                        'Payment method',
                        DESCRIPTION,
                        ''
                    from dbo.GIFTAIDDISQUALIFIEDBYPAYMENTMETHOD
                    where PAYMENTMETHOD = @PAYMENTMETHODCODE;

                    set @NUMDISQUALIFICATIONS = @NUMDISQUALIFICATIONS + @@ROWCOUNT;
                end

                -- credit card a special case

                if @PAYMENTMETHODCODE = 2 and (@NUMDISQUALIFICATIONS = 0 or @RETURNALLDISQUALIFICATIONS = 1)
                begin
                    insert into @DISQUALIFICATIONS
                    select
                        'Payment method',
                        'Credit card',
                        CREDITTYPECODE.DESCRIPTION
                    from dbo.GIFTAIDDISQUALIFIEDBYCREDITCARDTYPE
                    inner join dbo.CREDITTYPECODE
                    on GIFTAIDDISQUALIFIEDBYCREDITCARDTYPE.ID = CREDITTYPECODE.ID
                    where GIFTAIDDISQUALIFIEDBYCREDITCARDTYPE.ID = @CREDITTYPECODEID;

                    set @NUMDISQUALIFICATIONS = @NUMDISQUALIFICATIONS + @@ROWCOUNT;                    
                end

                -- other payment method a special case

                if @PAYMENTMETHODCODE = 10 and (@NUMDISQUALIFICATIONS = 0 or @RETURNALLDISQUALIFICATIONS = 1)
                begin
                    insert into @DISQUALIFICATIONS
                    select
                        'Payment method',
                        'Other payment method',
                        OTHERPAYMENTMETHODCODE.DESCRIPTION
                    from dbo.GIFTAIDDISQUALIFIEDBYOTHERPAYMENTTYPE
                    inner join dbo.OTHERPAYMENTMETHODCODE
                    on GIFTAIDDISQUALIFIEDBYOTHERPAYMENTTYPE.ID = OTHERPAYMENTMETHODCODE.ID
                    where GIFTAIDDISQUALIFIEDBYOTHERPAYMENTTYPE.ID = @OTHERPAYMENTMETHODCODEID
                end

                -- Check if the appeal is disqualified for donations, pledges, recurring gifts and other.                

                if @TRANSACTIONTYPECODE = 0 and (@NUMDISQUALIFICATIONS = 0 or @RETURNALLDISQUALIFICATIONS = 1)
                begin
                    if @APPLICATIONCODE in (0, 1, 2, 3, 5, 18, 19) -- Donation, event registration, pledge, recurring gift, membership, membership add-on, membership installment plan

                    begin
                        -- Check global appeal

                        insert into @DISQUALIFICATIONS
                        select
                            'Appeal',
                            APPEAL.NAME,
                            ''
                        from dbo.GIFTAIDDISQUALIFIEDBYAPPEAL 
                        inner join dbo.APPEAL
                        on GIFTAIDDISQUALIFIEDBYAPPEAL.ID = APPEAL.ID
                        where GIFTAIDDISQUALIFIEDBYAPPEAL.ID = @APPEALID;

                        set @NUMDISQUALIFICATIONS = @NUMDISQUALIFICATIONS + @@ROWCOUNT;
                    end 
                end

                --check the designation since designation is in the REVENUESPLIT records

                if (@NUMDISQUALIFICATIONS = 0 or @RETURNALLDISQUALIFICATIONS = 1)
                begin
                    insert into @DISQUALIFICATIONS
                    select
                        'Designation',
                        DESIGNATION.NAME,
                        ''
                    from dbo.GIFTAIDDISQUALIFIEDBYDESIGNATION
                    inner join dbo.DESIGNATION
                    on GIFTAIDDISQUALIFIEDBYDESIGNATION.ID = DESIGNATION.ID
                    where GIFTAIDDISQUALIFIEDBYDESIGNATION.ID = @DESIGNATIONID;

                    set @NUMDISQUALIFICATIONS = @NUMDISQUALIFICATIONS + @@ROWCOUNT;
                end

                --only check these for payments

                if @TRANSACTIONTYPECODE = 0 and (@NUMDISQUALIFICATIONS = 0 or @RETURNALLDISQUALIFICATIONS = 1)
                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 @DISQUALIFICATIONS
                        select
                            'Event',
                            EVENT.NAME,
                            ''
                        from dbo.GIFTAIDDISQUALIFIEDBYEVENT
                        inner join dbo.EVENT
                        on GIFTAIDDISQUALIFIEDBYEVENT.ID = EVENT.ID
                        where GIFTAIDDISQUALIFIEDBYEVENT.ID = @EVENTID;

                        set @NUMDISQUALIFICATIONS = @NUMDISQUALIFICATIONS + @@ROWCOUNT;
                    end
                    else if @TYPECODE = 2 and @MEMBERSHIPID is not null --membership

                    begin
                        insert into @DISQUALIFICATIONS
                        select
                            'Membership program',
                            MEMBERSHIPPROGRAM.NAME,
                            ''
                        from dbo.GIFTAIDDISQUALIFIEDBYMEMBERSHIPPROGRAM 
                        inner join dbo.MEMBERSHIPPROGRAM
                        on GIFTAIDDISQUALIFIEDBYMEMBERSHIPPROGRAM.ID = MEMBERSHIPPROGRAM.ID
                        where GIFTAIDDISQUALIFIEDBYMEMBERSHIPPROGRAM.ID = @MEMBERSHIPID;

                        set @NUMDISQUALIFICATIONS = @NUMDISQUALIFICATIONS + @@ROWCOUNT;
                    end
                end

                --check associated Campaigns

                if (@NUMDISQUALIFICATIONS = 0 or @RETURNALLDISQUALIFICATIONS = 1)
                begin
                    insert into @DISQUALIFICATIONS
                    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
                        );

                    set @NUMDISQUALIFICATIONS = @NUMDISQUALIFICATIONS + @@ROWCOUNT;
                end

                --check Revenue Category

                if (@NUMDISQUALIFICATIONS = 0 or @RETURNALLDISQUALIFICATIONS = 1)
                    insert into @DISQUALIFICATIONS
                    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;

                return;
            end