USP_DATAFORMTEMPLATE_EDIT_RECURRINGGIFTPAYMENTDETAILS_7

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@PAYMENTMETHODCODE tinyint IN
@AUTOPAY bit IN
@CARDHOLDERNAME nvarchar(255) IN
@CREDITCARDNUMBER nvarchar(20) IN
@CREDITTYPECODEID uniqueidentifier IN
@EXPIRESON UDT_FUZZYDATE IN
@REFERENCEDATE UDT_FUZZYDATE IN
@REFERENCENUMBER nvarchar(20) IN
@ACCOUNTID uniqueidentifier IN
@CREDITCARDTOKEN uniqueidentifier IN
@STANDINGORDERSETUP bit IN
@STANDINGORDERSETUPDATE datetime IN
@DDISOURCECODEID uniqueidentifier IN
@DDISOURCEDATE date IN
@SENDPMINSTRUCTION bit IN
@PMINSTRUCTIONTOSENDCODE tinyint IN
@PMINSTRUCTIONDATE_NEW date IN
@PMINSTRUCTIONDATE_CANCEL date IN
@PMINSTRUCTIONDATE_SETUP date IN
@PMADVANCENOTICESENTDATE date IN
@UPDATEOTHERTRANSACTIONSTOUSENEWCREDITCARD bit IN
@USESYSTEMGENERATEDREFERENCENUMBER bit IN
@STANDINGORDERREFERENCENUMBER nvarchar(18) IN
@SEPAMANDATEID uniqueidentifier IN
@OTHERPAYMENTMETHODCODEID uniqueidentifier IN

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_RECURRINGGIFTPAYMENTDETAILS_7
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @PAYMENTMETHODCODE tinyint,
                        @AUTOPAY bit,
                        @CARDHOLDERNAME nvarchar(255),
                        @CREDITCARDNUMBER nvarchar(20),
                        @CREDITTYPECODEID uniqueidentifier,
                        @EXPIRESON dbo.UDT_FUZZYDATE,
                        @REFERENCEDATE dbo.UDT_FUZZYDATE,
                        @REFERENCENUMBER nvarchar(20),
                        @ACCOUNTID uniqueidentifier,
                        @CREDITCARDTOKEN uniqueidentifier,
                        @STANDINGORDERSETUP bit,
                        @STANDINGORDERSETUPDATE datetime,
                        @DDISOURCECODEID uniqueidentifier,
                        @DDISOURCEDATE date,
                        @SENDPMINSTRUCTION bit,
                        @PMINSTRUCTIONTOSENDCODE tinyint,
                        @PMINSTRUCTIONDATE_NEW date,
                        @PMINSTRUCTIONDATE_CANCEL date,
                        @PMINSTRUCTIONDATE_SETUP date,
                        @PMADVANCENOTICESENTDATE date,
                        @UPDATEOTHERTRANSACTIONSTOUSENEWCREDITCARD bit,
                        @USESYSTEMGENERATEDREFERENCENUMBER bit,
                        @STANDINGORDERREFERENCENUMBER nvarchar(18),
                        @SEPAMANDATEID uniqueidentifier,
                        @OTHERPAYMENTMETHODCODEID uniqueidentifier
                    )    
                    as
                    set nocount on;

                    declare @CURRENTDATE datetime;
                    declare @PREVIOUSPAYMENTMETHODCODE tinyint;
                    declare @HASEDITS bit = 0;

                    begin try

                        if @CHANGEAGENTID is null  
                                    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

                        set @CURRENTDATE = getdate();

                        -- store the previous payment method to be used in the RG activity timeline

                        select @PREVIOUSPAYMENTMETHODCODE = case when (PAYMENTMETHODCODE = 2 and REVENUESCHEDULE.CREDITCARDID is null) then 98 else PAYMENTMETHODCODE end
                        from dbo.REVENUEPAYMENTMETHOD 
                        left join dbo.REVENUESCHEDULE on REVENUEPAYMENTMETHOD.REVENUEID = REVENUESCHEDULE.ID
                        where REVENUEPAYMENTMETHOD.REVENUEID = @ID

                        -- capture previous payment method information to be recorded in the RG amendment table.

                        --previous CC fields

                        declare @PREVIOUSCREDITCARDPARTIALNUMBER nvarchar(20);
                        declare @PREVIOUSCREDITTYPECODEID uniqueidentifier;
                        declare @PREVIOUSEXPIRESON dbo.UDT_FUZZYDATE;
                        declare @PREVIOUSCARDHOLDERNAME nvarchar(255);
                        -- previous DD and other fields

                        declare @PREVIOUSCONSTITUENTACCOUNTID uniqueidentifier;
                        declare @PREVIOUSREFERENCEDATE dbo.UDT_FUZZYDATE;
                        declare @PREVIOUSREFERENCENUMBER nvarchar(20);
                        declare @PREVIOUSOTHERPAYMENTMETHODCODEID uniqueidentifier;
                        -- previous UK/SEPA fields

                        declare @PREVIOUSDDISOURCECODEID uniqueidentifier;
                        declare @PREVIOUSDDISOURCEDATE date;
                        declare @PREVIOUSSENDPMINSTRUCTION bit;
                        declare @PREVIOUSPMINSTRUCTIONTOSENDCODE tinyint;
                        declare @PREVIOUSPMINSTRUCTIONDATE_NEW date;
                        declare @PREVIOUSPMINSTRUCTIONDATE_CANCEL date;
                        declare @PREVIOUSPMINSTRUCTIONDATE_SETUP date;
                        declare @PREVIOUSPMADVANCENOTICESENTDATE date;
                        declare @PREVIOUSSEPAMANDATEID uniqueidentifier;
                        -- previous Standing Order fields

                        declare @PREVIOUSSTANDINGORDERSETUP bit;
                        declare @PREVIOUSSTANDINGORDERSETUPDATE date;
                        declare @PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER bit;

                        if @PAYMENTMETHODCODE <> 2 --Credit card

                            set @CREDITCARDTOKEN = null

                        -- Have to set @PREVIOUSCREDITCARDID before setting REVENUESCHEDULE.CREDITCARDID to null

                        -- so that updating other card numbers works when changing to a partial number.

                        -- populate the previous fields for CC when the paymentmethod code is 2 or the previous code was 2

                        declare @PREVIOUSCREDITCARDID uniqueidentifier                            
                        if (@UPDATEOTHERTRANSACTIONSTOUSENEWCREDITCARD = 1 and @PAYMENTMETHODCODE = 2) or @PREVIOUSPAYMENTMETHODCODE = 2-- Credit card

                        begin
                            select 
                                @PREVIOUSCREDITCARDID = REVENUESCHEDULE.CREDITCARDID,
                                @PREVIOUSCREDITCARDPARTIALNUMBER = [CARD].CREDITCARDPARTIALNUMBER,
                                @PREVIOUSCREDITTYPECODEID = [CARD].CREDITTYPECODEID,
                                @PREVIOUSEXPIRESON = [CARD].EXPIRESON,
                                @PREVIOUSCARDHOLDERNAME = [CARD].CARDHOLDERNAME
                            from dbo.REVENUESCHEDULE
                            left outer join dbo.CREDITCARD as [CARD] on REVENUESCHEDULE.CREDITCARDID = CARD.ID
                            where REVENUESCHEDULE.ID = @ID
                        end

                        -- populate the previous fields for DD when the paymentmethod code is 3 or the previous code was 3

                        if @PREVIOUSPAYMENTMETHODCODE = 3
                            select 
                                @PREVIOUSCONSTITUENTACCOUNTID = REVENUESCHEDULEDIRECTDEBITPAYMENT.CONSTITUENTACCOUNTID,
                                @PREVIOUSREFERENCEDATE = REVENUESCHEDULEDIRECTDEBITPAYMENT.REFERENCEDATE,
                                @PREVIOUSREFERENCENUMBER = REVENUESCHEDULEDIRECTDEBITPAYMENT.REFERENCENUMBER,
                                @PREVIOUSDDISOURCECODEID = REVENUESCHEDULEDIRECTDEBITPAYMENT.DDISOURCECODEID,
                                @PREVIOUSDDISOURCEDATE = REVENUESCHEDULEDIRECTDEBITPAYMENT.DDISOURCEDATE,
                                @PREVIOUSSENDPMINSTRUCTION = REVENUESCHEDULEDIRECTDEBITPAYMENT.SENDPMINSTRUCTION,
                                @PREVIOUSPMINSTRUCTIONTOSENDCODE = REVENUESCHEDULEDIRECTDEBITPAYMENT.PMINSTRUCTIONTOSENDCODE,
                                @PREVIOUSPMINSTRUCTIONDATE_NEW = REVENUESCHEDULEDIRECTDEBITPAYMENT.PMINSTRUCTIONDATE_NEW,
                                @PREVIOUSPMINSTRUCTIONDATE_CANCEL = REVENUESCHEDULEDIRECTDEBITPAYMENT.PMINSTRUCTIONDATE_CANCEL,
                                @PREVIOUSPMINSTRUCTIONDATE_SETUP = REVENUESCHEDULEDIRECTDEBITPAYMENT.PMINSTRUCTIONDATE_SETUP,
                                @PREVIOUSPMADVANCENOTICESENTDATE = REVENUESCHEDULEDIRECTDEBITPAYMENT.PMADVANCENOTICESENTDATE,
                                @PREVIOUSSEPAMANDATEID = REVENUESCHEDULEDIRECTDEBITPAYMENT.SEPAMANDATEID
                            from dbo.REVENUESCHEDULEDIRECTDEBITPAYMENT
                            where REVENUESCHEDULEDIRECTDEBITPAYMENT.ID = @ID

                        -- populate the previous fields for other method when the previous code was 10

                  else if @PREVIOUSPAYMENTMETHODCODE = 10
                            select 
                                @PREVIOUSOTHERPAYMENTMETHODCODEID = OTHERPAYMENTMETHODDETAIL.OTHERPAYMENTMETHODCODEID,
                                @PREVIOUSREFERENCEDATE = OTHERPAYMENTMETHODDETAIL.REFERENCEDATE,
                                @PREVIOUSREFERENCENUMBER = OTHERPAYMENTMETHODDETAIL.REFERENCENUMBER
                            from dbo.OTHERPAYMENTMETHODDETAIL
                            inner join dbo.REVENUEPAYMENTMETHOD on OTHERPAYMENTMETHODDETAIL.ID = REVENUEPAYMENTMETHOD.ID
                            where REVENUEPAYMENTMETHOD.REVENUEID = @ID

                        -- populate the previous fields for the credit card reference only method when the previous code was 98

                        else if @PREVIOUSPAYMENTMETHODCODE = 98
                            select 
                                @PREVIOUSCREDITCARDPARTIALNUMBER = D.CREDITCARDPARTIALNUMBER,
                                @PREVIOUSCREDITTYPECODEID = D.CREDITTYPECODEID,
                                @PREVIOUSEXPIRESON = D.EXPIRESON,
                                @PREVIOUSCARDHOLDERNAME = D.CARDHOLDERNAME
                            from dbo.REVENUEPAYMENTMETHOD M
                            left join dbo.CREDITCARDPAYMENTMETHODDETAIL D on M.ID =  D.ID
                            where M.REVENUEID = @ID;

                        -- populate the previous fields for Standing Order when the paymentmethod code is 11 or the previous code was 11

                        else if @PREVIOUSPAYMENTMETHODCODE = 11
                            select 
                                @PREVIOUSREFERENCEDATE = REFERENCEDATE,
                                @PREVIOUSREFERENCENUMBER = case when USESYSTEMGENERATEDREFERENCENUMBER = 1 then dbo.UFN_STANDINGORDER_REFERENCENUMBER_FORDISPLAY(@ID) else REVENUESCHEDULESTANDINGORDERPAYMENT.REFERENCENUMBER end ,
                                @PREVIOUSCONSTITUENTACCOUNTID = CONSTITUENTACCOUNTID,
                                @PREVIOUSSTANDINGORDERSETUP = STANDINGORDERSETUP,
                                @PREVIOUSSTANDINGORDERSETUPDATE = STANDINGORDERSETUPDATE,
                                @PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER = case when USESYSTEMGENERATEDREFERENCENUMBER is null then 0 else USESYSTEMGENERATEDREFERENCENUMBER end
                            from dbo.REVENUESCHEDULESTANDINGORDERPAYMENT
                            left join dbo.REVENUESTANDINGORDER on REVENUESTANDINGORDER.ID = REVENUESCHEDULESTANDINGORDERPAYMENT.ID
                            where REVENUESCHEDULESTANDINGORDERPAYMENT.ID = @ID

                        if @CREDITCARDTOKEN is null    
                            update dbo.REVENUESCHEDULE set
                                CREDITCARDID = null,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            where ID = @ID

                        if @PREVIOUSPAYMENTMETHODCODE <> @PAYMENTMETHODCODE
                            set @HASEDITS = 1;

                        update dbo.REVENUEPAYMENTMETHOD
                            set PAYMENTMETHODCODE = case when @PAYMENTMETHODCODE = 98 then 2 else @PAYMENTMETHODCODE end,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                        where REVENUEID = @ID;


                        if @PAYMENTMETHODCODE = 2 --Credit debit

                        begin
                            declare @CREDITCARDID uniqueidentifier

                            -- record changes in the RG amendment table

                            if (@HASEDITS = 1 and @PREVIOUSPAYMENTMETHODCODE <> 98) or 
                               (@PREVIOUSCREDITCARDPARTIALNUMBER <> @CREDITCARDNUMBER and (isnull(@PREVIOUSCREDITCARDPARTIALNUMBER,'') <> '' or isnull(@CREDITCARDNUMBER,'') <> '')) or
                               (coalesce(@PREVIOUSCREDITTYPECODEID,'00000000-0000-0000-0000-000000000000') <> coalesce(@CREDITTYPECODEID,'00000000-0000-0000-0000-000000000000') and 
                                       (@PREVIOUSCREDITTYPECODEID is not null or @CREDITTYPECODEID is not null)) or
                               (@PREVIOUSEXPIRESON <> @EXPIRESON and (isnull(@PREVIOUSEXPIRESON,'00000000') <> '00000000' or isnull(@EXPIRESON,'00000000') <> '00000000')) or
                               (@PREVIOUSCARDHOLDERNAME <> @CARDHOLDERNAME and (isnull(@PREVIOUSCARDHOLDERNAME,'') <> '' or isnull(@CARDHOLDERNAME,'') <> ''))
                            begin
                                insert into dbo.RECURRINGGIFTAMENDMENT(ID,FINANCIALTRANSACTIONID,AMENDMENTTYPECODE,DATE,PAYMENTMETHODCODE,PREVIOUSPAYMENTMETHODCODE,
                                                                  CREDITCARDPARTIALNUMBER,PREVIOUSCREDITCARDPARTIALNUMBER,CREDITTYPECODEID,PREVIOUSCREDITTYPECODEID,
                                                                  EXPIRESON,PREVIOUSEXPIRESON,CARDHOLDERNAME,PREVIOUSCARDHOLDERNAME,PREVIOUSCONSTITUENTACCOUNTID,PREVIOUSREFERENCEDATE,
                                                                  PREVIOUSREFERENCENUMBER,PREVIOUSOTHERPAYMENTMETHODCODEID, ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED,
                                                                  PREVIOUSSTANDINGORDERSETUP,PREVIOUSSTANDINGORDERSETUPDATE,PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER,
                                                                  PREVIOUSDDISOURCECODEID,PREVIOUSDDISOURCEDATE,PREVIOUSSENDPMINSTRUCTION,PREVIOUSPMINSTRUCTIONTOSENDCODE,PREVIOUSPMINSTRUCTIONDATE_NEW,
                                                                  PREVIOUSPMINSTRUCTIONDATE_CANCEL,PREVIOUSPMINSTRUCTIONDATE_SETUP,PREVIOUSPMADVANCENOTICESENTDATE,PREVIOUSSEPAMANDATEID)
                                values(newid(), @ID,3,@CURRENTDATE,@PAYMENTMETHODCODE,@PREVIOUSPAYMENTMETHODCODE,
                                       @CREDITCARDNUMBER,isnull(@PREVIOUSCREDITCARDPARTIALNUMBER,''), @CREDITTYPECODEID,@PREVIOUSCREDITTYPECODEID,@EXPIRESON,
                                       isnull(@PREVIOUSEXPIRESON,'00000000'),@CARDHOLDERNAME,isnull(@PREVIOUSCARDHOLDERNAME,''),@PREVIOUSCONSTITUENTACCOUNTID,isnull(@PREVIOUSREFERENCEDATE,'00000000'),
                                       isnull(@PREVIOUSREFERENCENUMBER,''),@PREVIOUSOTHERPAYMENTMETHODCODEID, @CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE,
                                       isnull(@PREVIOUSSTANDINGORDERSETUP,0),@PREVIOUSSTANDINGORDERSETUPDATE,isnull(@PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER,0),
                                       @PREVIOUSDDISOURCECODEID,@PREVIOUSDDISOURCEDATE,isnull(@PREVIOUSSENDPMINSTRUCTION,0),isnull(@PREVIOUSPMINSTRUCTIONTOSENDCODE,0),@PREVIOUSPMINSTRUCTIONDATE_NEW,
                                       @PREVIOUSPMINSTRUCTIONDATE_CANCEL,@PREVIOUSPMINSTRUCTIONDATE_SETUP,@PREVIOUSPMADVANCENOTICESENTDATE,@PREVIOUSSEPAMANDATEID)
                            end

                            exec dbo.USP_CREDITCARD_SAVE
                                    @ID = @CREDITCARDID output,
                                    @CREDITCARDTOKEN = @CREDITCARDTOKEN,
                                    @CARDHOLDERNAME = @CARDHOLDERNAME,
                                    @CREDITCARDPARTIALNUMBER = @CREDITCARDNUMBER,
                                    @CREDITTYPECODEID = @CREDITTYPECODEID,
                                    @EXPIRESON = @EXPIRESON,
                                    @CHANGEAGENTID = @CHANGEAGENTID,
                                    @CURRENTDATE = @CURRENTDATE

                            update dbo.REVENUESCHEDULE set
                                CREDITCARDID = @CREDITCARDID,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            where ID = @ID

                            -- Update other pledges and recurring gifts that previously used the old card

                            -- to now use the new card.

                            -- @PREVIOUSCREDITCARDID can only be set if @UPDATEOTHERTRANSACTIONSTOUSENEWCREDITCARD is true

                            if @PREVIOUSCREDITCARDID is not null and @UPDATEOTHERTRANSACTIONSTOUSENEWCREDITCARD = 1
                            begin
                                update dbo.REVENUESCHEDULE set
                                    CREDITCARDID = @CREDITCARDID,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                where CREDITCARDID = @PREVIOUSCREDITCARDID


                                update dbo.BATCHREVENUE set
                                    CREDITCARDID = @CREDITCARDID,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                where
                                    CREDITCARDID = @PREVIOUSCREDITCARDID and
                                    BATCHREVENUE.AUTHORIZATIONCODE = N'' and --Bug 234607 Don't change authorized cards because they have already been charged

                                        (select top 1 STATUSCODE
                                        from dbo.BATCH
                                        where
                                            ID = BATCHREVENUE.BATCHID) = 0 -- Uncommitted

                            end
                        end
                        else
                            update dbo.REVENUESCHEDULE set
                                CREDITCARDID = null,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            where ID = @ID

                        if @PAYMENTMETHODCODE = 3 --Direct debit

                            begin

                            if @HASEDITS = 1 or coalesce(@PREVIOUSCONSTITUENTACCOUNTID,'00000000-0000-0000-0000-000000000000') <> coalesce(@ACCOUNTID,'00000000-0000-0000-0000-000000000000') or
                               isnull(@PREVIOUSREFERENCEDATE,'00000000') <> isnull(@REFERENCEDATE,'00000000') or 
                               isnull(@PREVIOUSREFERENCENUMBER,'') <> isnull(@REFERENCENUMBER,'') or
                               coalesce(@PREVIOUSDDISOURCECODEID,'00000000-0000-0000-0000-000000000000') <> coalesce(@DDISOURCECODEID,'00000000-0000-0000-0000-000000000000') or
                               isnull(@PREVIOUSDDISOURCEDATE,'') <> isnull(@PREVIOUSDDISOURCEDATE,'') or
                               @PREVIOUSSENDPMINSTRUCTION <> @SENDPMINSTRUCTION or
                               @PREVIOUSPMINSTRUCTIONTOSENDCODE <> @PMINSTRUCTIONTOSENDCODE or
                               isnull(@PREVIOUSPMINSTRUCTIONDATE_NEW,'') <> isnull(@PMINSTRUCTIONDATE_NEW,'') or
                               isnull(@PREVIOUSPMINSTRUCTIONDATE_CANCEL,'') <> isnull(@PMINSTRUCTIONDATE_CANCEL,'') or
                               isnull(@PREVIOUSPMINSTRUCTIONDATE_SETUP,'') <> isnull(@PMINSTRUCTIONDATE_SETUP,'') or
                               isnull(@PREVIOUSPMADVANCENOTICESENTDATE,'') <> isnull(@PMADVANCENOTICESENTDATE,'') or
                               coalesce(@PREVIOUSSEPAMANDATEID,'00000000-0000-0000-0000-000000000000') <> coalesce(@SEPAMANDATEID,'00000000-0000-0000-0000-000000000000')
                            begin
                                insert into dbo.RECURRINGGIFTAMENDMENT(ID,FINANCIALTRANSACTIONID,AMENDMENTTYPECODE,DATE,PAYMENTMETHODCODE,PREVIOUSPAYMENTMETHODCODE,
                                                                   CONSTITUENTACCOUNTID, PREVIOUSCONSTITUENTACCOUNTID,REFERENCEDATE,PREVIOUSREFERENCEDATE,
                                                                   REFERENCENUMBER,PREVIOUSREFERENCENUMBER,PREVIOUSCREDITCARDPARTIALNUMBER,PREVIOUSCREDITTYPECODEID,PREVIOUSEXPIRESON,
                                                                   PREVIOUSCARDHOLDERNAME,PREVIOUSOTHERPAYMENTMETHODCODEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED,
                                                                   PREVIOUSSTANDINGORDERSETUP,PREVIOUSSTANDINGORDERSETUPDATE,PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER,
                                                                   DDISOURCECODEID,PREVIOUSDDISOURCECODEID,DDISOURCEDATE,PREVIOUSDDISOURCEDATE,SENDPMINSTRUCTION,PREVIOUSSENDPMINSTRUCTION,
                                                                   PMINSTRUCTIONTOSENDCODE,PREVIOUSPMINSTRUCTIONTOSENDCODE,PMINSTRUCTIONDATE_NEW,PREVIOUSPMINSTRUCTIONDATE_NEW,
                                                                   PMINSTRUCTIONDATE_CANCEL,PREVIOUSPMINSTRUCTIONDATE_CANCEL,PMINSTRUCTIONDATE_SETUP,PREVIOUSPMINSTRUCTIONDATE_SETUP,
                                                                   PMADVANCENOTICESENTDATE,PREVIOUSPMADVANCENOTICESENTDATE,SEPAMANDATEID, PREVIOUSSEPAMANDATEID)
                                values(newid(), @ID,3,@CURRENTDATE,@PAYMENTMETHODCODE,@PREVIOUSPAYMENTMETHODCODE,@ACCOUNTID,@PREVIOUSCONSTITUENTACCOUNTID,
                                       isnull(@REFERENCEDATE,'00000000'),isnull(@PREVIOUSREFERENCEDATE,'00000000'),isnull(@REFERENCENUMBER,''),isnull(@PREVIOUSREFERENCENUMBER,''),
                                       isnull(@PREVIOUSCREDITCARDPARTIALNUMBER,''),@PREVIOUSCREDITTYPECODEID,isnull(@PREVIOUSEXPIRESON,'00000000'),isnull(@PREVIOUSCARDHOLDERNAME,''),@PREVIOUSOTHERPAYMENTMETHODCODEID,
                                       @CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE,isnull(@PREVIOUSSTANDINGORDERSETUP,0),@PREVIOUSSTANDINGORDERSETUPDATE,isnull(@PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER,0),
                                       @DDISOURCECODEID,@PREVIOUSDDISOURCECODEID,@DDISOURCEDATE,@PREVIOUSDDISOURCEDATE,isnull(@SENDPMINSTRUCTION,0),isnull(@PREVIOUSSENDPMINSTRUCTION,0),isnull(@PMINSTRUCTIONTOSENDCODE,0),
                                       isnull(@PREVIOUSPMINSTRUCTIONTOSENDCODE,0),@PMINSTRUCTIONDATE_NEW,@PREVIOUSPMINSTRUCTIONDATE_NEW,@PMINSTRUCTIONDATE_CANCEL,@PREVIOUSPMINSTRUCTIONDATE_CANCEL,
                                       @PMINSTRUCTIONDATE_SETUP,@PREVIOUSPMINSTRUCTIONDATE_SETUP,@PMADVANCENOTICESENTDATE,@PREVIOUSPMADVANCENOTICESENTDATE,@SEPAMANDATEID, @PREVIOUSSEPAMANDATEID)
                            end

                            --Direct Debit w/ Paperless mandate fields is UK only

                            if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D') = 1
                            begin
                                if @PMINSTRUCTIONTOSENDCODE is null
                                    set @PMINSTRUCTIONTOSENDCODE = 0;

                                if @SENDPMINSTRUCTION is null
                                    set @SENDPMINSTRUCTION = 0;

                                update dbo.REVENUESCHEDULEDIRECTDEBITPAYMENT
                                    set 
                                        REFERENCEDATE = @REFERENCEDATE,
                                        REFERENCENUMBER = @REFERENCENUMBER,
                                        CONSTITUENTACCOUNTID = @ACCOUNTID,
                                        DDISOURCECODEID = @DDISOURCECODEID,
                                        DDISOURCEDATE = @DDISOURCEDATE,
                                     SENDPMINSTRUCTION = @SENDPMINSTRUCTION,
                                        PMINSTRUCTIONTOSENDCODE = case 
                                                                      when @SENDPMINSTRUCTION = 0 then 0
                                                                      else @PMINSTRUCTIONTOSENDCODE
                                                                  end,
                                        PMINSTRUCTIONDATE_NEW = @PMINSTRUCTIONDATE_NEW,
                                        PMINSTRUCTIONDATE_CANCEL = @PMINSTRUCTIONDATE_CANCEL,
                                        PMINSTRUCTIONDATE_SETUP = @PMINSTRUCTIONDATE_SETUP,
                                        PMADVANCENOTICESENTDATE = @PMADVANCENOTICESENTDATE,
                                        SEPAMANDATEID = @SEPAMANDATEID,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where ID = @ID;

                                if @@ROWCOUNT = 0
                                    insert into dbo.REVENUESCHEDULEDIRECTDEBITPAYMENT
                                    (
                                        ID,
                                        REFERENCEDATE, 
                                        REFERENCENUMBER, 
                                        CONSTITUENTACCOUNTID, 
                                        DDISOURCECODEID, 
                                        DDISOURCEDATE, 
                                        SENDPMINSTRUCTION, 
                                        PMINSTRUCTIONTOSENDCODE, 
                                        PMINSTRUCTIONDATE_NEW, 
                                        PMINSTRUCTIONDATE_CANCEL, 
                                        PMINSTRUCTIONDATE_SETUP, 
                                        PMADVANCENOTICESENTDATE,
                                        SEPAMANDATEID,
                                        ADDEDBYID, 
                                        CHANGEDBYID, 
                                        DATEADDED, 
                                        DATECHANGED
                                    )values(
                                        @ID
                                        @REFERENCEDATE
                                        @REFERENCENUMBER
                                        @ACCOUNTID
                                        @DDISOURCECODEID
                                        @DDISOURCEDATE
                                        @SENDPMINSTRUCTION,
                                        case 
                                            when @SENDPMINSTRUCTION = 0 then 0
                                            else @PMINSTRUCTIONTOSENDCODE
                                        end
                                        @PMINSTRUCTIONDATE_NEW
                                        @PMINSTRUCTIONDATE_CANCEL
                                        @PMINSTRUCTIONDATE_SETUP
                                        @PMADVANCENOTICESENTDATE
                                        @SEPAMANDATEID,
                                        @CHANGEAGENTID
                                        @CHANGEAGENTID
                                        @CURRENTDATE
                                        @CURRENTDATE
                                    );

                                if dbo.UFN_PAPERLESSMANDATES_DAYSADVANCEDNOTICE_FORREVENUE(@ID) = -1
                                begin
                                    --Bug 138736 - AdamBu 2/2/11 - Error on invalid paperless mandate setup.

                                    raiserror('BBERR_MULTIPLE_PAPERLESSMANDATECONFIGS', 13, 1);
                                    return 1;
                                end
                            end
                            else
                            begin
                                update dbo.REVENUESCHEDULEDIRECTDEBITPAYMENT
                                    set 
                                        REFERENCEDATE = @REFERENCEDATE,
                                        REFERENCENUMBER = @REFERENCENUMBER,
                                        CONSTITUENTACCOUNTID = @ACCOUNTID,
                                        SEPAMANDATEID = @SEPAMANDATEID,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where ID = @ID;

                                if @@ROWCOUNT = 0
                                    insert into dbo.REVENUESCHEDULEDIRECTDEBITPAYMENT
                                        (ID, REFERENCEDATE, REFERENCENUMBER, CONSTITUENTACCOUNTID, SEPAMANDATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                        values (@ID, @REFERENCEDATE, @REFERENCENUMBER, @ACCOUNTID, @SEPAMANDATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
                            end
                        end
                        else
                            exec dbo.USP_REVENUESCHEDULEDIRECTDEBITPAYMENT_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;

                        if @PAYMENTMETHODCODE = 11 --Standing order

                        begin
                            if @USESYSTEMGENERATEDREFERENCENUMBER is null
                              begin
                                set @STANDINGORDERREFERENCENUMBER = '';
                                set @USESYSTEMGENERATEDREFERENCENUMBER = 1;
                              end

                            if @STANDINGORDERSETUP = 0
                                set @STANDINGORDERSETUPDATE = null;

                            update dbo.REVENUESCHEDULESTANDINGORDERPAYMENT
                                set 
                                    REFERENCEDATE = @REFERENCEDATE,
                                    CONSTITUENTACCOUNTID = @ACCOUNTID,
                                    STANDINGORDERSETUP = @STANDINGORDERSETUP,
                                    STANDINGORDERSETUPDATE = @STANDINGORDERSETUPDATE,
                                    REFERENCENUMBER = @STANDINGORDERREFERENCENUMBER,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                where ID = @ID;

                            if @@ROWCOUNT = 0
                                insert into dbo.REVENUESCHEDULESTANDINGORDERPAYMENT
                                    (ID, REFERENCEDATE, REFERENCENUMBER, CONSTITUENTACCOUNTID, STANDINGORDERSETUP, STANDINGORDERSETUPDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                    values (@ID, @REFERENCEDATE, @STANDINGORDERREFERENCENUMBER, @ACCOUNTID, @STANDINGORDERSETUP, @STANDINGORDERSETUPDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

                            update dbo.REVENUESTANDINGORDER
                                set 
                                    CUSTOMREFERENCENUMBER = @STANDINGORDERREFERENCENUMBER,
                                    USESYSTEMGENERATEDREFERENCENUMBER = @USESYSTEMGENERATEDREFERENCENUMBER,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                where ID = @ID;

                            if @@ROWCOUNT = 0
                                insert into dbo.REVENUESTANDINGORDER(ID, CUSTOMREFERENCENUMBER, USESYSTEMGENERATEDREFERENCENUMBER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                    values(@ID, @STANDINGORDERREFERENCENUMBER, @USESYSTEMGENERATEDREFERENCENUMBER, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

                            -- determine the system-generated reference number

                            if @USESYSTEMGENERATEDREFERENCENUMBER = 1
                                select @STANDINGORDERREFERENCENUMBER = right('000000000000000000' + cast(cast(REFERENCENUMBER as nvarchar(18)) + 1 as nvarchar(18)), 18)
                                    from dbo.REVENUESTANDINGORDER where ID = @ID;

                            if @HASEDITS = 1 or coalesce(@PREVIOUSCONSTITUENTACCOUNTID,'00000000-0000-0000-0000-000000000000') <> coalesce(@ACCOUNTID,'00000000-0000-0000-0000-000000000000') or
                                isnull(@PREVIOUSREFERENCEDATE,'00000000') <> isnull(@REFERENCEDATE,'00000000') or
                                isnull(@PREVIOUSREFERENCENUMBER,'') <> isnull(@STANDINGORDERREFERENCENUMBER,'') or
                                @PREVIOUSSTANDINGORDERSETUP <> @STANDINGORDERSETUP or
                                isnull(@PREVIOUSSTANDINGORDERSETUPDATE, '') <> isnull(@STANDINGORDERSETUPDATE, '') or
                                @PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER <> @USESYSTEMGENERATEDREFERENCENUMBER
                            begin
                                insert into dbo.RECURRINGGIFTAMENDMENT(ID,FINANCIALTRANSACTIONID,AMENDMENTTYPECODE,DATE,PAYMENTMETHODCODE,PREVIOUSPAYMENTMETHODCODE,
                                                                   CONSTITUENTACCOUNTID, PREVIOUSCONSTITUENTACCOUNTID,REFERENCEDATE,PREVIOUSREFERENCEDATE,REFERENCENUMBER,
                                                                   PREVIOUSREFERENCENUMBER,PREVIOUSCREDITCARDPARTIALNUMBER,PREVIOUSCREDITTYPECODEID,PREVIOUSEXPIRESON,PREVIOUSCARDHOLDERNAME,
                                                                   PREVIOUSOTHERPAYMENTMETHODCODEID,STANDINGORDERSETUP,PREVIOUSSTANDINGORDERSETUP,STANDINGORDERSETUPDATE,
                                                                   PREVIOUSSTANDINGORDERSETUPDATE,USESYSTEMGENERATEDREFERENCENUMBER,PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER,
                                                                   PREVIOUSDDISOURCECODEID,PREVIOUSDDISOURCEDATE,PREVIOUSSENDPMINSTRUCTION,PREVIOUSPMINSTRUCTIONTOSENDCODE,
                                                                   PREVIOUSPMINSTRUCTIONDATE_NEW,PREVIOUSPMINSTRUCTIONDATE_CANCEL,PREVIOUSPMINSTRUCTIONDATE_SETUP,
                                                                   PREVIOUSPMADVANCENOTICESENTDATE,PREVIOUSSEPAMANDATEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                                values(newid(), @ID,3,@CURRENTDATE,@PAYMENTMETHODCODE,@PREVIOUSPAYMENTMETHODCODE,@ACCOUNTID,@PREVIOUSCONSTITUENTACCOUNTID,
                                       isnull(@REFERENCEDATE,'00000000'),isnull(@PREVIOUSREFERENCEDATE,'00000000'),isnull(@STANDINGORDERREFERENCENUMBER,''),isnull(@PREVIOUSREFERENCENUMBER,''),
                                       isnull(@PREVIOUSCREDITCARDPARTIALNUMBER,''),@PREVIOUSCREDITTYPECODEID,isnull(@PREVIOUSEXPIRESON,'00000000'),isnull(@PREVIOUSCARDHOLDERNAME,''),@PREVIOUSOTHERPAYMENTMETHODCODEID,
                                       @STANDINGORDERSETUP,isnull(@PREVIOUSSTANDINGORDERSETUP,0),@STANDINGORDERSETUPDATE,@PREVIOUSSTANDINGORDERSETUPDATE,@USESYSTEMGENERATEDREFERENCENUMBER,isnull(@PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER,0),
                                       @PREVIOUSDDISOURCECODEID,@PREVIOUSDDISOURCEDATE,isnull(@PREVIOUSSENDPMINSTRUCTION,0),isnull(@PREVIOUSPMINSTRUCTIONTOSENDCODE,0),@PREVIOUSPMINSTRUCTIONDATE_NEW,@PREVIOUSPMINSTRUCTIONDATE_CANCEL,
                                       @PREVIOUSPMINSTRUCTIONDATE_SETUP,@PREVIOUSPMADVANCENOTICESENTDATE,@PREVIOUSSEPAMANDATEID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE)
                            end
                        end
                        else
                        begin
                            exec dbo.USP_REVENUESTANDINGORDER_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;
                            exec dbo.USP_REVENUESCHEDULESTANDINGORDERPAYMENT_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;
                        end

                        if @PAYMENTMETHODCODE = 10 --Other method

                            begin                            
                                if @HASEDITS = 1 or coalesce(@PREVIOUSOTHERPAYMENTMETHODCODEID,'00000000-0000-0000-0000-000000000000') <> coalesce(@OTHERPAYMENTMETHODCODEID,'00000000-0000-0000-0000-000000000000') or
                                   isnull(@PREVIOUSREFERENCEDATE,'00000000') <> isnull(@REFERENCEDATE,'00000000') or
                                   isnull(@PREVIOUSREFERENCENUMBER,'') <> isnull(@REFERENCENUMBER,'')
                                begin
                                    insert into dbo.RECURRINGGIFTAMENDMENT(ID,FINANCIALTRANSACTIONID,AMENDMENTTYPECODE,DATE,PAYMENTMETHODCODE,PREVIOUSPAYMENTMETHODCODE,
                                                                       OTHERPAYMENTMETHODCODEID,PREVIOUSOTHERPAYMENTMETHODCODEID,REFERENCEDATE,PREVIOUSREFERENCEDATE,
                                                                       REFERENCENUMBER,PREVIOUSREFERENCENUMBER, PREVIOUSCREDITCARDPARTIALNUMBER,PREVIOUSCREDITTYPECODEID,
                                                                       PREVIOUSEXPIRESON,PREVIOUSCARDHOLDERNAME,PREVIOUSCONSTITUENTACCOUNTID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED,
                                                                       PREVIOUSSTANDINGORDERSETUP,PREVIOUSSTANDINGORDERSETUPDATE,PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER,
                                                                       PREVIOUSDDISOURCECODEID,PREVIOUSDDISOURCEDATE,PREVIOUSSENDPMINSTRUCTION,PREVIOUSPMINSTRUCTIONTOSENDCODE,PREVIOUSPMINSTRUCTIONDATE_NEW,
                                                                       PREVIOUSPMINSTRUCTIONDATE_CANCEL,PREVIOUSPMINSTRUCTIONDATE_SETUP,PREVIOUSPMADVANCENOTICESENTDATE,PREVIOUSSEPAMANDATEID)
                                    values(newid(), @ID,3,@CURRENTDATE,@PAYMENTMETHODCODE,@PREVIOUSPAYMENTMETHODCODE,@OTHERPAYMENTMETHODCODEID,@PREVIOUSOTHERPAYMENTMETHODCODEID,
                                           isnull(@REFERENCEDATE,'00000000'),isnull(@PREVIOUSREFERENCEDATE,'00000000'),isnull(@REFERENCENUMBER,''),isnull(@PREVIOUSREFERENCENUMBER,''),
                                           isnull(@PREVIOUSCREDITCARDPARTIALNUMBER,''),@PREVIOUSCREDITTYPECODEID,isnull(@PREVIOUSEXPIRESON,'00000000'),isnull(@PREVIOUSCARDHOLDERNAME,''),@PREVIOUSCONSTITUENTACCOUNTID,
                                           @CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE,isnull(@PREVIOUSSTANDINGORDERSETUP,0),@PREVIOUSSTANDINGORDERSETUPDATE,isnull(@PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER,0),
                                           @PREVIOUSDDISOURCECODEID,@PREVIOUSDDISOURCEDATE,isnull(@PREVIOUSSENDPMINSTRUCTION,0),isnull(@PREVIOUSPMINSTRUCTIONTOSENDCODE,0),@PREVIOUSPMINSTRUCTIONDATE_NEW,
                                           @PREVIOUSPMINSTRUCTIONDATE_CANCEL,@PREVIOUSPMINSTRUCTIONDATE_SETUP,@PREVIOUSPMADVANCENOTICESENTDATE,@PREVIOUSSEPAMANDATEID)
                                end

                                update dbo.OTHERPAYMENTMETHODDETAIL
                                    set 
                                        REFERENCEDATE = @REFERENCEDATE,
                                        REFERENCENUMBER = @REFERENCENUMBER,
                                        OTHERPAYMENTMETHODCODEID = @OTHERPAYMENTMETHODCODEID,
                                        CHANGEDBYID = @CHANGEAGENTID,
          DATECHANGED = @CURRENTDATE
                                from dbo.OTHERPAYMENTMETHODDETAIL O
                                inner join dbo.REVENUEPAYMENTMETHOD R on O.ID  = R.ID
                                where R.REVENUEID = @ID;

                                if @@ROWCOUNT = 0
                                    insert into dbo.OTHERPAYMENTMETHODDETAIL
                                        (ID, REFERENCEDATE, REFERENCENUMBER, OTHERPAYMENTMETHODCODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                        select ID, @REFERENCEDATE, @REFERENCENUMBER, @OTHERPAYMENTMETHODCODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                                        from dbo.REVENUEPAYMENTMETHOD where REVENUEID = @ID;
                            end
                        else
                            delete from dbo.OTHERPAYMENTMETHODDETAIL where ID in (select ID from dbo.REVENUEPAYMENTMETHOD where REVENUEID = @ID);                       

                        if @PAYMENTMETHODCODE = 98 --Credit 4 digits

                        begin
                            -- record changes in the RG amendment table

                            if @HASEDITS = 1 or
                               (@PREVIOUSCREDITCARDPARTIALNUMBER <> @CREDITCARDNUMBER and (isnull(@PREVIOUSCREDITCARDPARTIALNUMBER,'') <> '' or isnull(@CREDITCARDNUMBER,'') <> '')) or
                               (coalesce(@PREVIOUSCREDITTYPECODEID,'00000000-0000-0000-0000-000000000000') <> coalesce(@CREDITTYPECODEID,'00000000-0000-0000-0000-000000000000') and 
                                       (@PREVIOUSCREDITTYPECODEID is not null or @CREDITTYPECODEID is not null)) or
                               (@PREVIOUSEXPIRESON <> @EXPIRESON and (isnull(@PREVIOUSEXPIRESON,'00000000') <> '00000000' or isnull(@EXPIRESON,'00000000') <> '00000000')) or
                               (@PREVIOUSCARDHOLDERNAME <> @CARDHOLDERNAME and (isnull(@PREVIOUSCARDHOLDERNAME,'') <> '' or isnull(@CARDHOLDERNAME,'') <> ''))
                            begin
                                insert into dbo.RECURRINGGIFTAMENDMENT(ID,FINANCIALTRANSACTIONID,AMENDMENTTYPECODE,DATE,PAYMENTMETHODCODE,PREVIOUSPAYMENTMETHODCODE,
                                                                  CREDITCARDPARTIALNUMBER,PREVIOUSCREDITCARDPARTIALNUMBER,CREDITTYPECODEID,PREVIOUSCREDITTYPECODEID,
                                                                  EXPIRESON,PREVIOUSEXPIRESON,CARDHOLDERNAME,PREVIOUSCARDHOLDERNAME,PREVIOUSCONSTITUENTACCOUNTID,PREVIOUSREFERENCEDATE,
                                                                  PREVIOUSREFERENCENUMBER,PREVIOUSOTHERPAYMENTMETHODCODEID, ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED,
                                                                  PREVIOUSSTANDINGORDERSETUP,PREVIOUSSTANDINGORDERSETUPDATE,PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER,
                                                                  PREVIOUSDDISOURCECODEID,PREVIOUSDDISOURCEDATE,PREVIOUSSENDPMINSTRUCTION,PREVIOUSPMINSTRUCTIONTOSENDCODE,PREVIOUSPMINSTRUCTIONDATE_NEW,
                                                                  PREVIOUSPMINSTRUCTIONDATE_CANCEL,PREVIOUSPMINSTRUCTIONDATE_SETUP,PREVIOUSPMADVANCENOTICESENTDATE,PREVIOUSSEPAMANDATEID)
                                values(newid(), @ID,3,@CURRENTDATE,@PAYMENTMETHODCODE,@PREVIOUSPAYMENTMETHODCODE,
                                       @CREDITCARDNUMBER,isnull(@PREVIOUSCREDITCARDPARTIALNUMBER,''), @CREDITTYPECODEID,@PREVIOUSCREDITTYPECODEID,@EXPIRESON,
                                       isnull (@PREVIOUSEXPIRESON,'00000000'),isnull(@CARDHOLDERNAME,''),isnull(@PREVIOUSCARDHOLDERNAME,''),@PREVIOUSCONSTITUENTACCOUNTID,isnull(@PREVIOUSREFERENCEDATE,'00000000'),
                                       isnull(@PREVIOUSREFERENCENUMBER,''),@PREVIOUSOTHERPAYMENTMETHODCODEID, @CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE,
                                       isnull(@PREVIOUSSTANDINGORDERSETUP,0),@PREVIOUSSTANDINGORDERSETUPDATE,isnull(@PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER,0),@PREVIOUSDDISOURCECODEID,
                                       @PREVIOUSDDISOURCEDATE,isnull(@PREVIOUSSENDPMINSTRUCTION,0),isnull(@PREVIOUSPMINSTRUCTIONTOSENDCODE,0),@PREVIOUSPMINSTRUCTIONDATE_NEW,@PREVIOUSPMINSTRUCTIONDATE_CANCEL,
                                       @PREVIOUSPMINSTRUCTIONDATE_SETUP,@PREVIOUSPMADVANCENOTICESENTDATE,@PREVIOUSSEPAMANDATEID)
                            end

                            update dbo.CREDITCARDPAYMENTMETHODDETAIL
                                set 
                                    CARDHOLDERNAME = @CARDHOLDERNAME,
                                    CREDITCARDPARTIALNUMBER = isnull(@CREDITCARDNUMBER,''),
                                    CREDITTYPECODEID = @CREDITTYPECODEID,
                                    EXPIRESON = @EXPIRESON,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                            from dbo.CREDITCARDPAYMENTMETHODDETAIL O
                            inner join dbo.REVENUEPAYMENTMETHOD R on O.ID  = R.ID
                            where R.REVENUEID = @ID;

                            if @@ROWCOUNT = 0
                                insert into dbo.CREDITCARDPAYMENTMETHODDETAIL
                                    (ID, CARDHOLDERNAME, CREDITCARDPARTIALNUMBER, CREDITTYPECODEID, EXPIRESON, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                    select ID, @CARDHOLDERNAME,  isnull(@CREDITCARDNUMBER,''), @CREDITTYPECODEID, @EXPIRESON, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                                    from dbo.REVENUEPAYMENTMETHOD where REVENUEID = @ID;
                            end
                        else
                            delete from dbo.CREDITCARDPAYMENTMETHODDETAIL where ID in (select ID from dbo.REVENUEPAYMENTMETHOD where REVENUEID = @ID);

                        if @HASEDITS = 1 and @PAYMENTMETHODCODE in(0,1,9, 101, 102) --cash, check, none, paypal, and venmo

                        begin
                            insert into dbo.RECURRINGGIFTAMENDMENT(ID,FINANCIALTRANSACTIONID,AMENDMENTTYPECODE,DATE,PAYMENTMETHODCODE,PREVIOUSPAYMENTMETHODCODE,
                                                                   PREVIOUSCONSTITUENTACCOUNTID,PREVIOUSREFERENCEDATE,PREVIOUSREFERENCENUMBER,
                                                                   PREVIOUSCREDITCARDPARTIALNUMBER,PREVIOUSCREDITTYPECODEID,PREVIOUSEXPIRESON,PREVIOUSCARDHOLDERNAME,
                                                                   ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED, PREVIOUSOTHERPAYMENTMETHODCODEID,
                                                                   PREVIOUSSTANDINGORDERSETUP,PREVIOUSSTANDINGORDERSETUPDATE,PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER,
                                                                   PREVIOUSDDISOURCECODEID,PREVIOUSDDISOURCEDATE,PREVIOUSSENDPMINSTRUCTION,PREVIOUSPMINSTRUCTIONTOSENDCODE,PREVIOUSPMINSTRUCTIONDATE_NEW,
                                                                   PREVIOUSPMINSTRUCTIONDATE_CANCEL,PREVIOUSPMINSTRUCTIONDATE_SETUP,PREVIOUSPMADVANCENOTICESENTDATE,PREVIOUSSEPAMANDATEID)
                                values(newid(), @ID,3,@CURRENTDATE,@PAYMENTMETHODCODE,@PREVIOUSPAYMENTMETHODCODE,@PREVIOUSCONSTITUENTACCOUNTID,
                                       isnull(@PREVIOUSREFERENCEDATE,'00000000'),isnull(@PREVIOUSREFERENCENUMBER,''),
                                       isnull(@PREVIOUSCREDITCARDPARTIALNUMBER,''),@PREVIOUSCREDITTYPECODEID,isnull(@PREVIOUSEXPIRESON,'00000000'),isnull(@PREVIOUSCARDHOLDERNAME,''),
                                       @CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE,@PREVIOUSOTHERPAYMENTMETHODCODEID,isnull(@PREVIOUSSTANDINGORDERSETUP,0),@PREVIOUSSTANDINGORDERSETUPDATE,
                                       isnull(@PREVIOUSUSESYSTEMGENERATEDREFERENCENUMBER,0),@PREVIOUSDDISOURCECODEID,@PREVIOUSDDISOURCEDATE,isnull(@PREVIOUSSENDPMINSTRUCTION,0),isnull(@PREVIOUSPMINSTRUCTIONTOSENDCODE,0),
                                       @PREVIOUSPMINSTRUCTIONDATE_NEW,@PREVIOUSPMINSTRUCTIONDATE_CANCEL,@PREVIOUSPMINSTRUCTIONDATE_SETUP,@PREVIOUSPMADVANCENOTICESENTDATE,@PREVIOUSSEPAMANDATEID)
                        end

                    end try
                    begin catch
                        exec dbo.USP_RAISE_ERROR;

                        return 1;
                    end catch

                    return 0;