UFN_AUDIT_GETDETAILSFORREVENUEGLDISTRIBUTION
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN |
Definition
Copy
CREATE function [dbo].[UFN_AUDIT_GETDETAILSFORREVENUEGLDISTRIBUTION](@REVENUEID uniqueidentifier)
returns @RESULTS table
(RECORDID uniqueidentifier
,AUDITDATE datetime
,CHANGEDBYUSER varchar(128)
,PROCESS varchar(255)
,FIELD varchar(128)
,OLD varchar(4000)
,NEW varchar(4000)
,SEQUENCE int
,[ACTION] varchar(8)
,CHANGEDBYAPP varchar(200))
as
begin
--First get all of the journal entries that exist or existed for this revenue record
declare @JournalEntries table (ID uniqueidentifier, primary key(ID));
insert into @JournalEntries
select distinct T.ID from (
--Most current journal entries
select JE.ID
from dbo.JOURNALENTRY JE
inner join dbo.JOURNALENTRY_EXT JEX on JEX.ID = JE.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = JE.FINANCIALTRANSACTIONLINEITEMID
where LI.FINANCIALTRANSACTIONID = @REVENUEID and JEX.TABLENAMECODE = 1
union all
--Journal entries in the audit that are linked to line items that are not in the audit table
select JE.AUDITRECORDID
from dbo.JOURNALENTRYAUDIT JE
inner join (
select ID
from dbo.JOURNALENTRY_EXT JEX
where JEX.TABLENAMECODE = 1
union all
select AUDITRECORDID
from dbo.JOURNALENTRY_EXTAUDIT JEXA
where JEXA.TABLENAMECODE = 1) JEX on JEX.ID = JE.AUDITRECORDID
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = JE.FINANCIALTRANSACTIONLINEITEMID
where LI.FINANCIALTRANSACTIONID = @REVENUEID
union all
--Journal entries in the audit that are linked to line items that are only in the audit table
select JE.AUDITRECORDID
from dbo.JOURNALENTRYAUDIT JE
inner join (
select ID
from dbo.JOURNALENTRY_EXT JEX
where JEX.TABLENAMECODE = 1
union all
select AUDITRECORDID
from dbo.JOURNALENTRY_EXTAUDIT JEXA
where JEXA.TABLENAMECODE = 1) JEX on JEX.ID = JE.AUDITRECORDID
inner join dbo.FINANCIALTRANSACTIONLINEITEMAUDIT LI on LI.AUDITRECORDID = JE.FINANCIALTRANSACTIONLINEITEMID
where LI.FINANCIALTRANSACTIONID = @REVENUEID) T
insert into @RESULTS
(RECORDID
,AUDITDATE
,CHANGEDBYUSER
,PROCESS
,FIELD
,OLD
,NEW
,SEQUENCE
,[ACTION]
,CHANGEDBYAPP)
select
V4.RECORDID
,V4.AUDITDATE
,CHANGEAGENT.USERNAME as CHANGEDBYUSER
,CHANGEAGENT.PROCESSDISPLAYNAME as PROCESS
,V4.FIELD
,V4.OLD
,V4.NEW
,50 as SEQUENCE
,V4.[ACTION]
,CHANGEAGENT.APPLICATIONNAME as CHANGEDBYAPP
from
(select
V3.RECORDID
,V3.AUDITDATE
,case V3.AUDITTYPECODE2 when 2 then 'Delete' when 0 then 'Update' else 'Insert' end as [ACTION]
,'GL Distribution for:' + case NUMS.NUM when 1 then 'TRANSACTIONTYPECODE' when 2 then 'REFERENCE' when 3 then 'AMOUNT' when 4 then 'ACCOUNT' end as FIELD
,case NUMS.NUM
when 1 then case V3.AUDITTYPECODE1 when -1 then 'n/a' else case when V3.TRANSACTIONTYPECODE1 = V3.TRANSACTIONTYPECODE2 then null else isnull(V3.TRANSACTIONTYPECODE2,'n/a') end end
when 2 then case V3.AUDITTYPECODE1 when -1 then 'n/a' else case when V3.REFERENCE1 = V3.REFERENCE2 then null else ISNULL(V3.REFERENCE2, 'n/a') end end
when 3 then case V3.AUDITTYPECODE1 when -1 then 'n/a' else case when V3.AMOUNT1 = V3.AMOUNT2 then null else isnull(convert(varchar,V3.AMOUNT2,1),'n/a') end end
when 4 then case V3.AUDITTYPECODE1 when -1 then 'n/a' else case when V3.GLACCOUNTID1 = V3.GLACCOUNTID2 then null else ISNULL(V3.ACCOUNTNUMBER2, 'n/a') end end
end as OLD
,case NUMS.NUM
when 1 then case V3.AUDITTYPECODE2 when 2 then 'n/a' else case when V3.TRANSACTIONTYPECODE1 = V3.TRANSACTIONTYPECODE2 then null else isnull(V3.TRANSACTIONTYPECODE1,'n/a') end end
when 2 then case V3.AUDITTYPECODE2 when 2 then 'n/a' else case when V3.REFERENCE1 = V3.REFERENCE2 then null else ISNULL(V3.REFERENCE1, 'n/a') end end
when 3 then case V3.AUDITTYPECODE2 when 2 then 'n/a' else case when V3.AMOUNT1 = V3.AMOUNT2 then null else isnull(convert(varchar,V3.AMOUNT1,1),'n/a') end end
when 4 then case V3.AUDITTYPECODE2 when 2 then 'n/a' else case when V3.GLACCOUNTID1 = V3.GLACCOUNTID2 then null else ISNULL(V3.ACCOUNTNUMBER1, 'n/a') end end
end as NEW
,ChangeAgentID
from
(select
isnull(V1.AUDITRECORDID, V2.AUDITRECORDID) as RECORDID
,isnull(V1.AUDITCHANGEAGENTID,V2.AUDITCHANGEAGENTID) as CHANGEAGENTID
,isnull(V1.AUDITDATE, V2.AUDITDATE) as AUDITDATE
,V1.AUDITTYPECODE as AUDITTYPECODE1
,V2.AUDITTYPECODE as AUDITTYPECODE2
,V1.TRANSACTIONTYPECODE as TRANSACTIONTYPECODE1
,V2.TRANSACTIONTYPECODE as TRANSACTIONTYPECODE2
,V1.COMMENT as REFERENCE1
,V2.COMMENT as REFERENCE2
,V1.BASEAMOUNT as AMOUNT1
,V2.BASEAMOUNT as AMOUNT2
,V1.GLACCOUNTID as GLACCOUNTID1
,V2.GLACCOUNTID as GLACCOUNTID2
,GLACCOUNT1.ACCOUNTNUMBER as ACCOUNTNUMBER1
,GLACCOUNT2.ACCOUNTNUMBER as ACCOUNTNUMBER2
from
(--First get the inserted data from the base table if no audits exists for the record.
select
JE.AUDITRECORDID
,JE.AUDITKEY
,JE.AUDITCHANGEAGENTID
,JE.DATECHANGED as AUDITDATE
,JE.AUDITTYPECODE
,case JE.TRANSACTIONTYPECODE when 0 then N'Debit' when 1 then N'Credit' end TRANSACTIONTYPECODE
,JE.COMMENT
,JE.BASEAMOUNT
,JE.GLACCOUNTID
from JOURNALENTRYAUDIT JE
inner join @JournalEntries LI on LI.ID = JE.AUDITRECORDID
where JE.AUDITTYPECODE = 1
union all
select
JE.ID
,'00000000-0000-0000-0000-000000000000' as AUDITKEY
,JE.ADDEDBYID
,JE.DATEADDED
,-1 as AUDITTYPECODE
,case JE.TRANSACTIONTYPECODE when 0 then N'Debit' when 1 then N'Credit' end TRANSACTIONTYPECODE
,JE.COMMENT
,JE.BASEAMOUNT
,JE.GLACCOUNTID
from dbo.JOURNALENTRY JE
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = JE.FINANCIALTRANSACTIONLINEITEMID
where LI.FINANCIALTRANSACTIONID = @REVENUEID
and JE.ID not in (select JE.AUDITRECORDID
from JOURNALENTRYAUDIT JE
inner join @JournalEntries LI on LI.ID = JE.AUDITRECORDID
where JE.AUDITTYPECODE = 0)
union all
select
AUDITRECORDID
,AUDITKEY
,AUDITCHANGEAGENTID
,AUDITDATE
,AUDITTYPECODE
,TRANSACTIONTYPECODE
,COMMENT
,BASEAMOUNT
,GLACCOUNTID
from (--Get inserted data from the first 'Before update" entry in the audit table
select
JE.AUDITRECORDID
,'00000000-0000-0000-0000-000000000000' as AUDITKEY
,JE.AUDITCHANGEAGENTID
,JE.DATEADDED [AUDITDATE]
,-1 as AUDITTYPECODE
,case JE.TRANSACTIONTYPECODE when 0 then N'Debit' when 1 then N'Credit' end TRANSACTIONTYPECODE
,JE.COMMENT
,JE.BASEAMOUNT
,JE.GLACCOUNTID
,ROW_NUMBER() over (partition by JE.AUDITRECORDID order by JE.AUDITDATE asc) SEQUENCE
from JOURNALENTRYAUDIT JE
inner join @JournalEntries LI on LI.ID = JE.AUDITRECORDID
where JE.AUDITTYPECODE = 0) BEFOREUPDATES
where BEFOREUPDATES.SEQUENCE = 1
union all
--Get inserted data from the "Before delete" entry in the audit table
select
JE.AUDITRECORDID
,'00000000-0000-0000-0000-000000000000' as AUDITKEY
,JE.ADDEDBYID
,JE.DATEADDED [AUDITDATE]
,JE.AUDITTYPECODE
,case JE.TRANSACTIONTYPECODE when 0 then N'Debit' when 1 then N'Credit' end TRANSACTIONTYPECODE
,JE.COMMENT
,JE.BASEAMOUNT
,JE.GLACCOUNTID
from JOURNALENTRYAUDIT JE
inner join @JournalEntries LI on LI.ID = JE.AUDITRECORDID
where JE.AUDITTYPECODE = 2 and JE.AUDITRECORDID not in (
select JE.ID from dbo.JOURNALENTRY JE inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = JE.FINANCIALTRANSACTIONLINEITEMID where LI.FINANCIALTRANSACTIONID = @REVENUEID
union all
select AUDITRECORDID
from JOURNALENTRYAUDIT JE
inner join @JournalEntries LI on LI.ID = JE.AUDITRECORDID
where JE.AUDITTYPECODE != 2)
) V1
full outer join
(
select
JE.AUDITRECORDID
,JE.AUDITKEY
,JE.AUDITCHANGEAGENTID
,JE.AUDITDATE
,JE.AUDITTYPECODE
,case JE.TRANSACTIONTYPECODE when 0 then N'Debit' when 1 then N'Credit' end TRANSACTIONTYPECODE
,JE.COMMENT
,JE.BASEAMOUNT
,JE.GLACCOUNTID
from JOURNALENTRYAUDIT JE
inner join @JournalEntries LI on LI.ID = JE.AUDITRECORDID
where JE.AUDITTYPECODE in (0,2)) V2 on V1.AUDITRECORDID = V2.AUDITRECORDID and V1.AUDITKEY = V2.AUDITKEY
left join dbo.GLACCOUNT GLACCOUNT1 on GLACCOUNT1.ID = V1.GLACCOUNTID
left join dbo.GLACCOUNT GLACCOUNT2 on GLACCOUNT2.ID = V2.GLACCOUNTID
where
(V1.TRANSACTIONTYPECODE != V2.TRANSACTIONTYPECODE
or (V1.TRANSACTIONTYPECODE is null and V2.TRANSACTIONTYPECODE is not null)
or (V1.TRANSACTIONTYPECODE is not null and V2.TRANSACTIONTYPECODE is null)
)
or (V1.COMMENT != V2.COMMENT
or (V1.COMMENT is null and V2.COMMENT is not null)
or (V1.COMMENT is not null and V2.COMMENT is null)
)
or (V1.BASEAMOUNT != V2.BASEAMOUNT
or (V1.BASEAMOUNT is null and V2.BASEAMOUNT is not null)
or (V1.BASEAMOUNT is not null and V2.BASEAMOUNT is null)
)
or (V1.GLACCOUNTID != V2.GLACCOUNTID
or (V1.GLACCOUNTID is null and V2.GLACCOUNTID is not null)
or (V1.GLACCOUNTID is not null and V2.GLACCOUNTID is null)
)
) V3
cross join (
select 1 as NUM union select 2 union select 3 union select 4) as NUMS) V4
inner join dbo.CHANGEAGENT on V4.CHANGEAGENTID = CHANGEAGENT.ID
where OLD is not null
union all
select
V4.RECORDID
,V4.AUDITDATE
,CHANGEAGENT.USERNAME as CHANGEDBYUSER
,CHANGEAGENT.PROCESSDISPLAYNAME as PROCESS
,V4.FIELD
,V4.OLD
,V4.NEW
,50 as SEQUENCE
,V4.[ACTION]
,CHANGEAGENT.APPLICATIONNAME as CHANGEDBYAPP
from
(select
V3.RECORDID
,V3.AUDITDATE
,case V3.AUDITTYPECODE2 when 2 then 'Delete' when 0 then 'Update' else 'Insert' end as [ACTION]
,'GL Distribution for:' + case NUMS.NUM when 1 then 'GLPAYMENTMETHODREVENUETYPEMAPPINGID' when 2 then 'PROJECT' end as FIELD
,case NUMS.NUM
when 1 then case V3.AUDITTYPECODE1 when -1 then 'n/a' else case when V3.GLPAYMENTMETHODREVENUETYPEMAPPINGID1 = V3.GLPAYMENTMETHODREVENUETYPEMAPPINGID2 then null else isnull(V3.GLPAYMENTMETHODREVENUETYPEMAPPING2,'n/a') end end
when 2 then case V3.AUDITTYPECODE1 when -1 then 'n/a' else case when V3.PROJECT1 = V3.PROJECT2 then null else isnull(V3.PROJECT2,'n/a') end end
end as OLD
,case NUMS.NUM
when 1 then case V3.AUDITTYPECODE2 when 2 then 'n/a' else case when V3.GLPAYMENTMETHODREVENUETYPEMAPPINGID1 = V3.GLPAYMENTMETHODREVENUETYPEMAPPINGID2 then null else isnull(V3.GLPAYMENTMETHODREVENUETYPEMAPPING1,'n/a') end end
when 2 then case V3.AUDITTYPECODE2 when 2 then 'n/a' else case when V3.PROJECT1 = V3.PROJECT2 then null else isnull(V3.PROJECT1,'n/a') end end
end as NEW
,ChangeAgentID
from
(select
isnull(V1.AUDITRECORDID, V2.AUDITRECORDID) as RECORDID
,isnull(V1.AUDITCHANGEAGENTID,V2.AUDITCHANGEAGENTID) as CHANGEAGENTID
,isnull(V1.AUDITDATE, V2.AUDITDATE) as AUDITDATE
,V1.AUDITTYPECODE as AUDITTYPECODE1
,V2.AUDITTYPECODE as AUDITTYPECODE2
,V1.GLPAYMENTMETHODREVENUETYPEMAPPINGID as GLPAYMENTMETHODREVENUETYPEMAPPINGID1
,V2.GLPAYMENTMETHODREVENUETYPEMAPPINGID as GLPAYMENTMETHODREVENUETYPEMAPPINGID2
,V1.PROJECT as PROJECT1
,V2.PROJECT as PROJECT2
,GLPAYMENTMETHODREVENUETYPEMAPPING.DESCRIPTION as GLPAYMENTMETHODREVENUETYPEMAPPING1
,GLPAYMENTMETHODREVENUETYPEMAPPING2.DESCRIPTION as GLPAYMENTMETHODREVENUETYPEMAPPING2
from
(select
JE.AUDITRECORDID
,JE.AUDITKEY
,JE.AUDITCHANGEAGENTID
,JE.DATECHANGED as AUDITDATE
,JE.AUDITTYPECODE
,JE.GLPAYMENTMETHODREVENUETYPEMAPPINGID
,JE.PROJECT
from JOURNALENTRY_EXTAUDIT JE
inner join @JournalEntries LI on LI.ID = JE.AUDITRECORDID
where JE.AUDITTYPECODE = 1
union all
select
JEX.ID
,'00000000-0000-0000-0000-000000000000' as AUDITKEY
,JEX.ADDEDBYID
,JEX.DATEADDED
,-1 as AUDITTYPECODE
,JEX.GLPAYMENTMETHODREVENUETYPEMAPPINGID
,JEX.PROJECT
from dbo.JOURNALENTRY_EXT JEX
inner join dbo.JOURNALENTRY JE on JE.ID = JEX.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = JE.FINANCIALTRANSACTIONLINEITEMID
where LI.FINANCIALTRANSACTIONID = @REVENUEID
and JE.ID not in (select JE.AUDITRECORDID
from JOURNALENTRY_EXTAUDIT JE
inner join @JournalEntries LI on LI.ID = JE.AUDITRECORDID
where JE.AUDITTYPECODE = 0)
union all
select
AUDITRECORDID
,AUDITKEY
,AUDITCHANGEAGENTID
,AUDITDATE
,AUDITTYPECODE
,GLPAYMENTMETHODREVENUETYPEMAPPINGID
,PROJECT
from (
select
JE.AUDITRECORDID
,'00000000-0000-0000-0000-000000000000' as AUDITKEY
,JE.AUDITCHANGEAGENTID
,JE.DATEADDED [AUDITDATE]
,-1 as AUDITTYPECODE
,JE.GLPAYMENTMETHODREVENUETYPEMAPPINGID
,JE.PROJECT
,ROW_NUMBER() over (partition by JE.AUDITRECORDID order by JE.AUDITDATE asc) SEQUENCE
from JOURNALENTRY_EXTAUDIT JE
inner join @JournalEntries LI on LI.ID = JE.AUDITRECORDID
where JE.AUDITTYPECODE = 0) BEFOREUPDATES
where BEFOREUPDATES.SEQUENCE = 1
union all
select
JE.AUDITRECORDID
,'00000000-0000-0000-0000-000000000000' as AUDITKEY
,JE.ADDEDBYID
,JE.DATEADDED [AUDITDATE]
,JE.AUDITTYPECODE
,JE.GLPAYMENTMETHODREVENUETYPEMAPPINGID
,JE.PROJECT
from JOURNALENTRY_EXTAUDIT JE
inner join @JournalEntries LI on LI.ID = JE.AUDITRECORDID
where JE.AUDITTYPECODE = 2 and JE.AUDITRECORDID not in (
select JE.ID from dbo.JOURNALENTRY JE inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = JE.FINANCIALTRANSACTIONLINEITEMID where LI.FINANCIALTRANSACTIONID = @REVENUEID
union all
select AUDITRECORDID
from JOURNALENTRYAUDIT JE
inner join @JournalEntries LI on LI.ID = JE.AUDITRECORDID
where JE.AUDITTYPECODE != 2)
) V1
full outer join
(select
JE.AUDITRECORDID
,JE.AUDITKEY
,JE.AUDITCHANGEAGENTID
,JE.AUDITDATE
,JE.AUDITTYPECODE
,JE.GLPAYMENTMETHODREVENUETYPEMAPPINGID
,JE.PROJECT
from JOURNALENTRY_EXTAUDIT JE
inner join @JournalEntries LI on LI.ID = JE.AUDITRECORDID
where JE.AUDITTYPECODE in (0,2)) V2 on V1.AUDITRECORDID = V2.AUDITRECORDID and V1.AUDITKEY = V2.AUDITKEY
left join dbo.GLPAYMENTMETHODREVENUETYPEMAPPING on V1.GLPAYMENTMETHODREVENUETYPEMAPPINGID = GLPAYMENTMETHODREVENUETYPEMAPPING.ID
left join dbo.GLPAYMENTMETHODREVENUETYPEMAPPING as GLPAYMENTMETHODREVENUETYPEMAPPING2 on V2.GLPAYMENTMETHODREVENUETYPEMAPPINGID = GLPAYMENTMETHODREVENUETYPEMAPPING2.ID
where
(V1.GLPAYMENTMETHODREVENUETYPEMAPPINGID != V2.GLPAYMENTMETHODREVENUETYPEMAPPINGID
or (V1.GLPAYMENTMETHODREVENUETYPEMAPPINGID is null and V2.GLPAYMENTMETHODREVENUETYPEMAPPINGID is not null)
or (V1.GLPAYMENTMETHODREVENUETYPEMAPPINGID is not null and V2.GLPAYMENTMETHODREVENUETYPEMAPPINGID is null)
)
or (V1.PROJECT != V2.PROJECT
or (V1.PROJECT is null and V2.PROJECT is not null)
or (V1.PROJECT is not null and V2.PROJECT is null)
)
) V3
cross join (
select 1 as NUM union select 2) as NUMS) V4
inner join dbo.CHANGEAGENT on V4.CHANGEAGENTID = CHANGEAGENT.ID
where OLD is not null;
return;
end