USP_REVENUE_DELETE
Executes the "Revenue: 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_REVENUE_DELETE
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier
)
as
set nocount on;
declare @TRANSACTIONTYPECODE int;
declare @DETAILID uniqueidentifier;
declare @CHANGEDATE datetime = getdate();
declare @REVENUEPAYMENTMETHODID uniqueidentifier;
--if (select REVENUEPOSTED.ID from dbo.REVENUE left join dbo.REVENUEPOSTED on REVENUEPOSTED.ID = REVENUE.ID where REVENUE.ID = @ID) is not null
if (select POSTSTATUSCODE from dbo.FINANCIALTRANSACTION where ID = @ID and DELETEDON is null) = 2
begin
raiserror('Posted revenue items cannot be deleted.', 13, 1);
return 0;
end
-- Recalculate FAF raised total if the credit is tied to
declare @CONSTITUENTID uniqueidentifier;
declare @EVENTID uniqueidentifier;
select REVENUERECOGNITION.CONSTITUENTID, EVENT.ID
from dbo.FINANCIALTRANSACTION
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.REVENUERECOGNITION on REVENUERECOGNITION.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.REVENUE_EXT on REVENUE_EXT.ID=FINANCIALTRANSACTION.ID
inner join dbo.EVENT on REVENUE_EXT.APPEALID = EVENT.APPEALID
inner join dbo.EVENTEXTENSION on EVENT.ID = EVENTEXTENSION.EVENTID
where FINANCIALTRANSACTION.ID = @ID
and FINANCIALTRANSACTION.DELETEDON is null;
select
@TRANSACTIONTYPECODE = FINANCIALTRANSACTION.TYPECODE,
@REVENUEPAYMENTMETHODID = REVENUEPAYMENTMETHOD.ID
from dbo.FINANCIALTRANSACTION
inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
inner join dbo.REVENUEPAYMENTMETHOD on FINANCIALTRANSACTION.ID = REVENUEPAYMENTMETHOD.REVENUEID
where FINANCIALTRANSACTION.ID = @ID
and FINANCIALTRANSACTION.DELETEDON is null
-- remove revenueid from committed batches so deleting revenue records will not cause
-- foreign key constraint errors
if exists (select 'x' from batchrevenue where REVENUEID = @ID)
begin
declare @ISINACTIVEBATCH bit;
set @ISINACTIVEBATCH = 0;
select top 1 @ISINACTIVEBATCH = 1
from BATCHREVENUE
inner join BATCH on BATCH.ID = BATCHREVENUE.BATCHID
where BATCHREVENUE.REVENUEID = @ID
and BATCH.STATUSCODE not in (1,2);
if @ISINACTIVEBATCH = 0
begin
update BATCHREVENUE
set REVENUEID = null
where REVENUEID = @ID;
end
end
--Deletion rules for payment
-- 1) Cannot delete a payment if there is a matching gift attached to any of its details
-- 2) Also delete a payment if there is a deleted matching gift attached
if (select count([ORG].ID)
from dbo.FINANCIALTRANSACTION as [ORG]
inner join dbo.REVENUEMATCHINGGIFT as [RMG] on [RMG].MGSOURCEREVENUEID = [ORG].ID
where [ORG].ID = @ID
and exists(select 1 from FINANCIALTRANSACTION where ID =[RMG].ID and DELETEDON is null)) > 0
begin
raiserror('There are matching gift claims against this payment. Delete those matching gift claims before deleting this payment.', 13, 1);
return 0;
end
if exists (
select 1
from dbo.FINANCIALTRANSACTION
inner join dbo.FINANCIALTRANSACTIONLINEITEM
on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
where
FINANCIALTRANSACTION.TYPECODE = 23 and --Refund
exists (
select 1
from dbo.FINANCIALTRANSACTIONLINEITEM [SOURCEITEMS]
where
[SOURCEITEMS].FINANCIALTRANSACTIONID = @ID and
[SOURCEITEMS].ID = FINANCIALTRANSACTIONLINEITEM.SOURCELINEITEMID
)
)
begin
raiserror('You cannot delete this payment because it was refunded.', 13, 1);
return 0;
end
--Deletion rules for Pledge
-- 1) Cannot delete a pledge if there are payments made against it
if @TRANSACTIONTYPECODE = 1
begin
if (select count(ID) from dbo.INSTALLMENTSPLITPAYMENT ISP where PLEDGEID = @ID) > 0
begin
raiserror('There are payments made against this pledge. Delete those payments before deleting this pledge.', 13, 1);
return 0;
end
end
if @TRANSACTIONTYPECODE = 15
begin
if (select count(ID) from dbo.INSTALLMENTSPLITPAYMENT ISP where PLEDGEID = @ID) > 0
begin
raiserror('There are payments made against this installment plan. Delete those payments before deleting this installment plan.', 13, 1);
return 0;
end
end
--Deletion rules for MG Pledge
-- 1) Cannot delete a MG pledge if there are payments made against it
if @TRANSACTIONTYPECODE = 3
begin
if (select count(ID) from dbo.INSTALLMENTSPLITPAYMENT where PLEDGEID = @ID) > 0
begin
raiserror('There are payments made against this matching gift claim. Delete those payments before deleting this matching gift claim.', 13, 1);
return 0;
end
end
--Deletion rules for Recurring Gift
-- 1) Cannot delete a Recurring Gift if there are payments made against it
-- 2) Cannot delete a Recurring Gift that is marked as pending (because a gift in a batch somewhere references it).
if @TRANSACTIONTYPECODE = 2
begin
if (select count(ID) from dbo.RECURRINGGIFTACTIVITY where SOURCEREVENUEID = @ID and not PAYMENTREVENUEID is null) > 0
begin
raiserror('There are payments made against this recurring gift. Delete those payments before deleting this recurring gift.', 13, 1);
return 0;
end
if (select ISPENDING from dbo.REVENUESCHEDULE where ID = @ID) = 1
begin
raiserror('There are pending transactions for this recurring gift in one or more revenue batches. Delete those pending transactions before deleting this recurring gift.', 13, 1);
return 0;
end
end
--Deletion rules for Planned gift
-- 1) Cannot delete a planned gift if there are payments made against it
if @TRANSACTIONTYPECODE = 4
begin
if (select count(ID) from dbo.INSTALLMENTSPLITPAYMENT ISP where PLEDGEID = @ID) > 0
begin
raiserror('There are payments made against this planned gift. Delete those payments before deleting this planned gift.', 13, 1);
return 0;
end
end
--Deletion rules for grant award
-- 1) Cannot delete a grant award if there are payments made against it
if @TRANSACTIONTYPECODE = 6
begin
if (select count(ID) from dbo.INSTALLMENTSPLITPAYMENT ISP where PLEDGEID = @ID) > 0
begin
raiserror('There are payments made against this grant award. Delete those payments before deleting this grant award.', 13, 1);
return 0;
end
end
--Deletion rules for auction item
-- 1) Cannot delete an auction item if there are payments made against it
if @TRANSACTIONTYPECODE = 7
begin
if exists(select 1 from dbo.AUCTIONITEM left join dbo.AUCTIONITEMREVENUEPURCHASE on AUCTIONITEM.ID = AUCTIONITEMREVENUEPURCHASE.AUCTIONITEMID where REVENUEAUCTIONDONATIONID = @ID and AUCTIONITEMREVENUEPURCHASE.REVENUEPURCHASEID is not null)
begin
raiserror('Purchased auction items cannot be deleted.', 13, 1);
return 0;
end
end
--Deletion rules for Donor Challenge
-- 1) Cannot delete a Donor Challenge if there are payments made against it
if @TRANSACTIONTYPECODE = 8
begin
if (select count(ID) from dbo.INSTALLMENTSPLITPAYMENT where PLEDGEID = @ID) > 0
begin
raiserror('There are payments made against this donor challenge claim. Delete those payments before deleting this donor challenge.', 13, 1);
return 0;
end
end
--Deletion rules for Pending Gift
-- 1) Cannot delete a Pending Gift if there are payments made against it
if @TRANSACTIONTYPECODE = 9
begin
if (select count(ID) from dbo.INSTALLMENTSPLITPAYMENT where PLEDGEID = @ID) > 0
begin
raiserror('There are payments made against this pending gift. Delete those payments before deleting this pending gift.', 13, 1);
return 0;
end
end
--check deletion rules, if any
if exists(select top 1 BANKACCOUNTDEPOSIT.ID
from dbo.FINANCIALTRANSACTION
inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
inner join BANKACCOUNTDEPOSITPAYMENT on FINANCIALTRANSACTION.ID = BANKACCOUNTDEPOSITPAYMENT.ID
inner join BANKACCOUNTDEPOSIT on BANKACCOUNTDEPOSIT.ID = BANKACCOUNTDEPOSITPAYMENT.DEPOSITID
where FINANCIALTRANSACTION.ID = @ID AND BANKACCOUNTDEPOSIT.STATUSCODE = 0
and FINANCIALTRANSACTION.DELETEDON is null)
begin
--JDH REVISIT 04.28.09 - this doesn't look complete (what about closed bank)
raiserror('Payments cannot be removed from locked deposits.', 13, 1);
return 0;
end
--if there is an unclaimed gift aid refund this needs dealt with before deletion
if exists(select top 1 dbo.FINANCIALTRANSACTION.ID
from dbo.FINANCIALTRANSACTION
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID=FINANCIALTRANSACTION.ID
inner join dbo.REVENUESPLITGIFTAIDREFUND on REVENUESPLITGIFTAIDREFUND.REVENUESPLITID=FINANCIALTRANSACTIONLINEITEM.ID
where REVENUESPLITGIFTAIDREFUND.REFUNDTAXCLAIMNUMBER =''
and FINANCIALTRANSACTION.ID=@ID)
begin
raiserror('BBERR_REVENUE_ASSOCIATEDOUTSTANDINGGIFTAIDREFUND', 13, 1);
return 0;
end
--If exists an open deposit containing the payment, payment must be unlinked from the deposit
if exists(select top 1 BANKACCOUNTDEPOSIT.ID
from dbo.FINANCIALTRANSACTION
inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
inner join BANKACCOUNTDEPOSITPAYMENT on FINANCIALTRANSACTION.ID = BANKACCOUNTDEPOSITPAYMENT.ID
inner join BANKACCOUNTDEPOSIT on BANKACCOUNTDEPOSIT.ID = BANKACCOUNTDEPOSITPAYMENT.DEPOSITID
where FINANCIALTRANSACTION.ID = @ID AND BANKACCOUNTDEPOSIT.STATUSCODE = 1
and FINANCIALTRANSACTION.DELETEDON is null)
begin
exec USP_BANKACCOUNTDEPOSITPAYMENT_REMOVE @ID=@ID,@CHANGEAGENTID=@CHANGEAGENTID
end
--If a constituent's origin is tied to this revenue remove the default revenue infosource
if exists (select ID from dbo.CONSTITUENTORIGINATION where REVENUEID = @ID)
begin
declare @DEFAULTREVENUEINFOSOURCECODEID uniqueidentifier;
set @DEFAULTREVENUEINFOSOURCECODEID = null;
select top(1) @DEFAULTREVENUEINFOSOURCECODEID = REVENUESOURCECODEID from dbo.ORIGINATIONSETTING
if not @DEFAULTREVENUEINFOSOURCECODEID is null
update dbo.CONSTITUENTORIGINATION set
INFOSOURCECODEID = null,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where REVENUEID = @ID and INFOSOURCECODEID = @DEFAULTREVENUEINFOSOURCECODEID
end
--Cache CONTEXT INFO
declare @contextCache varbinary(128);
set @contextCache = CONTEXT_INFO();
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
--If this is a planned gift, this will remove the link to the planned gift
if exists (select 1 from dbo.PLANNEDGIFTREVENUE where REVENUEID = @ID)
delete from dbo.PLANNEDGIFTREVENUE where REVENUEID = @ID;
if exists (select 1 from dbo.PLANNEDGIFTADDITIONREVENUE where REVENUEID = @ID)
delete from dbo.PLANNEDGIFTADDITIONREVENUE where REVENUEID = @ID;
--Delete any named recognitions for this revenue
if exists (select 1 from dbo.NAMINGOPPORTUNITYRECOGNITION inner join dbo.NAMINGOPPORTUNITYRECOGNITIONREVENUESPLIT on NAMINGOPPORTUNITYRECOGNITIONREVENUESPLIT.NAMINGOPPORTUNITYRECOGNITIONID = NAMINGOPPORTUNITYRECOGNITION.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM on NAMINGOPPORTUNITYRECOGNITIONREVENUESPLIT.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID)
delete NAMINGOPPORTUNITYRECOGNITION
from dbo.NAMINGOPPORTUNITYRECOGNITION inner join dbo.NAMINGOPPORTUNITYRECOGNITIONREVENUESPLIT on NAMINGOPPORTUNITYRECOGNITIONREVENUESPLIT.NAMINGOPPORTUNITYRECOGNITIONID = NAMINGOPPORTUNITYRECOGNITION.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM on NAMINGOPPORTUNITYRECOGNITIONREVENUESPLIT.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
declare @RGINSTALLMENTSTOFIX table (ID uniqueidentifier);
if @TRANSACTIONTYPECODE = 0
begin
-- Update auction purchase distributions.
exec dbo.USP_AUCTIONPURCHASEDELETE_UPDATEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE
-- Cache any recurring gifts to which this payment was applied; need to make updates to these.
insert into @RGINSTALLMENTSTOFIX
select distinct RECURRINGGIFTINSTALLMENT.REVENUEID
from dbo.RECURRINGGIFTINSTALLMENTPAYMENT
inner join dbo.RECURRINGGIFTINSTALLMENT on RECURRINGGIFTINSTALLMENT.ID = RECURRINGGIFTINSTALLMENTPAYMENT.RECURRINGGIFTINSTALLMENTID
where RECURRINGGIFTINSTALLMENTPAYMENT.PAYMENTID = @ID;
exec dbo.USP_RECURRINGGIFT_UNDOINSTALLMENTCHANGESONDELETEPAYMENT
@PAYMENTID = @ID,
@CHANGEAGENTID = @CHANGEAGENTID,
@CURRENTDATE = @CHANGEDATE
end
if @TRANSACTIONTYPECODE = 7
begin
--Delete the auction item information in REVENUEAUCTIONDONATION
delete dbo.REVENUEAUCTIONDONATION
where ID = @ID
end
exec dbo.USP_REVENUE_CREATEREFUNDSONDELETE @ID, @CHANGEAGENTID
--JamesWill 04/04/2006 CR239859-040306
--If this is a recurring gift payment, this will remove its record of payment
if exists (select 1 from dbo.RECURRINGGIFTACTIVITY inner join dbo.FINANCIALTRANSACTIONLINEITEM on RECURRINGGIFTACTIVITY.PAYMENTREVENUEID = FINANCIALTRANSACTIONLINEITEM.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID)
delete RECURRINGGIFTACTIVITY
from dbo.RECURRINGGIFTACTIVITY inner join dbo.FINANCIALTRANSACTIONLINEITEM on RECURRINGGIFTACTIVITY.PAYMENTREVENUEID = FINANCIALTRANSACTIONLINEITEM.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
--If this is a recurring gift, this will remove all of its activity
if exists (select 1 from dbo.RECURRINGGIFTACTIVITY where SOURCEREVENUEID = @ID)
delete from dbo.RECURRINGGIFTACTIVITY where SOURCEREVENUEID = @ID;
if exists (select 1 from dbo.INSTALLMENTSPLITPAYMENT inner join dbo.FINANCIALTRANSACTIONLINEITEM on INSTALLMENTSPLITPAYMENT.PAYMENTID = FINANCIALTRANSACTIONLINEITEM.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID)
delete INSTALLMENTSPLITPAYMENT
from dbo.INSTALLMENTSPLITPAYMENT inner join dbo.FINANCIALTRANSACTIONLINEITEM on INSTALLMENTSPLITPAYMENT.PAYMENTID = FINANCIALTRANSACTIONLINEITEM.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
--Multicurrency - AdamBu 4/12/10 - When deleting a revenue that uses a spot rate, delete that as well
-- RobertDi 4/14/10 - Fixed this to check that the rate is a spot rate.
declare @OLDSPOTRATE uniqueidentifier
select @OLDSPOTRATE = FINANCIALTRANSACTION.BASEEXCHANGERATEID
from dbo.FINANCIALTRANSACTION
--inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
inner join dbo.CURRENCYEXCHANGERATE on FINANCIALTRANSACTION.BASEEXCHANGERATEID = CURRENCYEXCHANGERATE.ID
where FINANCIALTRANSACTION.ID = @ID and CURRENCYEXCHANGERATE.TYPECODE = 2
and FINANCIALTRANSACTION.DELETEDON is null;
--Remove all encumbered funds that are not currently matched
if exists (select 1 from dbo.DONORCHALLENGEENCUMBERED DCE inner join
dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = DCE.REVENUESPLITID
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and
FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1 and
FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and
DCE.STATUSTYPECODE <> 1)
delete DCE from
dbo.DONORCHALLENGEENCUMBERED DCE
inner join
dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = DCE.REVENUESPLITID
inner join
dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and
FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1 and
FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and
DCE.STATUSTYPECODE <> 1;
--Delete link to revenue funding request
delete from dbo.REVENUEFUNDINGREQUEST
where ID = @ID;
--These match the statements from the delete trigger on GLTRANSACTION view
if exists (select 1 from dbo.ADJUSTMENTHISTORY inner join dbo.JOURNALENTRY on ADJUSTMENTHISTORY.GLTRANSACTIONID = JOURNALENTRY.ID inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID)
update ADJUSTMENTHISTORY set GLTRANSACTIONID = null from dbo.ADJUSTMENTHISTORY inner join dbo.JOURNALENTRY on ADJUSTMENTHISTORY.GLTRANSACTIONID = JOURNALENTRY.ID inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
if exists (select 1 from dbo.ADJUSTMENTHISTORYGIFTINKIND inner join dbo.JOURNALENTRY on ADJUSTMENTHISTORYGIFTINKIND.GLTRANSACTIONID = JOURNALENTRY.ID inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID)
update ADJUSTMENTHISTORYGIFTINKIND set GLTRANSACTIONID = null from dbo.ADJUSTMENTHISTORYGIFTINKIND inner join dbo.JOURNALENTRY on ADJUSTMENTHISTORYGIFTINKIND.GLTRANSACTIONID = JOURNALENTRY.ID inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
if exists (select 1 from dbo.ADJUSTMENTHISTORYPROPERTY inner join dbo.JOURNALENTRY on ADJUSTMENTHISTORYPROPERTY.GLTRANSACTIONID = JOURNALENTRY.ID inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID)
update ADJUSTMENTHISTORYPROPERTY set GLTRANSACTIONID = null from dbo.ADJUSTMENTHISTORYPROPERTY inner join dbo.JOURNALENTRY on ADJUSTMENTHISTORYPROPERTY.GLTRANSACTIONID = JOURNALENTRY.ID inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
if exists (select 1 from dbo.ADJUSTMENTHISTORYSTOCK inner join dbo.JOURNALENTRY on ADJUSTMENTHISTORYSTOCK.GLTRANSACTIONID = JOURNALENTRY.ID inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID)
update ADJUSTMENTHISTORYSTOCK set GLTRANSACTIONID = null from dbo.ADJUSTMENTHISTORYSTOCK inner join dbo.JOURNALENTRY on ADJUSTMENTHISTORYSTOCK.GLTRANSACTIONID = JOURNALENTRY.ID inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
if exists (select 1 from dbo.ADJUSTMENTHISTORYWRITEOFF inner join dbo.JOURNALENTRY on ADJUSTMENTHISTORYWRITEOFF.GLTRANSACTIONID = JOURNALENTRY.ID inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID)
update ADJUSTMENTHISTORYWRITEOFF set GLTRANSACTIONID = null from dbo.ADJUSTMENTHISTORYWRITEOFF inner join dbo.JOURNALENTRY on ADJUSTMENTHISTORYWRITEOFF.GLTRANSACTIONID = JOURNALENTRY.ID inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
if exists (select 1 from dbo.INSTALLMENTSPLITWRITEOFF inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLITWRITEOFF.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID where INSTALLMENTSPLIT.PLEDGEID = @ID)
delete INSTALLMENTSPLITWRITEOFF from dbo.INSTALLMENTSPLITWRITEOFF inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLITWRITEOFF.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID where INSTALLMENTSPLIT.PLEDGEID = @ID
if exists (select 1 from dbo.INSTALLMENTSPLIT where PLEDGEID = @ID)
delete from dbo.INSTALLMENTSPLIT where PLEDGEID = @ID
if exists (select 1 from dbo.FINANCIALTRANSACTION left join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
where ((FINANCIALTRANSACTION.POSTSTATUSCODE = 2 and FINANCIALTRANSACTION.DELETEDON is null)
or (FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 2 and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null))
and FINANCIALTRANSACTION.PARENTID = @ID)
begin
while exists (select 1 from dbo.FINANCIALTRANSACTION where TYPECODE = 20 and POSTSTATUSCODE = 2 and DELETEDON is null and PARENTID = @ID)
begin
declare @writeoffID uniqueidentifier = (select top 1 ID from dbo.FINANCIALTRANSACTION where TYPECODE = 20 and POSTSTATUSCODE = 2 and DELETEDON is null and PARENTID = @ID)
exec dbo.USP_WRITEOFF_DELETEPOSTED @writeoffID, @CHANGEAGENTID
end
update dbo.FINANCIALTRANSACTIONLINEITEM
set DELETEDON = @CHANGEDATE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
from dbo.FINANCIALTRANSACTION inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
where FINANCIALTRANSACTION.PARENTID = @ID
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
update dbo.FINANCIALTRANSACTION
set DELETEDON = @CHANGEDATE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where PARENTID = @ID
and DELETEDON is null
end
if exists (select ID from dbo.DIRECTDEBITPAYMENTMETHODDETAIL where ID = @REVENUEPAYMENTMETHODID and SEPAMANDATEID is not null) and @TRANSACTIONTYPECODE = 0
begin
declare @SEPAMANDATEID uniqueidentifier;
select
@SEPAMANDATEID = SEPAMANDATEID
from dbo.DIRECTDEBITPAYMENTMETHODDETAIL
where ID = @REVENUEPAYMENTMETHODID;
update
dbo.SEPAMANDATE
set PAYMENTCOUNT = PAYMENTCOUNT - 1
where SEPAMANDATE.ID = @SEPAMANDATEID
and PAYMENTCOUNT > 0;
end
-- Delete any CRM refund records
declare @REFUNDS table (ID uniqueidentifier);
insert into @REFUNDS select CREDITID from dbo.CREDITPAYMENT where REVENUEID = @ID;
if exists(select 1 from @REFUNDS)
begin
delete from dbo.CREDITPAYMENT where CREDITID in (select id from @REFUNDS);
delete from dbo.FINANCIALTRANSACTION where id in (select id from @REFUNDS);
end
declare @RELATEDLINEITEMSCOUNT integer;
set @RELATEDLINEITEMSCOUNT = (select COUNT(1) from dbo.FINANCIALTRANSACTIONLINEITEM LI inner join dbo.FINANCIALTRANSACTIONLINEITEM PAYMENT_LI on PAYMENT_LI.SOURCELINEITEMID = LI.ID where LI.FINANCIALTRANSACTIONID = @ID)
if exists (select 1 from dbo.FINANCIALTRANSACTION where PARENTID = @ID and DELETEDON is not null) or (@RELATEDLINEITEMSCOUNT > 0 and
(select COUNT(1) from dbo.FINANCIALTRANSACTIONLINEITEM LI inner join dbo.FINANCIALTRANSACTIONLINEITEM PAYMENT_LI on PAYMENT_LI.SOURCELINEITEMID = LI.ID where LI.FINANCIALTRANSACTIONID = @ID and PAYMENT_LI.DELETEDON is not null) = @RELATEDLINEITEMSCOUNT) or
exists(select 1
from dbo.FINANCIALTRANSACTION as [ORG]
inner join dbo.REVENUEMATCHINGGIFT as [RMG] on [RMG].MGSOURCEREVENUEID = [ORG].ID
where [ORG].ID = @ID
and exists(select 1 from FINANCIALTRANSACTION where ID =[RMG].ID and DELETEDON is not null))
begin
update FINANCIALTRANSACTIONLINEITEM
set DELETEDON = @CHANGEDATE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where FINANCIALTRANSACTIONID = @ID
update dbo.FINANCIALTRANSACTION
set DELETEDON = @CHANGEDATE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where FINANCIALTRANSACTION.ID = @ID
end
else
begin
delete dbo.FAFDONATION WHERE REVENUEID in (select ID from dbo.FINANCIALTRANSACTION where ID = @ID or PARENTID = @ID)
delete FINANCIALTRANSACTION
from dbo.FINANCIALTRANSACTION
where ID = @ID
or PARENTID = @ID
end
--Delete the spot rate used on the revenue, unless it is currently in use on the GIFTAIDREFUND table.
if @OLDSPOTRATE is not null and not exists(select 1 from dbo.REVENUESPLITGIFTAIDREFUND where REVENUESPLITGIFTAIDREFUND.ORIGINALBASEEXCHANGERATEID = @OLDSPOTRATE)
delete dbo.CURRENCYEXCHANGERATE
where ID = @OLDSPOTRATE
--Restore CONTEXT INFO
if not @contextCache is null
set CONTEXT_INFO @contextCache;
-- Update RG installments
if (select count(*) from @RGINSTALLMENTSTOFIX) > 0
begin
declare @RGID uniqueidentifier;
declare RGCURSOR cursor local fast_forward for
select ID
from @RGINSTALLMENTSTOFIX;
open RGCURSOR;
fetch next from RGCURSOR into @RGID;
while @@FETCH_STATUS = 0
begin
exec dbo.USP_RECURRINGGIFT_DELETEFUTUREINSTALLMENTS @RGID, @CHANGEAGENTID;
exec dbo.USP_RECURRINGGIFT_UPDATEREVENUESCHEDULE
@REVENUEID = @RGID,
@STATUSCHANGETYPECODE = 2,
@CHANGEAGENTID = @CHANGEAGENTID,
@CURRENTDATETIME = @CHANGEDATE;
fetch next from RGCURSOR into @RGID;
end
deallocate RGCURSOR;
end
-- Recalculate FAF raised total if the credit is tied to
exec dbo.USP_FAFRAISEDTOTAL_CALCULATE @EVENTID = @EVENTID, @CONSTITUENTID = @CONSTITUENTID
return 0;