USP_REVALUECOMMITMENTSPROCESS_UPDATEGAINLOSS

Updates gain-loss distributions and adjustments for the given revenue record.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@HASBALANCE bit IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@DATE datetime IN
@POSTDATE datetime IN
@ADJUSTMENTREASON nvarchar(300) IN
@ADJUSTMENTREASONCODEID uniqueidentifier IN
@POSTSTATUSCODE tinyint IN

Definition

Copy


            CREATE procedure dbo.USP_REVALUECOMMITMENTSPROCESS_UPDATEGAINLOSS
            (
                @ID uniqueidentifier = null,
                @HASBALANCE bit = null,
                @CHANGEAGENTID uniqueidentifier = null,
                @CHANGEDATE datetime = null,
                @DATE datetime = null,                -- Date for adjustments/distributions

                @POSTDATE datetime = null,            -- Post date for adjustments/distributions

                @ADJUSTMENTREASON nvarchar(300) = null,
                @ADJUSTMENTREASONCODEID uniqueidentifier = null,
                @POSTSTATUSCODE tinyint = 1
            )
            as
                set nocount on;

                declare @HASPOSTEDGAINLOSSDISTRIBUTIONS bit = 0;

                if @HASBALANCE is null
                    set @HASBALANCE = 0;


                select top 1
                    @HASPOSTEDGAINLOSSDISTRIBUTIONS = 1
                from 
                    dbo.UNREALIZEDGAINLOSSGLDISTRIBUTION
                    inner join dbo.GLTRANSACTION on UNREALIZEDGAINLOSSGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
                where
                    UNREALIZEDGAINLOSSGLDISTRIBUTION.REVENUEID = @ID
                    and GLTRANSACTION.POSTSTATUSCODE = 0;


                if @HASBALANCE = 0
                begin

                    -- Handle revenue without a balance


                    declare @HASGAINLOSSDISTRIBUTIONS bit = 0;

                    select top 1
                        @HASGAINLOSSDISTRIBUTIONS = 1
                    from 
                        dbo.UNREALIZEDGAINLOSSGLDISTRIBUTION
                        inner join dbo.GLTRANSACTION on UNREALIZEDGAINLOSSGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
                    where
                        UNREALIZEDGAINLOSSGLDISTRIBUTION.REVENUEID = @ID
                        and UNREALIZEDGAINLOSSGLDISTRIBUTION.OUTDATED = 0;


                    if @HASPOSTEDGAINLOSSDISTRIBUTIONS = 1
                    begin
                        -- Reverse old adjustment

                        exec dbo.USP_SAVE_UNREALIZEDGAINLOSSADJUSTMENT @ID, null, @CHANGEAGENTID, @CHANGEDATE, @DATE, @POSTDATE, @ADJUSTMENTREASON, 0, @ADJUSTMENTREASONCODEID, @POSTSTATUSCODE, 0;

                    end

                    if @HASGAINLOSSDISTRIBUTIONS = 1
                    begin
                        -- Remove old distributions.

                        delete dbo.UNREALIZEDGAINLOSSGLDISTRIBUTION
                        where REVENUEID = @ID and OUTDATED = 0;
                    end

                end
                else
                begin
                    -- Handle revenue with a balance


                    -- Don't do anything with "Do not post" commitments.

                    -- (These still count as successfully processed records, though, since

                    -- they will have been revalued by the process.)


                    declare @COMMITMENTMARKEDDONOTPOST bit = 0;
                    select
                        @COMMITMENTMARKEDDONOTPOST = coalesce(DONOTPOST, 0)
                    from dbo.REVENUE where ID = @ID;

                    if @COMMITMENTMARKEDDONOTPOST = 0
                    begin

                        if @HASPOSTEDGAINLOSSDISTRIBUTIONS = 1
                        begin
                            -- Reverse old adjustment

                            exec dbo.USP_SAVE_UNREALIZEDGAINLOSSADJUSTMENT @ID, null, @CHANGEAGENTID, @CHANGEDATE, @DATE, @POSTDATE, @ADJUSTMENTREASON, 0, @ADJUSTMENTREASONCODEID, @POSTSTATUSCODE, 0;
                        end

                        -- Remove old distributions.

                        delete dbo.UNREALIZEDGAINLOSSGLDISTRIBUTION
                        where REVENUEID = @ID and OUTDATED = 0;

                        exec dbo.USP_SAVE_UNREALIZEDGAINLOSSGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE;
                    end

                end