USP_RECEIPTINGPROCESSSTATUS_DELETE
Executes the "Receipting Process Status: Delete" record operation.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | Input parameter indicating the ID of the record being deleted. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the delete. |
Definition
Copy
CREATE procedure dbo.USP_RECEIPTINGPROCESSSTATUS_DELETE
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier
)
as
set nocount on;
if exists (select ID from dbo.BUSINESSPROCESSSTATUS where ID = @ID and STATUSCODE = 1)
raiserror('Business process is still running',13,1);
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
if (coalesce((select top 1 RERECEIPTPAYMENTS from dbo.RECEIPTPREFERENCEINFO), 1)) = 1
and exists (select ID from dbo.REVENUERECEIPT where RECEIPTINGPROCESSSTATUSID = @ID and RECEIPTDATE is null)
begin
-- If we are deleting the status for pending revenue, those revenue receipt records will also be deleted.
-- Therefore, if we are deleting the most recent status for the receipt records, we need to mark
-- the NEEDSRERECEIPT flag on those records so they will be picked up in the next run.
declare CUR_REVENUE cursor local fast_forward for
select REVENUEID,DATEADDED from dbo.REVENUERECEIPT where RECEIPTINGPROCESSSTATUSID = @ID;
declare @REVENUEID uniqueidentifier;
declare @DATERECEIPTADDED datetime;
open CUR_REVENUE
fetch next from CUR_REVENUE into @REVENUEID,@DATERECEIPTADDED
while @@FETCH_STATUS = 0
begin
if not exists (select ID from dbo.REVENUERECEIPT where REVENUEID = @REVENUEID and DATEADDED > @DATERECEIPTADDED)
and (select count(ID) from dbo.REVENUERECEIPT where REVENUEID = @REVENUEID) > 1
/* CMC
update dbo.REVENUE_EXT
set
REVENUE_EXT.NEEDSRERECEIPT = 1
from
dbo.REVENUE_EXT
where
REVENUE_EXT.ID = @REVENUEID
and REVENUE_EXT.DONOTRECEIPT = 0;
*/
update dbo.REVENUE
set
REVENUE.NEEDSRERECEIPT = 1,
REVENUE.CHANGEDBYID = @CHANGEAGENTID,
REVENUE.DATECHANGED = @CURRENTDATE
from
dbo.REVENUE
where
REVENUE.ID = @REVENUEID
and REVENUE.DONOTRECEIPT = 0;
fetch next from CUR_REVENUE into @REVENUEID,@DATERECEIPTADDED
end
close CUR_REVENUE;
deallocate CUR_REVENUE;
end
update
dbo.REVENUERECEIPT
set
ORIGINALREVENUERECEIPTID = null,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ORIGINALREVENUERECEIPTID in (select RR.ID from dbo.REVENUERECEIPT RR where RR.RECEIPTINGPROCESSSTATUSID = @ID and RECEIPTDATE is null);
update
dbo.REVENUERECEIPT
set
PREVIOUSREVENUERECEIPTID = null,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
PREVIOUSREVENUERECEIPTID in (select RR.ID from dbo.REVENUERECEIPT RR where RR.RECEIPTINGPROCESSSTATUSID = @ID and RECEIPTDATE is null);
-- if records have not been marked Receipted for this run, delete the records from the REVENUERECEIPT table
-- so they will be picked up in a subsequent run
-- Reset the next available receipt number first
declare @NEXTNUMBER int;
declare @RECEIPTSTACKID uniqueidentifier;
declare @RECEIPTPROCESSDATE datetime;
select @NEXTNUMBER = MIN(RECEIPTNUMBER), @RECEIPTSTACKID = RECEIPTSTACKINFOID, @RECEIPTPROCESSDATE = RECEIPTPROCESSDATE
from dbo.REVENUERECEIPT where RECEIPTINGPROCESSSTATUSID = @ID and RECEIPTDATE is null
group by RECEIPTSTACKINFOID,RECEIPTPROCESSDATE;
if not exists (select ID from REVENUERECEIPT where @RECEIPTSTACKID = RECEIPTSTACKINFOID and RECEIPTPROCESSDATE > @RECEIPTPROCESSDATE and RECEIPTINGPROCESSSTATUSID <> @ID)
exec dbo.USP_REVENUE_SETNEXTRECEIPTNUMBER @RECEIPTSTACKID,@NEXTNUMBER;
--Cache CONTEXT INFO
declare @contextCache varbinary(128);
set @contextCache = CONTEXT_INFO();
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
delete from dbo.REVENUERECEIPT where RECEIPTINGPROCESSSTATUSID = @ID and RECEIPTDATE is null;
--Restore CONTEXT_INFO
if not @contextCache is null
set CONTEXT_INFO @contextCache;
exec dbo.USP_BUSINESSPROCESSSTATUS_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID
return 0;