USP_EDIT_RECURRINGGIFTDETAILS_3

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@AMOUNT money IN
@SPLITS xml IN
@FREQUENCYCODE tinyint IN
@ENDDATE datetime IN
@STARTDATE datetime IN
@NEXTINSTALLMENTID uniqueidentifier IN
@USEEXISTINGCURRENCY bit IN
@INSTALLMENTBEGINDATE datetime IN

Definition

Copy



          CREATE PROCEDURE USP_EDIT_RECURRINGGIFTDETAILS_3
              @ID uniqueidentifier,
                    @CHANGEAGENTID uniqueidentifier = null,
                    @AMOUNT money,
                    @SPLITS xml,
                    @FREQUENCYCODE tinyint,
                    @ENDDATE datetime,
                    @STARTDATE datetime,
                    @NEXTINSTALLMENTID uniqueidentifier,
          @USEEXISTINGCURRENCY bit,
          @INSTALLMENTBEGINDATE datetime

          AS
          BEGIN
              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

              declare @DATE datetime
              select @DATE=[DATE] from dbo.REVENUE where REVENUE.ID=@ID 

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

              exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS=@SPLITS, @REVENUEAMOUNT=@AMOUNT, @REVENUEID=@ID;

              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

                    declare @INSTALLMENTSCHANGED bit


          /*   CMC
          select @INSTALLMENTSCHANGED = count(*)
                    from dbo.REVENUE
                    where REVENUE.ID = @ID
                    and REVENUE.AMOUNT <> @AMOUNT;

          update dbo.REVENUE_EXT
          set
            RECEIPTAMOUNT = @AMOUNT,
            CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
          where ID = @ID
          */

          update dbo.FINANCIALTRANSACTION
                    set
                        DATE = @DATE,
                        TRANSACTIONAMOUNT = @AMOUNT,
            BASEAMOUNT= @AMOUNT,
            ORGAMOUNT = @AMOUNT,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                    where ID = @ID
          and (TRANSACTIONAMOUNT <> @AMOUNT
          or BASEAMOUNT <> @AMOUNT
          or ORGAMOUNT <> @AMOUNT
          or DATE <> @DATE 
          or (@DATE is null and DATE is not null)
                    or (@DATE is not null and DATE is null));

         --marked installmentchange value to 1, if amount is updated successfully.
          if @@ROWCOUNT = 1
                    set @INSTALLMENTSCHANGED = 1;

          --Update Revenue
                    update dbo.REVENUE_EXT
                    set
                        RECEIPTAMOUNT = @AMOUNT,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                    where ID = @ID
          and RECEIPTAMOUNT <> @AMOUNT;

          --marked installmentchange value to 1, if amount is updated successfully.
          if @@ROWCOUNT = 1
                        set @INSTALLMENTSCHANGED = 1;

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

          if @@ROWCOUNT = 1
                        set @INSTALLMENTSCHANGED = 1

                    --only update start date only if value changed
                    --TAY:  Per MR, reset STARTDATE on edit.
                    update dbo.REVENUESCHEDULE
                    set
                      SCHEDULESEEDDATE = @STARTDATE,
                        NEXTTRANSACTIONDATE = @STARTDATE,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                    where ID = @ID
                    and (SCHEDULESEEDDATE <> @STARTDATE or 
                    NEXTTRANSACTIONDATE <> @STARTDATE);

          if @@ROWCOUNT = 1
                    set @INSTALLMENTSCHANGED = 1

          --update installment begin date if user has changed the date and there are no paid installments exist.   
          update dbo.REVENUESCHEDULE
                    set
                        STARTDATE = @INSTALLMENTBEGINDATE,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                    where ID = @ID
                    and STARTDATE <> @INSTALLMENTBEGINDATE 
                    and not exists(select 'x' from dbo.RECURRINGGIFTINSTALLMENT where REVENUEID = @ID and STATUSCODE =2);


                    if @@ROWCOUNT = 1
                    set @INSTALLMENTSCHANGED = 1 

                    if not exists(select 'x' from dbo.RECURRINGGIFTINSTALLMENT where REVENUEID = @ID)
                    begin
                        exec dbo.USP_RECURRINGGIFT_FIXMISSINGINSTALLMENTSCHEDULE @ID, @CHANGEAGENTID, @CURRENTDATE
                    end
                    else if @INSTALLMENTSCHANGED = 1
                    begin
                        if @NEXTINSTALLMENTID is not null
                        begin
                            --Cache CONTEXT INFO
                            declare @contextCache varbinary(128);
                            set @contextCache = CONTEXT_INFO();
                            set CONTEXT_INFO @CHANGEAGENTID;

            --Multicurrency - Bug#800737 
            declare @BASEAMOUNT money;
            declare @ORGANIZATIONCURRENCYID uniqueidentifier;
            declare @ORGANIZATIONAMOUNT money;
            declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
            declare @BASETOORGANIZATIONEXCHANGERATE uniqueidentifier;
            declare @EMPTYGUID uniqueidentifier = '00000000-0000-0000-0000-000000000000';
            declare @BASECURRENCYID uniqueidentifier;
            declare @TRANSACTIONCURRENCYID  uniqueidentifier;
            declare @BASEEXCHANGERATEID uniqueidentifier;
          select 
                @BASECURRENCYID = isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, V.BASECURRENCYID)       
            from dbo.REVENUE_EXT 
            left outer join  dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on REVENUE_EXT.ID = V.FINANCIALTRANSACTIONID
            where REVENUE_EXT.ID = @ID;  

            select  @BASEEXCHANGERATEID = BASEEXCHANGERATEID,@TRANSACTIONCURRENCYID =TRANSACTIONCURRENCYID from REVENUE where REVENUE.ID = @ID;  

        exec dbo.USP_CURRENCY_GETCURRENCYVALUES
            @AMOUNT,
            @DATE,
            @BASECURRENCYID,
            @BASEEXCHANGERATEID,
            @TRANSACTIONCURRENCYID output,
            @BASEAMOUNT output,
            @ORGANIZATIONCURRENCYID output,
            @ORGANIZATIONAMOUNT output,
            @ORGANIZATIONEXCHANGERATEID output,
            1,
            @BASETOORGANIZATIONEXCHANGERATE;            



                            delete from dbo.RECURRINGGIFTINSTALLMENT
                            where ID = @NEXTINSTALLMENTID
                            or (REVENUEID = @ID and
                                DATE >= (select DATE from dbo.RECURRINGGIFTINSTALLMENT where ID = @NEXTINSTALLMENTID));

                            if not @contextCache is null
                                set CONTEXT_INFO @contextCache;

                            -- fix date for semi-monthly
                            if @FREQUENCYCODE = 7
                            begin
                                if datepart(day, @STARTDATE) < 15
                                    set @STARTDATE = dateadd(day, (15 - datepart(day, @STARTDATE)), @STARTDATE);
                                else
                                begin
                                    set @STARTDATE = dateadd(month, 1, @STARTDATE)
                                    set @STARTDATE = dateadd(day, (-1 * datepart(day, @STARTDATE)) + 1, @STARTDATE);
                                end             
                            end

                            -- add next installment
              if(isnull(@USEEXISTINGCURRENCY,0) =0)
              begin             

                            insert into dbo.RECURRINGGIFTINSTALLMENT (ID, REVENUEID, AMOUNT, DATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values (newid(), @ID, @AMOUNT, @STARTDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
                        end
              else 
              begin
                -- add next installment with multi currency symbol and exchange rates
                  insert into dbo.RECURRINGGIFTINSTALLMENT (ID, REVENUEID, AMOUNT, DATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, BASECURRENCYID,ORGANIZATIONAMOUNT,ORGANIZATIONEXCHANGERATEID,TRANSACTIONAMOUNT,TRANSACTIONCURRENCYID,BASEEXCHANGERATEID)
                  values (newid(), @ID, @BASEAMOUNT, @STARTDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@ORGANIZATIONEXCHANGERATEID,@AMOUNT,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID);
              end

                        end

                        -- add any additional necessary installments
                        exec dbo.USP_RECURRINGGIFT_ADDMISSINGINSTALLMENTS @ID, @CHANGEAGENTID, @CURRENTDATE, @AMOUNT

                        exec dbo.USP_RECURRINGGIFT_SETNEXTTRANSACTIONDATE @ID, @CHANGEAGENTID
                    end


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

                    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)

                        declare @APPEALID uniqueidentifier
                        select @APPEALID = APPEALID
                        from dbo.REVENUE 
                        where REVENUE.ID = @ID;

                        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;

            END