USP_SAVE_BENEFITADJUSTMENT_2

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@ADJUSTMENTID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@DATE datetime IN
@POSTDATE datetime IN
@ADJUSTMENTREASON nvarchar(300) IN
@ISNEWREVENUE bit IN
@ADJUSTMENTREASONCODEID uniqueidentifier IN
@POSTSTATUSCODE tinyint IN
@TOTALBENEFITS xml IN
@BENEFITTYPECODE tinyint IN

Definition

Copy


            CREATE procedure dbo.USP_SAVE_BENEFITADJUSTMENT_2
            (
                @REVENUEID uniqueidentifier = null,
                @ADJUSTMENTID uniqueidentifier = null output,
                @CHANGEAGENTID uniqueidentifier = null,
                @CHANGEDATE datetime = null,
                @DATE datetime = null,
                @POSTDATE datetime = null,
                @ADJUSTMENTREASON nvarchar(300) = null,
                @ISNEWREVENUE bit = 0,
                @ADJUSTMENTREASONCODEID uniqueidentifier = null,
                @POSTSTATUSCODE tinyint = 1,
                @TOTALBENEFITS xml = null,
                @BENEFITTYPECODE tinyint = null
            )
            with execute as owner
            as
            /*call this procedure before making changes to the revenue tables.*/

            set nocount on;

            declare @REVENUEPOSTDATE datetime;
            declare @CONSTITUENTID uniqueidentifier;

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

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

            select @ADJUSTMENTID = ID
            from dbo.BENEFITADJUSTMENT
            where REVENUEID = @REVENUEID and POSTSTATUSCODE <> 0;

            if @ADJUSTMENTID is null
                set @ADJUSTMENTID = newid();

            declare @FTMPOSTSTATUSCODE tinyint
            set @FTMPOSTSTATUSCODE = case @POSTSTATUSCODE when 2 then 3 when 0 then 2 else 1 end

            --JamesWill WI197067 2012-03-08 Ensure that the date used does not have a timestamp

            if not @DATE is null
                set @DATE = dbo.UFN_DATE_GETEARLIESTTIME(@DATE);

            --Is the revenue posted?

            if (select count(REVENUE.ID) from dbo.REVENUE
                inner join dbo.REVENUEPOSTED on REVENUEPOSTED.ID = REVENUE.ID
                where REVENUE.ID = @REVENUEID) = 0
                raiserror('You cannot adjust an unposted benefit', 13, 1)

            --kwb Create FINANCIALTRANSACTIONLINEITEMADJUSTMENT records for original write-offs that will be adjusted

            exec dbo.USP_CREATEINITIALADJUSTMENTHISTORY @REVENUEID, @CHANGEAGENTID

            select @CONSTITUENTID = CONSTITUENTID from dbo.FINANCIALTRANSACTION where ID = @REVENUEID

            --Update unposted adjustment if existing

            if @ADJUSTMENTID is not null and exists(select 1 from dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT where ID = @ADJUSTMENTID)
                update dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT set
                    ADJUSTMENTREASONCODEID = @ADJUSTMENTREASONCODEID
                    ,REASON = @ADJUSTMENTREASON
                    ,CONSTITUENTID = @CONSTITUENTID
                    ,DATE = @DATE
                    ,CHANGEDBYID = @CHANGEAGENTID
                    ,DATECHANGED = @CHANGEDATE
                where ID = @ADJUSTMENTID;
            else if @ADJUSTMENTID is not null
                insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
                    ID
                    ,ADJUSTMENTREASONCODEID
                    ,REASON
                    ,CONSTITUENTID
                    ,DATE
                    ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                values (@ADJUSTMENTID
                    ,@ADJUSTMENTREASONCODEID
                    ,@ADJUSTMENTREASON
                    ,@CONSTITUENTID
                    ,@DATE
                    ,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

            --benefit line items to reverse

            declare @LINEITEMS UDT_GENERICID
            insert into @LINEITEMS (ID)
            select distinct
                LI.ID
            from
                dbo.FINANCIALTRANSACTIONLINEITEM LI
                inner join dbo.REVENUEBENEFIT_EXT RBX on RBX.ID = LI.ID
            where
                LI.FINANCIALTRANSACTIONID = @REVENUEID
                and LI.TYPECODE = 3
                and LI.DELETEDON is null
                and ((@BENEFITTYPECODE is null and RBX.BENEFITTYPECODE in (1, 2, 3))
                    or (RBX.BENEFITTYPECODE = @BENEFITTYPECODE))

            update dbo.BENEFITADJUSTMENT
            set DATE = @DATE
                POSTDATE = @POSTDATE,
                REASON = @ADJUSTMENTREASON,
                REASONCODEID = @ADJUSTMENTREASONCODEID,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CHANGEDATE,
                POSTSTATUSCODE = @POSTSTATUSCODE
            where ID = @ADJUSTMENTID;

            if @@ROWCOUNT = 0
            begin
                declare @TRANSACTIONAMOUNT money;
                declare @AMOUNT money;
                declare @ORGANIZATIONAMOUNT money;
                declare @TRANSACTIONCURRENCYID uniqueidentifier;
                declare @BASECURRENCYID uniqueidentifier;
                declare @BASEEXCHANGERATEID uniqueidentifier;
                declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;

                select
                    @TRANSACTIONAMOUNT = sum(RB.TRANSACTIONTOTALVALUE),
                    @AMOUNT = sum(RB.TOTALVALUE),
                    @ORGANIZATIONAMOUNT = sum(RB.ORGANIZATIONTOTALVALUE),
                    @TRANSACTIONCURRENCYID = RB.TRANSACTIONCURRENCYID,
                    @BASECURRENCYID = RB.BASECURRENCYID,
                    @BASEEXCHANGERATEID = RB.BASEEXCHANGERATEID,
                    @ORGANIZATIONEXCHANGERATEID = RB.ORGANIZATIONEXCHANGERATEID
                from dbo.REVENUEBENEFIT RB
                where RB.REVENUEID = @REVENUEID
                group by RB.TRANSACTIONCURRENCYID, RB.BASECURRENCYID, RB.BASEEXCHANGERATEID, RB.ORGANIZATIONEXCHANGERATEID;

                --Log Adjustment if new

                insert into dbo.BENEFITADJUSTMENT(
                    ID,
                    REVENUEID,
                    PREVIOUSAMOUNT,
                    DATE,
                    POSTDATE,
                    POSTSTATUSCODE,
                    REASON,
                    REASONCODEID,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED,
                    BASECURRENCYID,
                    TRANSACTIONCURRENCYID,
                    TRANSACTIONPREVIOUSAMOUNT,
                    BASEEXCHANGERATEID,
                    ORGANIZATIONPREVIOUSAMOUNT,
                    ORGANIZATIONEXCHANGERATEID,
                    BENEFITTYPECODE
                )
                select
                    @ADJUSTMENTID,
                    @REVENUEID,
                    coalesce(@AMOUNT, 0),
                    @DATE,
                    @POSTDATE,
                    @POSTSTATUSCODE,
                    @ADJUSTMENTREASON,
                    @ADJUSTMENTREASONCODEID,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CHANGEDATE,
                    @CHANGEDATE,
                    coalesce(@BASECURRENCYID, R.BASECURRENCYID),
                    coalesce(@TRANSACTIONCURRENCYID, R.TRANSACTIONCURRENCYID),
                    coalesce(@TRANSACTIONAMOUNT, 0),
                    coalesce(@BASEEXCHANGERATEID, R.BASEEXCHANGERATEID),
                    coalesce(@ORGANIZATIONAMOUNT, 0),
                    coalesce(@ORGANIZATIONEXCHANGERATEID, R.ORGANIZATIONEXCHANGERATEID),
                    1
                from
                    dbo.REVENUE R
                where
                    R.ID = @REVENUEID;

            end
            else /*make sure @ADJUSTMENTID gets set to the correct value*/
            begin
                -- Update the post date on the going forward line items and their reversals

                update 
                    LI
                set
                    LI.POSTDATE = @POSTDATE,
                    LI.POSTSTATUSCODE = @FTMPOSTSTATUSCODE,
                    LI.DATECHANGED = @CHANGEDATE,
                    LI.CHANGEDBYID = @CHANGEAGENTID
                from
                    @LINEITEMS L
                    inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = L.ID or LI.REVERSEDLINEITEMID = L.ID
                where
                    LI.FINANCIALTRANSACTIONID = @REVENUEID
                    and LI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID        
                    and LI.POSTSTATUSCODE <> 2

                update 
                    JE
                set
                    JE.POSTDATE = @POSTDATE,
                    JE.DATECHANGED = @CHANGEDATE,
                    JE.CHANGEDBYID = @CHANGEAGENTID
                from
                    @LINEITEMS L
                    inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = L.ID or LI.REVERSEDLINEITEMID = L.ID
                    inner join dbo.JOURNALENTRY JE on JE.FINANCIALTRANSACTIONLINEITEMID = LI.ID
                where
                    LI.FINANCIALTRANSACTIONID = @REVENUEID
                    and LI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID        
                    and LI.POSTSTATUSCODE <> 2

                if @BENEFITTYPECODE is null
                begin
                    delete from dbo.JOURNALENTRY where FINANCIALTRANSACTIONLINEITEMID in
                    (select
                        LI.ID
                    from
                        @LINEITEMS L
                        inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = L.ID)
                end

            end

            --create reversals if none exist for this adjustment

            if not exists (
                select
                    1
                from
                    @LINEITEMS L
                    inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.REVERSEDLINEITEMID = L.ID
                where
                    LI.TYPECODE = 1
                    and LI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID)
            begin
                exec dbo.USP_SAVE_REVERSAL_LINEITEM @LINEITEMS, @ADJUSTMENTID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE, @FTMPOSTSTATUSCODE

                exec dbo.USP_SAVE_HISTORICAL_LINEITEM @LINEITEMS, @ADJUSTMENTID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE, @FTMPOSTSTATUSCODE
            end


            if @BENEFITTYPECODE is null
            begin
                exec dbo.USP_REVENUE_GETBENEFITS_4_UPDATEFROMXML @REVENUEID, @TOTALBENEFITS, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTID

                if @POSTSTATUSCODE <> 2
                    exec USP_SAVE_BENEFITGLDISTRIBUTION_FINANCIALTRANSACTION @REVENUEID, @CHANGEAGENTID, @CHANGEDATE
            end            

            declare @Error nvarchar(255) = ''
            if @@ROWCOUNT > 0 and @POSTSTATUSCODE <> 2
                set @Error = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE)

            if @Error <> '' 
                raiserror(@Error, 13, 1)