USP_REVENUE_UPDATEPAYMENTGIFTFEE

This is a stored procedure to update the gift fee on a payment when you edit the payment amount.

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@PAYMENTMETHODCODE tinyint IN

Definition

Copy


CREATE procedure dbo.USP_REVENUE_UPDATEPAYMENTGIFTFEE(
  @REVENUEID uniqueidentifier,
  @CONSTITUENTID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null,
  @PAYMENTMETHODCODE tinyint = null
)
as
begin try
    set nocount on;

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

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

  declare @DEFAULTREASONCODEID uniqueidentifier = null
  select @DEFAULTREASONCODEID = ID from dbo.GIFTFEEOVERRIDEREASONCODE where ISPAYMENTEDITDEFAULT=1 and ACTIVE=1

  if @DEFAULTREASONCODEID is not null
  begin

    --If there should be no gift fees, then remove existing gift fees

    if (dbo.UFN_GIFTFEE_ENABLED() = 0 or dbo.UFN_GIFTFEE_CONSTITUENTEXCLUDED(@CONSTITUENTID) = 1 or dbo.UFN_GIFTFEE_PAYMENTMETHODEXCLUDED_2(@PAYMENTMETHODCODE) = 1)
    begin
      update REVENUESPLITGIFTFEE set
        FEE=0,
        TRANSACTIONAMOUNT=0,
        ORGANIZATIONAMOUNT=0,
        WAIVED=1,
        CHANGEDBYID=@CHANGEAGENTID,
        DATECHANGED=@CURRENTDATE
      from
        dbo.REVENUESPLITGIFTFEE
        inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLITGIFTFEE.ID
        inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
      where
        FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @REVENUEID
        and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
        and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1
    end
    else
    begin
      declare @FEES table (
        ID uniqueidentifier,
        FEE money,
        WAIVED bit,
        SPLITRECEIPTAMOUNT money,
        BASECURRENCYID uniqueidentifier,
        ORGANIZATIONAMOUNT money,
        ORGANIZATIONEXCHANGERATEID uniqueidentifier,
        TRANSACTIONAMOUNT money,
        TRANSACTIONCURRENCYID uniqueidentifier,
        BASEEXCHANGERATEID uniqueidentifier
      )

      insert @FEES 
        (ID, FEE, WAIVED, SPLITRECEIPTAMOUNT, BASECURRENCYID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID)
      select 
        ID, FEE, WAIVED, SPLITRECEIPTAMOUNT, BASECURRENCYID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID
      from dbo.UFN_REVENUE_GENERATEDEFAULTGIFTFEES(@REVENUEID, @CONSTITUENTID)

      --Rows are not allowed to be removed so update and insert are all we need

        update dbo.REVENUESPLITGIFTFEE
        set REVENUESPLITGIFTFEE.FEE = FEES.FEE,
            REVENUESPLITGIFTFEE.TRANSACTIONAMOUNT = FEES.TRANSACTIONAMOUNT,
            REVENUESPLITGIFTFEE.ORGANIZATIONAMOUNT = FEES.ORGANIZATIONAMOUNT,
            REVENUESPLITGIFTFEE.WAIVED = FEES.WAIVED,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
        from dbo.REVENUESPLITGIFTFEE
        inner join @FEES FEES
            on FEES.ID = REVENUESPLITGIFTFEE.ID
        where FEES.FEE <> REVENUESPLITGIFTFEE.FEE
            or FEES.WAIVED <> REVENUESPLITGIFTFEE.WAIVED

        insert into dbo.REVENUESPLITGIFTFEE(ID, FEE, WAIVED, BASECURRENCYID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, CHANGEDBYID, ADDEDBYID, DATECHANGED,  DATEADDED)
        select ID, FEE, WAIVED, BASECURRENCYID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
        from @FEES FEES
        where not exists(select top 1 ID from REVENUESPLITGIFTFEE where REVENUESPLITGIFTFEE.ID = FEES.ID)
        and (FEE > 0 or WAIVED = 1)    

      --remove existing gift fees whose payment method is now excluded

      update dbo.REVENUESPLITGIFTFEE set
        FEE=0,
        TRANSACTIONAMOUNT=0,
        ORGANIZATIONAMOUNT=0,
        WAIVED=1,
        CHANGEDBYID=@CHANGEAGENTID,
        DATECHANGED=@CURRENTDATE
      from dbo.REVENUESPLITGIFTFEE
      inner join dbo.REVENUESPLIT on REVENUESPLITGIFTFEE.ID = REVENUESPLIT.ID
      left join @FEES FEES on FEES.ID = REVENUESPLITGIFTFEE.ID
      where FEES.ID is null and REVENUESPLIT.REVENUEID = @REVENUEID
    end

    update PAYMENTGIFTFEEOVERRIDE set
      REASONCODEID = @DEFAULTREASONCODEID,
      CHANGEDBYID = @CHANGEAGENTID,
      DATECHANGED = @CURRENTDATE
    from
      dbo.PAYMENTGIFTFEEOVERRIDE
    where
      ID = @REVENUEID;

    --if new then insert data

    if @@ROWCOUNT = 0
      insert into dbo.PAYMENTGIFTFEEOVERRIDE(ID, REASONCODEID, ADDEDBYID, CHANGEDBYID, DATECHANGED, DATEADDED)
      values(@REVENUEID, @DEFAULTREASONCODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
  end
end try

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