USP_SAVE_ADJUSTMENT_FOR_SPECIFIC_LINEITEMS

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@LINEITEMS UDT_GENERICID 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
@ADJUSTMENTCODE tinyint IN

Definition

Copy


CREATE procedure [dbo].[USP_SAVE_ADJUSTMENT_FOR_SPECIFIC_LINEITEMS] (
    @REVENUEID uniqueidentifier = null
    ,@LINEITEMS UDT_GENERICID readonly
    ,@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
    ,@ADJUSTMENTCODE tinyint = 0
) 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.ADJUSTMENT
    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;

    if not @DATE is null
        set @DATE = cast(@DATE as date);

    if (
        select POSTSTATUSCODE
        from dbo.FINANCIALTRANSACTION
        where ID = @REVENUEID
    ) != 2
        raiserror ('You cannot adjust an unposted gift', 13, 1);

    exec dbo.USP_CREATEINITIALADJUSTMENTHISTORY @REVENUEID, @CHANGEAGENTID

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

    --Update unposted adjustment if existing

    if 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
        insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
            ID
            ,ADJUSTMENTREASONCODEID
            ,REASON
            ,CONSTITUENTID
            ,[DATE]
            ,ADDEDBYID
            ,CHANGEDBYID
            ,DATEADDED
            ,DATECHANGED
            )
        values (
            @ADJUSTMENTID
            ,@ADJUSTMENTREASONCODEID
            ,@ADJUSTMENTREASON
            ,@CONSTITUENTID
            ,@DATE
            ,@CHANGEAGENTID
            ,@CHANGEAGENTID
            ,@CHANGEDATE
            ,@CHANGEDATE
            );

    if exists(select 1 from dbo.ADJUSTMENT where ID = @ADJUSTMENTID)
    begin
        declare @ALLADJUSTEDLINEITEMS UDT_GENERICID;
        insert into @ALLADJUSTEDLINEITEMS
        select LI.ID
        from @LINEITEMS LI
        union
        select LI.ID
        from dbo.FINANCIALTRANSACTIONLINEITEM LI
        where LI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID

        update dbo.ADJUSTMENT
        set [DATE] = @DATE
            ,POSTDATE = @POSTDATE
            ,REASON = @ADJUSTMENTREASON
            ,REASONCODEID = @ADJUSTMENTREASONCODEID
            ,CHANGEDBYID = @CHANGEAGENTID
            ,DATECHANGED = @CHANGEDATE
            ,POSTSTATUSCODE = @POSTSTATUSCODE
            ,ADJUSTMENTCODE = case when ADJUSTMENTCODE = 0 then @ADJUSTMENTCODE else ADJUSTMENTCODE end
        where ID = @ADJUSTMENTID;

        update dbo.FINANCIALTRANSACTIONLINEITEM set
            POSTDATE = @POSTDATE
            ,POSTSTATUSCODE = @FTMPOSTSTATUSCODE
            ,DATECHANGED = @CHANGEDATE
            ,CHANGEDBYID = @CHANGEAGENTID
        from dbo.FINANCIALTRANSACTIONLINEITEM as FTLI
        left join @ALLADJUSTEDLINEITEMS LI on FTLI.ID = LI.ID
        where FTLI.FINANCIALTRANSACTIONID = @REVENUEID
            and FTLI.POSTSTATUSCODE != 2
            and ((not LI.ID is null) or LI.ID = FTLI.REVERSEDLINEITEMID or FTLI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID)

        -- Update the post date on the GL transaction records

        update dbo.JOURNALENTRY
        set JOURNALENTRY.POSTDATE = @POSTDATE
            ,JOURNALENTRY.DATECHANGED = @CHANGEDATE
            ,JOURNALENTRY.CHANGEDBYID = @CHANGEAGENTID
        from dbo.FINANCIALTRANSACTIONLINEITEM as FTLI
        left join @ALLADJUSTEDLINEITEMS LI on FTLI.ID = LI.ID
        inner join dbo.JOURNALENTRY as JE on JE.FINANCIALTRANSACTIONLINEITEMID = FTLI.ID
        inner join dbo.JOURNALENTRY_EXT as JEE on JE.ID = JEE.ID
        where FTLI.FINANCIALTRANSACTIONID = @REVENUEID
            and ((not LI.ID is null) or LI.ID = FTLI.REVERSEDLINEITEMID or FTLI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID)
            and FTLI.POSTSTATUSCODE != 2
            and (JEE.OUTDATED = 0
                or JEE.TABLENAMECODE = 0);

        -- post date for unposted reversals should match the adjustment post date

        update dbo.JOURNALENTRY
        set JOURNALENTRY.POSTDATE = @POSTDATE
            ,JOURNALENTRY.DATECHANGED = @CHANGEDATE
            ,JOURNALENTRY.CHANGEDBYID = @CHANGEAGENTID
        from dbo.JOURNALENTRY
        inner join dbo.JOURNALENTRY_EXT as JEE on JOURNALENTRY.ID = JEE.ID
        inner join dbo.JOURNALENTRY as JE_REV on JEE.REVERSEDGLTRANSACTIONID = JE_REV.ID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI_REV on JE_REV.FINANCIALTRANSACTIONLINEITEMID = FTLI_REV.ID
        left join @ALLADJUSTEDLINEITEMS LI on FTLI_REV.ID = LI.ID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI on FTLI.ID = JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID
        where FTLI_REV.FINANCIALTRANSACTIONID = @REVENUEID
            and FTLI.POSTSTATUSCODE = 1
            and ((not LI.ID is null) or LI.ID = FTLI.REVERSEDLINEITEMID or FTLI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID);

        --Save the snapshot

        exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVESNAPSHOT_FOR_SPECIFIC_LINEITEMS @ADJUSTMENTID,@ALLADJUSTEDLINEITEMS,@ISNEWREVENUE,@CHANGEAGENTID;
    end
    else
    begin
        if @POSTSTATUSCODE = 0
            set @POSTSTATUSCODE = 1

        --Log Adjustment if new

        insert into dbo.ADJUSTMENT (
            ID
            ,REVENUEID
            ,PREVIOUSAMOUNT
            ,[DATE]
            ,POSTDATE
            ,POSTSTATUSCODE
            ,REASON
            ,REASONCODEID
            ,ADJUSTMENTCODE
            ,ADDEDBYID
            ,CHANGEDBYID
            ,DATEADDED
            ,DATECHANGED
            ,BASECURRENCYID
            ,TRANSACTIONCURRENCYID
            ,TRANSACTIONPREVIOUSAMOUNT
            ,BASEEXCHANGERATEID
            ,ORGANIZATIONPREVIOUSAMOUNT
            ,ORGANIZATIONEXCHANGERATEID
            )
        select @ADJUSTMENTID
            ,FINANCIALTRANSACTION.ID
            ,FINANCIALTRANSACTION.BASEAMOUNT
            ,@DATE
            ,@POSTDATE
            ,@POSTSTATUSCODE
            ,@ADJUSTMENTREASON
            ,@ADJUSTMENTREASONCODEID
            ,@ADJUSTMENTCODE
            ,@CHANGEAGENTID
            ,@CHANGEAGENTID
            ,@CHANGEDATE
            ,@CHANGEDATE
            ,CURRENCYSET.BASECURRENCYID
            ,FINANCIALTRANSACTION.TRANSACTIONCURRENCYID
            ,FINANCIALTRANSACTION.TRANSACTIONAMOUNT
            ,FINANCIALTRANSACTION.BASEEXCHANGERATEID
            ,FINANCIALTRANSACTION.ORGAMOUNT
            ,FINANCIALTRANSACTION.ORGEXCHANGERATEID
        from dbo.FINANCIALTRANSACTION
        inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
        inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
        where FINANCIALTRANSACTION.ID = @REVENUEID;

        --Save the snapshot before deleting the GL information

        exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVESNAPSHOT_FOR_SPECIFIC_LINEITEMS @ADJUSTMENTID,@LINEITEMS,@ISNEWREVENUE,@CHANGEAGENTID;
    end

    declare @NEWLYADJUSTEDLINEITEMS UDT_GENERICID;
    insert into @NEWLYADJUSTEDLINEITEMS
    select LI.ID
    from @LINEITEMS LI
    inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on FTLI.ID = LI.ID
    where isnull(FTLI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID, newid()) != @ADJUSTMENTID;

    if (select top 1 1 from @NEWLYADJUSTEDLINEITEMS) = 1
    begin
        --Log reversal and historical data.

        exec dbo.USP_SAVE_REVERSAL_LINEITEM @NEWLYADJUSTEDLINEITEMS, @ADJUSTMENTID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE, @FTMPOSTSTATUSCODE

        declare @HISTORICALINFO table (ID uniqueidentifier, ADJUSTMENTID uniqueidentifier)
        insert into @HISTORICALINFO
        select LI.ID, FTLI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
        from @NEWLYADJUSTEDLINEITEMS LI
        inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on LI.ID = FTLI.ID;

        exec dbo.USP_SAVE_HISTORICAL_LINEITEM @NEWLYADJUSTEDLINEITEMS, @ADJUSTMENTID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE, @FTMPOSTSTATUSCODE

        insert into dbo.REVENUESPLIT_EXT (
            ID
            ,DESIGNATIONID
            ,APPLICATIONCODE
            ,TYPECODE
            ,ADDEDBYID
            ,CHANGEDBYID
            ,DATEADDED
            ,DATECHANGED
            )
        select
            LI.ID
            ,RSE.DESIGNATIONID
            ,RSE.APPLICATIONCODE
            ,RSE.TYPECODE
            ,RSE.ADDEDBYID
            ,RSE.CHANGEDBYID
            ,RSE.DATEADDED
            ,RSE.DATECHANGED
        from @HISTORICALINFO HLI
        inner join dbo.REVENUESPLIT_EXT RSE on HLI.ID = RSE.ID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on HLI.ID = LI.REVERSEDLINEITEMID and HLI.ADJUSTMENTID = LI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
        where not exists (select 1 from dbo.REVENUESPLIT_EXT where ID = LI.ID);
    end

    declare @Error nvarchar(255) = '';

    -- Bug 70136 - Null post date if adjustment is DNP

    if @@ROWCOUNT > 0 and @POSTSTATUSCODE <> 2
        set @Error = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE);

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