USP_INSTALLMENT_WRITEOFFINSTALLMENTS
This procedure is used to write off installments for a pledge.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@WRITEOFFID | uniqueidentifier | IN | |
@WRITEOFFAMOUNT | money | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@ISEDIT | bit | IN | |
@INSTALLMENTS | xml | IN |
Definition
Copy
CREATE procedure dbo.USP_INSTALLMENT_WRITEOFFINSTALLMENTS
(
@WRITEOFFID uniqueidentifier,
@WRITEOFFAMOUNT money,
@CHANGEAGENTID uniqueidentifier,
@CHANGEDATE datetime,
@ISEDIT bit,
@INSTALLMENTS xml
)
as
begin
declare @WRITEOFFCURSOR cursor
declare @INSTALLMENTID uniqueidentifier
declare @PLEDGEID uniqueidentifier
declare @INSTALLMENTBALANCE money
declare @SUMINSTALLMENTWRITEOFFAMOUNTS money
declare @APPLIEDAMOUNT money
declare @TOTALPLEDGEBALANCE money
if @ISEDIT = 1
set @WRITEOFFCURSOR = cursor local fast_forward for
select
ID,
BALANCE,
isnull(WRITEOFFAMOUNT, 0) as WRITEOFFAMOUNT
from
dbo.UFN_WRITEOFF_GETINSTALLMENTSFOREDIT_FROMITEMLISTXML(@INSTALLMENTS);
else
set @WRITEOFFCURSOR = cursor local fast_forward for
select
ID,
BALANCE,
isnull(WRITEOFFAMOUNT,0) as WRITEOFFAMOUNT
from
dbo.UFN_INSTALLMENT_GETWRITEOFFINSTALLMENTS_FROMITEMLISTXML(@INSTALLMENTS);
begin try
if @CHANGEDATE is null
set @CHANGEDATE = GetDate()
select
@TOTALPLEDGEBALANCE = coalesce(sum(BALANCE), 0),
@SUMINSTALLMENTWRITEOFFAMOUNTS = coalesce(sum(WRITEOFFAMOUNT), 0)
from
dbo.UFN_INSTALLMENT_GETWRITEOFFINSTALLMENTS_FROMITEMLISTXML(@INSTALLMENTS)
if @WRITEOFFAMOUNT <> @SUMINSTALLMENTWRITEOFFAMOUNTS
raiserror('BBERR_TOTAL_NOT_EQUAL_WRITEOFF : The total amount applied does not equal the amount of the write-off.', 13, 1)
if @SUMINSTALLMENTWRITEOFFAMOUNTS > @TOTALPLEDGEBALANCE
raiserror('BBERR_WRITEOFF_GREATER_THAN_BALANCE : The amount of the write-off is greater than the total balance.', 13, 1)
open @WRITEOFFCURSOR
fetch next from @WRITEOFFCURSOR into
@INSTALLMENTID,
@INSTALLMENTBALANCE,
@APPLIEDAMOUNT
select @PLEDGEID = REVENUEID from dbo.INSTALLMENT where ID = @INSTALLMENTID
while @@FETCH_STATUS = 0
begin
if @APPLIEDAMOUNT > @INSTALLMENTBALANCE
raiserror('BBERR_WRITEOFF_GREATER_THAN_INSTALLMENT_BALANCE : The specified write-off amount is greater than the installment balance.', 13, 1)
exec dbo.USP_INSTALLMENT_WRITEOFFINSTALLMENTSPLITS @PLEDGEID, @INSTALLMENTID, @WRITEOFFID, @APPLIEDAMOUNT, @CHANGEAGENTID, @CHANGEDATE
fetch next from @WRITEOFFCURSOR into
@INSTALLMENTID,
@INSTALLMENTBALANCE,
@APPLIEDAMOUNT
end
end try
begin catch
deallocate @WRITEOFFCURSOR
exec dbo.USP_RAISE_ERROR
end catch
--When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long
close @WRITEOFFCURSOR;
deallocate @WRITEOFFCURSOR;
end