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