USP_SAVE_BENEFITLIABILITYBACKOUT

Parameters

Parameter Parameter Type Mode Description
@PAYMENTID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


CREATE procedure dbo.USP_SAVE_BENEFITLIABILITYBACKOUT
(
    @PAYMENTID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @CHANGEDATE datetime = null
)
as
begin

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

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

    declare @BACKOUTS table
    (
        ID uniqueidentifier,
        LIABILITYID uniqueidentifier,
        POSTDATE date
    )

    insert into @BACKOUTS
        (ID, LIABILITYID, POSTDATE)
    select
        newid(), BENEFITLIABILITYLI.ID, isnull(BA.POSTDATE, PAYMENTLI.POSTDATE)
    from
        dbo.FINANCIALTRANSACTIONLINEITEM PAYMENTLI
        cross apply (select distinct PAYMENTID, PLEDGEID from dbo.INSTALLMENTSPLITPAYMENT ISP where ISP.PAYMENTID = PAYMENTLI.ID) as ISP
        inner join dbo.FINANCIALTRANSACTION PLEDGE on PLEDGE.ID = ISP.PLEDGEID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM BENEFITLIABILITYLI on BENEFITLIABILITYLI.FINANCIALTRANSACTIONID = PLEDGE.ID
        inner join dbo.REVENUEBENEFIT_EXT RBX ON RBX.ID = BENEFITLIABILITYLI.ID
        left join dbo.BENEFITADJUSTMENT BA on PAYMENTLI.FINANCIALTRANSACTIONID = BA.REVENUEID and BA.POSTSTATUSCODE <> 0
    where
        PAYMENTLI.FINANCIALTRANSACTIONID = @PAYMENTID
        and dbo.UFN_PLEDGE_GETBALANCE(PLEDGE.ID) <= 0
        and BENEFITLIABILITYLI.DELETEDON is null
        and BENEFITLIABILITYLI.TYPECODE <> 1
        and RBX.BENEFITTYPECODE = 2
        and RBX.SENDBENEFIT = 1

    insert into dbo.FINANCIALTRANSACTIONLINEITEM
        (ID,FINANCIALTRANSACTIONID,TRANSACTIONAMOUNT,BASEAMOUNT,ORGAMOUNT,
        POSTSTATUSCODE,POSTDATE,VISIBLE,DESCRIPTION,SEQUENCE,TYPECODE,
        REVERSEDLINEITEMID,SOURCELINEITEMID,TARGETLINEITEMID,QUANTITY,UNITVALUE,
        BATCHID,FINANCIALTRANSACTIONLINEITEMADJUSTMENTID,DELETEDON,
        DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID)
    select
        BO.ID,LI.FINANCIALTRANSACTIONID,LI.TRANSACTIONAMOUNT,LI.BASEAMOUNT,LI.ORGAMOUNT,
        1,BO.POSTDATE,LI.VISIBLE,LI.DESCRIPTION,LI.SEQUENCE,LI.TYPECODE,
        LI.REVERSEDLINEITEMID,BO.LIABILITYID,LI.TARGETLINEITEMID,LI.QUANTITY,LI.UNITVALUE,
        LI.BATCHID,LI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID,LI.DELETEDON,
        @CHANGEDATE, @CHANGEDATE, @CHANGEAGENTID, @CHANGEAGENTID
    from
        @BACKOUTS BO
        inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = BO.LIABILITYID

    insert into dbo.REVENUEBENEFIT_EXT
        (ID, BENEFITID, SENDBENEFIT, PERCENTAPPLICABLEAMOUNT, VALUEPERCENT, REVENUESPLITID,
        BENEFITTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
    select
        BO.ID, RBX.BENEFITID, RBX.SENDBENEFIT, RBX.PERCENTAPPLICABLEAMOUNT, RBX.VALUEPERCENT, RBX.REVENUESPLITID,
        3, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
    from
        @BACKOUTS BO
        inner join dbo.REVENUEBENEFIT_EXT RBX on RBX.ID = BO.LIABILITYID

    declare @LINEITEMS UDT_GENERICID
    insert into @LINEITEMS
    select ID from @BACKOUTS

    exec USP_SAVE_BENEFITGLDISTRIBUTION_LINEITEMS @LINEITEMS, @CHANGEAGENTID, @CHANGEDATE

    --never create backouts for these line items again

    update RBX set
        SENDBENEFIT = 0
    from
        @BACKOUTS BO
        inner join dbo.FINANCIALTRANSACTIONLINEITEM BACKOUTLI on BACKOUTLI.ID = BO.ID
        inner join dbo.FINANCIALTRANSACTION FT on FT.ID = BACKOUTLI.FINANCIALTRANSACTIONID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM ALLLI on ALLLI.FINANCIALTRANSACTIONID = FT.ID
        inner join dbo.REVENUEBENEFIT_EXT RBX on RBX.ID = ALLLI.ID

end