USP_DATAFORMTEMPLATE_EDITSAVE_REVENUETRANSACTIONCHANGECONSTITUENT_4
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@NEWCONSTITUENTID | uniqueidentifier | IN | |
@CONSTITUENTACCOUNTID | uniqueidentifier | IN | |
@RESETRECOGNITIONCREDITS | bit | IN | |
@RESETSOLICITORS | bit | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@RESETMATCHINGGIFTCLAIMS | bit | IN | |
@SEPAMANDATEID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDITSAVE_REVENUETRANSACTIONCHANGECONSTITUENT_4
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@NEWCONSTITUENTID uniqueidentifier,
@CONSTITUENTACCOUNTID uniqueidentifier,
@RESETRECOGNITIONCREDITS bit,
@RESETSOLICITORS bit,
@CURRENTAPPUSERID uniqueidentifier = null,
@RESETMATCHINGGIFTCLAIMS bit,
@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 @POSTSTATUSCODE tinyint;
select top 1
@PREVIOUSCONSTITUENTID = CONSTITUENTID,
@TRANSACTIONTYPECODE = TYPECODE,
@POSTSTATUSCODE = POSTSTATUSCODE
from dbo.FINANCIALTRANSACTION
where ID = @ID;
if @PREVIOUSCONSTITUENTID = @NEWCONSTITUENTID
begin
raiserror('NEWCONSTITUENTCANNOTBECURRENTCONSTITUENT', 13, 1);
return 1;
end
-- Verify the user has access to the new constituent
declare @DATAFORMINSTANCEID uniqueidentifier;
set @DATAFORMINSTANCEID = '41EB5B17-BD5C-49B6-9538-CB360FA95EB4';
declare @ISADMIN bit;
set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
if (@ISADMIN = 0)
begin
select top(1) ID
from CONSTITUENT
where
CONSTITUENT.ID = @NEWCONSTITUENTID
and(
dbo.UFN_SECURITY_APPUSER_GRANTED_FORM_FORCONSTIT(@CURRENTAPPUSERID, @DATAFORMINSTANCEID, CONSTITUENT.ID) = 1
and
exists(select SITEID from dbo.UFN_SITEID_MAPFROM_CONSTITUENTID(CONSTITUENT.ID)
where dbo.UFN_SECURITY_APPUSER_GRANTED_FORM_FORSITE(@CURRENTAPPUSERID, @DATAFORMINSTANCEID, SITEID) = 1)
)
if @@ROWCOUNT = 0
begin
raiserror('BBERR_NEWCONSTITUENT_NOACCESS',13,1);
return 0;
end
end
declare @CHANGEDATE datetime;
set @CHANGEDATE = getdate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
-- Get payment code
declare @PAYMENTMETHODCODE tinyint, @REVENUEPAYMENTMETHODID uniqueidentifier;
select
@PAYMENTMETHODCODE = PAYMENTMETHODCODE,
@REVENUEPAYMENTMETHODID = ID
from
dbo.REVENUEPAYMENTMETHOD
where
REVENUEID = @ID;
-- Verify the transaction hasn't 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 = 1
begin
raiserror('TRANSACTIONCANNOTBEPOSTED', 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
begin try
declare @contextCache varbinary(128);
--cache current context information
set @contextCache = CONTEXT_INFO();
--set CONTEXT_INFO to @CHANGEAGENTID
set CONTEXT_INFO @CHANGEAGENTID;
exec dbo.USP_REVENUE_UPDATERERECEIPTS @ID, @CHANGEAGENTID, @CHANGEDATE;
-- begin 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 haven't 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;
-- Gift Aid is for UK only
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;
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
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 ID from dbo.FINANCIALTRANSACTIONLINEITEM where FINANCIALTRANSACTIONID = @ID);
--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 ID from dbo.FINANCIALTRANSACTIONLINEITEM where FINANCIALTRANSACTIONID = @ID);
--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.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.DONORCHALLENGEENCUMBERED on FINANCIALTRANSACTION.ID = DONORCHALLENGEENCUMBERED.MATCHEDREVENUEID
where DONORCHALLENGEENCUMBERED.REVENUESPLITID in (select ID from dbo.FINANCIALTRANSACTIONLINEITEM where FINANCIALTRANSACTIONID = @ID)
and FINANCIALTRANSACTION.CONSTITUENTID <> REVENUERECOGNITION.CONSTITUENTID
and REVENUESPLIT_EXT.DESIGNATIONID = DONORCHALLENGEENCUMBERED.DESIGNATIONID;
--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,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
ORGANIZATIONEXCHANGERATEID
)
select
RS.ID,
RR.CONSTITUENTID,
RR.AMOUNT,
RR.REVENUERECOGNITIONTYPECODEID,
FT.DATE,
@CHANGEAGENTID,@CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE,
FT.ORGAMOUNT,
V.BASECURRENCYID,
FT.ORGEXCHANGERATEID
from dbo.FINANCIALTRANSACTION FT
inner join REVENUE_EXT RE on RE.ID = FT.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM RS
on RS.FINANCIALTRANSACTIONID = FT.ID
left join dbo.RECURRINGGIFTACTIVITY RGA on RGA.PAYMENTREVENUEID = FT.ID
inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V on V.FINANCIALTRANSACTIONID = FT.ID
cross apply dbo.UFN_REVENUEDETAIL_GETDEFAULTRECOGNITIONS(RE.GIVENANONYMOUSLY, FT.CONSTITUENTID, RS.BASEAMOUNT, FT.DATE, RGA.SOURCEREVENUEID) RR
where FT.ID = @ID;
end
if @PAYMENTMETHODCODE in (3, 11) -- Direct debit or standing order
begin
if @TRANSACTIONTYPECODE in (1, 2) -- Pledge or recurring gift
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 from dbo.REVENUEGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
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.BENEFITGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
delete from dbo.GIFTINKINDSALEGLDISTRIBUTION 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.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = GIFTFEEGLDISTRIBUTION.REVENUESPLITGIFTFEEID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and GIFTFEEGLDISTRIBUTION.OUTDATED = 0);
delete from dbo.REVENUESPLITGIFTFEE
where REVENUESPLITGIFTFEE.ID in (select FINANCIALTRANSACTIONLINEITEM.ID from dbo.FINANCIALTRANSACTIONLINEITEM where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID);
exec dbo.USP_PAYMENT_ADDGIFTFEES @ID, @NEWCONSTITUENTID, @CHANGEAGENTID, @CHANGEDATE;
end
-- Add new GL distributions
if @POSTSTATUSCODE <> 3 -- 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 = 1
exec dbo.USP_SAVE_WRITEOFFGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;
-- Add new benefit GL distributions
if @TRANSACTIONTYPECODE <> 15 --Membership installment plan
exec dbo.USP_SAVE_BENEFITGLDISTRIBUTION_FINANCIALTRANSACTION @ID, @CHANGEAGENTID, @CHANGEDATE;
declare @DEPOSITID uniqueidentifier;
select @DEPOSITID = DEPOSITID
from dbo.BANKACCOUNTDEPOSITPAYMENT
where ID = @ID;
if @DEPOSITID is not null
exec dbo.USP_BANKACCOUNTDEPOSIT_OVERWRITEPAYMENTDEBITACCOUNTS @ID, @DEPOSITID, @CHANGEAGENTID, @CHANGEDATE;
end
--reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
if @RESETMATCHINGGIFTCLAIMS = 1
begin
-- Create default matching gifts for the new constituent
exec USP_REVENUE_MATCHINGGIFT_CHANGECONSTITUENT @ID, @CHANGEAGENTID, @CHANGEDATE, @CURRENTAPPUSERID;
end
if @TRANSACTIONTYPECODE = 2 -- only do this for recurring gifts
insert into dbo.RECURRINGGIFTAMENDMENT(ID,FINANCIALTRANSACTIONID,AMENDMENTTYPECODE,DATE,CONSTITUENTID,PREVIOUSCONSTITUENTID,
ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values(newid(),@ID,4,getdate(),@NEWCONSTITUENTID,@PREVIOUSCONSTITUENTID,@CHANGEAGENTID,@CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE)
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;