USP_REFUND_ADDBENEFITREVERSALS

Adds benefit reversals for the given set of revenue split ids.

Parameters

Parameter Parameter Type Mode Description
@REVENUESPLITIDS UDT_GENERICID IN
@CREDITID uniqueidentifier IN
@POSTDATE datetime IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


CREATE procedure dbo.USP_REFUND_ADDBENEFITREVERSALS
(
    @REVENUESPLITIDS dbo.UDT_GENERICID readonly,
    @CREDITID uniqueidentifier,
    @POSTDATE datetime,
    @CHANGEAGENTID uniqueidentifier,
    @CHANGEDATE datetime
)
as
    set nocount on;

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

    if @CHANGEDATE is null
        set @CHANGEDATE = getdate();

    declare @BENEFITIDS UDT_GENERICID;

    insert into @BENEFITIDS (
        ID
    )
    select distinct
        L.ID
    from
        dbo.FINANCIALTRANSACTIONLINEITEM L 
    left outer join
        dbo.REVENUEBENEFIT_EXT RE on RE.ID = L.ID 
    inner join
        dbo.JOURNALENTRY J on J.FINANCIALTRANSACTIONLINEITEMID = L.ID
    inner join
        dbo.JOURNALENTRY_EXT X on J.ID = X.ID 
    where
        X.TABLENAMECODE = 5  -- BENEFITGLDISTRIBUTION

        and X.OUTDATED = 0
        and X.BENEFITTYPECODE = 1  -- Expense

        and (
            RE.REVENUESPLITID in (
                select FINANCIALTRANSACTIONLINEITEM.SOURCELINEITEMID 
                from dbo.FINANCIALTRANSACTIONLINEITEM 
                    left join dbo.CREDITITEMMEMBERSHIP on CREDITITEMMEMBERSHIP.ID = FINANCIALTRANSACTIONLINEITEM.ID
                where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @CREDITID
                    and CREDITITEMMEMBERSHIP.WILLBECANCELLED = 1
            )
            or (
                -- This refunds memberships and event registrations added through the back office.

                -- These benefits currently don't have a link to the membership or registration that created

                -- them so this code tries to refund any benefit from the payment.  This needs to be changed

                -- because of the potential of refunding multiple benefits if a payment is applied to multiple

                -- items, each one with their own benefits.

                RE.REVENUESPLITID is null and L.ID in (
                    select
                        ALLASSOCIATEDITEMSFROMREFUNDEDTRANSACTION.ID
                    from
                        dbo.FINANCIALTRANSACTIONLINEITEM as CREDITLINEITEMS
                    inner join
                        dbo.FINANCIALTRANSACTIONLINEITEM as REFUNDEDLINEITEMS on REFUNDEDLINEITEMS.ID = CREDITLINEITEMS.SOURCELINEITEMID
                    inner join
                        dbo.FINANCIALTRANSACTIONLINEITEM as ALLASSOCIATEDITEMSFROMREFUNDEDTRANSACTION on ALLASSOCIATEDITEMSFROMREFUNDEDTRANSACTION.FINANCIALTRANSACTIONID = REFUNDEDLINEITEMS.FINANCIALTRANSACTIONID and ALLASSOCIATEDITEMSFROMREFUNDEDTRANSACTION.TYPECODE = 3
                    inner join
                        dbo.REVENUESPLIT_EXT as REFUNDEDLINEITEMSPLITEXTENSION on REFUNDEDLINEITEMSPLITEXTENSION.ID = REFUNDEDLINEITEMS.ID
                    left join
                        dbo.CREDITITEMMEMBERSHIP on CREDITITEMMEMBERSHIP.ID = CREDITLINEITEMS.ID
                    where
                        CREDITLINEITEMS.FINANCIALTRANSACTIONID = @CREDITID
                        and REFUNDEDLINEITEMSPLITEXTENSION.TYPECODE <> 18  -- Membership add-on

                        and CREDITITEMMEMBERSHIP.WILLBECANCELLED = 1
                )
            )
        )

    if exists(select top 1 ID from @BENEFITIDS) begin

        exec dbo.USP_FINANCIALTRANSACTIONLINEITEMS_REVERSE @CHANGEAGENTID, @BENEFITIDS, @POSTDATE, @CHANGEDATE, 0;

        declare @LIAID uniqueidentifier = newid();

        insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT
            (ID, ADJUSTMENTREASONCODEID, REASON, DATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, CONSTITUENTID)
        values
            (@LIAID, null, '', @CHANGEDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE, null)

        update FINANCIALTRANSACTIONLINEITEM
        set FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @LIAID
        from dbo.FINANCIALTRANSACTIONLINEITEM LI
        inner join @BENEFITIDS B on B.ID = LI.REVERSEDLINEITEMID
        where LI.TYPECODE = 1
            and LI.DELETEDON is null

    end

    return 0;