USP_MATCHINGGIFTCLAIM_AMOUNT_UPDATE

Update Matching gift claim data based on the change to the original payment amount.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@NEWPAYMENTAMOUNT money IN
@OLDAMOUNT money IN
@OPTIONSELECTED smallint IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN

Definition

Copy


        CREATE procedure dbo.USP_MATCHINGGIFTCLAIM_AMOUNT_UPDATE
        (
            @ID as uniqueidentifier, 
            @NEWPAYMENTAMOUNT money, 
            @OLDAMOUNT money, 
            @OPTIONSELECTED smallint
            @CHANGEAGENTID uniqueidentifier, 
            @CURRENTDATE datetime
        )
        as
        begin
            set nocount on;  

            declare @TRANSACTIONCURRENCYID uniqueidentifier;
            declare @BASECURRENCYID uniqueidentifier;
            declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
            declare @BASEEXCHANGERATEID uniqueidentifier;
            declare @REVENUEMATCHINGGIFTID uniqueidentifier;
            declare @OLDTRANSACTIONAMOUNT money;
            declare @NEWTRANSACTIONAMOUNT money;
            declare @NEWBASEAMOUNT money;
            declare @NEWORGANIZATIONAMOUNT money;
            declare @DATE datetime
            declare @DECIMALDIGITS smallint;
            declare @ROUNDINGTYPECODE smallint;
            declare @NUMBEROFMATCHINGGIFTS smallint;
            declare @MATCHINGFACTOR decimal(5,2);
            declare @SPLITS xml;
            declare @MAXMATCHPERGIFT money;
            declare @MATCHINGGIFTMAXMATCHANNUAL money;
            declare @MATCHINGGIFTMAXMATCHTOTAL money;
            declare @CAPPEDNEWTRANSACTIONAMOUNT money;

            if @CHANGEAGENTID is null
                exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

            if @CURRENTDATE is null
                set @CURRENTDATE = GetDate();

            --Option Selected: 0 - Do not adjust, 1 - Adjust Proportionally, 2 - Adjust based on Constituent defaults 

            --New amount - Proportionally


            if @OLDAMOUNT > 0 and @OPTIONSELECTED = 1 
            begin   

                --Include only those matching gifts that do not have a payment associated with it.

                select @NUMBEROFMATCHINGGIFTS = count(ID)
                from dbo.[REVENUEMATCHINGGIFT] 
                where [MGSOURCEREVENUEID] = @ID 
                and REVENUEMATCHINGGIFT.ID not in (select PLEDGEID from INSTALLMENTSPLITPAYMENT);

                --Checking to make sure matching gifts exists before creating a cursor.

                if @NUMBEROFMATCHINGGIFTS > 0
                begin      
                    declare REVENUEMATCHINGGIFTCURSOR cursor local fast_forward for
                    select [ID] 
                    from dbo.[REVENUEMATCHINGGIFT] 
                    where [MGSOURCEREVENUEID] = @ID 
                    and REVENUEMATCHINGGIFT.ID not in (select PLEDGEID from INSTALLMENTSPLITPAYMENT);

                    open REVENUEMATCHINGGIFTCURSOR;
                    fetch next from REVENUEMATCHINGGIFTCURSOR into @REVENUEMATCHINGGIFTID;

                    while (@@FETCH_STATUS = 0)
                    begin
                        select
                            @DATE = DATE,
                            @BASECURRENCYID = CURRENCY.ID,
                            @TRANSACTIONCURRENCYID = FINANCIALTRANSACTION.TRANSACTIONCURRENCYID,
                            @ORGANIZATIONEXCHANGERATEID = FINANCIALTRANSACTION.ORGEXCHANGERATEID,
                            @BASEEXCHANGERATEID = FINANCIALTRANSACTION.BASEEXCHANGERATEID,
                            @OLDTRANSACTIONAMOUNT = FINANCIALTRANSACTION.TRANSACTIONAMOUNT,
                            @DECIMALDIGITS = CURRENCY.DECIMALDIGITS,
                            @ROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE
                        from dbo.FINANCIALTRANSACTION
                        inner join REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
                        inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
                        inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
                        inner join dbo.CURRENCY on isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, CURRENCYSET.BASECURRENCYID) = CURRENCY.ID
                        where FINANCIALTRANSACTION.ID = @REVENUEMATCHINGGIFTID
                            and FINANCIALTRANSACTION.DELETEDON is null;

                        --In a nutshell here is what we are doing below. Consider the following example: We have a payment for $100, there is a

                        --matching gift claim for $50 with 3 splits of $10, $15, and $25 each

                        --When we change the original payment to $50 and select the option to adjust proportionally in the dialog shown,

                        --we calculate the new matching gift claim amount $50 (new payment amount) * $50 (matching gift claim amount)/$100 (original payment)

                        --we also get the decimal digits and rounding type from the currency and set the amount appropriately. This is step 1. You will see

                        --more steps below.


                        merge dbo.FINANCIALTRANSACTION as target
                        using (select FINANCIALTRANSACTION.ID, dbo.UFN_CURRENCY_ROUND((@NEWPAYMENTAMOUNT*(FINANCIALTRANSACTION.TRANSACTIONAMOUNT/@OLDAMOUNT)), @DECIMALDIGITS, @ROUNDINGTYPECODE) as TranAmount
                            from dbo.FINANCIALTRANSACTION
                            inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
                            inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
                            inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
                            inner join dbo.CURRENCY on CURRENCY.ID = isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, CURRENCYSET.BASECURRENCYID)
                            where FINANCIALTRANSACTION.ID = @REVENUEMATCHINGGIFTID
                                and FINANCIALTRANSACTION.DELETEDON is null) as source
                        on (source.ID = target.ID)
                        when matched then
                          update set
                          TRANSACTIONAMOUNT = source.TranAmount,
                          CHANGEDBYID = @CHANGEAGENTID,
                          DATECHANGED = @CURRENTDATE;
                        /*
                        update dbo.REVENUE 
                        set TRANSACTIONAMOUNT = dbo.UFN_CURRENCY_ROUND((@NEWPAYMENTAMOUNT*(REVENUE.TRANSACTIONAMOUNT/@OLDAMOUNT)), @DECIMALDIGITS, @ROUNDINGTYPECODE), 
                            CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CURRENTDATE from dbo.REVENUE 
                        inner join dbo.CURRENCY on CURRENCY.ID = REVENUE.BASECURRENCYID
                        where REVENUE.ID = @REVENUEMATCHINGGIFTID;
                        */
                        select 
                            @NEWTRANSACTIONAMOUNT = FINANCIALTRANSACTION.TRANSACTIONAMOUNT,
                            @MAXMATCHPERGIFT = MATCHINGGIFTCONDITION.MAXMATCHPERGIFT
                        from dbo.FINANCIALTRANSACTION
                        inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
                        inner join dbo.REVENUEMATCHINGGIFT on FINANCIALTRANSACTION.ID = REVENUEMATCHINGGIFT.ID
                        inner join dbo.MATCHINGGIFTCONDITION on REVENUEMATCHINGGIFT.MATCHINGGIFTCONDITIONID = MATCHINGGIFTCONDITION.ID
                        where FINANCIALTRANSACTION.ID = @REVENUEMATCHINGGIFTID
                            and FINANCIALTRANSACTION.DELETEDON is null;

                        set @CAPPEDNEWTRANSACTIONAMOUNT = @NEWTRANSACTIONAMOUNT;
                        if @NEWTRANSACTIONAMOUNT > @MAXMATCHPERGIFT
                            set @CAPPEDNEWTRANSACTIONAMOUNT = @MAXMATCHPERGIFT;

                        --step 2: Look at step 1 above for more information and I am following the same example I provided above.

                        --Get base and organization amounts based on currency, exchange rates, and transaction amount.

                        --Update these amounts


                        exec dbo.USP_CURRENCY_GETCURRENCYVALUES 
                            @AMOUNT=@CAPPEDNEWTRANSACTIONAMOUNT
                            @DATE=@DATE,    
                            @BASECURRENCYID=@BASECURRENCYID
                            @BASEEXCHANGERATEID=@BASEEXCHANGERATEID
                            @TRANSACTIONCURRENCYID=@TRANSACTIONCURRENCYID,
                            @BASEAMOUNT=@NEWBASEAMOUNT output,
                            @ORGANIZATIONAMOUNT=@NEWORGANIZATIONAMOUNT output,
                            @ORGANIZATIONEXCHANGERATEID=@ORGANIZATIONEXCHANGERATEID

                        update dbo.FINANCIALTRANSACTION set
                            TRANSACTIONAMOUNT = @CAPPEDNEWTRANSACTIONAMOUNT,
                            BASEAMOUNT = @NEWBASEAMOUNT,
                            ORGAMOUNT = @NEWORGANIZATIONAMOUNT,
                            ORGEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
                            TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
                            BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where ID = @REVENUEMATCHINGGIFTID
                            and DELETEDON is null;  

                        --step 3: Look at steps 1 and 2 above for more information and I am following the same example I provided above.

                        --Get the data you need into SPLITS xml and recalculate the split amounts based on proportions. Take a look at

                        --UFN_MATCHINGGIFTCLAIM_REPROPORTIONAMOUNTS for the logic.

                        --In the example above, we have 3 split amounts $10, $15, and $25 each. New matching gift amount is $25.

                        --These split amounts will be converted to $5, $7.5, and $12.5 each.

                        --using UFN_REVENUESPLIT_CONVERTAMOUNTSINXML, get the right base and organization amounts

                        --using USP_REVENUE_GETSPLITS_2_CUSTOMUPDATEFROMXML, update the amounts.


                        set @SPLITS =(
                            select
                                SPLIT.ID,
                                SPLIT.DESIGNATIONID,
                                SPLIT.APPLICATIONCODE,
                                SPLIT.TYPECODE,
                                SPLIT.TRANSACTIONAMOUNT as AMOUNT,
                                SPLIT.AMOUNT as BASEAMOUNT,
                                SPLIT.ORGANIZATIONAMOUNT,
                                SPLIT.BASECURRENCYID,
                                SPLIT.ORGANIZATIONEXCHANGERATEID,
                                SPLIT.TRANSACTIONCURRENCYID    ,
                                SPLIT.BASEEXCHANGERATEID
                            from dbo.UFN_REVENUE_GETSPLITS_2(@REVENUEMATCHINGGIFTID) SPLIT
                            for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64
                        );

                        set @SPLITS = dbo.UFN_MATCHINGGIFTCLAIM_REPROPORTIONAMOUNTS(@SPLITS, @CAPPEDNEWTRANSACTIONAMOUNT, @OLDTRANSACTIONAMOUNT,@DECIMALDIGITS, @ROUNDINGTYPECODE);

                        set @SPLITS = dbo.UFN_REVENUESPLIT_CONVERTAMOUNTSINXML(@SPLITS, @BASECURRENCYID, @ORGANIZATIONEXCHANGERATEID, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID)          

                        exec dbo.USP_REVENUE_GETSPLITS_2_CUSTOMUPDATEFROMXML @REVENUEMATCHINGGIFTID, @SPLITS, @CHANGEAGENTID,@CURRENTDATE;

                        fetch next from REVENUEMATCHINGGIFTCURSOR into @REVENUEMATCHINGGIFTID;
                    end

                    close REVENUEMATCHINGGIFTCURSOR;
                    deallocate REVENUEMATCHINGGIFTCURSOR; 
                end
            end


            -- Adjust the unpaid, automatically generated matching gifts according to the organization's settings

            if @OPTIONSELECTED = 2 
            begin    
                -- Store matching gifts to update in a table variable to avoid running the query several times

                declare @MATCHINGGIFTS table (
                    ID uniqueidentifier,
                    [DATE] datetime,
                    MATCHINGGIFTCONDITIONID uniqueidentifier,
                    REVENUETYPECODE tinyint,
                    MATCHTYPECODE tinyint,
                    MINMATCHPERGIFT money,
                    MAXMATCHPERGIFT money,
                    MAXMATCHANNUAL money,
                    MAXMATCHTOTAL money,
                    MATCHINGFACTOR decimal(5,2),
                    MGORGID uniqueidentifier
                );
                --Include only those matching gifts that do not have a payment associated with them

                --and that are associated with matching gift conditions.

                insert into @MATCHINGGIFTS (
                    ID, 
                    [DATE],
                    MATCHINGGIFTCONDITIONID,
                    REVENUETYPECODE,
                    MATCHTYPECODE,
                    MINMATCHPERGIFT,
                    MAXMATCHPERGIFT,
                    MAXMATCHANNUAL,
                    MAXMATCHTOTAL,
                    MATCHINGFACTOR,
                    MGORGID
                )
                select 
                    REVENUEMATCHINGGIFT.ID,
                    cast(FINANCIALTRANSACTION.[DATE] as datetime) as DATE,
                    MATCHINGGIFTCONDITION.ID as MATCHINGGIFTCONDITIONID,
                    MATCHINGGIFTCONDITION.REVENUETYPECODE,
                    MATCHINGGIFTCONDITION.MATCHTYPECODE,
                    MATCHINGGIFTCONDITION.MINMATCHPERGIFT,
                    MATCHINGGIFTCONDITION.MAXMATCHPERGIFT,
                    MATCHINGGIFTCONDITION.MAXMATCHANNUAL,
                    MATCHINGGIFTCONDITION.MAXMATCHTOTAL,
                    MATCHINGGIFTCONDITION.MATCHINGFACTOR,
                    MATCHINGGIFTCONDITION.ORGANIZATIONID as MGORGID
                from 
                    dbo.REVENUEMATCHINGGIFT
                    inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = REVENUEMATCHINGGIFT.ID
                    inner join dbo.MATCHINGGIFTCONDITION on MATCHINGGIFTCONDITION.ORGANIZATIONID = FINANCIALTRANSACTION.CONSTITUENTID
                where
                    MGSOURCEREVENUEID = @ID
                    -- must filter matching gift conditions by revenue in REVENUEMATCHINGGIFT

                    -- previous code would return a row for each matching gift condition

                    and REVENUEMATCHINGGIFT. MATCHINGGIFTCONDITIONID = MATCHINGGIFTCONDITION. ID
                    and FINANCIALTRANSACTION.DELETEDON is null
                    and REVENUEMATCHINGGIFT.ID not in (select PLEDGEID from INSTALLMENTSPLITPAYMENT)
                    and REVENUEMATCHINGGIFT.ID not in (select WRITEOFF.REVENUEID from dbo.WRITEOFFSPLIT inner join dbo.WRITEOFF on WRITEOFF.ID = WRITEOFFSPLIT.WRITEOFFID)
                    and exists (select 1 from FINANCIALTRANSACTIONLINEITEM 
                                         inner join REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                                         where FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
                                         and REVENUESPLIT_EXT.TYPECODE = MATCHINGGIFTCONDITION.REVENUETYPECODE);

                if exists (select 1 from @MATCHINGGIFTS)
                begin
                    declare @MGORGID uniqueidentifier;
                    declare @MATCHINGGIFTCONDITIONID uniqueidentifier;
                    declare @MATCHTYPECODE tinyint;
                    declare @MINMATCHPERGIFT money;
                    declare @ORIGINALGIFTAMOUNT money;
                    declare @MGSPLITS xml;
                    declare @REVENUETYPECODE tinyint;
                    declare @APPLICATIONCODE tinyint = 0;
                    declare @CONSTITUENTID uniqueidentifier;
                    declare @RECEIPTAMOUNT money;

                    -- Get source revenue information

                    select
                        @CONSTITUENTID = FINANCIALTRANSACTION.CONSTITUENTID,
                        @TRANSACTIONCURRENCYID = FINANCIALTRANSACTION.TRANSACTIONCURRENCYID,
                        @BASECURRENCYID = isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, CURRENCYSET.BASECURRENCYID),
                        @BASEEXCHANGERATEID = FINANCIALTRANSACTION.BASEEXCHANGERATEID,
                        @RECEIPTAMOUNT = REVENUE_EXT.RECEIPTAMOUNT
                    from dbo.FINANCIALTRANSACTION
                    inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
                    inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
                    inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
                    where FINANCIALTRANSACTION.ID = @ID
                        and FINANCIALTRANSACTION.DELETEDON is null;

                    select
                        @DECIMALDIGITS = DECIMALDIGITS,
                        @ROUNDINGTYPECODE = ROUNDINGTYPECODE
                    from dbo.CURRENCY
                    where ID = @TRANSACTIONCURRENCYID;

                    -- Clear the revenue amounts so that they don't affect total mg claims made to the organization

                    update dbo.FINANCIALTRANSACTION
                    set
                        BASEAMOUNT = 0,
                        TRANSACTIONAMOUNT = 0,
                        ORGAMOUNT = 0
                    where
                        exists (select 1 from @MATCHINGGIFTS MATCHINGGIFTS where MATCHINGGIFTS.ID = FINANCIALTRANSACTION.ID)
                        and FINANCIALTRANSACTION.DELETEDON is null

                    -- Clear all revenue splits so that they can be regenerated.

                    delete from dbo.REVENUESPLIT
                    where 
                        exists (
                            select 
                                1 
                            from 
                                dbo.REVENUEMATCHINGGIFT
                            where
                                REVENUEMATCHINGGIFT.MGSOURCEREVENUEID = @ID
                                and REVENUEMATCHINGGIFT.ID = REVENUESPLIT.REVENUEID
                                and REVENUEMATCHINGGIFT.MATCHINGGIFTCONDITIONID is not null
                                and REVENUEMATCHINGGIFT.ID not in (select PLEDGEID from INSTALLMENTSPLITPAYMENT)
                                and REVENUEMATCHINGGIFT.ID not in (select WRITEOFF.REVENUEID from dbo.WRITEOFFSPLIT inner join dbo.WRITEOFF on WRITEOFF.ID = WRITEOFFSPLIT.WRITEOFFID)

                        )

                    declare REVENUEMATCHINGGIFTDEFAULTCURSOR cursor local fast_forward for
                        select 
                            MATCHINGGIFTS.ID,
                            MATCHINGGIFTS.DATE,
                            MATCHINGGIFTS.MATCHINGGIFTCONDITIONID,
                            MATCHINGGIFTS.REVENUETYPECODE,
                            MATCHINGGIFTS.MATCHTYPECODE,
                            MATCHINGGIFTS.MINMATCHPERGIFT,
                            MATCHINGGIFTS.MAXMATCHPERGIFT,
                            MATCHINGGIFTS.MAXMATCHANNUAL,
                            MATCHINGGIFTS.MAXMATCHTOTAL,
                            MATCHINGGIFTS.MATCHINGFACTOR,
                            MATCHINGGIFTS.MGORGID
                        from 
                            @MATCHINGGIFTS MATCHINGGIFTS

                    open REVENUEMATCHINGGIFTDEFAULTCURSOR;
                    fetch next from REVENUEMATCHINGGIFTDEFAULTCURSOR into @REVENUEMATCHINGGIFTID, @DATE, @MATCHINGGIFTCONDITIONID, @REVENUETYPECODE, @MATCHTYPECODE, @MINMATCHPERGIFT, @MAXMATCHPERGIFT, @MATCHINGGIFTMAXMATCHANNUAL, @MATCHINGGIFTMAXMATCHTOTAL, @MATCHINGFACTOR, @MGORGID;

                    -- For each matching gift claim, regenerate the fields as if the system were auto-generating it.

                    while (@@FETCH_STATUS = 0)
                    begin

                        -- Bug 30719 - AdamBu 4/1/09 - Only generate matching gift claims based on RECEIPTAMOUNT 

                        -- if all the splits in the revenue should be matched

                        declare @GENERATECLAIMS bit = 1;

                        -- Initialize/Reset variables                        

                        set @MATCHINGGIFTCONDITIONID = null;
                        set @CAPPEDNEWTRANSACTIONAMOUNT = 0;
                        set @APPLICATIONCODE = 0;

                        -- Recalculate the claim amount based on the revenue type code and get application code

                        select @ORIGINALGIFTAMOUNT = sum(TRANSACTIONAMOUNT)
                        from dbo.FINANCIALTRANSACTIONLINEITEM
                        inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                        where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and REVENUESPLIT_EXT.TYPECODE = @REVENUETYPECODE
                            and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1;

                        --AKG CR299627-050108 Determine if the full amount or only the receipt amount should be used for claim generation

                        if @MATCHTYPECODE = 1 and exists(select FINANCIALTRANSACTIONLINEITEM.ID from dbo.FINANCIALTRANSACTIONLINEITEM inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID=@ID and (case when REVENUESPLIT_EXT.TYPECODE = 17 then 9 else REVENUESPLIT_EXT.TYPECODE end) = @REVENUETYPECODE and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1)
                        begin
                            set @CAPPEDNEWTRANSACTIONAMOUNT = dbo.UFN_CURRENCY_ROUND(@RECEIPTAMOUNT * @MATCHINGFACTOR, @DECIMALDIGITS, @ROUNDINGTYPECODE);
                            if exists(
                                select FINANCIALTRANSACTIONLINEITEM.ID
                                from dbo.FINANCIALTRANSACTIONLINEITEM
                                inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                                where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and (case when REVENUESPLIT_EXT.TYPECODE = 17 then 9 else REVENUESPLIT_EXT.TYPECODE end) <> @REVENUETYPECODE
                                    and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1
                            )
                                --If we only match tax deductible portions, but not all the splits on a revenue should

                                --    be matched, then we don't know how much to match for, so don't auto-generate claims.

                                set @GENERATECLAIMS = 0;
                        end
                        else
                        begin
                            set @CAPPEDNEWTRANSACTIONAMOUNT = dbo.UFN_CURRENCY_ROUND(@ORIGINALGIFTAMOUNT * @MATCHINGFACTOR, @DECIMALDIGITS, @ROUNDINGTYPECODE);
                        end

                        -- Adjust the amount based on the organization's max, min, and eligibility settings.

                        set @CAPPEDNEWTRANSACTIONAMOUNT = dbo.UFN_MATCHINGGIFTPLEDGE_CALCULATEMGAMOUNTINCURRENCY(@CONSTITUENTID,@MGORGID,@CAPPEDNEWTRANSACTIONAMOUNT,@DATE,@MAXMATCHPERGIFT,@MATCHINGGIFTMAXMATCHANNUAL,@MATCHINGGIFTMAXMATCHTOTAL,@TRANSACTIONCURRENCYID);

                        --If we cannot automatically generate claims, flag the record as eligible.

                        if @GENERATECLAIMS = 0 and (@CAPPEDNEWTRANSACTIONAMOUNT >= @MINMATCHPERGIFT) and @CAPPEDNEWTRANSACTIONAMOUNT > 0
                            update dbo.REVENUE_EXT
                            set ELIGIBLEFORMATCHINGGIFTCLAIM = 1,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = getdate()
                            where ID = @ID
                        else
                            update dbo.REVENUE_EXT
                            set ELIGIBLEFORMATCHINGGIFTCLAIM = 0,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = getdate()
                            where ID = @ID

                        -- If a claim would not have been originally generated, set the amount to 0. Leave the claim around for record keeping.

                        if (@CAPPEDNEWTRANSACTIONAMOUNT < @MINMATCHPERGIFT) or @CAPPEDNEWTRANSACTIONAMOUNT < 0 or @GENERATECLAIMS = 0
                            set @CAPPEDNEWTRANSACTIONAMOUNT = 0;

                        --Get base and organization amounts based on currency, exchange rates, and transaction amount.


                        exec dbo.USP_CURRENCY_GETCURRENCYVALUES 
                            @AMOUNT=@CAPPEDNEWTRANSACTIONAMOUNT
                            @DATE=@DATE,    
                            @BASECURRENCYID=@BASECURRENCYID
                            @BASEEXCHANGERATEID=@BASEEXCHANGERATEID
                            @TRANSACTIONCURRENCYID=@TRANSACTIONCURRENCYID,
                            @BASEAMOUNT=@NEWBASEAMOUNT output,
                            @ORGANIZATIONAMOUNT=@NEWORGANIZATIONAMOUNT output,
                            @ORGANIZATIONEXCHANGERATEID=@ORGANIZATIONEXCHANGERATEID output

                        update dbo.REVENUE set
                            TRANSACTIONAMOUNT = @CAPPEDNEWTRANSACTIONAMOUNT,
                            AMOUNT = @NEWBASEAMOUNT,
                            ORGANIZATIONAMOUNT = @NEWORGANIZATIONAMOUNT,
                            ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
                            TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
                            BASECURRENCYID = @BASECURRENCYID,
                            BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where ID = @REVENUEMATCHINGGIFTID;  

                        --Update the installments tables

                        update dbo.INSTALLMENT set 
                            TRANSACTIONAMOUNT = @CAPPEDNEWTRANSACTIONAMOUNT,
                            AMOUNT = @NEWBASEAMOUNT,
                            ORGANIZATIONAMOUNT = @NEWORGANIZATIONAMOUNT,
                            ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
                            TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
                            BASECURRENCYID = @BASECURRENCYID,
                            BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where REVENUEID = @REVENUEMATCHINGGIFTID;          

                        if @GENERATECLAIMS = 1
                        begin
                            -- Get new MG splits

                            -- get the splits for the current type code                        

                            select @SPLITS = (
                                select sum(FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT) AMOUNT, REVENUESPLIT_EXT.DESIGNATIONID, REVENUESPLIT_EXT.TYPECODE, @TRANSACTIONCURRENCYID [TRANSACTIONCURRENCYID], REVENUESPLIT_EXT.APPLICATIONCODE
                                from dbo.FINANCIALTRANSACTIONLINEITEM
                                inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                                where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and REVENUESPLIT_EXT.TYPECODE = @REVENUETYPECODE
                                    and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1
                                group by REVENUESPLIT_EXT.DESIGNATIONID, REVENUESPLIT_EXT.TYPECODE, REVENUESPLIT_EXT.APPLICATIONCODE
                                for xml raw('ITEM'),type,elements,root('SPLITS'),binary base64
                            );

                            set @MGSPLITS = dbo.UFN_MATCHINGGIFT_GETAUTOADDSPLITS_3(@ORIGINALGIFTAMOUNT,@CAPPEDNEWTRANSACTIONAMOUNT,@SPLITS,@REVENUETYPECODE)

                            -- add matching gift            

                            exec dbo.USP_MATCHINGGIFTCLAIM_READD @REVENUEMATCHINGGIFTID, @CHANGEAGENTID, @ID, @MGORGID, @DATE, @CAPPEDNEWTRANSACTIONAMOUNT, @MGSPLITS, @MATCHINGGIFTCONDITIONID, @TRANSACTIONCURRENCYID, @TRANSACTIONCURRENCYID, null;

                            delete from dbo.INSTALLMENTSPLIT where PLEDGEID = @REVENUEMATCHINGGIFTID;
                            exec dbo.USP_PLEDGE_GENERATEINSTALLMENTSPLITS @REVENUEMATCHINGGIFTID, @CHANGEAGENTID, @CURRENTDATE;
                        end

                        fetch next from REVENUEMATCHINGGIFTDEFAULTCURSOR into @REVENUEMATCHINGGIFTID, @DATE, @MATCHINGGIFTCONDITIONID, @REVENUETYPECODE, @MATCHTYPECODE, @MINMATCHPERGIFT, @MAXMATCHPERGIFT, @MATCHINGGIFTMAXMATCHANNUAL, @MATCHINGGIFTMAXMATCHTOTAL, @MATCHINGFACTOR, @MGORGID;
                    end

                    close REVENUEMATCHINGGIFTDEFAULTCURSOR;
                    deallocate REVENUEMATCHINGGIFTDEFAULTCURSOR; 
                end

            end
        end