USP_BANKACCOUNTDISBURSEMENTS_VOID
Handles voiding multiple checks
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@BANKACCOUNTTRANSACTIONIDS | UDT_GENERICID | IN | |
@REVERSALPOSTDATE | datetime | IN | |
@REVERSALPOSTDATETYPECODE | tinyint | IN | |
@VOIDDATE | datetime | IN | |
@VOIDDATETYPECODE | tinyint | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@SCHEDULEIDSNOTTODELETE | UDT_GENERICID | IN |
Definition
Copy
CREATE procedure dbo.USP_BANKACCOUNTDISBURSEMENTS_VOID(
@BANKACCOUNTTRANSACTIONIDS UDT_GENERICID readonly
,@REVERSALPOSTDATE datetime
,@REVERSALPOSTDATETYPECODE tinyint
,@VOIDDATE datetime
,@VOIDDATETYPECODE tinyint
,@CHANGEAGENTID uniqueidentifier
,@SCHEDULEIDSNOTTODELETE UDT_GENERICID readonly
)
as
set nocount on;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @REVERSALPOSTDATE is null
set @REVERSALPOSTDATE = @CURRENTDATE;
if @VOIDDATE is null
set @VOIDDATE = @CURRENTDATE;
begin try
-- update bank account transaction for the check
update dbo.BANKACCOUNTTRANSACTION set
VOIDDATE = @VOIDDATE,
STATUSCODE = 4,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID in
(select ID from @BANKACCOUNTTRANSACTIONIDS);
-- if the check has not been posted set the poststatuscode on the BAT to do not post
update dbo.BANKACCOUNTTRANSACTION set
POSTSTATUSCODE = 2
where POSTSTATUSCODE = 1 and ID in
(select ID from @BANKACCOUNTTRANSACTIONIDS);
-- if it has not been posted then
-- update the associated financial transaction to do not post
update dbo.FINANCIALTRANSACTION set
FINANCIALTRANSACTION.POSTSTATUSCODE = 3
,FINANCIALTRANSACTION.POSTDATE = null
,FINANCIALTRANSACTION.CHANGEDBYID = @CHANGEAGENTID
,FINANCIALTRANSACTION.DATECHANGED = @CURRENTDATE
where FINANCIALTRANSACTION.ID in
(select FT.ID from
dbo.FINANCIALTRANSACTION FT
where FT.ID in (select ID from @BANKACCOUNTTRANSACTIONIDS)
and FT.POSTSTATUSCODE = 1);
-- update the financial transaction application to deleted status
update dbo.FINANCIALTRANSACTIONAPPLICATION set
FINANCIALTRANSACTIONAPPLICATION.STATUSCODE = 2
,FINANCIALTRANSACTIONAPPLICATION.CHANGEDBYID = @CHANGEAGENTID
,FINANCIALTRANSACTIONAPPLICATION.DATECHANGED = @CURRENTDATE
where FINANCIALTRANSACTIONAPPLICATION.ID in
(select FTA.ID
from dbo.BANKACCOUNTTRANSACTION BAT
join dbo.FINANCIALTRANSACTION FT on BAT.ID = FT.ID
join dbo.FINANCIALTRANSACTIONAPPLICATION FTA on FT.ID = FTA.FINANCIALTRANSACTIONID
where BAT.ID in (select ID from @BANKACCOUNTTRANSACTIONIDs))
--Get all schedules with all of their applications marked deleted
declare @FTStoDelete table (ID uniqueidentifier);
insert into @FTStoDelete
select FTS.ID
from dbo.FINANCIALTRANSACTIONSCHEDULE FTS
inner join (select FTS1.ID, COUNT(FTA.ID) [FTACOUNT]
from dbo.FINANCIALTRANSACTIONSCHEDULE FTS1
inner join dbo.FINANCIALTRANSACTIONAPPLICATION FTA on FTS1.ID = FTA.FINANCIALTRANSACTIONSCHEDULEID and FTA.TYPECODE = 0
where FTS1.ID in (select FTA.FINANCIALTRANSACTIONSCHEDULEID
from dbo.FINANCIALTRANSACTIONAPPLICATION FTA
inner join dbo.BANKACCOUNTTRANSACTION BAT on BAT.ID = FTA.FINANCIALTRANSACTIONID
where BAT.ID in (select ID from @BANKACCOUNTTRANSACTIONIDs))
group by FTS1.ID) as FTACOUNT on FTACOUNT.ID = FTS.ID
inner join (select FTS1.ID, COUNT(FTA.ID) [FTACOUNT]
from dbo.FINANCIALTRANSACTIONSCHEDULE FTS1
inner join dbo.FINANCIALTRANSACTIONAPPLICATION FTA on FTS1.ID = FTA.FINANCIALTRANSACTIONSCHEDULEID and FTA.TYPECODE = 0 and FTA.STATUSCODE = 2
where FTS1.ID in (select FTA.FINANCIALTRANSACTIONSCHEDULEID
from dbo.FINANCIALTRANSACTIONAPPLICATION FTA
inner join dbo.BANKACCOUNTTRANSACTION BAT on BAT.ID = FTA.FINANCIALTRANSACTIONID
where BAT.ID in (select ID from @BANKACCOUNTTRANSACTIONIDs))
group by FTS1.ID) as DELETEDFTA on DELETEDFTA.ID = FTS.ID
where FTACOUNT.FTACOUNT = DELETEDFTA.FTACOUNT and FTS.ID not in (select ID from @SCHEDULEIDSNOTTODELETE)
--Mark all schedules having all of their applications marked as deleted to deleted.
update dbo.FINANCIALTRANSACTIONSCHEDULE set
DELETED = 1
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
where ID in (select ID from @FTStoDelete);
--Create duplicates of the schedules that were marked as deleted.
insert into dbo.FINANCIALTRANSACTIONSCHEDULE(
ID
,FINANCIALTRANSACTIONID
,AMOUNT
,DUEDATE
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
NEWID()
,FTS.FINANCIALTRANSACTIONID
,FTS.AMOUNT
,FTS.DUEDATE
,FTS.ADDEDBYID, FTS.CHANGEDBYID, FTS.DATEADDED, FTS.DATECHANGED
from dbo.FINANCIALTRANSACTIONSCHEDULE FTS
where FTS.ID in (select ID from @FTStoDelete);
--Mark all invoices and credit memos associated with the disbursements as not having a zero balance
update dbo.INVOICE set
ZEROBALANCE = 0
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
from dbo.INVOICE I
inner join dbo.FINANCIALTRANSACTIONSCHEDULE FTS on FTS.FINANCIALTRANSACTIONID = I.ID
inner join dbo.FINANCIALTRANSACTIONAPPLICATION FTA on FTA.FINANCIALTRANSACTIONSCHEDULEID = FTS.ID
where FTA.FINANCIALTRANSACTIONID in (select ID from @BANKACCOUNTTRANSACTIONIDs)
update dbo.CREDITMEMO set
ZEROBALANCE = 0
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
from dbo.CREDITMEMO CM
inner join dbo.FINANCIALTRANSACTIONSCHEDULE FTS on FTS.FINANCIALTRANSACTIONID = CM.ID
inner join dbo.FINANCIALTRANSACTIONAPPLICATION FTA on FTA.FINANCIALTRANSACTIONSCHEDULEID = FTS.ID
where FTA.FINANCIALTRANSACTIONID in (select ID from @BANKACCOUNTTRANSACTIONIDs)
/* TODO: Once we have post and we have a posted check, we need to
copy the check FT and set the parent ID of the new FT to point
to the original FT. If this is from the disbursement page (1 check)
set the post date and status to the selected post date and status,
something like this below but create a new SP_FINANCIALTRANSACTION_ADD
that can accept multiple IDs.
exec dbo.SP_FINANCIALTRANSACTION_ADD
@CHANGEAGENTID,
@CONSTITUENTID,
@NUMBER,
254,
@AMOUNT,
@DATE,
@REVERSALDATE,
@REVERSALSTATUSCODE,
@DESCRIPTION,
null,
@INVOICEID;
*/
-- Insert "voided" records into the history tab
insert into dbo.DISBURSEMENTHISTORY
(
ID
,FINANCIALTRANSACTIONID
,ACTIONCODE
,ORIGINALNUMBER
-- Standard stuff
,DATEADDED
,DATECHANGED
,CHANGEDBYID
,ADDEDBYID
)
select
NEWID()
,BAT.ID
,1 --voided
,BAT.TRANSACTIONNUMBER
-- Standard stuff
,@CURRENTDATE
,@CURRENTDATE
,@CHANGEAGENTID
,@CHANGEAGENTID
from @BANKACCOUNTTRANSACTIONIDS BATID
inner join dbo.BANKACCOUNTTRANSACTION BAT on BAT.ID = BATID.ID
-- update invoice to reflect a balance since it is no longer paid
exec dbo.USP_BANKACCOUNTDISBURSEMENTS_INVOICES_UPDATEZEROBALANCE @BANKACCOUNTTRANSACTIONIDS
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch