USP_DATAFORMTEMPLATE_EDITSAVE_REVENUETRANSACTIONCHANGECONSTITUENTPOSTED_5
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@NEWCONSTITUENTID | uniqueidentifier | IN | |
@CONSTITUENTACCOUNTID | uniqueidentifier | IN | |
@ADJUSTMENTPOSTDATE | datetime | IN | |
@ADJUSTMENTDATE | datetime | IN | |
@ADJUSTMENTREASON | nvarchar(100) | IN | |
@RESETRECOGNITIONCREDITS | bit | IN | |
@RESETSOLICITORS | bit | IN | |
@ADJUSTMENTREASONCODEID | uniqueidentifier | IN | |
@RESETMATCHINGGIFTCLAIMS | bit | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@SEPAMANDATEID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDITSAVE_REVENUETRANSACTIONCHANGECONSTITUENTPOSTED_5
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@NEWCONSTITUENTID uniqueidentifier,
@CONSTITUENTACCOUNTID uniqueidentifier,
@ADJUSTMENTPOSTDATE datetime,
@ADJUSTMENTDATE datetime,
@ADJUSTMENTREASON nvarchar(100),
@RESETRECOGNITIONCREDITS bit,
@RESETSOLICITORS bit,
@ADJUSTMENTREASONCODEID uniqueidentifier,
@RESETMATCHINGGIFTCLAIMS bit,
@CURRENTAPPUSERID uniqueidentifier = null,
@SEPAMANDATEID uniqueidentifier
)
as
set nocount on;
-- Verify the new constituent isn't the same as the previous one
declare @PREVIOUSCONSTITUENTID uniqueidentifier;
declare @TRANSACTIONTYPECODE tinyint;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @ADJUSTMENTPOSTSTATUSCODE tinyint;
declare @ISMEMBERSHIPPLEDGE bit;
if exists(select ADJUSTMENT.POSTSTATUSCODE from dbo.ADJUSTMENT inner join dbo.FINANCIALTRANSACTION on ADJUSTMENT.REVENUEID = FINANCIALTRANSACTION.ID inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID where FINANCIALTRANSACTION.ID = @ID and ADJUSTMENT.POSTSTATUSCODE > 0 and FINANCIALTRANSACTION.DELETEDON is null)
begin
select top 1
@ADJUSTMENTPOSTSTATUSCODE = ADJUSTMENT.POSTSTATUSCODE
from dbo.ADJUSTMENT
inner join dbo.FINANCIALTRANSACTION on ADJUSTMENT.REVENUEID = FINANCIALTRANSACTION.ID
inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
where FINANCIALTRANSACTION.ID = @ID and ADJUSTMENT.POSTSTATUSCODE > 0
and FINANCIALTRANSACTION.DELETEDON is null;
end
else
Set @ADJUSTMENTPOSTSTATUSCODE = 1
select top 1
@PREVIOUSCONSTITUENTID = FINANCIALTRANSACTION.CONSTITUENTID,
@TRANSACTIONTYPECODE = FINANCIALTRANSACTION.TYPECODE,
@TRANSACTIONCURRENCYID = FINANCIALTRANSACTION.TRANSACTIONCURRENCYID
from dbo.FINANCIALTRANSACTION
inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
where FINANCIALTRANSACTION.ID = @ID
and FINANCIALTRANSACTION.DELETEDON is null;
set @ISMEMBERSHIPPLEDGE = case when @TRANSACTIONTYPECODE = 15 then 1 else 0 end
select @BASECURRENCYID = BASECURRENCYID
from dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I
where FINANCIALTRANSACTIONID = @ID;
if @PREVIOUSCONSTITUENTID = @NEWCONSTITUENTID
begin
raiserror('NEWCONSTITUENTCANNOTBECURRENTCONSTITUENT', 13, 1);
return 1;
end
if @ADJUSTMENTPOSTSTATUSCODE = 2
begin
raiserror('CANNOTCHANGEDONOTPOST', 13, 1)
return 1
end
declare @CHANGEDATE datetime;
set @CHANGEDATE = getdate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
-- Get payment code
declare @PAYMENTMETHODCODE tinyint;
declare @REVENUEPAYMENTMETHODID uniqueidentifier;
select
@PAYMENTMETHODCODE = PAYMENTMETHODCODE,
@REVENUEPAYMENTMETHODID = ID
from
dbo.REVENUEPAYMENTMETHOD
where
REVENUEID = @ID;
-- Verify the transaction has already been posted
declare @ISPOSTED bit
select
@ISPOSTED =
case
when exists (select 1 from dbo.REVENUEPOSTED RP where RP.ID = @ID) then 1
else 0
end
if @ISPOSTED = 0
begin
raiserror('TRANSACTIONMUSTBEPOSTED', 13, 1);
return 1 ;
end
-- Verify the adjustment dates are set
if @ADJUSTMENTPOSTDATE is null
begin
raiserror('ADJUSTMENTPOSTDATEREQUIRED', 13, 1);
return 1;
end
if @ADJUSTMENTDATE is null
begin
raiserror('ADJUSTMENTDATEREQUIRED', 13, 1);
return 1;
end
if @ADJUSTMENTREASONCODEID is null
begin
raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1);
return 1;
end
-- Direct debit account is required for payments
if @TRANSACTIONTYPECODE = 0 and @CONSTITUENTACCOUNTID is null
begin
if @PAYMENTMETHODCODE = 3 -- Direct debit
begin
raiserror('BBERR_ACCOUNTREQUIREDFORDIRECTDEBITPAYMENTS', 13, 1);
return 1;
end
else if @PAYMENTMETHODCODE = 11 -- Standing order
begin
raiserror('BBERR_ACCOUNTREQUIREDFORSTANDINGORDERPAYMENTS', 13, 1);
return 1;
end
end
declare @ADJUSTMENTID uniqueidentifier;
declare @STOCKSALEADJUSTMENTIDS xml;
declare @PROPERTYDETAILADJUSTMENTID uniqueidentifier;
declare @WRITEOFFADJUSTMENTID uniqueidentifier;
declare @PROPERTYDETAILCOUNT int;
declare @ADJUSTEDWRITEOFFS table(WRITEOFFID uniqueidentifier, ADJUSTMENTID uniqueidentifier);
declare @GIFTFEEADJUSTMENTID uniqueidentifier;
declare @GIFTINKINDSALEADJUSTMENTIDS xml;
declare @AUCTIONPURCHASEADJUSTMENTID uniqueidentifier;
begin try
declare @ADJUSTBENEFITS bit;
declare @BENEFITSADJUSTMENTID uniqueidentifier;
set @ADJUSTBENEFITS = 0;
set @BENEFITSADJUSTMENTID = null;
--JamesWill 129145 2010-11-10 If there are posted benefit distributions, prepare to adjust them
--(at the very least, the reference will need to change to the new constituent's name)
if exists(select ID from dbo.REVENUEBENEFIT where REVENUEID = @ID) and @ISMEMBERSHIPPLEDGE = 0
set @ADJUSTBENEFITS = 1;
exec dbo.USP_SAVE_ADJUSTMENT @ID, @ADJUSTMENTID output, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, default, @ADJUSTMENTREASONCODEID, @ADJUSTMENTPOSTSTATUSCODE, 1;
update UNPOSTEDFTLI set UNPOSTEDFTLI.SOURCELINEITEMID = ORIGINALFTLI.SOURCELINEITEMID
from dbo.FINANCIALTRANSACTIONLINEITEM UNPOSTEDFTLI
inner join dbo.FINANCIALTRANSACTIONLINEITEM ORIGINALFTLI on ORIGINALFTLI.REVERSEDLINEITEMID = UNPOSTEDFTLI.ID
where UNPOSTEDFTLI.TYPECODE = 0
and UNPOSTEDFTLI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID
and UNPOSTEDFTLI.POSTSTATUSCODE = 1
and ORIGINALFTLI.DELETEDON is not null
if @TRANSACTIONTYPECODE = 0
exec dbo.USP_SAVE_GIFTFEEADJUSTMENT @ID, @GIFTFEEADJUSTMENTID output, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, default, @ADJUSTMENTREASONCODEID;
if @ADJUSTBENEFITS = 1
begin
declare @BENEFITS xml, @PERCENTAGEBENEFITS xml;
exec dbo.USP_REVENUE_GETBENEFITSSPLIT @ID, @BENEFITS output, @PERCENTAGEBENEFITS output
declare @TOTALBENEFITS xml;
set @TOTALBENEFITS = dbo.UFN_REVENUEDETAIL_JOINBENEFITS(@BENEFITS, @PERCENTAGEBENEFITS);
set @TOTALBENEFITS = dbo.UFN_REVENUEBENEFIT_CONVERTAMOUNTSINXML_2(@TOTALBENEFITS, @TRANSACTIONCURRENCYID, @BASECURRENCYID);
exec dbo.USP_SAVE_BENEFITADJUSTMENT_2 @ID, @BENEFITSADJUSTMENTID output, @CHANGEAGENTID, @CHANGEDATE,
@ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, default,
@ADJUSTMENTREASONCODEID, @ADJUSTMENTPOSTSTATUSCODE, @TOTALBENEFITS;
end
if @TRANSACTIONTYPECODE = 1
begin
if exists (select JOURNAL.ID from dbo.JOURNALENTRY_EXT JOURNAL
inner join dbo.FINANCIALTRANSACTION on JOURNAL.WRITEOFFID = FINANCIALTRANSACTION.ID and JOURNAL.TABLENAMECODE = 12
where FINANCIALTRANSACTION.PARENTID = @ID and FINANCIALTRANSACTION.DELETEDON is null and FINANCIALTRANSACTION.TYPECODE = 20)
begin
declare @WRITEOFFID uniqueidentifier;
declare @WRITEOFFIDTABLE UDT_GENERICID;
insert into @WRITEOFFIDTABLE
select ID
from dbo.FINANCIALTRANSACTION
where PARENTID = @ID
and TYPECODE = 20
and DELETEDON is null;
declare @WRITEOFFCURSOR cursor;
set @WRITEOFFCURSOR = cursor local fast_forward for
select ID
from @WRITEOFFIDTABLE
open @WRITEOFFCURSOR;
fetch next from @WRITEOFFCURSOR into @WRITEOFFID;
while @@FETCH_STATUS = 0
begin
set @WRITEOFFADJUSTMENTID = null;
exec dbo.USP_SAVE_WRITEOFFADJUSTMENT @WRITEOFFID, @WRITEOFFADJUSTMENTID output, @CHANGEAGENTID,
@CHANGEDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @ADJUSTMENTREASONCODEID;
--Save adjustment IDs for adjustment history
insert into @ADJUSTEDWRITEOFFS(WRITEOFFID,ADJUSTMENTID) values (@WRITEOFFID,@WRITEOFFADJUSTMENTID);
fetch next from @WRITEOFFCURSOR into @WRITEOFFID;
end
close @WRITEOFFCURSOR;
deallocate @WRITEOFFCURSOR;
end
end
else
begin
select @PROPERTYDETAILCOUNT = count(PROPERTYDETAIL.ID)
from dbo.PROPERTYDETAIL
where PROPERTYDETAIL.ID = @REVENUEPAYMENTMETHODID and SALEPOSTSTATUSCODE = 0;
/* If sold stock has been posted, log stock detail adjustment */
if @PAYMENTMETHODCODE = 4 and exists(select ID from dbo.STOCKSALE where STOCKDETAILID = @REVENUEPAYMENTMETHODID and SALEPOSTSTATUSCODE = 0)
begin
exec dbo.USP_SAVE_STOCKDETAILADJUSTMENT @REVENUEPAYMENTMETHODID, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @STOCKSALEADJUSTMENTIDS output, @ADJUSTMENTREASONCODEID;
end
/* If sold gift-in-kind has been posted, log gift-in-kind detail adjustment */
if @PAYMENTMETHODCODE = 6 and exists(select ID from dbo.GIFTINKINDSALE where GIFTINKINDPAYMENTMETHODDETAILID = @REVENUEPAYMENTMETHODID and SALEPOSTSTATUSCODE = 0)
begin
exec dbo.USP_SAVE_GIFTINKINDPAYMENTMETHODDETAILADJUSTMENT @REVENUEPAYMENTMETHODID, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @GIFTINKINDSALEADJUSTMENTIDS output, @ADJUSTMENTREASONCODEID;
end
/* If sold property has been posted, log property detail adjustment */
else if (@PAYMENTMETHODCODE = 5) and (@PROPERTYDETAILCOUNT > 0)
begin
exec dbo.USP_SAVE_PROPERTYDETAILADJUSTMENT @REVENUEPAYMENTMETHODID, @PROPERTYDETAILADJUSTMENTID output,
@CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @ADJUSTMENTREASONCODEID;
end
/*Auction purchase -- log adjustment*/
if exists(select 1 from dbo.FINANCIALTRANSACTIONLINEITEM inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and REVENUESPLIT_EXT.TYPECODE = 12 and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1 and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null)
exec dbo.USP_SAVE_AUCTIONPURCHASEADJUSTMENT @REVENUEID = @ID, @ADJUSTMENTID = @AUCTIONPURCHASEADJUSTMENTID output, @CHANGEAGENTID = @CHANGEAGENTID,
@CHANGEDATE = @CHANGEDATE, @DATE = @ADJUSTMENTDATE, @POSTDATE = @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON = @ADJUSTMENTREASON,
@ADJUSTMENTREASONCODEID = @ADJUSTMENTREASONCODEID
end
exec dbo.USP_REVENUE_UPDATERERECEIPTS @ID, @CHANGEAGENTID, @CHANGEDATE;
-- WI 292233
-- update the acknowledgee on letters that have not been sent
update
dbo.REVENUELETTER
set
REVENUELETTER.ACKNOWLEDGEEID = @NEWCONSTITUENTID,
REVENUELETTER.CHANGEDBYID = @CHANGEAGENTID,
REVENUELETTER.DATECHANGED = @CHANGEDATE
where
REVENUELETTER.REVENUEID = @ID
and REVENUELETTER.ACKNOWLEDGEEID = @PREVIOUSCONSTITUENTID
and (REVENUELETTER.PROCESSDATE is null and REVENUELETTER.ACKNOWLEDGEDATE is null);
-- if we're going to be resending letters, update the acknowledgee on letters that have been sent
-- (if we're not going to be resending letters then the sent letters should reflect the state they were in when they were sent)
if (coalesce((select top 1 REACKNOWLEDGEREVENUE from dbo.ACKNOWLEDGEMENTPREFERENCE), 0)) = 1
update
dbo.REVENUELETTER
set
REVENUELETTER.ACKNOWLEDGEEID = @NEWCONSTITUENTID,
REVENUELETTER.CHANGEDBYID = @CHANGEAGENTID,
REVENUELETTER.DATECHANGED = @CHANGEDATE
where
REVENUELETTER.REVENUEID = @ID
and REVENUELETTER.ACKNOWLEDGEEID = @PREVIOUSCONSTITUENTID
and (REVENUELETTER.PROCESSDATE is not null or REVENUELETTER.ACKNOWLEDGEDATE is not null);
-- end WI 292233
exec dbo.USP_REVENUELETTER_SETREACKNOWLEDGEMENTS @ID, @CHANGEAGENTID, @CHANGEDATE;
--UK product flag.
if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D') = 1
-- Create manual refunds for any claimed revenue splits
exec dbo.USP_REVENUE_CREATEREFUNDS @ID, 1, @CHANGEAGENTID, @CHANGEDATE;
-- Update the constituent for all revenue entries belonging to the transaction
update dbo.FINANCIALTRANSACTION set
CONSTITUENTID = @NEWCONSTITUENTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where FINANCIALTRANSACTION.ID = @ID
and FINANCIALTRANSACTION.DELETEDON is null;
update dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT
set CONSTITUENTID = @NEWCONSTITUENTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
from dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEMADJUSTMENT.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 1
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE = 0
declare @contextCache varbinary(128);
if @RESETRECOGNITIONCREDITS = 1
begin
--Cache CONTEXT INFO
set @contextCache = CONTEXT_INFO();
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
-- Remove previous recognition credits
delete from dbo.REVENUERECOGNITION where REVENUESPLITID in (select FINANCIALTRANSACTIONLINEITEM.ID from dbo.FINANCIALTRANSACTIONLINEITEM inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1)
--Remove other recognition credits
delete dbo.RECOGNITIONCREDIT
from dbo.RECOGNITIONCREDIT
inner join dbo.DONORCHALLENGEENCUMBERED on RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID = DONORCHALLENGEENCUMBERED.ID
where RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 1
and DONORCHALLENGEENCUMBERED.REVENUESPLITID in (select FINANCIALTRANSACTIONLINEITEM.ID from dbo.FINANCIALTRANSACTIONLINEITEM inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1);
--Remove credits on the donor challenge claim to match edit form
delete dbo.REVENUERECOGNITION
from dbo.REVENUERECOGNITION
inner join dbo.FINANCIALTRANSACTIONLINEITEM on REVENUERECOGNITION.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
inner join dbo.DONORCHALLENGEENCUMBERED on FINANCIALTRANSACTION.ID = DONORCHALLENGEENCUMBERED.MATCHEDREVENUEID
where DONORCHALLENGEENCUMBERED.REVENUESPLITID in (select FINANCIALTRANSACTIONLINEITEM.ID from dbo.FINANCIALTRANSACTIONLINEITEM inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1)
and FINANCIALTRANSACTION.CONSTITUENTID <> REVENUERECOGNITION.CONSTITUENTID
and REVENUESPLIT_EXT.DESIGNATIONID = DONORCHALLENGEENCUMBERED.DESIGNATIONID
and FINANCIALTRANSACTION.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1;
--Restore CONTEXT_INFO
if not @contextCache is null
set CONTEXT_INFO @contextCache;
-- Create the new default recognition credits
insert into dbo.REVENUERECOGNITION
(
REVENUESPLITID,
CONSTITUENTID,
AMOUNT,
REVENUERECOGNITIONTYPECODEID,
EFFECTIVEDATE,
ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED
)
select
RS.ID,
RR.CONSTITUENTID,
RR.AMOUNT,
RR.REVENUERECOGNITIONTYPECODEID,
cast(R.DATE as datetime) as DATE,
@CHANGEAGENTID,@CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE
from dbo.FINANCIALTRANSACTION R
inner join dbo.REVENUE_EXT on R.ID = REVENUE_EXT.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM RS on RS.FINANCIALTRANSACTIONID = R.ID
inner join dbo.REVENUESPLIT_EXT on RS.ID = REVENUESPLIT_EXT.ID
left join dbo.RECURRINGGIFTACTIVITY RGA on RGA.PAYMENTREVENUEID = R.ID
cross apply dbo.UFN_REVENUEDETAIL_GETDEFAULTRECOGNITIONS(REVENUE_EXT.GIVENANONYMOUSLY, R.CONSTITUENTID, RS.BASEAMOUNT, cast(R.DATE as datetime), RGA.SOURCEREVENUEID) RR
where R.ID = @ID
and R.DELETEDON is null
and RS.DELETEDON is null
and RS.TYPECODE <> 1;
end
if @PAYMENTMETHODCODE in (3, 11) --Direct debit or standing order
begin
if @TRANSACTIONTYPECODE in (1, 2, 15) -- Pledge or recurring gift or membership installment plan
begin
if @CONSTITUENTACCOUNTID is not null
begin
if @PAYMENTMETHODCODE = 3 -- Direct debit
begin
update dbo.REVENUESCHEDULEDIRECTDEBITPAYMENT set
CONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID,
SEPAMANDATEID = @SEPAMANDATEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where REVENUESCHEDULEDIRECTDEBITPAYMENT.ID = @ID;
end
else if @PAYMENTMETHODCODE = 11 -- Standing order
begin
update dbo.REVENUESCHEDULESTANDINGORDERPAYMENT set
CONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where REVENUESCHEDULESTANDINGORDERPAYMENT.ID = @ID;
end
end
else
begin
-- No longer autopay
update dbo.REVENUEPAYMENTMETHOD set
PAYMENTMETHODCODE = 9,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where
REVENUEID = @ID;
-- Delete entry
exec dbo.USP_REVENUESCHEDULEDIRECTDEBITPAYMENT_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;
end
end
else if @TRANSACTIONTYPECODE = 0 -- Payment
begin
if @PAYMENTMETHODCODE = 3 -- Direct debit
begin
--Run this before we update the payment method details, because we need to see if the SEPA Mandate has changed
exec dbo.USP_SEPAMANDATE_PAYMENTMADE
@SEPAMANDATEID,
null, --BATCHROWID
@ID, --REVENUEID
@CHANGEAGENTID;
update dbo.DIRECTDEBITPAYMENTMETHODDETAIL
set
CONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID,
SEPAMANDATEID = @SEPAMANDATEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where
DIRECTDEBITPAYMENTMETHODDETAIL.ID = @REVENUEPAYMENTMETHODID;
end
else if @PAYMENTMETHODCODE = 11 -- Standing order
begin
update dbo.STANDINGORDERPAYMENTMETHODDETAIL set
CONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where ID = @REVENUEPAYMENTMETHODID;
end
end
end
-- Clear GL
delete JOURNALENTRY
from dbo.JOURNALENTRY
inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1
and FINANCIALTRANSACTION.DELETEDON is null
and JOURNALENTRY_EXT.OUTDATED = 0
and JOURNALENTRY_EXT.TABLENAMECODE = 1;
delete from dbo.WRITEOFFGLDISTRIBUTION where WRITEOFFID in (select WO.ID from dbo.WRITEOFF WO where WO.REVENUEID = @ID) and OUTDATED = 0;
delete from dbo.STOCKSALEGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
delete from dbo.PROPERTYDETAILGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
delete from dbo.GIFTINKINDSALEGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
delete from dbo.AUCTIONPURCHASEGLDISTRIBUTION where REVENUEPURCHASEID = @ID and OUTDATED = 0;
if @ADJUSTBENEFITS = 1
delete from dbo.BENEFITGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
if @TRANSACTIONTYPECODE = 0
begin
delete from dbo.GLTRANSACTION
where GLTRANSACTION.ID in (select GIFTFEEGLDISTRIBUTION.GLTRANSACTIONID
from dbo.GIFTFEEGLDISTRIBUTION
inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = GIFTFEEGLDISTRIBUTION.REVENUESPLITGIFTFEEID
where REVENUESPLIT.REVENUEID = @ID and GIFTFEEGLDISTRIBUTION.OUTDATED = 0);
delete from dbo.REVENUESPLITGIFTFEE
where REVENUESPLITGIFTFEE.ID in (select REVENUESPLIT.ID from dbo.REVENUESPLIT where REVENUESPLIT.REVENUEID = @ID);
exec dbo.USP_PAYMENT_ADDGIFTFEES @ID, @NEWCONSTITUENTID, @CHANGEAGENTID, @CHANGEDATE;
end
-- Add new GL distributions
if (select FINANCIALTRANSACTION.POSTSTATUSCODE from dbo.FINANCIALTRANSACTION inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID where FINANCIALTRANSACTION.ID = @ID and FINANCIALTRANSACTION.DELETEDON is null) != 3 --Do not post
begin
-- Add new GL distributions
exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;
-- Add new stock detail GL distributions
if @PAYMENTMETHODCODE = 4 and exists(select ID from dbo.STOCKSALE where STOCKDETAILID = @REVENUEPAYMENTMETHODID)
exec dbo.USP_SAVE_STOCKDETAILGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;
-- Add new gift-in-kind detail GL distributions
if @PAYMENTMETHODCODE = 6 and exists(select ID from dbo.GIFTINKINDSALE where GIFTINKINDPAYMENTMETHODDETAILID = @REVENUEPAYMENTMETHODID)
exec dbo.USP_SAVE_GIFTINKINDPAYMENTMETHODDETAILGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;
-- Add new property detail GL distributions
if @PAYMENTMETHODCODE = 5 and exists(select ID from dbo.PROPERTYDETAIL where ID = @REVENUEPAYMENTMETHODID and ISSOLD = 1)
exec dbo.USP_SAVE_PROPERTYDETAILGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;
-- Add new write-off GL distributions
if @TRANSACTIONTYPECODE in (1, 15) and dbo.UFN_VALID_BASICGL_INSTALLED() = 1
exec dbo.USP_SAVE_PLEDGEWRITEOFFGLDISTRIBUTION @ID, @WRITEOFFIDTABLE, @CHANGEAGENTID, @CHANGEDATE
else if @TRANSACTIONTYPECODE = 1
exec dbo.USP_SAVE_WRITEOFFGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;
-- Add new benefit GL distributions
if @ADJUSTBENEFITS = 1
exec USP_SAVE_BENEFITGLDISTRIBUTION_FINANCIALTRANSACTION @ID, @CHANGEAGENTID, @CHANGEDATE;
-- Add new auction purchase GL distributions
if exists(select 1 from dbo.FINANCIALTRANSACTIONLINEITEM inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and REVENUESPLIT_EXT.TYPECODE = 12 and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1)
exec dbo.USP_SAVE_AUCTIONPURCHASEGLDISTRIBUTION @REVENUEID = @ID, @CHANGEAGENTID = @CHANGEAGENTID, @CHANGEDATE = @CHANGEDATE
declare @DEPOSITID uniqueidentifier;
declare @DEPOSITPOSTDATE date;
select @DEPOSITID = BADP.DEPOSITID
,@DEPOSITPOSTDATE = FT.POSTDATE
from dbo.BANKACCOUNTDEPOSITPAYMENT BADP
inner join dbo.FINANCIALTRANSACTION FT on FT.ID = BADP.DEPOSITID
where BADP.ID = @ID;
if @DEPOSITID is not null
begin
if @DEPOSITPOSTDATE = isnull(@ADJUSTMENTPOSTDATE, @DEPOSITPOSTDATE)
exec dbo.USP_BANKACCOUNTDEPOSIT_OVERWRITEPAYMENTDEBITACCOUNTS @ID, @DEPOSITID, @CHANGEAGENTID, @CHANGEDATE;
else
update dbo.BANKACCOUNTDEPOSITPAYMENT set DEPOSITID = null where ID = @ID;
end
end
if @ADJUSTMENTID is not null
exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVEHISTORY @ID, @CHANGEAGENTID, null, @ADJUSTMENTID;
if @STOCKSALEADJUSTMENTIDS is not null
exec dbo.USP_ADJUSTMENTHISTORY_STOCK_SAVEHISTORY @REVENUEPAYMENTMETHODID, @CHANGEAGENTID, null, @STOCKSALEADJUSTMENTIDS;
if @GIFTINKINDSALEADJUSTMENTIDS is not null
exec dbo.USP_ADJUSTMENTHISTORY_GIFTINKIND_SAVEHISTORY @REVENUEPAYMENTMETHODID, @CHANGEAGENTID, null, @GIFTINKINDSALEADJUSTMENTIDS;
if @PROPERTYDETAILADJUSTMENTID is not null
exec dbo.USP_ADJUSTMENTHISTORY_PROPERTY_SAVEHISTORY @REVENUEPAYMENTMETHODID, @CHANGEAGENTID, null, @PROPERTYDETAILADJUSTMENTID;
-- If this is a pledge, save the adjustment history for any write-offs
if @TRANSACTIONTYPECODE = 1 and (select count(*) from @ADJUSTEDWRITEOFFS) > 0
begin
declare @HISTORYWRITEOFFID uniqueidentifier;
declare @HISTORYADJUSTMENTID uniqueidentifier;
/* Cursor to use for logging history adjustments */
declare HISTORYCURSOR cursor local fast_forward for
select WRITEOFFID, ADJUSTMENTID from @ADJUSTEDWRITEOFFS
open HISTORYCURSOR;
fetch next from HISTORYCURSOR into @HISTORYWRITEOFFID, @HISTORYADJUSTMENTID;
while @@FETCH_STATUS = 0
begin
if @HISTORYADJUSTMENTID is not null
exec dbo.USP_ADJUSTMENTHISTORY_WRITEOFF_SAVEHISTORY @HISTORYWRITEOFFID, @CHANGEAGENTID, null, @HISTORYADJUSTMENTID;
fetch next from HISTORYCURSOR into @HISTORYWRITEOFFID, @HISTORYADJUSTMENTID;
end
close HISTORYCURSOR;
deallocate HISTORYCURSOR;
end
if @RESETMATCHINGGIFTCLAIMS = 1
begin
-- Create default matching gifts for the new constituent
exec USP_REVENUE_MATCHINGGIFT_CHANGECONSTITUENT @ID, @CHANGEAGENTID, @CHANGEDATE, @CURRENTAPPUSERID;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;