USP_RECONCILEMATCHINGGIFT_REVENUESTREAMS

Stored proc to apply a payment to one or more revenue streams

Parameters

Parameter Parameter Type Mode Description
@REVENUESPLITID uniqueidentifier IN
@REVENUESPLITAMOUNT money IN
@REVENUESTREAMS xml IN
@RELATIONREVENUESTREAM xml IN
@CONSTITUENTID uniqueidentifier IN
@DATE datetime IN
@PAYMENTMETHODCODE tinyint IN
@BATCHNUMBER nvarchar(100) IN
@POSTDATE datetime IN
@POSTSTATUSCODE tinyint IN
@DONOTRECEIPT bit IN
@DONOTACKNOWLEDGE bit IN
@FINDERNUMBER bigint IN
@SOURCECODE nvarchar(50) IN
@APPEALID uniqueidentifier IN
@MAILINGID uniqueidentifier IN
@CHANNELCODEID uniqueidentifier IN
@CHECKDATE UDT_FUZZYDATE IN
@CHECKNUMBER nvarchar(20) IN
@CONSTITUENTACCOUNTID uniqueidentifier IN
@REFERENCEDATE UDT_FUZZYDATE IN
@REFERENCENUMBER nvarchar(20) IN
@CARDHOLDERNAME nvarchar(255) IN
@CREDITCARDNUMBER nvarchar(4) IN
@CREDITTYPECODEID uniqueidentifier IN
@AUTHORIZATIONCODE nvarchar(20) IN
@EXPIRESON UDT_FUZZYDATE IN
@ISSUER nvarchar(100) IN
@NUMBEROFUNITS decimal(20, 3) IN
@SYMBOL nvarchar(25) IN
@MEDIANPRICE decimal(19, 4) IN
@SALEDATE datetime IN
@SALEAMOUNT money IN
@BROKERFEE money IN
@SALEPOSTSTATUSCODE tinyint IN
@SALEPOSTDATE datetime IN
@PROPERTYSUBTYPECODEID uniqueidentifier IN
@GIFTINKINDSUBTYPECODEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CREATIONDATE datetime IN
@TOTALAMOUNTAPPLIED money INOUT
@KEYALREADYOPEN bit IN

Definition

Copy


            CREATE procedure dbo.USP_RECONCILEMATCHINGGIFT_REVENUESTREAMS
            (
                @REVENUESPLITID uniqueidentifier,
                @REVENUESPLITAMOUNT money,
                @REVENUESTREAMS xml,
                @RELATIONREVENUESTREAM xml,
                @CONSTITUENTID uniqueidentifier, 
                @DATE datetime
                @PAYMENTMETHODCODE tinyint, -- No longer used. Preserved for backwards compatibility.

                @BATCHNUMBER nvarchar(100), -- No longer used. Preserved for backwards compatibility. 

                @POSTDATE datetime
                @POSTSTATUSCODE tinyint, -- No longer used. Preserved for backwards compatibility. 

                @DONOTRECEIPT bit, -- No longer used. Preserved for backwards compatibility.

                @DONOTACKNOWLEDGE bit,  -- No longer used. Preserved for backwards compatibility.

                @FINDERNUMBER bigint = 0,  -- No longer used. Preserved for backwards compatibility.

                @SOURCECODE nvarchar(50) = null, -- No longer used. Preserved for backwards compatibility.

                @APPEALID uniqueidentifier = null, -- No longer used. Preserved for backwards compatibility.            

                @MAILINGID uniqueidentifier = null, -- No longer used. Preserved for backwards compatibility.

                @CHANNELCODEID uniqueidentifier = null, -- No longer used. Preserved for backwards compatibility.

                @CHECKDATE dbo.UDT_FUZZYDATE = '00000000', -- No longer used. Preserved for backwards compatibility.

                @CHECKNUMBER nvarchar(20) = '', -- No longer used. Preserved for backwards compatibility.

                @CONSTITUENTACCOUNTID uniqueidentifier = null, -- No longer used. Preserved for backwards compatibility.

                @REFERENCEDATE dbo.UDT_FUZZYDATE = '00000000', -- No longer used. Preserved for backwards compatibility.

                @REFERENCENUMBER nvarchar(20) = '', -- No longer used. Preserved for backwards compatibility.

                @CARDHOLDERNAME nvarchar(255) = '', -- No longer used. Preserved for backwards compatibility.

                @CREDITCARDNUMBER nvarchar(4) = '', -- No longer used. Preserved for backwards compatibility.

                @CREDITTYPECODEID uniqueidentifier = null, -- No longer used. Preserved for backwards compatibility.

                @AUTHORIZATIONCODE nvarchar(20) = '', -- No longer used. Preserved for backwards compatibility.

                @EXPIRESON dbo.UDT_FUZZYDATE = '00000000', -- No longer used. Preserved for backwards compatibility.

                @ISSUER nvarchar(100) = '', -- No longer used. Preserved for backwards compatibility.

                @NUMBEROFUNITS decimal(20,3) = 0, -- No longer used. Preserved for backwards compatibility.

                @SYMBOL nvarchar(25) = '', -- No longer used. Preserved for backwards compatibility.

                @MEDIANPRICE decimal(19,4) = 0, -- No longer used. Preserved for backwards compatibility.

                @SALEDATE datetime = null, -- No longer used. Preserved for backwards compatibility.

                @SALEAMOUNT money = null, -- No longer used. Preserved for backwards compatibility.

                @BROKERFEE money = null, -- No longer used. Preserved for backwards compatibility.

                @SALEPOSTSTATUSCODE tinyint = null, -- No longer used. Preserved for backwards compatibility.

                @SALEPOSTDATE datetime = null, -- No longer used. Preserved for backwards compatibility.

                @PROPERTYSUBTYPECODEID uniqueidentifier = null, -- No longer used. Preserved for backwards compatibility.

                @GIFTINKINDSUBTYPECODEID uniqueidentifier = null, -- No longer used. Preserved for backwards compatibility.

                @CHANGEAGENTID uniqueidentifier,
                @CREATIONDATE datetime ,
                @TOTALAMOUNTAPPLIED money output,
                @KEYALREADYOPEN bit = 0 -- No longer used. Preserved for backwards compatibility.

            )
            as 
            set nocount on;

            begin try
                -- Holds the designations and amounts being paid

                declare @DESIGNATIONSPAID table
                (
                    INSTALLMENTSPLITPAYMENTID uniqueidentifier not null,
                    DESIGNATIONID uniqueidentifier not null,
                    REVENUESPLITID uniqueidentifier not null,
                    AMOUNT money not null,
                    APPLICATIONID uniqueidentifier not null,
                    MGCLAIMREVENUEID uniqueidentifier -- added for use when creating RC for MGC

                )

                declare @INSTALLMENTSPLITPAYMENTID uniqueidentifier;

                declare @AMOUNTCONVERTED money;
                declare @PAYMENTDESIGNATIONID uniqueidentifier, @REVENUEID uniqueidentifier, @PAYMENTDATE date;
                declare @PAYMENTTRANSACTIONCURRENCYID uniqueidentifier, @PAYMENTBASECURRENCYID uniqueidentifier, @PAYMENTBASEEXCHANGERATEID uniqueidentifier, @PAYMENTORGANIZATIONEXCHANGERATEID uniqueidentifier;
                declare @PAYMENTAPPLICATIONCODE tinyint, @PAYMENTTYPECODE tinyint;
                select
                    @PAYMENTDESIGNATIONID = REVENUESPLIT.DESIGNATIONID,
                    @REVENUEID = REVENUESPLIT.REVENUEID,
                    @PAYMENTTRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
                    @PAYMENTBASECURRENCYID = REVENUE.BASECURRENCYID,
                    @PAYMENTBASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID,
                    @PAYMENTDATE = REVENUE.DATE,
                    @PAYMENTORGANIZATIONEXCHANGERATEID = REVENUESPLIT.ORGANIZATIONEXCHANGERATEID,
                    @PAYMENTAPPLICATIONCODE = REVENUESPLIT.APPLICATIONCODE,
                    @PAYMENTTYPECODE = REVENUESPLIT.TYPECODE
                from dbo.REVENUESPLIT
                inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID
                where REVENUESPLIT.ID = @REVENUESPLITID;

                declare APPLICATIONSCURSOR cursor local fast_forward for
                    select
                        REVENUESPLITID,
                        APPLIED,
                        TYPECODE,
                        DESIGNATIONID
                    from dbo.UFN_RECONCILE_GETAPPLICATIONWITHCHILDREN_FROMITEMLISTXML(@REVENUESTREAMS)
                    where APPLIED > 0;

                declare @APPLICATIONID uniqueidentifier;
                declare @APPLICATIONTYPE tinyint;
                declare @APPLIEDAMOUNT money;
                declare @APPLICATIONDESIGNATIONID uniqueidentifier;
                declare @APPLICATIONEXCHANGERATEID uniqueidentifier;

                open APPLICATIONSCURSOR;
                fetch next from APPLICATIONSCURSOR into @APPLICATIONID, @APPLIEDAMOUNT, @APPLICATIONTYPE, @APPLICATIONDESIGNATIONID;

                while @@FETCH_STATUS = 0 
                begin
                    declare @MGCLAIMREVENUEID uniqueidentifier, @MGCLAIMDESIGNATIONID uniqueidentifier, @MGCLAIMAMOUNT money, @MGCLAIMTRANSACTIONCURRENCYID uniqueidentifier;
                    select
                        @MGCLAIMREVENUEID = REVENUEID,
                        @MGCLAIMDESIGNATIONID = DESIGNATIONID,
                        @MGCLAIMAMOUNT = TRANSACTIONAMOUNT,
                        @MGCLAIMTRANSACTIONCURRENCYID = TRANSACTIONCURRENCYID
                    from dbo.REVENUESPLIT
                    where ID = @APPLICATIONID;

                    if @MGCLAIMTRANSACTIONCURRENCYID <> @PAYMENTTRANSACTIONCURRENCYID
                    begin
                        if @MGCLAIMTRANSACTIONCURRENCYID = @PAYMENTBASECURRENCYID
                            set @APPLICATIONEXCHANGERATEID = @PAYMENTBASEEXCHANGERATEID;
                        else
                            set @APPLICATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@PAYMENTTRANSACTIONCURRENCYID,@MGCLAIMTRANSACTIONCURRENCYID,@PAYMENTDATE,1,null);

                        if @APPLICATIONEXCHANGERATEID is null
                        begin
                            raiserror('BBERR_APPLICATIONEXCHANGERATEDOESNOTEXIST', 13, 1);
                            return 1;
                        end
                    end

                    if @MGCLAIMTRANSACTIONCURRENCYID = @PAYMENTTRANSACTIONCURRENCYID
                        set @AMOUNTCONVERTED = @APPLIEDAMOUNT;
                    else
                        set @AMOUNTCONVERTED = dbo.UFN_CURRENCY_CONVERT(@APPLIEDAMOUNT, @APPLICATIONEXCHANGERATEID);


                    -- Update the matching gift claim split and installments to point to the new designation if it's different

                    declare @MGCLAIMINSTALLMENTSPLITID uniqueidentifier;
                    declare @MGCLAIMREVENUESPLITID uniqueidentifier = @APPLICATIONID;
                    if @MGCLAIMDESIGNATIONID <> @APPLICATIONDESIGNATIONID
                    begin
                        --Bug 129338 - AdamBu - 12/20/10 - Get the revenue split ID output value from the SP because it may

                        --    have created a new split that should be the payment's application.


                        exec dbo.USP_RECONCILEMATCHINGGIFT_UPDATECLAIMSPLITS 
                            @MGCLAIMINSTALLMENTSPLITID = @MGCLAIMINSTALLMENTSPLITID output,
                            @APPLICATIONID = @APPLICATIONID,
                            @MGCLAIMREVENUEID = @MGCLAIMREVENUEID,
                            @MGCLAIMDESIGNATIONID = @MGCLAIMDESIGNATIONID,
                            @MGCLAIMAMOUNT = @MGCLAIMAMOUNT,
                            @APPLIEDAMOUNT = @AMOUNTCONVERTED,
                            @APPLICATIONDESIGNATIONID = @APPLICATIONDESIGNATIONID,
                            @CHANGEAGENTID = @CHANGEAGENTID,
                            @CREATIONDATE = @CREATIONDATE,
                            @MGCLAIMREVENUESPLITID = @MGCLAIMREVENUESPLITID output;
                    end
                    else
                    begin
                        select @MGCLAIMINSTALLMENTSPLITID = ID
                        from dbo.INSTALLMENTSPLIT
                        where
                            PLEDGEID = @MGCLAIMREVENUEID and
                            DESIGNATIONID = @MGCLAIMDESIGNATIONID
                    end

                    -- Determine amount left to pay for the claim.  If the amount applied is greater than that, set that amount to the amount left to pay.

                    declare @AMOUNTLEFTONCLAIM money
                    set @AMOUNTLEFTONCLAIM = dbo.UFN_INSTALLMENT_GETINSTALLMENTSPLITBALANCE(@MGCLAIMINSTALLMENTSPLITID)

                    if @AMOUNTCONVERTED > @AMOUNTLEFTONCLAIM
                        set @AMOUNTCONVERTED = @AMOUNTLEFTONCLAIM

                    if @AMOUNTCONVERTED > 0
                    begin
                        set @INSTALLMENTSPLITPAYMENTID = newid()
                        insert into dbo.INSTALLMENTSPLITPAYMENT (ID, PAYMENTID, PLEDGEID, INSTALLMENTSPLITID, AMOUNT, APPLICATIONCURRENCYID, APPLICATIONEXCHANGERATEID, DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID)
                            values (@INSTALLMENTSPLITPAYMENTID, @REVENUESPLITID, @MGCLAIMREVENUEID, @MGCLAIMINSTALLMENTSPLITID, @AMOUNTCONVERTED, @MGCLAIMTRANSACTIONCURRENCYID, @APPLICATIONEXCHANGERATEID, @CREATIONDATE, @CREATIONDATE, @CHANGEAGENTID, @CHANGEAGENTID)

                        insert into @DESIGNATIONSPAID (INSTALLMENTSPLITPAYMENTID, DESIGNATIONID, AMOUNT, REVENUESPLITID, APPLICATIONID, MGCLAIMREVENUEID)
                            values (@INSTALLMENTSPLITPAYMENTID, @APPLICATIONDESIGNATIONID, @APPLIEDAMOUNT, @REVENUESPLITID, @MGCLAIMREVENUESPLITID, @MGCLAIMREVENUEID)
                    end

                    fetch next from APPLICATIONSCURSOR into @APPLICATIONID, @APPLIEDAMOUNT, @APPLICATIONTYPE, @APPLICATIONDESIGNATIONID;
                end
                --When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long

                close APPLICATIONSCURSOR
                deallocate APPLICATIONSCURSOR

                declare    RELATIONAPPLICATIONSCURSOR cursor local fast_forward for
                    select
                        REVENUESPLITID,
                        APPLIED,
                        TYPECODE,
                        DESIGNATIONID
                    from dbo.UFN_RECONCILERELATION_GETAPPLICATIONWITHCHILDREN_FROMITEMLISTXML(@RELATIONREVENUESTREAM)
                    where APPLIED > 0;

                open RELATIONAPPLICATIONSCURSOR;

                fetch next from RELATIONAPPLICATIONSCURSOR into @APPLICATIONID, @APPLIEDAMOUNT, @APPLICATIONTYPE, @APPLICATIONDESIGNATIONID;

                while @@FETCH_STATUS = 0 
                begin
                    exec dbo.USP_RECONCILEMATCHINGGIFT_GENERATEANDPAYCLAIM @INSTALLMENTSPLITPAYMENTID = @INSTALLMENTSPLITPAYMENTID output,
                        @REVENUESPLITID = @REVENUESPLITID,
                        @APPLICATIONID = @APPLICATIONID,
                        @CONSTITUENTID = @CONSTITUENTID,
                        @APPLICATIONDESIGNATIONID = @APPLICATIONDESIGNATIONID,
                        @APPLIEDAMOUNT = @APPLIEDAMOUNT,
                        @MGCLAIMINSTALLMENTSPLITID = @MGCLAIMINSTALLMENTSPLITID,
                        @DATE = @DATE,
                        @CHANGEAGENTID = @CHANGEAGENTID,
                        @CREATIONDATE = @CREATIONDATE;

                    declare @MGCLAIMREVENUEID_REL uniqueidentifier;
                    select @MGCLAIMREVENUEID_REL = PLEDGEID
                      from dbo.INSTALLMENTSPLITPAYMENT
                     where ID = @INSTALLMENTSPLITPAYMENTID;

                    insert into @DESIGNATIONSPAID (INSTALLMENTSPLITPAYMENTID, DESIGNATIONID, AMOUNT, REVENUESPLITID, APPLICATIONID, MGCLAIMREVENUEID)
                        values (@INSTALLMENTSPLITPAYMENTID, @APPLICATIONDESIGNATIONID, @APPLIEDAMOUNT, @REVENUESPLITID, @APPLICATIONID, @MGCLAIMREVENUEID_REL);

                    fetch next from RELATIONAPPLICATIONSCURSOR into @APPLICATIONID, @APPLIEDAMOUNT, @APPLICATIONTYPE, @APPLICATIONDESIGNATIONID;
                end
                --When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long

                close RELATIONAPPLICATIONSCURSOR;
                deallocate RELATIONAPPLICATIONSCURSOR;

                -- Set the value of @TOTALAMOUNTAPPLIED since it's an output parameter

                select @TOTALAMOUNTAPPLIED = sum(AMOUNT)
                from @DESIGNATIONSPAID;

                -- Verify the total amount applied isn't greater than the unapplied split amount

                if @TOTALAMOUNTAPPLIED > @REVENUESPLITAMOUNT
                    raiserror('The total amount applied cannot be greater than the split amount.', 13, 1);

                declare @NEWDESIGNATIONEXISTS bit, @CLAIMSPAIDCOUNT int
                if exists (select 1 from @DESIGNATIONSPAID where DESIGNATIONID <> @PAYMENTDESIGNATIONID)
                    set @NEWDESIGNATIONEXISTS = 1
                else
                    set @NEWDESIGNATIONEXISTS = 0

                select @CLAIMSPAIDCOUNT = count(*) from @DESIGNATIONSPAID

                declare @REVENUESPLITDESIGNATIONCHANGED uniqueidentifier

                -- Check if the payment splits that apply to the claim need to be updated

                if @CLAIMSPAIDCOUNT > 0 and (@NEWDESIGNATIONEXISTS = 1 or @TOTALAMOUNTAPPLIED < @REVENUESPLITAMOUNT or @CLAIMSPAIDCOUNT > 1)
                begin    
                    declare @DESIGNATIONSPAIDXML xml;
                    set @DESIGNATIONSPAIDXML = (select  INSTALLMENTSPLITPAYMENTID,
                                                        DESIGNATIONID,
                                                        REVENUESPLITID,
                                                        AMOUNT, 
                                                        MGCLAIMREVENUEID as APPLICATIONID
                                                from @DESIGNATIONSPAID
                                                for xml raw('ITEM'),type,elements,root('DESIGNATIONSPAID'),binary base64);

                    exec dbo.USP_RECONCILEMATCHINGGIFT_UPDATEPAYMENTSPLITS @REVENUESPLITID = @REVENUESPLITID,
                        @TOTALAMOUNTAPPLIED = @TOTALAMOUNTAPPLIED,
                        @REVENUESPLITAMOUNT = @REVENUESPLITAMOUNT,
                        @REVENUEID = @REVENUEID,
                        @NEWDESIGNATIONEXISTS = @NEWDESIGNATIONEXISTS,
                        @CLAIMSPAIDCOUNT = @CLAIMSPAIDCOUNT,
                        @DESIGNATIONSPAIDXML = @DESIGNATIONSPAIDXML,
                        @PAYMENTDESIGNATIONID = @PAYMENTDESIGNATIONID,
                        @POSTDATE = @POSTDATE,
                        @CHANGEAGENTID = @CHANGEAGENTID,
                        @CREATIONDATE = @CREATIONDATE,
                        @REVENUESPLITDESIGNATIONCHANGED = @REVENUESPLITDESIGNATIONCHANGED output;
                end
                else
                begin
                    --If the payment splits are alright as is, handle auto-creating recognition credits on them.


                    declare @CREATEDSPLITS xml                
                    select @CREATEDSPLITS = 
                    (
                        select
                            PD.REVENUESPLITID as ID,
                            CURRENCYVALUES.BASEAMOUNT as AMOUNT,
              PD.DESIGNATIONID as DESIGNATIONID
                        from @DESIGNATIONSPAID PD
                        cross apply dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(PD.AMOUNT,
                                                            null,
                                                            @PAYMENTBASECURRENCYID,
                                                            @PAYMENTBASEEXCHANGERATEID,
                                                            @PAYMENTTRANSACTIONCURRENCYID,
                                                            null,
                                                            null,
                                                            null,
                                                            @PAYMENTORGANIZATIONEXCHANGERATEID,
                                                            0) as CURRENCYVALUES
                        for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64
                    );
                    -- added for when relation MGC is being reconciled.  

                    if @MGCLAIMREVENUEID is null
                    begin
                        select @MGCLAIMREVENUEID = MGCLAIMREVENUEID
                        from @DESIGNATIONSPAID;
                    end

                    declare @REVENUEGIVENANONYMOUSLY bit
                    select @REVENUEGIVENANONYMOUSLY =  REVENUE_EXT.GIVENANONYMOUSLY
                    from dbo.REVENUESPLIT
                    inner join dbo.REVENUE_EXT on REVENUE_EXT.ID = REVENUESPLIT.REVENUEID
                    where REVENUESPLIT.ID = @REVENUESPLITID;

                    -- only create MGC recognitions based on Matching gift preferences for recognitions

                    exec dbo.USP_RECOGNITIONCREDITS_ADDBASEDONMGCPREFERENCES
                        @SPLITS = @CREATEDSPLITS,
                        @APPLICATIONID = @MGCLAIMREVENUEID,
                        @CHANGEAGENTID = @CHANGEAGENTID,
                        @CURRENTDATE = @CREATIONDATE,
                        @REVENUEGIVENANONYMOUSLY = @REVENUEGIVENANONYMOUSLY
                end

                -- If a split had its designation changed, remove its current campaigns.  Campaigns will be redefaulted in below.

                if @REVENUESPLITDESIGNATIONCHANGED is not null
                begin
                    declare @contextCache varbinary(128);

                    --cache current context information

                    set @contextCache = CONTEXT_INFO();

                    --set CONTEXT_INFO to @CHANGEAGENTID

                    set CONTEXT_INFO @CHANGEAGENTID;

                    delete from dbo.REVENUESPLITCAMPAIGN where REVENUESPLITID = @REVENUESPLITDESIGNATIONCHANGED

                    --reset CONTEXT_INFO to previous value

                    if not @contextCache is null
                        set CONTEXT_INFO @contextCache;
                end

                -- Copy campaigns from the claims to the payment.  This needs to be done last since the split used may change 

                -- after USP_RECONCILEMATCHINGGIFT_UPDATEPAYMENTSPLITS is called.

                insert into dbo.REVENUESPLITCAMPAIGN (REVENUESPLITID, CAMPAIGNID, CAMPAIGNSUBPRIORITYID, DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID)
                select INSTALLMENTSPLITPAYMENT.PAYMENTID, REVENUESPLITCAMPAIGN.CAMPAIGNID, REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID, @CREATIONDATE, @CREATIONDATE, @CHANGEAGENTID, @CHANGEAGENTID
                from @DESIGNATIONSPAID DESIGNATIONSPAID
                -- Join to INSTALLMENTSPLITPAYMENT to get the correct REVENUESPLITID.  The REVENUESPLITID in @DESIGNATIONSPAID

                -- may be incorrect because USP_RECONCILEMATCHINGGIFT_UPDATEPAYMENTSPLITS has run.

                inner join dbo.INSTALLMENTSPLITPAYMENT on INSTALLMENTSPLITPAYMENT.ID = DESIGNATIONSPAID.INSTALLMENTSPLITPAYMENTID
                inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLITCAMPAIGN.REVENUESPLITID = DESIGNATIONSPAID.APPLICATIONID
                inner join dbo.CAMPAIGN on REVENUESPLITCAMPAIGN.CAMPAIGNID = CAMPAIGN.ID
                where
                    CAMPAIGN.ISACTIVE = 1 and
                    -- Make sure the campaigns don't already exist on the payment

                    not exists (    select 1 
                                    from dbo.REVENUESPLITCAMPAIGN 
                                    where 
                                        REVENUESPLITID = INSTALLMENTSPLITPAYMENT.PAYMENTID and
                                        CAMPAIGNID = REVENUESPLITCAMPAIGN.CAMPAIGNID and
                                        (CAMPAIGNSUBPRIORITYID = REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID or
                                        (CAMPAIGNSUBPRIORITYID is null and REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID is null))
                                )
            end try
            begin catch
                exec dbo.USP_RAISE_ERROR;
            end catch