USP_DATAFORMTEMPLATE_EDIT_RECURRINGGIFT
The save procedure used by the edit dataform template "Recurring Gift Edit Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter indicating the ID of the record being edited. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@DATE | datetime | IN | Date |
@AMOUNT | money | IN | Amount |
@SPLITS | xml | IN | Designations |
@FREQUENCYCODE | tinyint | IN | Frequency |
@ENDDATE | datetime | IN | Ending on |
@STARTDATE | datetime | IN | Starting on |
@FINDERNUMBER | bigint | IN | Finder number |
@SOURCECODE | nvarchar(50) | IN | Source code |
@APPEALID | uniqueidentifier | IN | Appeal |
@GIVENANONYMOUSLY | bit | IN | Recurring gift is anonymous |
@MAILINGID | uniqueidentifier | IN | Mailing |
@CHANNELCODEID | uniqueidentifier | IN | Channel |
@DONOTACKNOWLEDGE | bit | IN | Do not acknowledge |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_RECURRINGGIFT
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@DATE datetime,
@AMOUNT money,
@SPLITS xml,
@FREQUENCYCODE tinyint,
@ENDDATE datetime,
@STARTDATE datetime,
@FINDERNUMBER bigint,
@SOURCECODE nvarchar(50),
@APPEALID uniqueidentifier,
@GIVENANONYMOUSLY bit,
@MAILINGID uniqueidentifier,
@CHANNELCODEID uniqueidentifier,
@DONOTACKNOWLEDGE bit
)
as
set nocount on;
declare @CURRENTDATE datetime
declare @MAXACTIVITYDATE datetime
declare @ERROR varchar(100)
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
set @CURRENTDATE = getdate();
declare @SUM money
begin try
if @FINDERNUMBER is null
set @FINDERNUMBER = 0;
else if @FINDERNUMBER <> 0
begin
if dbo.[UFN_MKTFINDERNUMBER_VALIDATE_MOD10](@FINDERNUMBER) = 0
raiserror('BBERR_FINDERNUMBER_FAILEDCHECKDIGIT', 13, 1);
if dbo.[UFN_MKTSEGMENTATIONFINDERNUMBER_GETSEGMENTATION](@FINDERNUMBER) is null
raiserror('BBERR_FINDERNUMBER_INVALID', 13, 1);
end
if @AMOUNT < 0
raiserror('The amount cannot be negative.', 13, 1)
if @STARTDATE < @DATE
raiserror('The schedule cannot start before the gift date.', 13, 1);
--if semi-monthly ensure nexttransaction date starts on 1st or 15th
if @FREQUENCYCODE = 7 and not (day(@STARTDATE) = 1 or day(@STARTDATE) = 15)
raiserror('RECURRINGEDIT_ERR_SEMI_MONTHLY_DATE', 13, 1)
exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @AMOUNT, 2;
/*
CR240045-040406 MMR
Removing this limitation for now
--next transaction date cannot be before activity
select @MAXACTIVITYDATE = max(SCHEDULEDATE) from RECURRINGGIFTACTIVITY
where SOURCEREVENUEID = @ID;
if coalesce(@MAXACTIVITYDATE, @STARTDATE) > @STARTDATE
begin
set @ERROR = 'The schedule cannot start before the last activity date (' + convert(varchar(10),@MAXACTIVITYDATE, 101) + ').'
raiserror(@ERROR, 13, 1)
end
*/
-- check to see if the revenue record needs to be re-acknowledged
if (coalesce((select top 1 REACKNOWLEDGEREVENUE from dbo.ACKNOWLEDGEMENTPREFERENCE), 0)) = 1
begin
declare @FIELDCHANGED bit;
set @FIELDCHANGED = 0;
-- check to see if amount have changed
if (select count(REVENUE.ID) from dbo.REVENUE where REVENUE.ID = @ID and AMOUNT = @AMOUNT) = 0
set @FIELDCHANGED = 1;
-- check to see if designations have changed
if @FIELDCHANGED = 0
if dbo.UFN_CHECKDETAIL_SPLITSCHANGED(@ID, @SPLITS) = 1
set @FIELDCHANGED = 1;
-- if a field has changed, mark the revenue letters for this record out of date, if necessary
if @FIELDCHANGED = 1
exec dbo.USP_REVENUELETTER_SETREACKNOWLEDGEMENTS @ID, @CHANGEAGENTID;
end
-- make sure we aren't trying to modify revenue in a locked/closed deposit/bank
exec dbo.USP_EDIT_REVENUE_VALIDATE_DEPOSIT_STATUS @ID;
--Update Revenue
/* CMC
update dbo.REVENUE_EXT
set
RECEIPTAMOUNT = @AMOUNT,
FINDERNUMBER = @FINDERNUMBER,
SOURCECODE = @SOURCECODE,
APPEALID = @APPEALID,
GIVENANONYMOUSLY = @GIVENANONYMOUSLY,
MAILINGID = @MAILINGID,
CHANNELCODEID = @CHANNELCODEID,
DONOTACKNOWLEDGE = @DONOTACKNOWLEDGE
where ID = @ID;
update dbo.FINANCIALTRANSACTION
set
DATE = @DATE,
AMOUNT = @AMOUNT,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID;
*/
update dbo.REVENUE
set
RECEIPTAMOUNT = @AMOUNT,
FINDERNUMBER = @FINDERNUMBER,
SOURCECODE = @SOURCECODE,
APPEALID = @APPEALID,
GIVENANONYMOUSLY = @GIVENANONYMOUSLY,
MAILINGID = @MAILINGID,
CHANNELCODEID = @CHANNELCODEID,
DONOTACKNOWLEDGE = @DONOTACKNOWLEDGE,
DATE = @DATE,
AMOUNT = @AMOUNT,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID;
declare @OLDSTATUSCODE tinyint;
select @OLDSTATUSCODE = STATUSCODE from dbo.REVENUESCHEDULE where ID = @ID;
--only update schedule if a value changed
update dbo.REVENUESCHEDULE
set
FREQUENCYCODE = @FREQUENCYCODE,
ENDDATE = @ENDDATE,
STATUSCODE = case when dbo.UFN_DATE_GETEARLIESTTIME(NEXTTRANSACTIONDATE) > @ENDDATE then 3 else STATUSCODE end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID
and (FREQUENCYCODE <> @FREQUENCYCODE
or ENDDATE <> @ENDDATE
or (@ENDDATE is null and ENDDATE is not null)
or (@ENDDATE is not null and ENDDATE is null));
--only update start date only if value changed
update dbo.REVENUESCHEDULE
set
STARTDATE = @STARTDATE,
NEXTTRANSACTIONDATE = @STARTDATE,
STATUSCODE = @OLDSTATUSCODE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID
and (STARTDATE <> @STARTDATE
or (@STARTDATE is null and STARTDATE is not null)
or (@STARTDATE is not null and STARTDATE is null));
exec dbo.USP_REVENUE_GETSPLITS_UPDATEFROMXML @ID, @SPLITS, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_REVENUE_UPDATESOLICITORS @ID, @CHANGEAGENTID, @CURRENTDATE;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;