USP_DATAFORMTEMPLATE_EDIT_PAYMENTADJUST7

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@DATE datetime IN
@AMOUNT money IN
@RECEIPTAMOUNT money IN
@REVENUESTREAMS xml IN
@SOURCECODE nvarchar(50) IN
@APPEALID uniqueidentifier IN
@BENEFITS xml IN
@BENEFITSWAIVED bit IN
@GIVENANONYMOUSLY bit IN
@MAILINGID uniqueidentifier IN
@CHANNELCODEID uniqueidentifier IN
@DONOTRECEIPT bit IN
@DONOTACKNOWLEDGE bit IN
@REFERENCE nvarchar(255) IN
@ADJUSTMENTDATE datetime IN
@ADJUSTMENTPOSTDATE datetime IN
@ADJUSTMENTREASON nvarchar(300) IN
@PAYMENTMETHODCODE tinyint IN
@OTHERPAYMENTMETHODCODEID uniqueidentifier IN
@CHECKDATE UDT_FUZZYDATE IN
@CHECKNUMBER nvarchar(20) IN
@REFERENCEDATE UDT_FUZZYDATE IN
@REFERENCENUMBER nvarchar(20) IN
@CARDHOLDERNAME nvarchar(255) IN
@CREDITCARDNUMBER nvarchar(4) IN
@CREDITTYPECODEID uniqueidentifier IN
@AUTHORIZATIONCODE nvarchar(20) IN
@EXPIRESON UDT_FUZZYDATE IN
@ISSUER nvarchar(100) IN
@NUMBEROFUNITS decimal(20, 3) IN
@SYMBOL nvarchar(25) IN
@MEDIANPRICE decimal(19, 4) IN
@GIFTINKINDSUBTYPECODEID uniqueidentifier IN
@PROPERTYSUBTYPECODEID uniqueidentifier IN
@CONSTITUENTACCOUNTID uniqueidentifier IN
@DIRECTDEBITRESULTCODE nvarchar(10) IN
@LOWPRICE decimal(19, 4) IN
@HIGHPRICE decimal(19, 4) IN
@ADJUSTMENTREASONCODEID uniqueidentifier IN
@ADJUSTMENTPOSTSTATUSCODE tinyint IN
@GIFTINKINDITEMNAME nvarchar(100) IN
@GIFTINKINDDISPOSITIONCODE tinyint IN
@GIFTINKINDNUMBEROFUNITS int IN
@GIFTINKINDFAIRMARKETVALUE money IN
@DIRECTDEBITISREJECTED bit IN
@PERCENTAGEBENEFITS xml IN
@BASEEXCHANGERATEID uniqueidentifier IN
@EXCHANGERATE decimal(20, 8) IN
@CURRENTAPPUSERID uniqueidentifier IN
@ADJUSTMATCHINGGIFTCLAIMS tinyint IN
@UPDATEGIFTFEEOPTION tinyint IN
@UPDATETRIBUTEOPTION tinyint IN
@VALIDATETRIBUTES bit IN
@DEPOSITID uniqueidentifier IN
@SEPAMANDATEID uniqueidentifier IN
@NUMBEROFUNITSSOLD decimal(20, 3) IN
@SALE_SALEDATE datetime IN
@SALE_SALEAMOUNT money IN
@SALE_BROKERFEES money IN
@SALE_GLPOSTDATE datetime IN
@SALE_GLPOSTSTATUS tinyint IN
@SALE_LOWPRICE decimal(19, 4) IN
@SALE_MEDIANPRICE decimal(19, 4) IN
@SALE_HIGHPRICE decimal(19, 4) IN

Definition

Copy


      CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_PAYMENTADJUST7
      (
        @ID uniqueidentifier,
        @CHANGEAGENTID uniqueidentifier,
        @DATE datetime,
        @AMOUNT money,
        @RECEIPTAMOUNT money ,
        @REVENUESTREAMS xml ,
        @SOURCECODE nvarchar(50),
        @APPEALID uniqueidentifier,
        @BENEFITS xml,
        @BENEFITSWAIVED bit,
        @GIVENANONYMOUSLY bit,
        @MAILINGID uniqueidentifier,
        @CHANNELCODEID uniqueidentifier,
        @DONOTRECEIPT bit,
        @DONOTACKNOWLEDGE bit,
        @REFERENCE nvarchar(255),
        @ADJUSTMENTDATE datetime,
        @ADJUSTMENTPOSTDATE datetime,
        @ADJUSTMENTREASON nvarchar(300),
        @PAYMENTMETHODCODE tinyint,
        @OTHERPAYMENTMETHODCODEID uniqueidentifier,
        @CHECKDATE dbo.UDT_FUZZYDATE,
        @CHECKNUMBER nvarchar(20),
        @REFERENCEDATE dbo.UDT_FUZZYDATE,
        @REFERENCENUMBER nvarchar(20),
        @CARDHOLDERNAME nvarchar(255),
        @CREDITCARDNUMBER nvarchar(4),
        @CREDITTYPECODEID uniqueidentifier,
        @AUTHORIZATIONCODE nvarchar(20),
        @EXPIRESON dbo.UDT_FUZZYDATE,
        @ISSUER nvarchar(100),
        @NUMBEROFUNITS decimal(20,3),
        @SYMBOL nvarchar(25),
        @MEDIANPRICE decimal(19,4),
        @GIFTINKINDSUBTYPECODEID uniqueidentifier,
        @PROPERTYSUBTYPECODEID uniqueidentifier,
        @CONSTITUENTACCOUNTID uniqueidentifier,
        @DIRECTDEBITRESULTCODE nvarchar(10),
        @LOWPRICE decimal(19,4),
        @HIGHPRICE decimal(19,4),
        @ADJUSTMENTREASONCODEID uniqueidentifier,
        @ADJUSTMENTPOSTSTATUSCODE tinyint,
        @GIFTINKINDITEMNAME nvarchar(100),
        @GIFTINKINDDISPOSITIONCODE tinyint,
        @GIFTINKINDNUMBEROFUNITS int,
        @GIFTINKINDFAIRMARKETVALUE money,
        @DIRECTDEBITISREJECTED bit,
        @PERCENTAGEBENEFITS xml,
        @BASEEXCHANGERATEID uniqueidentifier = null,
        @EXCHANGERATE decimal(20,8) = null,
        @CURRENTAPPUSERID uniqueidentifier = null,
        @ADJUSTMATCHINGGIFTCLAIMS tinyint = null,
        @UPDATEGIFTFEEOPTION tinyint = null,
        @UPDATETRIBUTEOPTION tinyint = null,
        @VALIDATETRIBUTES bit = null,
        @DEPOSITID uniqueidentifier = null,
        @SEPAMANDATEID uniqueidentifier = null,
        @NUMBEROFUNITSSOLD decimal(20,3) = null,
        @SALE_SALEDATE datetime = null,
        @SALE_SALEAMOUNT money = null,
        @SALE_BROKERFEES money = null,
        @SALE_GLPOSTDATE datetime = null,
        @SALE_GLPOSTSTATUS tinyint = null,
        @SALE_LOWPRICE decimal(19,4) = 0,
        @SALE_MEDIANPRICE decimal(19,4) = 0,
        @SALE_HIGHPRICE decimal(19,4) = 0
      )
      as
      set nocount on;

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

      declare @CURRENTDATE datetime;
      set @CURRENTDATE = GetDate();

      declare @ADJUSTMENTID uniqueidentifier;
      declare @STOCKSALEADJUSTMENTIDS xml;
      declare @GIFTINKINDSALEADJUSTMENTIDS xml;
      declare @PROPERTYDETAILADJUSTMENTID uniqueidentifier;

      declare @ADJUST bit;
      declare @ADJUSTSTOCK bit;
      declare @ADJUSTGIFTINKIND bit;
      declare @PROPERTYDETAILCOUNT int;
      declare @STOCKDETAILCOUNT int;
      declare @GIFTINKINDPAYMENTMETHODDETAILCOUNT int;
      declare @ADJUSTMENTORIGINALPOSTSTATUS int;

      declare @CLEARGLDISTRIBUTION bit;
      declare @CLEARGIFTINKINDGLDISTRIBUTION bit;
      declare @CLEARSTOCKGLDISTRIBUTION bit;
      declare @ADJUSTBENEFITS bit;
      declare @CLEARBENEFITSGLDISTRIBUTION bit;
      declare @BENEFITSADJUSTMENTID uniqueidentifier;
      declare @CLEARAUCTIONPURCHASEGLDISTRIBUTION bit;
      declare @ADJUSTGIFTFEEDISTRIBUTION bit;
      declare @CLEARGIFTFEEGLDISTRIBUTION bit;
      declare @CLEARPROPERTYGLDISTRIBUTION bit;
      declare @HASAUCTIONPURCHASE bit = 0;  
      declare @STREAMCHANGED bit = 0;
      declare @SHOULDUPDATEGIFTFEE tinyint = 1;


      set @ADJUST = 0;
      set @ADJUSTSTOCK = 0;
      set @ADJUSTGIFTINKIND = 0;
      set @PROPERTYDETAILCOUNT = 0;
      set @STOCKDETAILCOUNT = 0;
      set @GIFTINKINDPAYMENTMETHODDETAILCOUNT = 0;
      set @CLEARGLDISTRIBUTION = 0;
      set @CLEARSTOCKGLDISTRIBUTION = 0;
      set @CLEARGIFTINKINDGLDISTRIBUTION = 0;
      set @ADJUSTMENTORIGINALPOSTSTATUS = 0;
      set @ADJUSTBENEFITS = 0;
      set @CLEARBENEFITSGLDISTRIBUTION = 0;
      set @CLEARAUCTIONPURCHASEGLDISTRIBUTION = 0;
      set @CLEARGIFTFEEGLDISTRIBUTION = 0;
      set @ADJUSTGIFTFEEDISTRIBUTION = 0;
      set @CLEARPROPERTYGLDISTRIBUTION = 0;

      if @UPDATEGIFTFEEOPTION is null
        set @UPDATEGIFTFEEOPTION = 0;

      declare @EMPTYGUID uniqueidentifier = '00000000-0000-0000-0000-000000000000'

      begin try

        declare @BASECURRENCYID uniqueidentifier;
        declare @TRANSACTIONCURRENCYID uniqueidentifier;
        declare @PDACCOUNTSYSTEMID uniqueidentifier;    
        declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
        declare @CONSTITUENTID uniqueidentifier;
        declare @ORIGINALCHANNELCODEID uniqueidentifier;
        declare @ORIGINALAPPEALID uniqueidentifier;

        select
          @PDACCOUNTSYSTEMID = FINANCIALTRANSACTION.PDACCOUNTSYSTEMID,
          @TRANSACTIONCURRENCYID = FINANCIALTRANSACTION.TRANSACTIONCURRENCYID,
          @BASECURRENCYID = isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, CURRENCYSET.BASECURRENCYID),
          @ORGANIZATIONEXCHANGERATEID = FINANCIALTRANSACTION.ORGEXCHANGERATEID,
          @CONSTITUENTID = FINANCIALTRANSACTION.CONSTITUENTID,
          @ORIGINALCHANNELCODEID = REVENUE_EXT.CHANNELCODEID,
          @ORIGINALAPPEALID = REVENUE_EXT.APPEALID
        from
          dbo.FINANCIALTRANSACTION
            inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
            inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
            inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
        where FINANCIALTRANSACTION.ID = @ID
          and FINANCIALTRANSACTION.DELETEDON is null;

        --If the record uses a new spot rate, create it and set the rate ID.

        if @BASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
        begin

          set @BASEEXCHANGERATEID = newid();

          --Replace with call to USP_CURRENCYEXCHANGERATE_ENSURESPOTRATEEXISTS for PBI 102747 in the future

          /*if not dbo.UFN_SECURITY_APPUSER_GRANTED_SYSTEMPRIVILEGE_IN_SYSTEMROLE(@CURRENTAPPUSERID,'911f104d-ba5f-4469-b0ae-184c879aea99') = 1
            and not dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1
          begin
            raiserror('User does not have the right to add a new spot rate.', 13, 1);
            return 1;
          end*/

          insert into dbo.CURRENCYEXCHANGERATE
          (
            ID, 
            FROMCURRENCYID,
            TOCURRENCYID,
            RATE,
            ASOFDATE,
            TYPECODE,
            SOURCECODEID,
            ADDEDBYID, 
            CHANGEDBYID, 
            DATEADDED, 
            DATECHANGED
          )
          values
          (
            @BASEEXCHANGERATEID,
            @TRANSACTIONCURRENCYID,
            @BASECURRENCYID,
            @EXCHANGERATE,
            @DATE,
            2,
            null,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
          );
        end

        /* Check if amount changed */
        if exists (
          select 1 
          from dbo.FINANCIALTRANSACTION
            inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
            cross join dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(
              @AMOUNT,
              @DATE,
              @BASECURRENCYID,
              @BASEEXCHANGERATEID,
              @TRANSACTIONCURRENCYID,
              default,
              default,
              default,
              default,
              1
            ) CURRENCYVALUES
          where FINANCIALTRANSACTION.ID = @ID
            and FINANCIALTRANSACTION.DELETEDON is null
            and
              (
              FINANCIALTRANSACTION.TRANSACTIONAMOUNT <> @AMOUNT
                or FINANCIALTRANSACTION.BASEAMOUNT <> CURRENCYVALUES.BASEAMOUNT
                or FINANCIALTRANSACTION.ORGAMOUNT <> CURRENCYVALUES.ORGANIZATIONAMOUNT
                or FINANCIALTRANSACTION.BASEEXCHANGERATEID <> @BASEEXCHANGERATEID
                or FINANCIALTRANSACTION.ORGEXCHANGERATEID <> CURRENCYVALUES.ORGANIZATIONEXCHANGERATEID
        )
      )
      begin
        set @ADJUST = 1;
        set @CLEARGLDISTRIBUTION = 1;
        set @ADJUSTGIFTFEEDISTRIBUTION = 1;
      end

      declare @ORIGINALPAYMETHODID uniqueidentifier, 
        @ORIGINALPAYMENTMETHODCODE tinyint
        @ORIGINALGIFTINKINDSUBTYPECODEID uniqueidentifier,
        @ORIGINALCREDITTYPECODEID uniqueidentifier, 
        @ORIGINALPROPERTYSUBTYPECODEID uniqueidentifier, 
        @ORIGINALOTHERPAYMENTMETHODCODEID uniqueidentifier,
        @ORIGINALTRANSACTIONID uniqueidentifier,
        @ORIGINALVENDORID nvarchar(50)

      select
        @ORIGINALPAYMETHODID = RPM.ID,
        @ORIGINALPAYMENTMETHODCODE = PAYMENTMETHODCODE,
        @ORIGINALGIFTINKINDSUBTYPECODEID = GIFTINKINDSUBTYPECODEID,
        @ORIGINALCREDITTYPECODEID = CREDITTYPECODEID,
        @ORIGINALPROPERTYSUBTYPECODEID = PROPERTYSUBTYPECODEID,
        @ORIGINALOTHERPAYMENTMETHODCODEID = OTHERPAYMENTMETHODCODEID,
        @ORIGINALTRANSACTIONID = CCPMD.TRANSACTIONID,
        @ORIGINALVENDORID = CCPMD.VENDORID
      from dbo.REVENUEPAYMENTMETHOD RPM
        left outer join dbo.GIFTINKINDPAYMENTMETHODDETAIL GIKPMD on RPM.ID = GIKPMD.ID
        left outer join dbo.CREDITCARDPAYMENTMETHODDETAIL CCPMD on RPM.ID = CCPMD.ID
        left outer join dbo.PROPERTYDETAIL PD on RPM.ID = PD.ID
        left outer join dbo.OTHERPAYMENTMETHODDETAIL OPMD on RPM.ID = OPMD.ID
      where RPM.REVENUEID = @ID

      declare @OLDAMOUNT money;

      select @OLDAMOUNT = FINANCIALTRANSACTION.BASEAMOUNT from dbo.FINANCIALTRANSACTION inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID where FINANCIALTRANSACTION.ID = @ID and FINANCIALTRANSACTION.DELETEDON is null;

      -- Check GL business rule for this account system and set to 'Do not post' if needed.

      --declare @PDACCOUNTSYSTEMID uniqueidentifier;

      --select @PDACCOUNTSYSTEMID = PDACCOUNTSYSTEMID from dbo.PDACCOUNTSYSTEMFORREVENUE where ID = @ID;

      if dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID) = 0
      begin
        set @ADJUSTMENTPOSTSTATUSCODE = 2  -- Do not post

        set @ADJUSTMENTPOSTDATE = null
      end

      -- Only unlink the payment if adjustment is postable - Bug 70136

      if @ADJUSTMENTPOSTSTATUSCODE <> 2
      begin
        if (not (@PAYMENTMETHODCODE in (0,1,2,10))) or @PAYMENTMETHODCODE is null
          if exists(select DEPOSITID from dbo.BANKACCOUNTDEPOSITPAYMENT where ID = @ID and DEPOSITID is not null)
            update dbo.BANKACCOUNTDEPOSITPAYMENT set DEPOSITID = NULL where ID = @ID;

          declare @ORIGINALADJUSTMENTPOSTDATE datetime
          if exists(select DEPOSITID from dbo.BANKACCOUNTDEPOSITPAYMENT where ID = @ID and DEPOSITID is not null)
          begin
          /*
            select @ORIGINALADJUSTMENTPOSTDATE = POSTDATE 
            from dbo.BANKACCOUNTDEPOSITPAYMENT 
              inner join dbo.BANKACCOUNTDEPOSIT on BANKACCOUNTDEPOSITPAYMENT.DEPOSITID = BANKACCOUNTDEPOSIT.ID
              inner join dbo.BANKACCOUNTTRANSACTION on BANKACCOUNTDEPOSIT.ID = BANKACCOUNTTRANSACTION.ID
            where 
              BANKACCOUNTDEPOSITPAYMENT.ID = @ID;
            */
            select @ORIGINALADJUSTMENTPOSTDATE = cast(POSTDATE as datetime) from dbo.FINANCIALTRANSACTION where ID = @ID;

            if cast(@ORIGINALADJUSTMENTPOSTDATE as date) <>  cast(@ADJUSTMENTPOSTDATE as date) -- ignore time portion of datetime

              update dbo.BANKACCOUNTDEPOSITPAYMENT set DEPOSITID = @DEPOSITID where ID = @ID;
          end
        end

        declare @SALEDATE datetime
        declare @SALEAMOUNT money
        declare @BROKERFEE money
        declare @SALEPOSTDATE datetime
        declare @SALEPOSTSTATUSCODE tinyint

        if @PAYMENTMETHODCODE = 5
          begin      
          --Fetch the original Property sale detail values


          select top 1
            @SALEDATE = SALEDATE,
            @SALEAMOUNT = TRANSACTIONSALEAMOUNT,
            @BROKERFEE = TRANSACTIONBROKERFEE,
            @SALEPOSTDATE = SALEPOSTDATE,
            @SALEPOSTSTATUSCODE = SALEPOSTSTATUSCODE
          from dbo.PROPERTYDETAIL
          where ID = @ORIGINALPAYMETHODID and ISSOLD = 1

          if @SALE_SALEDATE is not null and  @SALE_SALEAMOUNT is not null and @SALE_GLPOSTDATE is not null and @SALE_GLPOSTSTATUS is not null
          begin
           --Reset property sale GL distribution when the any of the sale field changes

           if ((@SALEDATE is null and  @SALEAMOUNT is null and @SALEPOSTDATE is null and @SALEPOSTSTATUSCODE is null) or
             (@SALEDATE <> @SALE_SALEDATE or @SALEAMOUNT <> @SALE_SALEAMOUNT or @BROKERFEE <> @SALE_BROKERFEES or @SALEPOSTDATE <> @SALE_GLPOSTDATE or @SALEPOSTSTATUSCODE <> @SALE_GLPOSTSTATUS)) and
             exists (select 1 from dbo.PROPERTYDETAIL where PROPERTYDETAIL.ID = @ORIGINALPAYMETHODID)
           begin
             set @CLEARPROPERTYGLDISTRIBUTION = 1;
           end

           --Reset the property sale values based on the modified values

           set @SALEDATE = @SALE_SALEDATE;
           set @SALEAMOUNT = @SALE_SALEAMOUNT;  
           set @BROKERFEE = @SALE_BROKERFEES;
           set @SALEPOSTDATE = @SALE_GLPOSTDATE;
           set @SALEPOSTSTATUSCODE =  @SALE_GLPOSTSTATUS;
         end
       end

       declare @REVENUESTREAMGIFTFEE table (REVENUESTREAMGIFTFEEXML xml)
       insert into @REVENUESTREAMGIFTFEE 
       select @REVENUESTREAMS;

       -- Calculates number of designation associated with the Specific revenue from DB

       declare @DESIGNATIONSCOUNTFROMDB int = (select count(1
                                               from dbo.REVENUESPLIT_EXT RE 
                                                 inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on RE.ID = FTLI.ID 
                                               where FTLI.FINANCIALTRANSACTIONID = @ID and DELETEDON is null);

       -- Compares number of designation associated with the specific revenue from DB with the designations passed in revenue stream.

       declare @DESIGNATIONSMATCHCOUNT int = (select count(1
                                                from @REVENUESTREAMGIFTFEE
                                                  CROSS APPLY REVENUESTREAMGIFTFEEXML.nodes('(REVENUESTREAMS/ITEM)') x(c)
                                                  inner join dbo.REVENUESPLIT_EXT RE on RE.DESIGNATIONID = c.value('(GIFTFIELDS/ITEM/DESIGNATIONID)[1]', 'uniqueidentifier')
                                                  inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on RE.ID = FTLI.ID and FTLI.BASEAMOUNT = c.value('(GIFTFIELDS/ITEM/RECOGNITIONS/ITEM/AMOUNT)[1]', 'decimal')
                                                where FTLI.FINANCIALTRANSACTIONID = @ID and DELETEDON is null);

       /* Check if revenue streams changed */
       if @ADJUST = 0
         if dbo.UFN_CHECKDETAIL_STREAMSCHANGED(@ID, @REVENUESTREAMS) = 1
           or @PAYMENTMETHODCODE <> @ORIGINALPAYMENTMETHODCODE
        or isnull(@ORIGINALGIFTINKINDSUBTYPECODEID,@EMPTYGUID) <> isnull(@GIFTINKINDSUBTYPECODEID,@EMPTYGUID
           or @ORIGINALCREDITTYPECODEID <> @CREDITTYPECODEID
           or isnull(@ORIGINALPROPERTYSUBTYPECODEID,@EMPTYGUID) <> isnull(@PROPERTYSUBTYPECODEID,@EMPTYGUID
           or @ORIGINALOTHERPAYMENTMETHODCODEID <> @OTHERPAYMENTMETHODCODEID
         begin
           set @ADJUST = 1;
           set @ADJUSTGIFTFEEDISTRIBUTION = 1;
           set @CLEARGLDISTRIBUTION = 1;
           set @STREAMCHANGED = 1;
           -- check if there's a designation change. If DESIGNATIONSMATCHCOUNT = DESIGNATIONSCOUNTFROMDB, it denotes no change in designation else there's a change in designation

           if (@DESIGNATIONSMATCHCOUNT < @DESIGNATIONSCOUNTFROMDB)
             set @UPDATEGIFTFEEOPTION = 1;
           if @UPDATEGIFTFEEOPTION = 0
             set @SHOULDUPDATEGIFTFEE = dbo.UFN_REVENUE_SHOULDUPDATEGIFTFEE(@ID, @CONSTITUENTID, @PAYMENTMETHODCODE, @TRANSACTIONCURRENCYID, @BASECURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID, @REVENUESTREAMS, @RECEIPTAMOUNT, @AMOUNT)
         end

         --Adjust if inbound channel or appeal have changed

         if @ADJUST = 0
           if
             isnull(@ORIGINALCHANNELCODEID, @EMPTYGUID) <> isnull(@CHANNELCODEID, @EMPTYGUID) or
             isnull(@ORIGINALAPPEALID, @EMPTYGUID) <> isnull(@APPEALID, @EMPTYGUID)
           begin
             set @ADJUST = 1;
             set @CLEARGLDISTRIBUTION = 1;
           end

         /* Already adjusted */
         if @ADJUST = 0
           if (select COUNT(ADJUSTMENT.ID)
               from dbo.ADJUSTMENT
               where ADJUSTMENT.REVENUEID = @ID and ADJUSTMENT.POSTSTATUSCODE > 0
              ) > 0
             set @ADJUST = 1;

         if (select COUNT(ADJUSTMENT.ID)
             from dbo.ADJUSTMENT
             where ADJUSTMENT.REVENUEID = @ID and ADJUSTMENT.POSTSTATUSCODE = 2
            ) > 0
           set @ADJUSTMENTORIGINALPOSTSTATUS = 2;

         -- If NUMBEROFUNITS or MEDIANPRICE changed and stock has already been sold, the GL distributions

         -- for stocks need to be reset since the gain/loss value will have changed for that stock sale.  Also,

         -- if those values changed and sold stock has posted, the stock needs to be adjusted.

         if @PAYMENTMETHODCODE = 4
         begin
           declare @ORIGINALNUMBEROFUNITS decimal(20,3), @ORIGINALMEDIANPRICE decimal(19,4), @ORIGINALBASEEXCHANGERATEID uniqueidentifier
           select
             @ORIGINALNUMBEROFUNITS = NUMBEROFUNITS,
             @ORIGINALMEDIANPRICE = TRANSACTIONMEDIANPRICE,
             @ORIGINALBASEEXCHANGERATEID = BASEEXCHANGERATEID
           from dbo.STOCKDETAIL 
           where ID = @ORIGINALPAYMETHODID

           if ((@ORIGINALNUMBEROFUNITS <> @NUMBEROFUNITS or @ORIGINALMEDIANPRICE <> @MEDIANPRICE or @ORIGINALBASEEXCHANGERATEID <> @BASEEXCHANGERATEID
             and exists (select 1 from dbo.STOCKSALE where STOCKDETAILID = @ORIGINALPAYMETHODID))
             or exists(select 1 from dbo.STOCKSALEADJUSTMENT A inner join dbo.STOCKSALE S on S.ID = A.STOCKSALEID where S.STOCKDETAILID = @ORIGINALPAYMETHODID and A.POSTSTATUSCODE != 0 and A.POSTSTATUSCODE != @ADJUSTMENTPOSTSTATUSCODE)
           begin
             set @CLEARSTOCKGLDISTRIBUTION = 1;
             -- Indicate the stock sales need to be adjusted if they were already sold

             if exists (select 1 from dbo.STOCKSALE where STOCKDETAILID = @ORIGINALPAYMETHODID and SALEPOSTSTATUSCODE = 0)
               set @ADJUSTSTOCK = 1;
           end
         end

         -- If NUMBEROFUNITS or FAIRMARKETVALUE changed and the gift-in-kind has already been sold, the GL distributions

         -- for the gift-in-kind need to be reset since the gain/loss value will have changed for that gift-in-kind sale.  Also,

         -- if those values changed and the sold gift-in-kind has posted, the gift-in-kind needs to be adjusted.

         if @PAYMENTMETHODCODE = 6
         begin
           declare @ORIGINALGIFTINKINDNUMBEROFUNITS int, @ORIGINALGIFTINKINDFAIRMARKETVALUE money, @ORIGINALGIFTINKINDBASEEXCHANGERATEID uniqueidentifier
           select @ORIGINALGIFTINKINDNUMBEROFUNITS = NUMBEROFUNITS,
             @ORIGINALGIFTINKINDFAIRMARKETVALUE = TRANSACTIONFAIRMARKETVALUE,
             @ORIGINALGIFTINKINDBASEEXCHANGERATEID = BASEEXCHANGERATEID
           from dbo.GIFTINKINDPAYMENTMETHODDETAIL 
             where ID = @ORIGINALPAYMETHODID

           if ((@ORIGINALGIFTINKINDNUMBEROFUNITS <> @GIFTINKINDNUMBEROFUNITS or @ORIGINALGIFTINKINDFAIRMARKETVALUE <> @GIFTINKINDFAIRMARKETVALUE or @ORIGINALGIFTINKINDBASEEXCHANGERATEID <> @BASEEXCHANGERATEID
             and exists (select 1 from dbo.GIFTINKINDSALE where GIFTINKINDPAYMENTMETHODDETAILID = @ORIGINALPAYMETHODID))
             or exists(select 1 from dbo.GIFTINKINDSALEADJUSTMENT A inner join dbo.GIFTINKINDSALE S on S.ID = A.GIFTINKINDSALEID where S.GIFTINKINDPAYMENTMETHODDETAILID = @ORIGINALPAYMETHODID and A.POSTSTATUSCODE != 0 and A.POSTSTATUSCODE != @ADJUSTMENTPOSTSTATUSCODE)
           begin
             set @CLEARGIFTINKINDGLDISTRIBUTION = 1;
             -- Indicate the gift-in-kind sales need to be adjusted if they were already sold

             if exists (select 1 from dbo.GIFTINKINDSALE where GIFTINKINDPAYMENTMETHODDETAILID = @ORIGINALPAYMETHODID and SALEPOSTSTATUSCODE = 0)
               set @ADJUSTGIFTINKIND = 1;
           end
         end

         -- UFN_CHECKDETAIL_BENEFITSCHANGEDFORGL pulls both the existing standard and percent benefits.  As a result, we need to join the benefits before

         -- passing them into the function

         declare @TOTALBENEFITSXML xml;
         if @BENEFITS is not null or  @PERCENTAGEBENEFITS is not null
           set @TOTALBENEFITSXML = dbo.UFN_REVENUEDETAIL_JOINBENEFITS(@BENEFITS, @PERCENTAGEBENEFITS);

         --Update the organization total value, transaction total value, and exchange rates in the @TOTALBENEFITS XML.

         if @TOTALBENEFITSXML is not null
         set @TOTALBENEFITSXML = dbo.UFN_REVENUEBENEFIT_CONVERTAMOUNTSINXML_2(@TOTALBENEFITSXML, @TRANSACTIONCURRENCYID, @BASECURRENCYID);

         if dbo.UFN_CHECKDETAIL_BENEFITSCHANGEDFORGL(@ID, @TOTALBENEFITSXML) = 1 
         begin
           set @CLEARBENEFITSGLDISTRIBUTION = 1;
           if exists(select top 1 1 from dbo.FINANCIALTRANSACTIONLINEITEM LI inner join dbo.REVENUEBENEFIT_EXT RB on LI.ID = RB.ID where LI.FINANCIALTRANSACTIONID = @ID and LI.POSTSTATUSCODE = 2)
             set @ADJUSTBENEFITS = 1;
         end

         if @ADJUSTBENEFITS = 0
           if (select COUNT(ID) from dbo.BENEFITADJUSTMENT where REVENUEID = @ID and POSTSTATUSCODE = 1) > 0
           begin
             set @ADJUSTBENEFITS = 1;
           end              

         /* If there was a change to GL related data log an adjustment for each revenue in the transaction */
         if @ADJUST = 1
         begin
           if @ADJUSTMENTREASONCODEID is null
             raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1)

           set @ADJUSTMENTID = null;

           exec dbo.USP_SAVE_ADJUSTMENT 
             @ID
             @ADJUSTMENTID output
             @CHANGEAGENTID
             @CURRENTDATE
             @ADJUSTMENTDATE
             @ADJUSTMENTPOSTDATE
             @ADJUSTMENTREASON
             default
             @ADJUSTMENTREASONCODEID
             @ADJUSTMENTPOSTSTATUSCODE;

           /*
             select @STOCKDETAILCOUNT = count(STOCKSALE.ID)
             from dbo.STOCKSALE
             where STOCKDETAILID = @ORIGINALPAYMETHODID and SALEPOSTSTATUSCODE = 0;

             select @GIFTINKINDPAYMENTMETHODDETAILCOUNT = count(GIFTINKINDSALE.ID)
             from dbo.GIFTINKINDSALE
             where GIFTINKINDPAYMENTMETHODDETAILID = @ORIGINALPAYMETHODID and SALEPOSTSTATUSCODE = 0;

             select @PROPERTYDETAILCOUNT = count(PROPERTYDETAIL.ID)
             from dbo.PROPERTYDETAIL 
             where PROPERTYDETAIL.ID = @ORIGINALPAYMETHODID and SALEPOSTSTATUSCODE = 0;

           */

           select @STOCKDETAILCOUNT = count(T1.ID) from dbo.STOCKSALE_EXT T1 
             inner join dbo.FINANCIALTRANSACTION T2 on T1.ID = T2.ID
             where T1.STOCKDETAILID = @ORIGINALPAYMETHODID and T2.POSTSTATUSCODE = 2 and T2.DELETEDON is null;

           select @GIFTINKINDPAYMENTMETHODDETAILCOUNT = count(T1.ID) from dbo.GIFTINKINDSALE_EXT T1 
             inner join dbo.FINANCIALTRANSACTION T2 on T1.ID = T2.ID
             where T1.GIFTINKINDPAYMENTMETHODDETAILID = @ORIGINALPAYMETHODID and T2.POSTSTATUSCODE = 2 and T2.DELETEDON is null;   

          select @PROPERTYDETAILCOUNT = count(T1.ID) from dbo.PROPERTYDETAIL_EXT T1 
                  inner join dbo.FINANCIALTRANSACTION T2 on T1.ID = T2.ID
                  where T1.ID = @ORIGINALPAYMETHODID and T2.POSTSTATUSCODE = 2 and T2.DELETEDON is null;                    


           /* If sold stock has been posted, log stock detail adjustment */
           if (@STOCKDETAILCOUNT > 0) and @ORIGINALPAYMENTMETHODCODE = 4
           begin
             exec dbo.USP_SAVE_STOCKDETAILADJUSTMENT 
               @ORIGINALPAYMETHODID
               @CHANGEAGENTID
               @CURRENTDATE
               @ADJUSTMENTDATE
               @ADJUSTMENTPOSTDATE
               @ADJUSTMENTREASON
               @STOCKSALEADJUSTMENTIDS output
               @ADJUSTMENTREASONCODEID
               @ADJUSTMENTPOSTSTATUSCODE;
           end

           /* If the sold gift-in-kind has been posted, log the gift-in-kind detail adjustment */
           if (@GIFTINKINDPAYMENTMETHODDETAILCOUNT > 0) and @ORIGINALPAYMENTMETHODCODE = 6
           begin
             exec dbo.USP_SAVE_GIFTINKINDPAYMENTMETHODDETAILADJUSTMENT 
               @ORIGINALPAYMETHODID
               @CHANGEAGENTID
               @CURRENTDATE
               @ADJUSTMENTDATE
               @ADJUSTMENTPOSTDATE
               @ADJUSTMENTREASON
               @GIFTINKINDSALEADJUSTMENTIDS output
               @ADJUSTMENTREASONCODEID
               @ADJUSTMENTPOSTSTATUSCODE;
           end

           /* If sold property has been posted, log property detail adjustment */
           else if (@ORIGINALPAYMENTMETHODCODE = 5) and (@PROPERTYDETAILCOUNT > 0
           begin
             if exists (select 1 from dbo.PROPERTYDETAILADJUSTMENT A where A.PROPERTYDETAILID = @ORIGINALPAYMETHODID and A.POSTSTATUSCODE != 0 and A.POSTSTATUSCODE != @ADJUSTMENTPOSTSTATUSCODE)
               set @CLEARPROPERTYGLDISTRIBUTION = 1;

             exec dbo.USP_SAVE_PROPERTYDETAILADJUSTMENT 
               @ORIGINALPAYMETHODID
               @PROPERTYDETAILADJUSTMENTID output
               @CHANGEAGENTID
               @CURRENTDATE
               @ADJUSTMENTDATE
               @ADJUSTMENTPOSTDATE
               @ADJUSTMENTREASON
               @ADJUSTMENTREASONCODEID,
               @ADJUSTMENTPOSTSTATUSCODE;
           end
         end
         else
         begin
           -- If the entire transaction isn't being adjusted, check if just the stock sales need to be adjusted

           if @ADJUSTSTOCK = 1
             exec dbo.USP_SAVE_STOCKDETAILADJUSTMENT 
               @ORIGINALPAYMETHODID
               @CHANGEAGENTID
               @CURRENTDATE
               @ADJUSTMENTDATE
               @ADJUSTMENTPOSTDATE
               @ADJUSTMENTREASON
               @STOCKSALEADJUSTMENTIDS output
               @ADJUSTMENTREASONCODEID
               @ADJUSTMENTPOSTSTATUSCODE

           -- If the entire transaction isn't being adjusted, check if just the gift-in-kind sales need to be adjusted

           if @ADJUSTGIFTINKIND = 1
             exec dbo.USP_SAVE_GIFTINKINDPAYMENTMETHODDETAILADJUSTMENT 
               @ORIGINALPAYMETHODID
               @CHANGEAGENTID
               @CURRENTDATE
               @ADJUSTMENTDATE
               @ADJUSTMENTPOSTDATE
               @ADJUSTMENTREASON
               @GIFTINKINDSALEADJUSTMENTIDS output
               @ADJUSTMENTREASONCODEID
               @ADJUSTMENTPOSTSTATUSCODE
         end

         if @ADJUSTBENEFITS = 1
         begin
           if @ADJUSTMENTREASONCODEID is null
             raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1)

           -- update benefits

           declare @TOTALBENEFITS xml;
           set @TOTALBENEFITS = dbo.UFN_REVENUEDETAIL_JOINBENEFITS(@BENEFITS, @PERCENTAGEBENEFITS);
           --Update the organization total value, transaction total value, and exchange rates in the @TOTALBENEFITS XML.

           set @TOTALBENEFITS = dbo.UFN_REVENUEBENEFIT_CONVERTAMOUNTSINXML_2(@TOTALBENEFITS, @TRANSACTIONCURRENCYID, @BASECURRENCYID);  

            --Remove benefits if they are waived

            if @BENEFITSWAIVED = 1
              set @TOTALBENEFITSXML = null;

            set @BENEFITSADJUSTMENTID = null;
            exec dbo.USP_SAVE_BENEFITADJUSTMENT_2
              @ID,
              @BENEFITSADJUSTMENTID output
              @CHANGEAGENTID
              @CURRENTDATE
              @ADJUSTMENTDATE
              @ADJUSTMENTPOSTDATE
              @ADJUSTMENTREASON
              default
              @ADJUSTMENTREASONCODEID
              @ADJUSTMENTPOSTSTATUSCODE,
              @TOTALBENEFITS
         end

         if exists
           (
            select top 1
              1
            from
              dbo.FINANCIALTRANSACTIONLINEITEM
              inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
            where
              FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
              and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
              and REVENUESPLIT_EXT.APPLICATIONCODE = 12
           )
           set @HASAUCTIONPURCHASE = 1;

         if dbo.UFN_CHECKDETAIL_AUCTIONPURCHASESCHANGED(@ID,@REVENUESTREAMS) = 1
           set @CLEARAUCTIONPURCHASEGLDISTRIBUTION = 1;

         -- Reset the gift fee GL distributions if the payment method changed.

         if (@PAYMENTMETHODCODE <> @ORIGINALPAYMENTMETHODCODE)
         begin
           set @ADJUSTGIFTFEEDISTRIBUTION = 1;
           set @CLEARGIFTFEEGLDISTRIBUTION = 1;
         end

        if @ADJUSTGIFTFEEDISTRIBUTION = 0 and (select count(ID) from dbo.GIFTFEEADJUSTMENT where REVENUEID = @ID and POSTSTATUSCODE <> 0) > 0
          set @ADJUSTGIFTFEEDISTRIBUTION = 1;        

        declare @OLDAUCTIONPURCHASES xml;
        if @CLEARGLDISTRIBUTION = 1 or @CLEARAUCTIONPURCHASEGLDISTRIBUTION = 1
          set @OLDAUCTIONPURCHASES = 
            (
            select 
              AUCTIONITEM.ID as AUCTIONITEMID,
              AUCTIONITEM.REVENUEAUCTIONDONATIONID,
              FINANCIALTRANSACTIONLINEITEM.ID,
              FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT as AMOUNT
            from 
              dbo.AUCTIONITEM 
              inner join dbo.AUCTIONITEMPURCHASE on AUCTIONITEM.ID = AUCTIONITEMPURCHASE.AUCTIONITEMID
              inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = AUCTIONITEMPURCHASE.PURCHASEID
              inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
            where 
              FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and REVENUESPLIT_EXT.APPLICATIONCODE = 12
              and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1
            for xml raw('ITEM'),type,elements,root('AUCTIONPURCHASES'),BINARY BASE64
            )

        declare @OLDGIFTAID xml;
        set @OLDGIFTAID = 
          (
          select 
  FINANCIALTRANSACTIONLINEITEM.ID, 
            REVENUESPLIT_EXT.DESIGNATIONID, 
            isnull(REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID, @EMPTYGUID) as GLREVENUECATEGORYMAPPINGID, 
            dbo.UFN_GIFTAIDREVENUESPLIT_GETQUALIFICATIONSTATUS(FINANCIALTRANSACTIONLINEITEM.ID) as STATUS
          from 
            dbo.FINANCIALTRANSACTIONLINEITEM
            inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
            inner join dbo.REVENUESPLITGIFTAID on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLITGIFTAID.ID
            left join dbo.REVENUECATEGORY on FINANCIALTRANSACTIONLINEITEM.ID = REVENUECATEGORY.ID
          where 
            FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
            and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1
            and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
          for xml raw('ITEM'),type,elements,root('GIFTAIDQUALIFICATIONSTATUS'),BINARY BASE64
          )

        declare @TRIBUTEAMOUNT money;
        select 
          @TRIBUTEAMOUNT = sum(AMOUNT) 
        from dbo.REVENUETRIBUTE 
          where REVENUEID = @ID;

        -- do not allow the gift amount to be adjusted less than the applied tribute amount

        if (@TRIBUTEAMOUNT is not null) and (@AMOUNT < @TRIBUTEAMOUNT) and (@UPDATETRIBUTEOPTION = 0) and (@VALIDATETRIBUTES = 1)
        begin
          raiserror('The payment amount cannot be less than the sum of the tribute amounts applied to this payment.', 13, 1)
        end

        if @UPDATETRIBUTEOPTION = 1
        begin
          declare @TRIBUTES table
          (
            TRIBUTEID uniqueidentifier,
            AMOUNT money,
            DESIGNATIONID uniqueidentifier,
            SEQUENCE int,
            REVENUETRIBUTEID uniqueidentifier,
            BASECURRENCYID uniqueidentifier,
            ORGANIZATIONAMOUNT money,
            ORGANIZATIONEXCHANGERATEID uniqueidentifier
          );

         insert into @TRIBUTES 
           select 
             TRIBUTEID, 
             AMOUNT, 
             DESIGNATIONID, 
             SEQUENCE
             REVENUETRIBUTEID, 
             BASECURRENCYID, 
             ORGANIZATIONAMOUNT, 
             ORGANIZATIONEXCHANGERATEID
           from 
             dbo.UFN_REVENUE_GETTRIBUTESFORAMOUNT(@ID, @AMOUNT, @BASEEXCHANGERATEID, @EXCHANGERATE)

         update dbo.REVENUETRIBUTE
           set 
             REVENUETRIBUTE.AMOUNT = TRIBUTES.AMOUNT,
             REVENUETRIBUTE.ORGANIZATIONAMOUNT = TRIBUTES.ORGANIZATIONAMOUNT,
             REVENUETRIBUTE.ORGANIZATIONEXCHANGERATEID = TRIBUTES.ORGANIZATIONEXCHANGERATEID,
             REVENUETRIBUTE.CHANGEDBYID = @CHANGEAGENTID,
             REVENUETRIBUTE.DATECHANGED = @CURRENTDATE
         from dbo.REVENUETRIBUTE
           inner join @TRIBUTES TRIBUTES on TRIBUTES.REVENUETRIBUTEID = REVENUETRIBUTE.ID
       end

        -- create reversals for gift aid tied to splits that have been deleted.

        exec dbo.USP_REVENUESPLITGIFTAID_CREATEREVERSALSFORDELETEDSPLITS @OLDGIFTAID, @REVENUESTREAMS, @CHANGEAGENTID, @CURRENTDATE;

        declare @TEMP_REVENUESPLITGIFTFEE table (
          [ID] [uniqueidentifier] not null
          ,[FEE] [money] not null
          ,[FTLIDELETED] [bit] null
          )

        insert into @TEMP_REVENUESPLITGIFTFEE (
          [ID]
          ,[FEE]
          )
        select RSGF.[ID]
          ,RSGF.[FEE]
        from FINANCIALTRANSACTION FT
          inner join FINANCIALTRANSACTIONLINEITEM FTLI on FTLI.FINANCIALTRANSACTIONID = FT.ID
          inner join REVENUESPLITGIFTFEE RSGF on FTLI.ID = RSGF.ID
        where FT.ID = @ID

        declare @SPLITSDECLININGGIFTAID xml;
        declare @GIFTAIDSPONSORSHIPSPLITS xml;

        exec dbo.USP_PAYMENT_ADJUST
          @ID=@ID,
          @CHANGEAGENTID=@CHANGEAGENTID,
          @CURRENTDATE=@CURRENTDATE,
          @DATE=@DATE,
          @AMOUNT=@AMOUNT,
          @RECEIPTAMOUNT=@RECEIPTAMOUNT,
          @REVENUESTREAMS=@REVENUESTREAMS,
          @SOURCECODE=@SOURCECODE,
          @APPEALID=@APPEALID,
          @BENEFITS=@BENEFITS,
          @BENEFITSWAIVED=@BENEFITSWAIVED,
          @GIVENANONYMOUSLY=@GIVENANONYMOUSLY,
          @MAILINGID=@MAILINGID,
          @CHANNELCODEID=@CHANNELCODEID,
          @DONOTRECEIPT=@DONOTRECEIPT,
          @REFERENCE=@REFERENCE,
          @DONOTACKNOWLEDGE=@DONOTACKNOWLEDGE,
          @SPLITSDECLININGGIFTAID = @SPLITSDECLININGGIFTAID output,
          @PERCENTAGEBENEFITS = @PERCENTAGEBENEFITS output,
          @GIFTAIDSPONSORSHIPSPLITS = @GIFTAIDSPONSORSHIPSPLITS output,
          @BASEEXCHANGERATEID = @BASEEXCHANGERATEID output,
          @EXCHANGERATE = @EXCHANGERATE,
          @CURRENTAPPUSERID = @CURRENTAPPUSERID,
          @BENEFITSADJUSTMENTID = @BENEFITSADJUSTMENTID,
          @ADJUSTMENTPOSTDATE = @ADJUSTMENTPOSTDATE,
          @ORIGINALPAYMETHODID = @ORIGINALPAYMETHODID,
          @PAYMENTMETHODCODE = @PAYMENTMETHODCODE
          @CHECKDATE = @CHECKDATE
          @CHECKNUMBER = @CHECKNUMBER
          @CONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID
          @REFERENCEDATE = @REFERENCEDATE
          @REFERENCENUMBER = @REFERENCENUMBER
          @CARDHOLDERNAME = @CARDHOLDERNAME
          @CREDITCARDNUMBER = @CREDITCARDNUMBER
          @CREDITTYPECODEID = @CREDITTYPECODEID
          @AUTHORIZATIONCODE = @AUTHORIZATIONCODE
          @EXPIRESON = @EXPIRESON
          @ISSUER = @ISSUER
          @NUMBEROFUNITS = @NUMBEROFUNITS
          @SYMBOL = @SYMBOL
          @MEDIANPRICE = @MEDIANPRICE
          @PROPERTYSUBTYPECODEID = @PROPERTYSUBTYPECODEID
          @GIFTINKINDSUBTYPECODEID = @GIFTINKINDSUBTYPECODEID
            @KEYALREADYOPEN = 0,
            @OTHERPAYMENTMETHODCODEID = @OTHERPAYMENTMETHODCODEID,
            @DIRECTDEBITRESULTCODE = @DIRECTDEBITRESULTCODE,
            @LOWPRICE = @LOWPRICE,
            @HIGHPRICE = @HIGHPRICE,
            @SALEDATE = @SALEDATE,
            @SALEAMOUNT = @SALEAMOUNT,
            @BROKERFEE = @BROKERFEE,
            @SALEPOSTDATE = @SALEPOSTDATE,
            @SALEPOSTSTATUSCODE = @SALEPOSTSTATUSCODE,
            @GIFTINKINDITEMNAME = @GIFTINKINDITEMNAME
            @GIFTINKINDDISPOSITIONCODE = @GIFTINKINDDISPOSITIONCODE
            @GIFTINKINDNUMBEROFUNITS = @GIFTINKINDNUMBEROFUNITS
            @GIFTINKINDFAIRMARKETVALUE = @GIFTINKINDFAIRMARKETVALUE,
            @DIRECTDEBITISREJECTED = @DIRECTDEBITISREJECTED,
                      @ORIGINALPAYMENTMETHODCODE = @ORIGINALPAYMENTMETHODCODE,
            @ORIGINALVENDORID = @ORIGINALVENDORID,
            @ORIGINALTRANSACTIONID = @ORIGINALTRANSACTIONID,
            @SEPAMANDATEID = @SEPAMANDATEID,
            @OVERRIDESAVEDVENDORID = 1,
            @OVERRIDESAVEDBBPSTRANSACTIONID = 1,
            @OVERRIDESAVEDSEPAMANDATEID = 1;

        if @UPDATEGIFTFEEOPTION = 0
        begin
          update @TEMP_REVENUESPLITGIFTFEE
          set FTLIDELETED = 1
          from @TEMP_REVENUESPLITGIFTFEE T
          inner join FINANCIALTRANSACTIONLINEITEM FTLI on FTLI.ID = T.ID
          where FTLI.DELETEDON is not null

          update @TEMP_REVENUESPLITGIFTFEE
          set FTLIDELETED = null
          from @TEMP_REVENUESPLITGIFTFEE T
          inner join REVENUESPLITGIFTFEE RSGF on RSGF.ID = T.ID

        end

        if @ADJUSTMATCHINGGIFTCLAIMS is null
          set @ADJUSTMATCHINGGIFTCLAIMS = 0;

        if @ADJUSTMATCHINGGIFTCLAIMS = 2
          exec dbo.USP_MATCHINGGIFTCLAIM_AMOUNT_UPDATE 
            @ID
            @AMOUNT
            @OLDAMOUNT
            @ADJUSTMATCHINGGIFTCLAIMS
            @CHANGEAGENTID
            @CURRENTDATE

        --Cache CONTEXT INFO

        declare @CONTEXTCACHE varbinary(128);
        set @CONTEXTCACHE = CONTEXT_INFO();

        if not @CHANGEAGENTID is null
          set CONTEXT_INFO @CHANGEAGENTID;

        -- if the payment method has changed, clear any user-defined gl distributions for all revenue records

        if @CLEARGLDISTRIBUTION = 1
        begin

          -- Use logical revenue id for stock, gift in kind, or property.  Otherwise use the financial transaction id.

          -- Made as three separate statements since deadlocking and performance issues occur if using an 'OR' statement in a single delete

          delete JOURNALENTRY
          from dbo.JOURNALENTRY inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
          inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
          where @ORIGINALPAYMENTMETHODCODE in (6,5,4
          and JOURNALENTRY_EXT.LOGICALREVENUEID = @ID
          and JOURNALENTRY_EXT.OUTDATED = 0
          and JOURNALENTRY_EXT.TABLENAMECODE in (1,11,13,10)
          and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
          and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1

          delete JOURNALENTRY
          from dbo.JOURNALENTRY inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
          inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
          where @ORIGINALPAYMENTMETHODCODE in (6,5,4
          and JOURNALENTRY_EXT.LOGICALREVENUEID is null
          and FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
          and JOURNALENTRY_EXT.OUTDATED = 0
          and JOURNALENTRY_EXT.TABLENAMECODE in (1,11,13,10)
          and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
          and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1

          delete JOURNALENTRY
          from dbo.JOURNALENTRY inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
          inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
          where @ORIGINALPAYMENTMETHODCODE not in (6,5,4
          and FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
          and JOURNALENTRY_EXT.OUTDATED = 0
          and JOURNALENTRY_EXT.TABLENAMECODE in (1,11,13,10)
          and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
          and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1

          -- Add new GL distributions

          if @ADJUSTMENTPOSTSTATUSCODE <> 2
            exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION 
              @ID
              @CHANGEAGENTID
              @CURRENTDATE;

          -- If the payment is linked to a deposit then overwrite the debit account with the bank's default account

          select @DEPOSITID = DEPOSITID from dbo.BANKACCOUNTDEPOSITPAYMENT where ID = @ID;
          if @DEPOSITID is not null
            exec dbo.USP_BANKACCOUNTDEPOSIT_OVERWRITEPAYMENTDEBITACCOUNTS 
              @ID
              @DEPOSITID
              @CHANGEAGENTID
              @CURRENTDATE;

          -- Add new stock detail GL distributions

          if @ADJUSTMENTPOSTSTATUSCODE <> 2 and @PAYMENTMETHODCODE = 4
            exec dbo.USP_SAVE_STOCKDETAILGLDISTRIBUTION 
              @ID
              @CHANGEAGENTID
              @CURRENTDATE;

          -- Add new gift-in-kind detail GL distributions

          if @ADJUSTMENTPOSTSTATUSCODE <> 2 and @PAYMENTMETHODCODE = 6
            exec dbo.USP_SAVE_GIFTINKINDPAYMENTMETHODDETAILGLDISTRIBUTION 
              @ID
              @CHANGEAGENTID
              @CURRENTDATE;

          -- Add new property detail GL distributions

          if @ADJUSTMENTPOSTSTATUSCODE <> 2 and @PAYMENTMETHODCODE = 5
            exec dbo.USP_SAVE_PROPERTYDETAILGLDISTRIBUTION 
              @ID
              @CHANGEAGENTID
              @CURRENTDATE;
        end
        else
        begin
          if @ADJUSTMENTPOSTSTATUSCODE = 2
          begin
            /*
            delete from dbo.REVENUEGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;  
            delete from dbo.PROPERTYDETAILGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
            */
            delete JOURNALENTRY
            from dbo.JOURNALENTRY inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
            where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
            and JOURNALENTRY_EXT.OUTDATED = 0
            and JOURNALENTRY_EXT.TABLENAMECODE in (1,10)
            and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
            and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1
          end

          if @CLEARSTOCKGLDISTRIBUTION = 1
          begin
            --Clear stock GL                  

            --delete from dbo.STOCKSALEGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;


            -- Fallback to FINANCIALTRANSACTIONID was made as two separate delete statements 

            -- since deadlocking and performance issues occur if using an 'OR' statement in a single delete

            delete JOURNALENTRY
            from dbo.JOURNALENTRY inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
            where JOURNALENTRY_EXT.LOGICALREVENUEID = @ID
            and JOURNALENTRY_EXT.OUTDATED = 0
            and JOURNALENTRY_EXT.TABLENAMECODE = 11
            and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
            and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1

            delete JOURNALENTRY
            from dbo.JOURNALENTRY inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
            where JOURNALENTRY_EXT.LOGICALREVENUEID is null
            and FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
            and JOURNALENTRY_EXT.OUTDATED = 0
            and JOURNALENTRY_EXT.TABLENAMECODE = 11
            and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
            and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1

            -- Add new stock detail GL distributions

            if @ADJUSTMENTPOSTSTATUSCODE <> 2 or @ADJUSTMENTPOSTSTATUSCODE is null
              exec dbo.USP_SAVE_STOCKDETAILGLDISTRIBUTION 
                @ID
                @CHANGEAGENTID
                @CURRENTDATE;            
          end

          if @CLEARGIFTINKINDGLDISTRIBUTION = 1
          begin
            --Clear gift-in-kind GL                  

            --delete from dbo.GIFTINKINDSALEGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;


            -- Fallback to FINANCIALTRANSACTIONID was made as two separate delete statements 

            -- since deadlocking and performance issues occur if using an 'OR' statement in a single delete

            delete JOURNALENTRY
            from dbo.JOURNALENTRY inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
            where JOURNALENTRY_EXT.LOGICALREVENUEID = @ID
            and JOURNALENTRY_EXT.OUTDATED = 0
            and JOURNALENTRY_EXT.TABLENAMECODE = 13
            and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
            and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1

            delete JOURNALENTRY
            from dbo.JOURNALENTRY inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
            where JOURNALENTRY_EXT.LOGICALREVENUEID is null
            and FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
            and JOURNALENTRY_EXT.OUTDATED = 0
            and JOURNALENTRY_EXT.TABLENAMECODE = 13
            and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
            and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1


            -- Add new gift-in-kind detail GL distributions

            if @ADJUSTMENTPOSTSTATUSCODE <> 2 or @ADJUSTMENTPOSTSTATUSCODE is null
              exec dbo.USP_SAVE_GIFTINKINDPAYMENTMETHODDETAILGLDISTRIBUTION 
                @ID
                @CHANGEAGENTID
                @CURRENTDATE;            
          end

          if @PAYMENTMETHODCODE = 4
          begin
            declare @RETURNID uniqueidentifier

            if @SALE_SALEDATE is not null
              and @SALE_SALEAMOUNT is not null
              and @SALE_GLPOSTDATE is not null
              and @SALE_GLPOSTSTATUS is not null
            exec dbo.USP_DATAFORMTEMPLATE_ADD_STOCKSALEBYTRANSACTION @RETURNID
             ,@ID
             ,@CHANGEAGENTID
             ,@SALE_SALEDATE
             ,@SALE_SALEAMOUNT
             ,@SALE_BROKERFEES
             ,@NUMBEROFUNITSSOLD
             ,@SALE_LOWPRICE
             ,@SALE_MEDIANPRICE
             ,@SALE_HIGHPRICE
             ,@SALE_GLPOSTDATE
             ,@SALE_GLPOSTSTATUS
             ,@BASEEXCHANGERATEID
             ,@EXCHANGERATE
             ,@CURRENTAPPUSERID
        end
        if @CLEARPROPERTYGLDISTRIBUTION = 1
        begin
          delete JOURNALENTRY
          from dbo.JOURNALENTRY 
            inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
          where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ORIGINALPAYMETHODID
            and JOURNALENTRY_EXT.OUTDATED = 0
            and JOURNALENTRY_EXT.TABLENAMECODE = 10
            and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
            and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1

          if @ADJUSTMENTPOSTSTATUSCODE <> 2
            exec dbo.USP_SAVE_PROPERTYDETAILGLDISTRIBUTION 
              @ID
              @CHANGEAGENTID
              @CURRENTDATE;
        end
      end

      if @CLEARBENEFITSGLDISTRIBUTION = 1 and @ADJUSTMENTPOSTSTATUSCODE <> 2
      begin
        delete JE
        from dbo.FINANCIALTRANSACTIONLINEITEM LI
          inner join dbo.JOURNALENTRY JE on JE.FINANCIALTRANSACTIONLINEITEMID = LI.ID
          inner join dbo.JOURNALENTRY_EXT JEX on JE.ID = JEX.ID
        where LI.FINANCIALTRANSACTIONID = @ID
          and LI.DELETEDON is null
          and LI.POSTSTATUSCODE != 2
          and LI.TYPECODE != 1
          and JEX.TABLENAMECODE = 5; --BENEFITGLDISTRIBUTION


         exec dbo.USP_SAVE_PAYMENT_BENEFITGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
      end

      --Naveen 11/07/2010 Update gift fees when you change the amount

      --PBI 119825

      if @UPDATEGIFTFEEOPTION = 1 and exists (select 1 from dbo.GIFTFEEOVERRIDEREASONCODE where ISPAYMENTEDITDEFAULT=1 and ACTIVE=1)
      begin
        exec dbo.USP_REVENUE_UPDATEPAYMENTGIFTFEE 
          @ID
          @CONSTITUENTID
          @CHANGEAGENTID,
          @PAYMENTMETHODCODE

        set @ADJUSTGIFTFEEDISTRIBUTION = 1;
        set @CLEARGIFTFEEGLDISTRIBUTION = 1;
      end   
      else if (@SHOULDUPDATEGIFTFEE = 0 and @STREAMCHANGED = 1)
      begin
        set @ADJUSTGIFTFEEDISTRIBUTION = 1;
        set @CLEARGIFTFEEGLDISTRIBUTION = 1;
      end

      if @ADJUSTGIFTFEEDISTRIBUTION  = 1
      begin
        if @ADJUSTMENTREASONCODEID is null
          raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1)

        if @CLEARGIFTFEEGLDISTRIBUTION = 1
          delete JOURNALENTRY
          from dbo.JOURNALENTRY 
            inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
          where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
            and JOURNALENTRY_EXT.OUTDATED = 0
            and JOURNALENTRY_EXT.TABLENAMECODE = 8
            and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
            and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1;

        declare @TEMP_REVENUESPLITGIFTFEE_XML xml;
        set @TEMP_REVENUESPLITGIFTFEE_XML = (select ID,FEE,FTLIDELETED from @TEMP_REVENUESPLITGIFTFEE
          for xml raw('ITEM'),type,elements,root('REVENUESPLITGIFTFEES'),BINARY BASE64); 

        if @ADJUSTMENTPOSTSTATUSCODE <> 2
          exec dbo.USP_SAVE_GIFTFEEADJUSTMENT_2 
            @ID
            null
            @CHANGEAGENTID
            @CURRENTDATE
            @ADJUSTMENTDATE
            @ADJUSTMENTPOSTDATE
            @ADJUSTMENTREASON
            default
            @ADJUSTMENTREASONCODEID
            @ADJUSTMENTPOSTSTATUSCODE,
            @UPDATEGIFTFEEOPTION,
            @TEMP_REVENUESPLITGIFTFEE_XML;

          if @ADJUSTMENTPOSTSTATUSCODE <> 2 and @CLEARGIFTFEEGLDISTRIBUTION = 1
            exec dbo.USP_SAVE_GIFTFEEADJUSTMENTGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
        end
        else if @CLEARGIFTFEEGLDISTRIBUTION = 1
        begin
          delete JOURNALENTRY
          from dbo.JOURNALENTRY 
          inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
          inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
          where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
            and JOURNALENTRY_EXT.OUTDATED = 0
            and JOURNALENTRY_EXT.TABLENAMECODE = 8
            and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
            and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1;

          exec dbo.USP_SAVE_GIFTFEEADJUSTMENTGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
        end

        --Check to make sure gift amount is more than the gift Fee

        --####

        declare @GIFTFEE_ENABLED bit;
        declare @GIFTFEEAMOUNT money;

        set @GIFTFEEAMOUNT = 0.00;

        select @GIFTFEE_ENABLED = dbo.UFN_GIFTFEE_ENABLED();

        if @GIFTFEE_ENABLED = 1 
          and exists (
                      select 1 
                        from 
                          dbo.REVENUESPLITGIFTFEE 
                          inner join dbo.FINANCIALTRANSACTIONLINEITEM on REVENUESPLITGIFTFEE.ID = FINANCIALTRANSACTIONLINEITEM.ID 
                        where 
                          FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and REVENUESPLITGIFTFEE.WAIVED <> 1
                          and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
                          and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1
                      )
        begin
          select @GIFTFEEAMOUNT = coalesce(sum(REVENUESPLITGIFTFEE.TRANSACTIONAMOUNT), 0.00
          from dbo.REVENUESPLITGIFTFEE 
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on REVENUESPLITGIFTFEE.ID = FINANCIALTRANSACTIONLINEITEM.ID
            where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
              and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
              and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1;

          if @GIFTFEEAMOUNT > @AMOUNT
            -- The gift fee cannot be greater than the application amount

            raiserror('BBERR_AMOUNTLESSTHANGIFTFEE', 13, 1);
        end

        --Restore CONTEXT_INFO

        if not @CONTEXTCACHE is null
          set CONTEXT_INFO @CONTEXTCACHE;

        /* add adjustment history information */
        if @ADJUST = 1
        begin
          if @ADJUSTMENTID is not null
            exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVEHISTORY 
              @ID
              @CHANGEAGENTID
              null
              @ADJUSTMENTID;

          if @STOCKSALEADJUSTMENTIDS is not null
            exec dbo.USP_ADJUSTMENTHISTORY_STOCK_SAVEHISTORY 
              @ORIGINALPAYMETHODID
              @CHANGEAGENTID
              null
              @STOCKSALEADJUSTMENTIDS;

         if @GIFTINKINDSALEADJUSTMENTIDS is not null
           exec dbo.USP_ADJUSTMENTHISTORY_GIFTINKIND_SAVEHISTORY 
             @ORIGINALPAYMETHODID
             @CHANGEAGENTID
             null
             @GIFTINKINDSALEADJUSTMENTIDS;

         if @PROPERTYDETAILADJUSTMENTID is not null
           exec dbo.USP_ADJUSTMENTHISTORY_PROPERTY_SAVEHISTORY 
             @ORIGINALPAYMETHODID
             @CHANGEAGENTID
             null
             @PROPERTYDETAILADJUSTMENTID;
        end
        else
        begin
          -- If the entire transaction wasn't adjusted, check if just the stocks need to be adjusted

          if @ADJUSTSTOCK = 1 and @STOCKSALEADJUSTMENTIDS is not null
            exec dbo.USP_ADJUSTMENTHISTORY_STOCK_SAVEHISTORY 
              @ORIGINALPAYMETHODID
              @CHANGEAGENTID
              null
              @STOCKSALEADJUSTMENTIDS;

         -- If the entire transaction wasn't adjusted, check if just the gift-in-kind needs to be adjusted

         if @ADJUSTGIFTINKIND = 1 and @GIFTINKINDSALEADJUSTMENTIDS is not null
           exec dbo.USP_ADJUSTMENTHISTORY_GIFTINKIND_SAVEHISTORY 
             @ORIGINALPAYMETHODID
             @CHANGEAGENTID
             null
             @GIFTINKINDSALEADJUSTMENTIDS;
        end

        -- Add/Update gift aid distributions ONLY if exists for original payment - Bug 70202

        if exists (
          select 1 
          from 
            --dbo.GIFTAIDGLDISTRIBUTION t3 

            dbo.JOURNALENTRY_EXT t3
            inner join dbo.REVENUESPLITGIFTAID t1 on t3.REVENUESPLITGIFTAIDID=t1.ID 
            inner join dbo.FINANCIALTRANSACTIONLINEITEM t2 on t1.ID = t2.ID
            inner join dbo.REVENUESPLIT_EXT on t2.ID = REVENUESPLIT_EXT.ID
          where
            t2.FINANCIALTRANSACTIONID = @ID
            and t2.DELETEDON is null
            and t2.TYPECODE <> 1
            and t3.TABLENAMECODE = 7
          )
          -- update existing gift aid GL distributions

          exec dbo.USP_REVENUESPLITGIFTAID_UPDATEGLDISTRIBUTIONS_FORREVENUE 
            @ID
            @OLDGIFTAID
            0
            0
            @CHANGEAGENTID
            @CURRENTDATE;

           --If original adjustment was set to Do not post and now it is Not Posted, then update the gltransation

           if @ADJUSTMENTORIGINALPOSTSTATUS = 2 and @ADJUSTMENTPOSTSTATUSCODE = 1
           begin
             --JamesWill 76594 Also change the reversal post date to not be null

             --RobertJo 168818 Added cases so that it would adjust the other databases as well

             update  FTLI2
               set POSTSTATUSCODE = 1,
                 POSTDATE = @ADJUSTMENTPOSTDATE,
                 CHANGEDBYID = @CHANGEAGENTID,
                 DATECHANGED = getdate()
               from dbo.FINANCIALTRANSACTIONLINEITEM inner join dbo.JOURNALENTRY on FINANCIALTRANSACTIONLINEITEM.ID = JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID
                 inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.REVERSEDGLTRANSACTIONID
                 inner join dbo.JOURNALENTRY JE2 on JOURNALENTRY_EXT.ID = JE2.ID
                 inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI2 on JE2.FINANCIALTRANSACTIONLINEITEMID = FTLI2.ID and FTLI2.POSTSTATUSCODE != 2
              where FTLI2.FINANCIALTRANSACTIONID = @ID
                 and JOURNALENTRY_EXT.TABLENAMECODE in (0,1,5,11,10,13)
                 and FINANCIALTRANSACTIONLINEITEM.TYPECODE in (0,1,3,5,6,7,8,98)
                 and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 2

             exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION 
               @ID
               @CHANGEAGENTID
               @CURRENTDATE;

             select @DEPOSITID = DEPOSITID 
             from dbo.BANKACCOUNTDEPOSITPAYMENT 
             where ID = @ID;

             if @DEPOSITID is not null
               exec dbo.USP_BANKACCOUNTDEPOSIT_OVERWRITEPAYMENTDEBITACCOUNTS 
                 @ID
                 @DEPOSITID
                 @CHANGEAGENTID
                 @CURRENTDATE;
           end
           else
             if @ADJUSTMENTORIGINALPOSTSTATUS = 0 and @ADJUSTMENTPOSTSTATUSCODE = 2
             begin
               --RobertJo 168818 Added cases so that it would adjust the other databases as well

                 update FTLI2
                   set POSTSTATUSCODE = 3
                     POSTDATE = null,
                     CHANGEDBYID = @CHANGEAGENTID,
                     DATECHANGED = getdate()
                  from dbo.FINANCIALTRANSACTIONLINEITEM inner join dbo.JOURNALENTRY on FINANCIALTRANSACTIONLINEITEM.ID = JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID
                    inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.REVERSEDGLTRANSACTIONID
                    inner join dbo.JOURNALENTRY JE2 on JOURNALENTRY_EXT.ID = JE2.ID
                    inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI2 on JE2.FINANCIALTRANSACTIONLINEITEMID = FTLI2.ID and FTLI2.POSTSTATUSCODE != 2
                  where FTLI2.FINANCIALTRANSACTIONID = @ID
                    and JOURNALENTRY_EXT.TABLENAMECODE in (0,1,5,11,10,13)
                    and FINANCIALTRANSACTIONLINEITEM.TYPECODE in (0,1,3,5,6,7,8,98)
                    and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 2

             end

               -- update existing auction purchase GL distributions

               if ((@CLEARGLDISTRIBUTION = 1 and @HASAUCTIONPURCHASE = 1) or @CLEARAUCTIONPURCHASEGLDISTRIBUTION = 1)  
                 exec dbo.USP_REVENUE_UPDATEAUCTIONPURCHASEGLDISTRIBUTION 
                   @REVENUEID = @ID
                   @OLDAUCTIONPURCHASES = @OLDAUCTIONPURCHASES
                   @CHANGEAGENTID = @CHANGEAGENTID
                   @CHANGEDATE = @CURRENTDATE,
                   @ADJUSTMENTDATE = @ADJUSTMENTDATE
                   @ADJUSTMENTPOSTDATE = @ADJUSTMENTPOSTDATE
                   @ADJUSTMENTREASON = @ADJUSTMENTREASON,  
                   @ADJUSTMENTREASONCODEID = @ADJUSTMENTREASONCODEID,
                   @ADJUSTMENTPOSTSTATUSCODE = @ADJUSTMENTPOSTSTATUSCODE;

      end try

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

      return 0;