USP_SAVE_HISTORICAL_LINEITEM

Parameters

Parameter Parameter Type Mode Description
@LINEITEMS UDT_GENERICID IN
@ADJUSTMENTID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@POSTDATE datetime IN
@POSTSTATUSCODE tinyint IN

Definition

Copy


CREATE procedure dbo.USP_SAVE_HISTORICAL_LINEITEM
(
    @LINEITEMS UDT_GENERICID readonly,
    @ADJUSTMENTID uniqueidentifier = null,
    @CHANGEAGENTID uniqueidentifier = null,
    @CHANGEDATE datetime = null,
    @POSTDATE datetime = null,
    @POSTSTATUSCODE tinyint = 1 -- FTM codes. 1 - NP, 2 - P, 3 - DNP

)
as
begin

/*
Reversals MUST be created before historical copies are created.
Creating historical copies disassociates journal entries from their original line item.
*/

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

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

delete from dbo.FINANCIALTRANSACTIONLINEITEM where ID in
(select
    LI.ID
from
    @LINEITEMS L
    inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.REVERSEDLINEITEMID = L.ID
where
    LI.POSTSTATUSCODE <> 2
    and LI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID
    and LI.TYPECODE <> 1)

declare @ORIGINALLINEITEMS table (ORIGINALID uniqueidentifier, HISTORICALCOPYID uniqueidentifier)

insert into @ORIGINALLINEITEMS (ORIGINALID, HISTORICALCOPYID)
select
    ID,
    NEWID()
from @LINEITEMS


--create historical copies

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

--historical copy should use existing journal entries

update dbo.JOURNALENTRY set
    FINANCIALTRANSACTIONLINEITEMID = SLI.HISTORICALCOPYID
from
    @ORIGINALLINEITEMS SLI
where
    FINANCIALTRANSACTIONLINEITEMID = SLI.ORIGINALID

update JEX set
    OUTDATED = 1
from
    @ORIGINALLINEITEMS SLI
    inner join dbo.JOURNALENTRY JE on JE.FINANCIALTRANSACTIONLINEITEMID = SLI.HISTORICALCOPYID
    inner join dbo.JOURNALENTRY_EXT JEX on JEX.ID = JE.ID

update LI set
    POSTSTATUSCODE = @POSTSTATUSCODE,
    POSTDATE = @POSTDATE,
    FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID,
    DATECHANGED = @CHANGEDATE,
    CHANGEDBYID = @CHANGEAGENTID
from
    @ORIGINALLINEITEMS SLI
    inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = SLI.ORIGINALID

end