USP_BATCHREVENUE_DELETEBATCH
Executes the "Revenue Batch: 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. |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
Definition
Copy
CREATE PROCEDURE dbo.USP_BATCHREVENUE_DELETEBATCH
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@CURRENTAPPUSERID uniqueidentifier = null
)
AS
BEGIN
set nocount on;
declare @SOURCEREVENUEID uniqueidentifier;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
declare @contextCache varbinary(128);
set @contextCache = CONTEXT_INFO();
begin try
declare @lockName nvarchar(36);
set @lockName = upper(cast(@ID as nvarchar(36)));
declare @result int;
exec @result = sp_getapplock @Resource=@lockName, @LockMode='Exclusive', @LockOwner='Session', @LockTimeout=0;
if @result = 0
begin
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
set CONTEXT_INFO @CHANGEAGENTID;
if @CURRENTAPPUSERID is not null
begin
declare @GRANTED bit
select @GRANTED=dbo.UFN_SECURITY_APPUSER_GRANTED_BATCHOWNER(@CURRENTAPPUSERID, @ID)
if @GRANTED = 0
raiserror('You do not have permission to delete this batch.', 13, 1);
end;
-- Cannot delete if there is an uncommitted batch that originated from this one,
-- as these records may be associated with that batch. These records will be deleted
-- when that batch is committed or deleted.
-- Example: an exception batch
if not exists (select ID from dbo.BATCH where ORIGINATINGBATCHID = @ID and STATUSCODE = 0)
begin
--remove revenue group members of groups you are about to delete
delete from dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
where MEMBERID in
(
select BRC.ID
from dbo.BATCHREVENUECONSTITUENT BRC
inner join dbo.BATCHREVENUE BR on BR.CONSTITUENTID = BRC.ID
where BR.BATCHID = @ID
);
--remove revenue constituent if the constituent was created in this batch
delete from dbo.BATCHREVENUECONSTITUENT
where ID in
(
select BRC.ID
from dbo.BATCHREVENUECONSTITUENT BRC
inner join dbo.BATCHREVENUE BR on BR.CONSTITUENTID = BRC.ID
where BR.BATCHID = @ID
);
delete from dbo.BATCHREVENUEFINANCIALINSTITUTION
where BATCHREVENUEFINANCIALINSTITUTION.ID in
(
select BATCHREVENUECONSTITUENTACCOUNT.FINANCIALINSTITUTIONID
from dbo.BATCHREVENUECONSTITUENTACCOUNT
where BATCHREVENUECONSTITUENTACCOUNT.BATCHID = @ID
);
delete from dbo.BATCHREVENUECONSTITUENTACCOUNT
where BATCHREVENUECONSTITUENTACCOUNT.ID in
(
select CONSTITUENTACCOUNTID
from dbo.BATCHREVENUE
where BATCHREVENUE.BATCHID = @ID
);
end
--if status is committed then don't update the ISPENDING
if(select STATUSCODE from dbo.BATCH where ID = @ID) <> 1
begin
update dbo.REVENUESCHEDULE
set
REVENUESCHEDULE.ISPENDING = 0,
REVENUESCHEDULE.CHANGEDBYID = @CHANGEAGENTID,
REVENUESCHEDULE.DATECHANGED = @CURRENTDATE
from dbo.REVENUESCHEDULE
inner join dbo.BATCHREVENUEAPPLICATION as [STREAMS] on [STREAMS].REVENUEID = REVENUESCHEDULE.ID and [STREAMS].WASGENERATED = 1
where [STREAMS].BATCHREVENUEID in (select ID from dbo.BATCHREVENUE where BATCHID = @ID);
update dbo.REVENUESCHEDULE
set
REVENUESCHEDULE.ISPENDING = 0,
REVENUESCHEDULE.CHANGEDBYID = @CHANGEAGENTID,
REVENUESCHEDULE.DATECHANGED = @CURRENTDATE
from dbo.REVENUESCHEDULE
inner join dbo.BATCHREVENUE on BATCHREVENUE.PAYINGPENDINGREVENUEID = REVENUESCHEDULE.ID
where BATCHREVENUE.BATCHID = @ID;
end
delete from dbo.BATCHREVENUESPLIT where BATCHREVENUEID in (select ID from dbo.BATCHREVENUE where BATCHID = @ID);
delete from dbo.BATCHREVENUEAPPLICATIONPLEDGE where ID in
(select BATCHREVENUEAPPLICATIONPLEDGEID from dbo.BATCHREVENUEAPPLICATION where BATCHREVENUEID in
(select ID from dbo.BATCHREVENUE where BATCHID = @ID));
delete from dbo.BATCHREVENUEAPPLICATIONMEMBERSHIP where ID in
(select BATCHREVENUEAPPLICATIONMEMBERSHIPID from dbo.BATCHREVENUEAPPLICATION where BATCHREVENUEID in
(select ID from dbo.BATCHREVENUE where BATCHID = @ID));
-- remove any revenue batch registrant guests of the this batch
-- Delete any registrant registration maps for the registrants and their guests
-- Deleting from REGISTRANTREGISTRATIONMAP cascade deletes REGISTRANTPREFERENCEMAP
delete from dbo.BATCHREVENUEREGISTRANTREGISTRATIONMAP
where
BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID in
(
select BATCHREVENUEREGISTRANT.ID
from dbo.BATCHREVENUEREGISTRANT
where BATCHREVENUEREGISTRANT.BATCHID = @ID
)
or
BATCHREVENUEREGISTRANTREGISTRATIONMAP.REGISTRANTID in
(
select GUEST.ID
from dbo.BATCHREVENUEREGISTRANT GUEST
inner join dbo.BATCHREVENUEREGISTRANT HOST on GUEST.GUESTOFREGISTRANTID = HOST.ID
where HOST.BATCHID = @ID
);
--Remove the registrant's guests
delete from dbo.BATCHREVENUEREGISTRANT
where
BATCHREVENUEREGISTRANT.ID in
(
select GUEST.ID
from dbo.BATCHREVENUEREGISTRANT GUEST
inner join dbo.BATCHREVENUEREGISTRANT HOST on GUEST.GUESTOFREGISTRANTID = HOST.ID
where HOST.BATCHID = @ID
);
--BATCHREVENUEAPPLICATION cannot support multiple cascade paths so set the batch revenue registrant IDs to null before deleting
update dbo.BATCHREVENUEAPPLICATION
set
BATCHREVENUEREGISTRANTID = null,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.BATCHREVENUEAPPLICATION
inner join dbo.BATCHREVENUE on BATCHREVENUE.ID = BATCHREVENUEAPPLICATION.BATCHREVENUEID
where
BATCHREVENUEAPPLICATION.BATCHREVENUEREGISTRANTID is not null and
BATCHREVENUE.BATCHID = @ID;
--Remove the registrant
delete from dbo.BATCHREVENUEREGISTRANT
where BATCHREVENUEREGISTRANT.BATCHID = @ID;
--SEPAMANDATEACTIVITY stores a BATCHROWID column that can store either ERB rows or membership dues batch rows. This is a guid column because we cannot have two FK's due to
-- multiple cascade paths
update dbo.SEPAMANDATEACTIVITY
set BATCHROWID = null
from dbo.SEPAMANDATEACTIVITY
inner join dbo.BATCHREVENUE on BATCHREVENUE.ID = SEPAMANDATEACTIVITY.BATCHROWID
where BATCHREVENUE.BATCHID = @ID;
delete from dbo.BATCHREVENUEAPPLICATION where BATCHREVENUEID in (select ID from dbo.BATCHREVENUE where BATCHID = @ID);
delete from dbo.BATCHREVENUERECOGNITION where BATCHREVENUEID in (select ID from dbo.BATCHREVENUE where BATCHID = @ID);
--remove BBIS transaction info if batch was created by BBIS donation transaction
declare @BATCHSTATUS int;
select @BATCHSTATUS = dbo.UFN_BATCH_GETSTATUSCODE (@ID);
--only transactions from open batches need to be downloaded again
if @BATCHSTATUS = 0
begin
declare @BBNCTRANSACTIONIDS xml = (select * from dbo.UFN_BBNC_DONATION_GETROWBBNCIDS(@ID) for xml raw('INT'),type,root('TRANSACTIONIDS'),BINARY BASE64);
exec dbo.USP_BBNC_TRANSACTION_DELETEBATCH @BBNCTRANSACTIONIDS;
end
delete from dbo.BATCHREVENUEBBNCINFO where BATCHREVENUEID in (select ID from dbo.BATCHREVENUE where BATCHID = @ID);
--remove as well the constituent update batch entries created used by ERB existing constituent edits;
delete from dbo.BATCHCONSTITUENTUPDATE where BATCHID = @ID;
--remove row from base table
delete from dbo.BATCHREVENUE where BATCHID = @ID;
-- remove any CC/EFT events tied to this batch
delete from dbo.RECURRINGGIFTINSTALLMENTEVENT where BATCHID = @ID;
exec sp_releaseapplock @Resource=@lockName, @LockOwner='Session';
if not @contextCache is null
set CONTEXT_INFO @contextCache;
end;
else
raiserror('This batch is in use and cannot be deleted.', 13, 1);
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;
END