USP_DISBURSEMENTPROCESS_UPDATE_DISBURSEMENTPROCESSDISBURSEMENT_AMOUNT
Updates the amount field for a given Disbursement Process Disbursement
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DISBURSEMENTPROCESSDISBURSEMENTID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@DATECHANGED | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_DISBURSEMENTPROCESS_UPDATE_DISBURSEMENTPROCESSDISBURSEMENT_AMOUNT(
@DISBURSEMENTPROCESSDISBURSEMENTID uniqueidentifier
,@CHANGEAGENTID uniqueidentifier
,@DATECHANGED datetime
)
as
begin
declare @TRANSACTIONS as TABLE (
APPLICATIONID uniqueidentifier
,CURRENTAPPLIEDAMOUNT money -- negative for credit memos
,APPLIEDAMOUNT money -- may be zeroed for credit memos that are overpaying
,SEQUENCE int
);
-- No more than one application per schedule for this check
insert into @TRANSACTIONS (
APPLICATIONID
,CURRENTAPPLIEDAMOUNT -- Current applied amount
,APPLIEDAMOUNT
,SEQUENCE
)
select
FTA.ID
, case FT.TYPECODE when 101 then FTA.AMOUNT else -FTA.AMOUNT end
, FTA.AMOUNT
, row_number() over (order by FT.TYPECODE asc, FTS.[DUEDATE])
from
dbo.FINANCIALTRANSACTIONAPPLICATION as FTA
inner join dbo.FINANCIALTRANSACTIONSCHEDULE as FTS
on FTA.FINANCIALTRANSACTIONSCHEDULEID = FTS.ID
inner join dbo.FINANCIALTRANSACTION as FT
on FT.ID = FTS.FINANCIALTRANSACTIONID
where
FTA.FINANCIALTRANSACTIONID = @DISBURSEMENTPROCESSDISBURSEMENTID
and FTA.TYPECODE = 0;
-- updates the applied amount for credit memos so we do not have checks below zero
update @TRANSACTIONS
set APPLIEDAMOUNT = coalesce(
(select SUM(CURRENTAPPLIEDAMOUNT)
from @TRANSACTIONS as T2
where T2.SEQUENCE < t.SEQUENCE
),0)
from
@TRANSACTIONS as t
where
CURRENTAPPLIEDAMOUNT < 0; -- Do this for credit memos only
-- Clamp CMs to the max amounts
update @TRANSACTIONS
set APPLIEDAMOUNT = 0
where
APPLIEDAMOUNT < 0;
update @TRANSACTIONS
set APPLIEDAMOUNT = -CURRENTAPPLIEDAMOUNT
where
APPLIEDAMOUNT > -CURRENTAPPLIEDAMOUNT;
-- Update CM Applications accordingly
update FTA set
AMOUNT = T.APPLIEDAMOUNT
from
FINANCIALTRANSACTIONAPPLICATION as FTA
inner join @TRANSACTIONS as T
on T.APPLICATIONID = FTA.ID
where T.CURRENTAPPLIEDAMOUNT < 0;
-- Now update the DPD
update FT set
TRANSACTIONAMOUNT = APPLIED.TOTAL - APPLIED.DISCOUNT
-- standard stuff
, DATECHANGED = @DATECHANGED
, CHANGEDBYID = @CHANGEAGENTID
from dbo.FINANCIALTRANSACTION FT
inner join (
select
FT.ID [DPDID]
,SUM(
case when I.ID is not null
then FTA.AMOUNT
else -FTA.AMOUNT
end
) [TOTAL]
,SUM(
case when FTA.TYPECODE = 1
then FTA.AMOUNT
else 0
end
) [DISCOUNT]
from dbo.FINANCIALTRANSACTION FT
inner join dbo.FINANCIALTRANSACTIONAPPLICATION FTA on FTA.FINANCIALTRANSACTIONID = FT.ID
inner join dbo.FINANCIALTRANSACTIONSCHEDULE FTS on FTA.FINANCIALTRANSACTIONSCHEDULEID = FTS.ID
inner join dbo.FINANCIALTRANSACTION FTPAID on FTS.FINANCIALTRANSACTIONID = FTPAID.ID
left outer join dbo.INVOICE I on I.ID = FTPAID.ID
left outer join dbo.CREDITMEMO CM on CM.ID = FTPAID.ID
where FT.TYPECODE = 255
group by FT.ID
) as APPLIED on APPLIED.DPDID = FT.ID
where FT.ID = @DISBURSEMENTPROCESSDISBURSEMENTID;
end