USP_DATAFORMTEMPLATE_EDIT_RECURRINGGIFT_2

The save procedure used by the edit dataform template "Recurring Gift Edit Form 2".

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 Next transaction
@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
@REFERENCE nvarchar(255) IN Reference
@CATEGORYCODEID uniqueidentifier IN Revenue category

Definition

Copy


                CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_RECURRINGGIFT_2
                (
                    @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,
                    @REFERENCE nvarchar(255),
                    @CATEGORYCODEID uniqueidentifier
                )

                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;

                    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);

                    /*
                    CR283444-091907 AV the schedule should be able to use any start date for semi-monthly
                    The change is also to keep pledge and rec. gift in sync.
                    --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=@SPLITS, @REVENUEAMOUNT=@AMOUNT, @REVENUEID=@ID;

                    /*
                    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
                    */

                    declare @SPLITSCHANGED bit
                    set @SPLITSCHANGED = dbo.UFN_CHECKDETAIL_SPLITSCHANGED(@ID, @SPLITS)

                    -- 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 @SPLITSCHANGED = 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

                        --Update Revenue

                        update dbo.REVENUE
                        set
                            DATE = @DATE,
                            AMOUNT = @AMOUNT,
                            RECEIPTAMOUNT = @AMOUNT,
                            FINDERNUMBER = @FINDERNUMBER,
                            SOURCECODE = @SOURCECODE,
                            APPEALID = @APPEALID,
                            GIVENANONYMOUSLY = @GIVENANONYMOUSLY,
                            MAILINGID = @MAILINGID,
                            CHANNELCODEID = @CHANNELCODEID,
                            DONOTACKNOWLEDGE = @DONOTACKNOWLEDGE,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where ID = @ID;

                        exec dbo.USP_REVENUEREFERENCE_EDIT @ID, @REFERENCE, @CHANGEAGENTID;

                        --only update schedule if a value changed

                        update dbo.REVENUESCHEDULE
                        set
                            FREQUENCYCODE = @FREQUENCYCODE,
                            ENDDATE = @ENDDATE,
                            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 = case when STARTDATE = NEXTTRANSACTIONDATE then @STARTDATE else STARTDATE end,
                            NEXTTRANSACTIONDATE = @STARTDATE,
                            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));

                        -- Set the IDs for any blank entries in the splits XML so that it can associate the declines with gift aid

                        -- flag with the generated splits.  Also, pull in the existing value for declines gift aid if it wasn't passed

                        -- in the xml.

                        set @SPLITS = (    select 
                                            case when SPLITS.[ID] is null or SPLITS.[ID] = '00000000-0000-0000-0000-000000000000' then newid() else SPLITS.[ID] end [ID],
                                            SPLITS.[AMOUNT],
                                            SPLITS.[APPLICATIONCODE],
                                            SPLITS.[DESIGNATIONID],
                                            SPLITS.[TYPECODE],
                                            case when SPLITS.[DECLINESGIFTAID] is null then REVENUESPLITGIFTAID.DECLINESGIFTAID else SPLITS.DECLINESGIFTAID end DECLINESGIFTAID
                                        from dbo.UFN_REVENUE_GETSPLITS_FROMITEMLISTXML(@SPLITS) SPLITS
                                        left join dbo.REVENUESPLITGIFTAID on SPLITS.ID = REVENUESPLITGIFTAID.ID
                                        for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64)

                        exec dbo.USP_REVENUE_GETSPLITS_UPDATEFROMXML @ID, @SPLITS, @CHANGEAGENTID, @CURRENTDATE;
                        exec dbo.USP_REVENUE_UPDATESOLICITORS @ID, @CHANGEAGENTID, @CURRENTDATE;

                        exec dbo.USP_REVENUECATEGORY_UPDATESPLITS @ID, @CATEGORYCODEID, @CHANGEAGENTID, @CURRENTDATE;

                        if @SPLITSCHANGED = 1
                        begin
                            exec dbo.USP_REVENUE_CLEARANDADDCAMPAIGNS @REVENUEID = @ID
                                @CHANGEAGENTID = @CHANGEAGENTID,
                                @CHANGEDATE = @CURRENTDATE
                        end

                        --Gift Aid is for UK only

                        if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D') = 1
                        begin
                            --Because the edit form does not include these values, we must retrieve them before updating the splits so that we can

                            --  get the proper Gift Aid qualification status

                            declare @PAYMENTMETHODCODE tinyint;
                            declare @CREDITTYPECODEID uniqueidentifier;
                            select @PAYMENTMETHODCODE = PAYMENTMETHODCODE from dbo.REVENUEPAYMENTMETHOD where REVENUEID = @ID;
                            if @PAYMENTMETHODCODE = 2
                                select @CREDITTYPECODEID = CREDITCARD.CREDITTYPECODEID 
                                from dbo.REVENUE
                                inner join dbo.REVENUEPAYMENTMETHOD on REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID
                                left join dbo.REVENUESCHEDULE on REVENUE.ID = REVENUESCHEDULE.ID
                                left join dbo.CREDITCARD on CREDITCARD.ID = REVENUESCHEDULE.CREDITCARDID
                                where REVENUE.ID = @ID;

                            declare @SPLITSDECLININGGIFTAID xml
                            set @SPLITSDECLININGGIFTAID = (    select
                                                                ID as REVENUESPLITID
                                                            from dbo.UFN_REVENUE_GETSPLITS_FROMITEMLISTXML(@SPLITS)
                                                            where DECLINESGIFTAID = 1
                                                            for xml raw('ITEM'),type,elements,root('SPLITSDECLININGGIFTAID'),BINARY BASE64)

                            exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS @ID, @APPEALID, @PAYMENTMETHODCODE, @CREDITTYPECODEID, @CHANGEAGENTID, @DATE, 2, @SPLITSDECLININGGIFTAID; --recurring gift is transaction type code 2

                        end
                end try

                begin catch
                    exec dbo.USP_RAISE_ERROR;
                    return 1;
                end catch

                return 0;