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;