USP_RECURRINGGIFT_UNDOINSTALLMENTCHANGESONDELETEPAYMENT

Parameters

Parameter Parameter Type Mode Description
@PAYMENTID uniqueidentifier IN
@RECURRINGGIFTID uniqueidentifier IN
@RECURRINGGIFTINSTALLMENTID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN

Definition

Copy


CREATE procedure dbo.USP_RECURRINGGIFT_UNDOINSTALLMENTCHANGESONDELETEPAYMENT (
  @PAYMENTID uniqueidentifier,
  @RECURRINGGIFTID uniqueidentifier = null,  -- null if deleting the entire payment (which could apply to multiple RGs), specified if only deleting a specific application

  @RECURRINGGIFTINSTALLMENTID uniqueidentifier = null,  -- null if deleting entire applied payment amount, specified to remove payment for a specific installment

  @CHANGEAGENTID uniqueidentifier,
  @CURRENTDATE datetime
)
as
begin
  -- if the installment amount was adjusted, revert it

  update I
  set AMOUNT = CURRENCYVALUES.BASEAMOUNT,
      ORGANIZATIONAMOUNT = CURRENCYVALUES.ORGANIZATIONAMOUNT,
      TRANSACTIONAMOUNT = E.OLDAMOUNT,
      -- revert the installment status to Expected/Past due

      STATUSCODE = case when I.PASTDUEDATE is not null then 1 else 0 end,
      CHANGEDBYID = @CHANGEAGENTID,
      DATECHANGED = @CURRENTDATE
  from dbo.RECURRINGGIFTINSTALLMENTEVENT E
  inner join dbo.RECURRINGGIFTINSTALLMENT I on I.ID = E.RECURRINGGIFTINSTALLMENTID
  outer apply dbo.UFN_CURRENCY_GETCURRENCYVALUES_2
    (
      E.OLDAMOUNT,
      null,
      I.BASECURRENCYID,
      I.BASEEXCHANGERATEID,
      I.TRANSACTIONCURRENCYID,
      null,
      null,
      null,
      I.ORGANIZATIONEXCHANGERATEID,
      0
    ) as CURRENCYVALUES
  where E.PAYMENTID = @PAYMENTID
  and I.REVENUEID = isnull(@RECURRINGGIFTID,I.REVENUEID)
  and I.ID = isnull(@RECURRINGGIFTINSTALLMENTID,I.ID);

  -- delete the installment event associated with the amount adjustment

  if @@ROWCOUNT > 0
    delete E
    from dbo.RECURRINGGIFTINSTALLMENTEVENT E
    inner join dbo.RECURRINGGIFTINSTALLMENT I on I.ID = E.RECURRINGGIFTINSTALLMENTID
    where E.PAYMENTID = @PAYMENTID
    and I.REVENUEID = isnull(@RECURRINGGIFTID,I.REVENUEID)
    and I.ID = isnull(@RECURRINGGIFTINSTALLMENTID,I.ID);

  -- adjust installments that were paid before the payment handling features were added

  declare @INSTALLMENTMODECODE tinyint,
          @UPGRADEDATE datetime;

  select @INSTALLMENTMODECODE = INSTALLMENTMODECODE,
         @UPGRADEDATE = UPGRADEDATE
  from dbo.UFN_RECURRINGGIFTSETTING_GETCURRENT();

  if @INSTALLMENTMODECODE = 0
    update RGI
    set AMOUNT = FINANCIALTRANSACTION.BASEAMOUNT,
        ORGANIZATIONAMOUNT = FINANCIALTRANSACTION.ORGAMOUNT,
        TRANSACTIONAMOUNT = FINANCIALTRANSACTION.TRANSACTIONAMOUNT,
        CHANGEDBYID = @CHANGEAGENTID,
        DATECHANGED = @CURRENTDATE
    from dbo.RECURRINGGIFTINSTALLMENT RGI
    inner join dbo.RECURRINGGIFTINSTALLMENTPAYMENT RGIP on RGIP.RECURRINGGIFTINSTALLMENTID = RGI.ID
    cross apply (select min(I.DATEADDED) PAYMENTDATEADDED
                 from dbo.FINANCIALTRANSACTIONLINEITEM I
                 inner join dbo.RECURRINGGIFTACTIVITY A on A.PAYMENTREVENUEID = I.ID
                 where I.FINANCIALTRANSACTIONID = @PAYMENTID
                 and A.SOURCEREVENUEID = RGI.REVENUEID) PDA
    inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = RGI.REVENUEID
    where RGIP.PAYMENTID = @PAYMENTID
    and FINANCIALTRANSACTION.DELETEDON is null
    and PDA.PAYMENTDATEADDED < @UPGRADEDATE;

  -- if the remaining balance of the installment was written off per payment handling rules, delete the write-off

  delete W
  from dbo.RECURRINGGIFTWRITEOFF W
  where W.PAYMENTID = @PAYMENTID
  and W.REVENUEID = isnull(@RECURRINGGIFTID,REVENUEID)
  and (@RECURRINGGIFTINSTALLMENTID is null or
       exists(select 'x'
              from dbo.RECURRINGGIFTINSTALLMENTWRITEOFF IW
              where IW.WRITEOFFID = W.ID
              and IW.RECURRINGGIFTINSTALLMENTID = @RECURRINGGIFTINSTALLMENTID));
end