USP_R68_SAVEGIFTAIDGLDISTRIBUTION_SINGLEREFUND

Parameters

Parameter Parameter Type Mode Description
@PDACCOUNTSYSTEMID uniqueidentifier IN
@REVENUESPLITID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@LOWEREDID varchar(36) IN
@ID uniqueidentifier IN
@REFUNDID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_R68_SAVEGIFTAIDGLDISTRIBUTION_SINGLEREFUND
(
    @PDACCOUNTSYSTEMID uniqueidentifier,
    @REVENUESPLITID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier,
    @LOWEREDID varchar(36),
  @ID uniqueidentifier,
  @REFUNDID uniqueidentifier = null
)
as 
set nocount on;
    begin try
        begin tran
            declare @SQL nvarchar(4000),
                        @CHANGEDATE datetime,
              @RUNGIFTAIDSPONSORSHIPSONLY bit,
              @CHARITYCLAIMREFERENCENUMBER nvarchar(40),
                @TAXCLAIMNUMBER nvarchar(20);

            select    @CHANGEDATE = getdate()

      -- Retrieve the Charity claim reference number from the archived parameters table

      --    As if user changes this value the process must be restarted to retrieve updated data

      --    If they commit the latest history, data will have been produced using archived Charity claim reference number

      select 
          @CHARITYCLAIMREFERENCENUMBER = REFERENCENUMBER,
          @RUNGIFTAIDSPONSORSHIPSONLY = RUNGIFTAIDSPONSORSHIPSONLY,
        @TAXCLAIMNUMBER = TAXCLAIMNUMBER
      from dbo.R68ARCHIVEDPARAMETERS
      where ID = @ID;

      declare @NEWLINE char(2) = char(13) + char(10);

      -- create/update refunds

      set @SQL = 'merge dbo.REVENUESPLITGIFTAIDREFUND as refunds' + @NEWLINE;

      -- Use REFUNDID when it was provided, otherwise use SPLITID

      if @REFUNDID is null
      begin
        set @SQL = @SQL + 'using (select * from dbo.R68REFUNDDETAILS_'+ @LOWEREDID + ' WHERE REVENUESPLITID = @SPLITID) as newRefunds' + @NEWLINE;
      end
      else
      begin
        set @SQL = @SQL + 'using (select * from dbo.R68REFUNDDETAILS_'+ @LOWEREDID + ' WHERE ID = @REFUNDID) as newRefunds' + @NEWLINE;
      end

            set @SQL = @SQL +
        'on refunds.ID = newRefunds.ID        
                        when matched then update
                            set refunds.REFUNDTAXCLAIMNUMBER = @REFUNDTAXCLAIMNUMBER,    
                                refunds.PENDINGR68STATUSID = null,
                                refunds.CHANGEDBYID = @CHANGEAGENTIDIN,
                                refunds.DATECHANGED = @CHANGEDATEIN                                            
                    when not matched by target then 
                                insert (ID, REVENUESPLITID, CONSTITUENTID, ORIGINALTAXCLAIMNUMBER, ORIGINALCHARITYCLAIMREFERENCENUMBER, ORIGINALGIFTDATE, ORIGINALGIFTAMOUNT, ORIGINALBASETAXCLAIMAMOUNT, ORIGINALTRANSITIONALTAXCLAIMAMOUNT, INCLUDETRANSITIONALAMOUNTCODE, REFUNDTAXCLAIMNUMBER, DATEREFUNDED, REFUNDSOURCECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, ORIGINALCLAIMEDASSPONSORSHIP, ORIGINALBASECURRENCYID, ORIGINALTRANSACTIONGIFTAMOUNT, ORIGINALTRANSACTIONBASETAXCLAIMAMOUNT, ORIGINALTRANSACTIONTRANSITIONALTAXCLAIMAMOUNT, ORIGINALTRANSACTIONCURRENCYID, ORIGINALORGANIZATIONGIFTAMOUNT, ORIGINALORGANIZATIONBASETAXCLAIMAMOUNT, ORIGINALORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT, ORIGINALBASEEXCHANGERATEID, ORIGINALORGANIZATIONEXCHANGERATEID)
                                values (newRefunds.ID, newRefunds.REVENUESPLITID, newRefunds.CONSTITUENTID, newRefunds.ORIGINALTAXCLAIMNUMBER, newRefunds.ORIGINALCHARITYCLAIMREFERENCENUMBER, newRefunds.ORIGINALGIFTDATE, newRefunds.BASEGIFTAMOUNT, newRefunds.BASEBASETAXCLAIMAMOUNT, newRefunds.BASETRANSITIONALTAXCLAIMAMOUNT, newRefunds.INCLUDETRANSITIONALAMOUNTCODE, @REFUNDTAXCLAIMNUMBER, @CHANGEDATEIN, newRefunds.REFUNDSOURCECODE, @CHANGEAGENTIDIN, @CHANGEAGENTIDIN, @CHANGEDATEIN, @CHANGEDATEIN, coalesce(newRefunds.ORIGINALCLAIMEDASSPONSORSHIP, 0), newRefunds.BASECURRENCYID, newRefunds.TRANSACTIONGIFTAMOUNT, newRefunds.TRANSACTIONBASETAXCLAIMAMOUNT, newRefunds.TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT, newRefunds.TRANSACTIONCURRENCYID, newRefunds.ORGANIZATIONGIFTAMOUNT, newRefunds.ORGANIZATIONBASETAXCLAIMAMOUNT, newRefunds.ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT, newRefunds.BASEEXCHANGERATEID, newRefunds.ORGANIZATIONEXCHANGERATEID);'

      -- Use REFUNDID when it was provided, otherwise use SPLITID

      if @REFUNDID is null
      begin
        exec sp_executesql @SQL, N'@REFUNDTAXCLAIMNUMBER nvarchar(10), @CHANGEAGENTIDIN uniqueidentifier, @CHANGEDATEIN datetime, @SPLITID uniqueidentifier', @REFUNDTAXCLAIMNUMBER = @TAXCLAIMNUMBER, @CHANGEAGENTIDIN = @CHANGEAGENTID, @CHANGEDATEIN = @CHANGEDATE, @SPLITID = @REVENUESPLITID;
      end
      else
      begin
        exec sp_executesql @SQL, N'@REFUNDTAXCLAIMNUMBER nvarchar(10), @CHANGEAGENTIDIN uniqueidentifier, @CHANGEDATEIN datetime, @REFUNDID uniqueidentifier', @REFUNDTAXCLAIMNUMBER = @TAXCLAIMNUMBER, @CHANGEAGENTIDIN = @CHANGEAGENTID, @CHANGEDATEIN = @CHANGEDATE, @REFUNDID = @REFUNDID;
      end

            set @SQL =
                        'update rsga set
                            TAXCLAIMNUMBER = '''',
                            CHARITYCLAIMREFERENCENUMBER = '''',
                            INCLUDETRANSITIONALAMOUNTCODE = 0,
                            PENDINGR68STATUSID = null,                
                            CHANGEDBYID = @CHANGEAGENTIDIN,
                            DATECHANGED = @CHANGEDATEIN,
                            CLAIMEDASSPONSORSHIP = case when @RUNGIFTAIDSPONSORSHIPSONLYIN = 1 then 0 else CLAIMEDASSPONSORSHIP end
                            from dbo.REVENUESPLITGIFTAID rsga
                            inner join dbo.R68REFUNDDETAILS_' + @LOWEREDID + ' refunds on rsga.ID = refunds.REVENUESPLITID'
                         + ' where rsga.ID = @REVENUESPLITID'

                    exec sp_executesql @SQL, N'@CHANGEAGENTIDIN uniqueidentifier, @CHANGEDATEIN datetime, @RUNGIFTAIDSPONSORSHIPSONLYIN bit, @REVENUESPLITID uniqueidentifier', @CHANGEAGENTIDIN = @CHANGEAGENTID, @CHANGEDATEIN = @CHANGEDATE, @RUNGIFTAIDSPONSORSHIPSONLYIN = @RUNGIFTAIDSPONSORSHIPSONLY, @REVENUESPLITID  = @REVENUESPLITID;

            if exists(
                select
                    1
                from
                    dbo.FINANCIALTRANSACTIONLINEITEM GA
                    inner join dbo.FINANCIALTRANSACTIONLINEITEM SOURCE on SOURCE.ID = GA.SOURCELINEITEMID
                    left join dbo.FINANCIALTRANSACTIONLINEITEM NEWSOURCE on NEWSOURCE.ID = SOURCE.REVERSEDLINEITEMID
                where
                    @REVENUESPLITID = isnull(NEWSOURCE.ID, SOURCE.ID)
                    and GA.TYPECODE = 8
                    and GA.POSTSTATUSCODE = 2
            )
            begin
                declare @PAYMENTADJUSTMENTID uniqueidentifier;
                declare @ADJUSTMENTPOSTDATE date;
                declare @ADJUSTMENTPOSTSTATUS tinyint = 1;

                select top 1
                    @PAYMENTADJUSTMENTID = LIA.ID,
                    @ADJUSTMENTPOSTDATE = coalesce(A.POSTDATE, LIA.DATE, LI.POSTDATE),
                    @ADJUSTMENTPOSTSTATUS = case when A.POSTSTATUSCODE = 2 then 3 else 1 end
                from
                    dbo.FINANCIALTRANSACTIONLINEITEM LI
                    left join dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT LIA on LIA.ID = LI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
                    left join dbo.ADJUSTMENT A on A.REVENUEID = LI.FINANCIALTRANSACTIONID
                where
                    LI.ID = @REVENUESPLITID
                    and LIA.ADJUSTMENTREASONCODEID is not null
                    and not exists (select 1 from dbo.FINANCIALTRANSACTIONLINEITEM GA where GA.SOURCELINEITEMID = LI.ID 
                        and GA.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = LIA.ID
                        and GA.TYPECODE = 8)
                        order by A.DATEADDED DESC;

                if dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID) = 1
                    exec dbo.USP_SAVE_GIFTAID_ADJUSTMENT @REVENUESPLITID, @ADJUSTMENTPOSTSTATUS, @ADJUSTMENTPOSTDATE, null, @PAYMENTADJUSTMENTID, @CHANGEAGENTID, null;
            end
        else
            begin
                delete from
                    dbo.FINANCIALTRANSACTIONLINEITEM
                where
                    ID in (
                        select
                            GA.ID
                        from
                            dbo.FINANCIALTRANSACTIONLINEITEM GA
                            inner join dbo.FINANCIALTRANSACTIONLINEITEM SOURCE on SOURCE.ID = GA.SOURCELINEITEMID
                            left join dbo.FINANCIALTRANSACTIONLINEITEM NEWSOURCE on NEWSOURCE.ID = SOURCE.REVERSEDLINEITEMID
                        where
                            @REVENUESPLITID = isnull(NEWSOURCE.ID, SOURCE.ID)
                            and GA.TYPECODE = 8
                            and GA.POSTSTATUSCODE = 1
                            and GA.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID is null
                            and (GA.ID <> SOURCE.REVERSEDLINEITEMID  or SOURCE.REVERSEDLINEITEMID is null)
                            and (GA.ID <> NEWSOURCE.REVERSEDLINEITEMID or  NEWSOURCE.REVERSEDLINEITEMID is null)
                            and GA.DELETEDON is null)
            end

        -- Clear outdated gift aid GL distributions.

        --delete from dbo.GIFTAIDGLDISTRIBUTION where REVENUESPLITGIFTAIDID = @REVENUESPLITID and OUTDATED = 0;    

if @@ERROR <> 0
        ROLLBACK TRAN
    else
        COMMIT TRAN
end try

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