USP_RECURRINGGIFT_UPDATEPAYMENT

Updates a payment to a recurring gift.

Parameters

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

Definition

Copy


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

  -- Get multicurrency values from the revenue.

  declare @TRANSACTIONCURRENCYID uniqueidentifier;
  declare @BASECURRENCYID uniqueidentifier;
  declare @BASEEXCHANGERATEID uniqueidentifier;
  declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
  declare @DATE datetime;
    declare @REVENUEID uniqueidentifier;

    select
    @DATE = cast(REVENUE.DATE as datetime),
    @BASECURRENCYID = CS.BASECURRENCYID,
    @TRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
    @BASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID,
    @ORGANIZATIONEXCHANGERATEID = REVENUE.ORGEXCHANGERATEID,
        @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;

  -- Convert the applied amount into base and organization amounts.

  if @BASEAPPLIEDAMOUNT is null or @ORGANIZATIONAPPLIEDAMOUNT is null
    exec dbo.USP_CURRENCY_GETCURRENCYVALUES
      @APPLIEDAMOUNT,
      null,
      @BASECURRENCYID,
      @BASEEXCHANGERATEID,
      @TRANSACTIONCURRENCYID,
      @BASEAPPLIEDAMOUNT output,
      null,
      @ORGANIZATIONAPPLIEDAMOUNT output,
      @ORGANIZATIONEXCHANGERATEID,
      0;

  --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 @ORIGINALREVENUESPLITAMOUNT money;
  select @ORIGINALREVENUESPLITAMOUNT = BASEAMOUNT from dbo.FINANCIALTRANSACTIONLINEITEM where ID = @ID;

    update dbo.FINANCIALTRANSACTIONLINEITEM set
        TRANSACTIONAMOUNT = @APPLIEDAMOUNT
        ,BASEAMOUNT = @BASEAPPLIEDAMOUNT
        ,ORGAMOUNT = @ORGANIZATIONAPPLIEDAMOUNT
        ,CHANGEDBYID = @CHANGEAGENTID
        ,DATECHANGED = @CHANGEDATE
    where ID = @ID
        and (
            TRANSACTIONAMOUNT != @APPLIEDAMOUNT or
            BASEAMOUNT != @BASEAPPLIEDAMOUNT or
            ORGAMOUNT != @ORGANIZATIONAPPLIEDAMOUNT);

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

  --Get the application exchange rate ID from the installment split payment, which has already been updated

  with RECURRINGGIFTAPPLICATION
  as
  (
    select
      RECURRINGGIFTACTIVITY.ID,
      case
        when RECURRINGGIFTACTIVITY.APPLICATIONCURRENCYID = @TRANSACTIONCURRENCYID
          then null
        else 
          (
            select top 1
              RECURRINGGIFTINSTALLMENTPAYMENT.APPLICATIONEXCHANGERATEID
            from
              dbo.RECURRINGGIFTINSTALLMENT
              inner join dbo.RECURRINGGIFTINSTALLMENTPAYMENT on RECURRINGGIFTINSTALLMENT.ID = RECURRINGGIFTINSTALLMENTPAYMENT.RECURRINGGIFTINSTALLMENTID
              inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on RECURRINGGIFTINSTALLMENTPAYMENT.PAYMENTID = REVENUESPLIT.FINANCIALTRANSACTIONID
                            inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = REVENUESPLIT.ID
            where
              REVENUESPLIT.ID = @ID
              and RECURRINGGIFTINSTALLMENT.REVENUEID = RECURRINGGIFTACTIVITY.SOURCEREVENUEID
                            and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 1
            order by
              RECURRINGGIFTINSTALLMENT.DATE desc
          )
      end [APPLICATIONEXCHANGERATEID],
      case
        when RECURRINGGIFTACTIVITY.APPLICATIONCURRENCYID = @TRANSACTIONCURRENCYID
          then 1
        else
          0
      end [TRANSACTIONANDAPPLICAITONCURRENCIESARESAME]
    from
      dbo.RECURRINGGIFTACTIVITY
    where
      RECURRINGGIFTACTIVITY.PAYMENTREVENUEID = @ID
  )
  update dbo.RECURRINGGIFTACTIVITY
  set
    AMOUNT =
      case
        when RECURRINGGIFTAPPLICATION.TRANSACTIONANDAPPLICAITONCURRENCIESARESAME = 1
          then @APPLIEDAMOUNT
        else
          dbo.UFN_CURRENCY_CONVERT(@APPLIEDAMOUNT, RECURRINGGIFTAPPLICATION.APPLICATIONEXCHANGERATEID)
      end,
    APPLICATIONEXCHANGERATEID = RECURRINGGIFTAPPLICATION.APPLICATIONEXCHANGERATEID,
    CHANGEDBYID = @CHANGEAGENTID
    DATECHANGED = @CHANGEDATE
  from
    dbo.RECURRINGGIFTACTIVITY
    inner join RECURRINGGIFTAPPLICATION on RECURRINGGIFTACTIVITY.ID = RECURRINGGIFTAPPLICATION.ID
  where RECURRINGGIFTACTIVITY.PAYMENTREVENUEID = @ID
  and 
  (
    RECURRINGGIFTACTIVITY.AMOUNT <> 
      case
        when RECURRINGGIFTAPPLICATION.TRANSACTIONANDAPPLICAITONCURRENCIESARESAME = 1
          then @APPLIEDAMOUNT
        else
          dbo.UFN_CURRENCY_CONVERT(@APPLIEDAMOUNT, RECURRINGGIFTAPPLICATION.APPLICATIONEXCHANGERATEID)
      end
    or
    RECURRINGGIFTACTIVITY.APPLICATIONEXCHANGERATEID <> RECURRINGGIFTAPPLICATION.APPLICATIONEXCHANGERATEID
  );

  --Update recognition based on user selection

  exec dbo.USP_REVENUESPLIT_UPDATERECOGNITION @ID, @ORIGINALREVENUESPLITAMOUNT, @UPDATERECOGNITIONOPTION, @CHANGEAGENTID, @CHANGEDATE;

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

  declare @REVENUESPLITBUSINESSUNITID uniqueidentifier;
  declare BUSINESSUNITS cursor local fast_forward for
  select 
    REVENUESPLITBUSINESSUNIT.ID
  from dbo.REVENUESPLITBUSINESSUNIT
  inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESPLIT.ID = REVENUESPLITBUSINESSUNIT.REVENUESPLITID
    inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
  where REVENUESPLIT.FINANCIALTRANSACTIONID = @ID
        and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 1
  open BUSINESSUNITS;

  begin try
    fetch next from BUSINESSUNITS into @REVENUESPLITBUSINESSUNITID
    while (@@FETCH_STATUS = 0)
    begin
      exec dbo.USP_REVENUESPLITBUSINESSUNIT_DELETEBYID_WITHCHANGEAGENTID @REVENUESPLITBUSINESSUNITID
    fetch next from BUSINESSUNITS into @REVENUESPLITBUSINESSUNITID
    end
    close BUSINESSUNITS;
    deallocate BUSINESSUNITS;
  end try
  begin catch
    close BUSINESSUNITS;
    deallocate BUSINESSUNITS;
    exec dbo.USP_RAISE_ERROR;
    return 1;
  end catch

  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.ID = REVENUESPLIT_EXT.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;