USP_PLEDGE_UPDATEPAYMENT

Adds a payment to a pledge.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@APPLIEDAMOUNT money IN
@CHANGEDATE datetime IN
@CHANGEAGENTID uniqueidentifier IN
@PREVIOUSDATE datetime IN
@UPDATERECOGNITIONOPTION tinyint IN
@BASEAPPLIEDAMOUNT money IN
@ORGANIZATIONAPPLIEDAMOUNT money IN
@APPLICATIONTYPE tinyint IN
@APPLICATIONID uniqueidentifier IN
@UPDATESOLICITORSOPTION tinyint IN

Definition

Copy


CREATE procedure dbo.USP_PLEDGE_UPDATEPAYMENT
(
  @ID uniqueidentifier,
  @APPLIEDAMOUNT money,
  @CHANGEDATE datetime = null,
  @CHANGEAGENTID uniqueidentifier = null,
  @PREVIOUSDATE datetime = null,
  @UPDATERECOGNITIONOPTION tinyint = null,
  @BASEAPPLIEDAMOUNT money = null,
  @ORGANIZATIONAPPLIEDAMOUNT money = null,
  @APPLICATIONTYPE tinyint = null,
  @APPLICATIONID uniqueidentifier = null,
  @UPDATESOLICITORSOPTION tinyint = null
)
as
  set nocount on

  declare @ORIGINALAMOUNT money;
  declare @AMOUNTLEFT money;
  declare @MAXAMOUNT money;
  declare @COUNT integer;
  declare @INSTALLMENTID uniqueidentifier;
  declare @DESIGNATIONID uniqueidentifier;
  declare @INSTALLMENTAMOUNT money;
  declare @ORIGINALREVENUESPLITAMOUNT money;

  declare @PAYAMOUNT money;
  declare @BALANCE money;
  declare @SOURCEREVENUESPLITID uniqueidentifier;
  declare @INSTALLMENTSPLITID uniqueidentifier;
  declare @INSTALLMENTPAYMENTID uniqueidentifier;
  declare @PLEDGETYPECODE tinyint;
  declare @PLEDGEID uniqueidentifier;
  declare @APPLICATIONCODE tinyint;

  --Business units - AdiSa 6/14/10 - Store all existing splits business units in a table.

  declare @BUSINESSUNITS table (DESIGNATIONID uniqueidentifier, OVERRIDEBUSINESSUNITS bit, REASON uniqueidentifier, BUSINESSUNITCODEID uniqueidentifier, RATIO float)
  insert into @BUSINESSUNITS
  select
    REVENUESPLIT_EXT.DESIGNATIONID,
    REVENUESPLIT_EXT.OVERRIDEBUSINESSUNITS,
    REVENUESPLIT_EXT.REVENUESPLITBUSINESSUNITOVERRIDECODEID as REASON,
    REVENUESPLITBUSINESSUNIT.BUSINESSUNITCODEID,
    REVENUESPLITBUSINESSUNIT.AMOUNT/REVENUESPLIT.BASEAMOUNT as RATIO
  from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
    inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = REVENUESPLIT.ID
    inner join dbo.REVENUESPLITBUSINESSUNIT on REVENUESPLITBUSINESSUNIT.REVENUESPLITID = REVENUESPLIT.ID
  where REVENUESPLIT.ID = @ID and REVENUESPLIT_EXT.OVERRIDEBUSINESSUNITS = 1

  declare @PREVIOUSAPPLICATIONEXCHANGERATEID uniqueidentifier;
  declare @APPLICATIONCURRENCYID uniqueidentifier;
  declare @APPLICATIONEXCHANGERATEID uniqueidentifier;
  declare @APPLIEDAMOUNTCONVERTED money;
  declare @PAYMENTTRANSACTIONCURRENCYID uniqueidentifier;
  declare @PAYMENTBASECURRENCYID uniqueidentifier;
  declare @PAYMENTBASEEXCHANGERATEID uniqueidentifier;
  declare @PAYMENTORGANIZATIONEXCHANGERATEID uniqueidentifier;
  declare @REVENUEDATE datetime;
  declare @REVENUEID uniqueidentifier;
  declare @OVERPAYMENTAPPLICATIONTYPECODE tinyint = null;

  select
    @PREVIOUSAPPLICATIONEXCHANGERATEID = INSTALLMENTSPLITPAYMENT.APPLICATIONEXCHANGERATEID,
    @APPLICATIONCURRENCYID = INSTALLMENTSPLITPAYMENT.APPLICATIONCURRENCYID,
    @OVERPAYMENTAPPLICATIONTYPECODE = INSTALLMENTSPLITPAYMENT.OVERPAYMENTAPPLICATIONTYPECODE
  from
    dbo.INSTALLMENTSPLITPAYMENT
  where
    INSTALLMENTSPLITPAYMENT.PAYMENTID = @ID;

  -- get currency values from the payment

  select
    @REVENUEDATE = cast(REVENUE.DATE as datetime),
    @PAYMENTBASECURRENCYID = CS.BASECURRENCYID,
    @PAYMENTTRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
    @PAYMENTBASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID,
    @PAYMENTORGANIZATIONEXCHANGERATEID = REVENUE.ORGEXCHANGERATEID,
        @DESIGNATIONID = REVENUESPLIT_EXT.DESIGNATIONID,
        @REVENUEID = REVENUE.ID
  from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
    inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = REVENUESPLIT.ID
    inner join dbo.FINANCIALTRANSACTION REVENUE on REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
    inner join dbo.PDACCOUNTSYSTEM PD on PD.ID = REVENUE.PDACCOUNTSYSTEMID
    inner join dbo.CURRENCYSET CS on CS.ID = PD.CURRENCYSETID
  where REVENUESPLIT.ID = @ID;

  exec dbo.USP_REVENUE_GETUPDATEDAPPLICATIONEXCHANGERATE
    @PREVIOUSAPPLICATIONEXCHANGERATEID = @PREVIOUSAPPLICATIONEXCHANGERATEID,
    @PREVIOUSDATE = @PREVIOUSDATE,
    @APPLIEDAMOUNT = @APPLIEDAMOUNT,
    @DATE = @REVENUEDATE,
    @TRANSACTIONCURRENCYID = @PAYMENTTRANSACTIONCURRENCYID,
    @BASECURRENCYID = @PAYMENTBASECURRENCYID,
    @BASEEXCHANGERATEID = @PAYMENTBASEEXCHANGERATEID,
    @APPLICATIONCURRENCYID = @APPLICATIONCURRENCYID,
    @APPLICATIONEXCHANGERATEID = @APPLICATIONEXCHANGERATEID output,
    @APPLIEDAMOUNTCONVERTED = @APPLIEDAMOUNTCONVERTED output;

  -- Convert the applied amount into base and organization amounts if the caller does not pass them in

  if @BASEAPPLIEDAMOUNT is null or @ORGANIZATIONAPPLIEDAMOUNT is null
      exec dbo.USP_CURRENCY_GETCURRENCYVALUES 
        @APPLIEDAMOUNT
        @REVENUEDATE
        @PAYMENTBASECURRENCYID
        @PAYMENTBASEEXCHANGERATEID output
        @PAYMENTTRANSACTIONCURRENCYID output
        @BASEAPPLIEDAMOUNT output
        null
        @ORGANIZATIONAPPLIEDAMOUNT output
        @PAYMENTORGANIZATIONEXCHANGERATEID output
        0;

  set @ORIGINALAMOUNT = coalesce(
    (
      select
        sum(INSTALLMENTSPLITPAYMENT.AMOUNT)
      from
        dbo.INSTALLMENTSPLITPAYMENT
      where
        INSTALLMENTSPLITPAYMENT.PAYMENTID = @ID
    ), 0);

  select @ORIGINALREVENUESPLITAMOUNT = BASEAMOUNT from dbo.FINANCIALTRANSACTIONLINEITEM where ID = @ID;

  if @OVERPAYMENTAPPLICATIONTYPECODE is null
    set @OVERPAYMENTAPPLICATIONTYPECODE = 255;

  if not @OVERPAYMENTAPPLICATIONTYPECODE in (0,1,255)
    set @OVERPAYMENTAPPLICATIONTYPECODE = 1;

  if @OVERPAYMENTAPPLICATIONTYPECODE = 0
  begin

    declare @MINSEQUENCE int;
    declare @MAXSEQUENCE int;

    select @MINSEQUENCE = min(INSTALLMENT.SEQUENCE)
      ,@MAXSEQUENCE = MAX(INSTALLMENT.SEQUENCE)
    from dbo.INSTALLMENTSPLITPAYMENT
    inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLIT.ID = INSTALLMENTSPLITPAYMENT.INSTALLMENTSPLITID
    inner join dbo.INSTALLMENT on INSTALLMENT.ID = INSTALLMENTSPLIT.INSTALLMENTID
    where PAYMENTID = @ID;

    declare @PAYFIRSTSEQUENCE int;

    select @PAYFIRSTSEQUENCE = @MAXSEQUENCE + 1;

    declare PAYMENTCURSOR cursor local fast_forward
    for
    select [INSTALLMENTSPLITPAYMENT].ID
      ,[INSTALLMENTSPLITPAYMENT].AMOUNT
    from dbo.INSTALLMENTSPLITPAYMENT
    inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLIT.ID = INSTALLMENTSPLITPAYMENT.INSTALLMENTSPLITID
    inner join dbo.INSTALLMENT on INSTALLMENT.ID = INSTALLMENTSPLIT.INSTALLMENTID
    where PAYMENTID = @ID
    order by case
        when INSTALLMENT.SEQUENCE = @MINSEQUENCE
          then @PAYFIRSTSEQUENCE
        else INSTALLMENT.SEQUENCE
        end desc;
  end
  else
  begin
    declare PAYMENTCURSOR cursor local fast_forward for 
      select
        [INSTALLMENTSPLITPAYMENT].ID,
        [INSTALLMENTSPLITPAYMENT].AMOUNT
      from dbo.INSTALLMENTSPLITPAYMENT
      inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLIT.ID = INSTALLMENTSPLITPAYMENT.INSTALLMENTSPLITID
      inner join dbo.INSTALLMENT on INSTALLMENT.ID = INSTALLMENTSPLIT.INSTALLMENTID
      where PAYMENTID = @ID
      order by INSTALLMENT.SEQUENCE;
  end

  /* reduced payment (this is the easy one)*/
  if @APPLIEDAMOUNTCONVERTED < @ORIGINALAMOUNT
  begin

    set @AMOUNTLEFT = @APPLIEDAMOUNTCONVERTED;
    set @COUNT = 0;

    --Update Changed Revenue Items

    open PAYMENTCURSOR;
    fetch next from PAYMENTCURSOR into @INSTALLMENTID, @INSTALLMENTAMOUNT;

    while @@FETCH_STATUS = 0
    begin
      -- LeeCh 12/08/09 Bug#52214

      -- If @AMOUNTLEFT is less than $0, also need to delete the installment split payment

      -- Also, only update dbo.INSTALLMENTSPLITPAYMENT when @AMOUNTLEFT is greater than $0

      -- Comment #Bug 70779 fix since it becomes redundant


      if @AMOUNTLEFT <= 0 and @COUNT > 0
        exec dbo.USP_INSTALLMENTSPLITPAYMENT_DELETEBYID_WITHCHANGEAGENTID @INSTALLMENTID, @CHANGEAGENTID;

      if (@AMOUNTLEFT > 0 and @AMOUNTLEFT < @INSTALLMENTAMOUNT) or (@AMOUNTLEFT = 0 and @COUNT = 0)
        update dbo.INSTALLMENTSPLITPAYMENT
        set AMOUNT = @AMOUNTLEFT,
          APPLICATIONEXCHANGERATEID = @APPLICATIONEXCHANGERATEID,
          CHANGEDBYID = @CHANGEAGENTID
          DATECHANGED = @CHANGEDATE
        where ID = @INSTALLMENTID;

      set @AMOUNTLEFT = @AMOUNTLEFT - @INSTALLMENTAMOUNT;
      -- Bug 70779

      --if @AMOUNTLEFT < 0

      --    set @AMOUNTLEFT = 0;


      set @COUNT = @COUNT + 1;

      fetch next from PAYMENTCURSOR into @INSTALLMENTID, @INSTALLMENTAMOUNT;
    end

  --When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long

  close PAYMENTCURSOR;
  deallocate PAYMENTCURSOR;

  end

  /* increased payment (not so easy)*/
  if @APPLIEDAMOUNTCONVERTED > @ORIGINALAMOUNT
  begin

    set @AMOUNTLEFT = @APPLIEDAMOUNTCONVERTED - @ORIGINALAMOUNT;

    select 
      @PLEDGEID = PLEDGEID,
      @MAXAMOUNT = dbo.UFN_PLEDGE_GETDESIGNATIONBALANCE(PLEDGEID, @DESIGNATIONID)
    from dbo.INSTALLMENTSPLITPAYMENT
    where PAYMENTID = @ID;

    if @AMOUNTLEFT > @MAXAMOUNT
      raiserror('PLEDGEDESIGNATIONMAX_EXCEED',13,1)

  if @OVERPAYMENTAPPLICATIONTYPECODE is null
    set @OVERPAYMENTAPPLICATIONTYPECODE = 255;

  if not @OVERPAYMENTAPPLICATIONTYPECODE in (0,1,255)
    set @OVERPAYMENTAPPLICATIONTYPECODE = 1;

  --Overpayment option to pay pledge balance, so pay first installment as usual, then pay from last installment forward

  if @OVERPAYMENTAPPLICATIONTYPECODE = 0
  begin
    declare @PAYMENTMINSEQUENCE int;
    select @PAYMENTMINSEQUENCE= MIN(INSTALLMENT.SEQUENCE) from INSTALLMENTSPLITPAYMENT
      inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLITPAYMENT.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
      inner join dbo.INSTALLMENT on INSTALLMENTSPLIT.INSTALLMENTID = INSTALLMENT.ID
      where INSTALLMENTSPLITPAYMENT.PAYMENTID = @ID

    --Find the minimum valid sequence number to be paid

    select @MINSEQUENCE = min(INSTALLMENT.SEQUENCE)
    from dbo.INSTALLMENTSPLIT
    inner join dbo.INSTALLMENT on INSTALLMENTSPLIT.INSTALLMENTID = INSTALLMENT.ID
    where (dbo.UFN_INSTALLMENT_GETINSTALLMENTSPLITBALANCE(INSTALLMENTSPLIT.ID) > 0)
      and INSTALLMENT.REVENUEID = @PLEDGEID;

    --Find a sequence number above valid installments for this pledge

    select @PAYFIRSTSEQUENCE = (MAX(SEQUENCE) + 1)
    from [dbo].[UFN_PLEDGE_GETINSTALLMENTS](@PLEDGEID)

    declare INSTALLMENTCURSOR cursor local fast_forward
    for
    select REVENUESPLIT.ID
      ,INSTALLMENTSPLIT.ID
      ,case when @DESIGNATIONID is NULL then dbo.UFN_INSTALLMENT_GETINSTALLMENTSPLITBALANCE(INSTALLMENTSPLIT.ID)
       else dbo.UFN_INSTALLMENT_GETINSTALLMENTSPLITBALANCEBYDESIGNATION(INSTALLMENTSPLIT.ID, @DESIGNATIONID) end
      ,REVENUESPLIT_EXT.TYPECODE
      ,case FT.TYPECODE
        when 3
          then 7
        when 4
          then 6
        when 15
          then 19
        else 2
        end
    from dbo.INSTALLMENTSPLIT
    inner join dbo.INSTALLMENT on INSTALLMENTSPLIT.INSTALLMENTID = INSTALLMENT.ID
    inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESPLIT.FINANCIALTRANSACTIONID = INSTALLMENTSPLIT.PLEDGEID
    inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = REVENUESPLIT.ID
    inner join dbo.FINANCIALTRANSACTION FT on FT.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
    where dbo.UFN_INSTALLMENT_GETINSTALLMENTSPLITBALANCE(INSTALLMENTSPLIT.ID) > 0
      and INSTALLMENT.REVENUEID = @PLEDGEID
      and (INSTALLMENTSPLIT.DESIGNATIONID = @DESIGNATIONID or @DESIGNATIONID is null)
      and (REVENUESPLIT_EXT.DESIGNATIONID = @DESIGNATIONID or @DESIGNATIONID is null)
      and FT.TYPECODE in (0,1,2,3,4,5,6,7,8,9,15)
      and REVENUESPLIT.DELETEDON is null
      and REVENUESPLIT.TYPECODE != 1
    order by case 
        --mark the first installment to pay with the highest sequence

        when INSTALLMENT.SEQUENCE = @MINSEQUENCE and @PAYMENTMINSEQUENCE = @MINSEQUENCE
          then @PAYFIRSTSEQUENCE
        else INSTALLMENT.SEQUENCE
        end desc;
  end
   --No overpayment option or overpay to next installments, so pay installments in order

  else
  begin
    declare INSTALLMENTCURSOR cursor local fast_forward for 
      select REVENUESPLIT.ID, INSTALLMENTSPLIT.ID, 
        case when @DESIGNATIONID is NULL then dbo.UFN_INSTALLMENT_GETINSTALLMENTSPLITBALANCE(INSTALLMENTSPLIT.ID)
        else dbo.UFN_INSTALLMENT_GETINSTALLMENTSPLITBALANCEBYDESIGNATION(INSTALLMENTSPLIT.ID, @DESIGNATIONID) end
        ,REVENUESPLIT_EXT.TYPECODE, case FT.TYPECODE when 3 then 7 when 4 then 6 when 15 then 19 else 2 end
      from dbo.INSTALLMENTSPLIT
        inner join dbo.INSTALLMENT
          on INSTALLMENTSPLIT.INSTALLMENTID = INSTALLMENT.ID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
          on REVENUESPLIT.FINANCIALTRANSACTIONID = INSTALLMENTSPLIT.PLEDGEID 
                inner join dbo.REVENUESPLIT_EXT 
                    on REVENUESPLIT_EXT.ID = REVENUESPLIT.ID
                inner join dbo.FINANCIALTRANSACTION FT
                    on FT.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
      where dbo.UFN_INSTALLMENT_GETINSTALLMENTSPLITBALANCE(INSTALLMENTSPLIT.ID) > 0
        and INSTALLMENT.REVENUEID = @PLEDGEID
        and (INSTALLMENTSPLIT.DESIGNATIONID = @DESIGNATIONID or @DESIGNATIONID is null)
        and (REVENUESPLIT_EXT.DESIGNATIONID = @DESIGNATIONID or @DESIGNATIONID is null)
                and FT.TYPECODE in (0,1,2,3,4,5,6,7,8,9,15) and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 1
      order by INSTALLMENT.SEQUENCE;                    

  end
    open INSTALLMENTCURSOR;
    fetch next from INSTALLMENTCURSOR into @SOURCEREVENUESPLITID, @INSTALLMENTSPLITID, @BALANCE, @PLEDGETYPECODE, @APPLICATIONCODE;

    while @@FETCH_STATUS = 0
    begin

      if @AMOUNTLEFT <= 0
        break;

      /* determine payment amount */
      if @AMOUNTLEFT <= @BALANCE
        set @PAYAMOUNT = @AMOUNTLEFT;
      else
        set @PAYAMOUNT = @BALANCE;

      set @AMOUNTLEFT = @AMOUNTLEFT - @PAYAMOUNT;

      /* see if this payment is already on this installment and just update the balance */
      -- LeeCh 12/09/2009 Bug #52215

      -- Need to set @INSTALLMENTPAYMENTID to null each time or the next if statement won't work correctly

      set @INSTALLMENTPAYMENTID = null;

      select @INSTALLMENTPAYMENTID = ID
      from INSTALLMENTSPLITPAYMENT
      where INSTALLMENTSPLITID = @INSTALLMENTSPLITID and PAYMENTID = @ID

      if @INSTALLMENTPAYMENTID is null
      begin
        insert into dbo.INSTALLMENTSPLITPAYMENT(ID, PAYMENTID, PLEDGEID, INSTALLMENTSPLITID, AMOUNT, OVERPAYMENTAPPLICATIONTYPECODE, APPLICATIONCURRENCYID, APPLICATIONEXCHANGERATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
          values(newid(), @ID, @PLEDGEID, @INSTALLMENTSPLITID, @PAYAMOUNT, @OVERPAYMENTAPPLICATIONTYPECODE, @APPLICATIONCURRENCYID, @APPLICATIONEXCHANGERATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
      end
      else
        update dbo.INSTALLMENTSPLITPAYMENT
        set AMOUNT = AMOUNT + @PAYAMOUNT,
          APPLICATIONCURRENCYID = @APPLICATIONCURRENCYID,
          APPLICATIONEXCHANGERATEID = @APPLICATIONEXCHANGERATEID,
          CHANGEDBYID = @CHANGEAGENTID,
          DATECHANGED = @CHANGEDATE
        where ID = @INSTALLMENTPAYMENTID;

      fetch next from INSTALLMENTCURSOR into @SOURCEREVENUESPLITID, @INSTALLMENTSPLITID, @BALANCE, @PLEDGETYPECODE, @APPLICATIONCODE;
    end
    --When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long

    close INSTALLMENTCURSOR
    deallocate INSTALLMENTCURSOR
  end

    if @SOURCEREVENUESPLITID is null
        select top 1 @SOURCEREVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
        from dbo.INSTALLMENTSPLITPAYMENT inner join dbo.FINANCIALTRANSACTIONLINEITEM on INSTALLMENTSPLITPAYMENT.PLEDGEID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID 
        inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID 
        where INSTALLMENTSPLITPAYMENT.PAYMENTID = @ID
        and (REVENUESPLIT_EXT.DESIGNATIONID = @DESIGNATIONID or @DESIGNATIONID is null)
        and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
        and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1

  -- For any installment split payments that were not already touched, update the application exchange rate

  update dbo.INSTALLMENTSPLITPAYMENT
  set
    APPLICATIONEXCHANGERATEID = @APPLICATIONEXCHANGERATEID,
    CHANGEDBYID = @CHANGEAGENTID,
    DATECHANGED = @CHANGEDATE
  where
    INSTALLMENTSPLITPAYMENT.PAYMENTID = @ID
    and INSTALLMENTSPLITPAYMENT.APPLICATIONEXCHANGERATEID <> @APPLICATIONEXCHANGERATEID;

  update dbo.FINANCIALTRANSACTIONLINEITEM set
        TRANSACTIONAMOUNT = @APPLIEDAMOUNT
        ,BASEAMOUNT = @BASEAPPLIEDAMOUNT
        ,ORGAMOUNT = @ORGANIZATIONAPPLIEDAMOUNT
        ,CHANGEDBYID = @CHANGEAGENTID
        ,DATECHANGED = @CHANGEDATE
        ,SOURCELINEITEMID = @SOURCEREVENUESPLITID
    where ID = @ID
--Sourcelineitem will always need updated    

--        and (

--            TRANSACTIONAMOUNT != @APPLIEDAMOUNT or

--            BASEAMOUNT != @BASEAPPLIEDAMOUNT or

--            ORGAMOUNT != @ORGANIZATIONAPPLIEDAMOUNT);


  /* Update recognitions based on user selection */
  exec dbo.USP_REVENUESPLIT_UPDATERECOGNITION @ID, @ORIGINALREVENUESPLITAMOUNT, @UPDATERECOGNITIONOPTION, @CHANGEAGENTID, @CHANGEDATE, @APPLICATIONTYPE, @APPLICATIONID;

  exec dbo.USP_REVENUESPLIT_UPDATESOLICITORS
    @REVENUESPLITID = @ID,
    @CHANGEAGENTID = @CHANGEAGENTID,
    @CHANGEDATE = @CHANGEDATE,
    @UPDATEOPTION = @UPDATESOLICITORSOPTION;

  --Business units - AdiSa 6/12/10 - Re-adjust business unit ratio's with new revenuesplit amount for gift.       

  update dbo.REVENUESPLITBUSINESSUNIT set
    REVENUESPLITBUSINESSUNIT.AMOUNT = REVENUESPLIT.BASEAMOUNT * BU.RATIO
  from dbo.REVENUESPLITBUSINESSUNIT
    inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESPLIT.ID = REVENUESPLITBUSINESSUNIT.REVENUESPLITID
        inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = REVENUESPLIT.ID
    inner join @BUSINESSUNITS BU on BU.DESIGNATIONID = REVENUESPLIT_EXT.DESIGNATIONID
  where REVENUESPLIT.ID = @ID and REVENUESPLITBUSINESSUNIT.BUSINESSUNITCODEID = BU.BUSINESSUNITCODEID
        and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 1;