USP_PLEDGEPAYMENT_EDIT

Stored proc to update the pledge payment specific information.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@AMOUNT money IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_PLEDGEPAYMENT_EDIT
            (
                @ID uniqueidentifier,
                @AMOUNT money = 0,
                @CHANGEAGENTID uniqueidentifier,
                @CHANGEDATE datetime
            )
            as 
            set nocount on;

            declare @OLDINSTALLMENTPAYMENTAMOUNT money;
            declare @INSTALLMENTSUM money;
            declare @TOTALAMOUNTAPPLIED money;
            declare @STREAMID uniqueidentifier;
            declare @NEWESTINSTALLMENT uniqueidentifier;
            declare @OLDINSTALLMENTPAYMENTCOUNT int;

            --get pledge ID

            select top 1 @STREAMID = PLEDGEID from dbo.INSTALLMENTPAYMENT where PAYMENTID = @ID;
            if @STREAMID is null
                raiserror('The payment is not currently applied to any pledges.', 13, 1);

            --Determine if the installmentpayments are being updated

            select 
                @OLDINSTALLMENTPAYMENTAMOUNT = coalesce(sum(AMOUNT), 0),
                @OLDINSTALLMENTPAYMENTCOUNT = coalesce(count(*), 0)
            from dbo.INSTALLMENTSPLITPAYMENT 
            where PAYMENTID = @ID;

            if @OLDINSTALLMENTPAYMENTAMOUNT <> @AMOUNT
            begin
                if @OLDINSTALLMENTPAYMENTAMOUNT < @AMOUNT --Need to just apply more money to the pledge

                begin
                    set @INSTALLMENTSUM = @AMOUNT - @OLDINSTALLMENTPAYMENTAMOUNT;

                    exec dbo.USP_PLEDGE_PAYINSTALLMENTS @STREAMID, @ID, @INSTALLMENTSUM, @CHANGEAGENTID, @CHANGEDATE;

                    set @TOTALAMOUNTAPPLIED = @TOTALAMOUNTAPPLIED + @OLDINSTALLMENTPAYMENTAMOUNT + @INSTALLMENTSUM;
                end
                else --Need to delete the installments that create the "overpayment", and then apply the remainder to bring it back up to snuff

                begin
                    while @OLDINSTALLMENTPAYMENTAMOUNT > @AMOUNT
                    begin

                        select top 1 @NEWESTINSTALLMENT = ID 
                        from dbo.INSTALLMENTSPLITPAYMENT
                        where PAYMENTID = @ID
                        order by DATECHANGED desc;

                        if @OLDINSTALLMENTPAYMENTCOUNT = 1
                            update dbo.INSTALLMENTSPLITPAYMENT
                            set AMOUNT = @AMOUNT,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CHANGEDATE
                            where ID = @NEWESTINSTALLMENT;
                        else
                            exec dbo.USP_INSTALLMENTSPLITPAYMENT_DELETEBYID_WITHCHANGEAGENTID @NEWESTINSTALLMENT, @CHANGEAGENTID

                        select 
                            @OLDINSTALLMENTPAYMENTAMOUNT = coalesce(sum(AMOUNT), 0),
                            @OLDINSTALLMENTPAYMENTCOUNT = coalesce(count(*), 0)
                        from dbo.INSTALLMENTPAYMENT 
                        where PAYMENTID = @ID;
                    end

                    if @OLDINSTALLMENTPAYMENTAMOUNT < @AMOUNT --Add back any money that needs to be added

                    begin
                        set @INSTALLMENTSUM = @AMOUNT - @OLDINSTALLMENTPAYMENTAMOUNT;

                        exec dbo.USP_PLEDGE_PAYINSTALLMENTS @STREAMID, @ID, @INSTALLMENTSUM, @CHANGEAGENTID, @CHANGEDATE;
                    end

                    set @TOTALAMOUNTAPPLIED = @TOTALAMOUNTAPPLIED + @AMOUNT;
                end

                --Blow away the splits and reallocate them

                exec dbo.USP_REVENUE_GETSPLITS_UPDATEFROMXML @ID, null, @CHANGEAGENTID, @CHANGEDATE;
                exec dbo.USP_REVENUE_COPYSPLITS @STREAMID, @ID, @CHANGEAGENTID, @CHANGEDATE;
            end