USP_POST

Posts to General Ledger

Parameters

Parameter Parameter Type Mode Description
@CHANGEAGENTID uniqueidentifier IN
@FINANCIALBATCHID uniqueidentifier IN
@FINANCIALSYSTEM uniqueidentifier IN
@SUMMARIZEBYDATECRITERIA tinyint IN

Definition

Copy


CREATE procedure [dbo].[USP_POST]
( @CHANGEAGENTID as uniqueidentifier
 ,@FINANCIALBATCHID as uniqueidentifier
 ,@FINANCIALSYSTEM as uniqueidentifier
 ,@SUMMARIZEBYDATECRITERIA as tinyint = 1    --1=Fiscal Period, 2=Week, 3=Day

)
as
set nocount on
declare @WorkTable table (ID uniqueidentifier, CLASSCODE tinyint, JOURNALCODEID uniqueidentifier, BASEAMOUNT money, TRANSACTIONAMOUNT money, ORGANIZATIONAMOUNT money, TRANSACTIONTYPECODE smallint, POSTDATE datetime, GLACCOUNTID uniqueidentifier, DATEFROM datetime, PRIMARY KEY clustered (TRANSACTIONTYPECODE,POSTDATE,GLACCOUNTID)  )
declare @CHANGEDATE datetime = getdate()

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

with CTE
as
(select JOURNALENTRY.CLASSCODE, JOURNALENTRY.JOURNALCODEID, JOURNALENTRY.BASEAMOUNT, JOURNALENTRY.TRANSACTIONAMOUNT, JOURNALENTRY.ORGAMOUNT, JOURNALENTRY.TRANSACTIONTYPECODE, 
    case @SUMMARIZEBYDATECRITERIA 
        when 1 then GLFISCALPERIOD.ENDDATE
        when 2 then FINANCIALTRANSACTION.POSTDATE
        when 3 then case when dateadd(d,7-datepart(dw,FINANCIALTRANSACTION.POSTDATE),FINANCIALTRANSACTION.POSTDATE) < GLFISCALPERIOD.ENDDATE then dateadd(d,7-datepart(dw,FINANCIALTRANSACTION.POSTDATE),FINANCIALTRANSACTION.POSTDATE) else GLFISCALPERIOD.ENDDATE end 
        end as DateEnd, 
    JOURNALENTRY.GLACCOUNTID, 
    case @SUMMARIZEBYDATECRITERIA 
        when 1 then GLFISCALPERIOD.STARTDATE
        when 2 then FINANCIALTRANSACTION.POSTDATE
        when 3 then case when dateadd(d,-(datepart(dw,FINANCIALTRANSACTION.POSTDATE)-1),FINANCIALTRANSACTION.POSTDATE) > GLFISCALPERIOD.STARTDATE then dateadd(d,-(datepart(dw,FINANCIALTRANSACTION.POSTDATE)-1),FINANCIALTRANSACTION.POSTDATE) else GLFISCALPERIOD.STARTDATE end 
        end as DateStart
from dbo.JOURNALENTRY 
inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.FINANCIALSYSTEMTRANSACTIONTYPE on FINANCIALTRANSACTION.TYPECODE = FINANCIALSYSTEMTRANSACTIONTYPE.TYPECODE
inner join dbo.GLFISCALPERIOD on FINANCIALTRANSACTION.POSTDATE between GLFISCALPERIOD.STARTDATE and GLFISCALPERIOD.ENDDATE and GLFISCALPERIOD.CLOSED = 0
where FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 1
and FINANCIALSYSTEMTRANSACTIONTYPE.FINANCIALSYSTEMID = @FINANCIALSYSTEM
and JOURNALENTRY.GLACCOUNTID is not null)
insert into @WorkTable (ID, CLASSCODE, JOURNALCODEID, BASEAMOUNT, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, TRANSACTIONTYPECODE, POSTDATE, GLACCOUNTID, DATEFROM)
select newid(), CLASSCODE, JOURNALCODEID, sum(BASEAMOUNT), sum(TRANSACTIONAMOUNT), sum(ORGAMOUNT), TRANSACTIONTYPECODE, 
    DateEnd, GLACCOUNTID, DateStart
from CTE
group by TRANSACTIONTYPECODE, CLASSCODE, JOURNALCODEID, DateEnd, GLACCOUNTID, DateStart

begin tran

begin try
insert into dbo.JournalEntry(ID, CLASSCODE, JOURNALCODEID, SEQUENCE, BASEAMOUNT, TRANSACTIONAMOUNT, ORGAMOUNT, TRANSACTIONTYPECODE, POSTDATE,
    ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, GLACCOUNTID, FINANCIALBATCHID) 
select ID, CLASSCODE, JOURNALCODEID, row_number() over (order by TRANSACTIONTYPECODE, POSTDATE), BASEAMOUNT, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, TRANSACTIONTYPECODE, POSTDATE,
    @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE, GLACCOUNTID, @FINANCIALBATCHID
from @WorkTable

update dbo.JournalEntry
set SummaryID = TV1.ID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
from dbo.JOURNALENTRY 
inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID 
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.FINANCIALSYSTEMTRANSACTIONTYPE on FINANCIALTRANSACTION.TYPECODE = FINANCIALSYSTEMTRANSACTIONTYPE.TYPECODE
inner join @WorkTable TV1 on JOURNALENTRY.TRANSACTIONTYPECODE = TV1.TRANSACTIONTYPECODE
    and JOURNALENTRY.GLACCOUNTID= TV1.GLACCOUNTID
    and FINANCIALTRANSACTION.POSTDATE between TV1.DATEFROM and TV1.POSTDATE
where FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 1
and FINANCIALSYSTEMTRANSACTIONTYPE.FINANCIALSYSTEMID = @FINANCIALSYSTEM
and JOURNALENTRY.GLACCOUNTID is not null

update dbo.FINANCIALTRANSACTIONLINEITEM
set 
POSTSTATUSCODE = 2,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
from dbo.JOURNALENTRY 
inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID 
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.FINANCIALSYSTEMTRANSACTIONTYPE on FINANCIALTRANSACTION.TYPECODE = FINANCIALSYSTEMTRANSACTIONTYPE.TYPECODE
inner join @WorkTable TV1 on JOURNALENTRY.TRANSACTIONTYPECODE = TV1.TRANSACTIONTYPECODE
    and JOURNALENTRY.GLACCOUNTID = TV1.GLACCOUNTID
    and FINANCIALTRANSACTIONLINEITEM.POSTDATE between TV1.DATEFROM and TV1.POSTDATE
where FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 1
and FINANCIALSYSTEMTRANSACTIONTYPE.FINANCIALSYSTEMID = @FINANCIALSYSTEM
and JOURNALENTRY.GLACCOUNTID is not null

end try
begin catch
if @@trancount > 0
    rollback
end catch

if @@trancount > 0
    commit