UFN_FINANCIALTRANSACTION_GETHISTORY
Returns the history entries associated with a given financial transaction.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@FINANCIALTRANSACTIONID | uniqueidentifier | IN | |
@USERID | uniqueidentifier | IN | |
@ACTIONTYPECODE | tinyint | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@RECORDTYPECODE | tinyint | IN | |
@INCLUDELINEITEMS | bit | IN |
Definition
Copy
CREATE function dbo.UFN_FINANCIALTRANSACTION_GETHISTORY
(
@FINANCIALTRANSACTIONID uniqueidentifier,
@USERID uniqueidentifier,
@ACTIONTYPECODE tinyint,
@STARTDATE datetime,
@ENDDATE datetime,
@RECORDTYPECODE tinyint = 0,
@INCLUDELINEITEMS bit = 1
)
returns @HISTORY table
(
RECORDID uniqueidentifier,
AUDITDATE datetime,
CHANGEDBYUSER nvarchar(128),
PROCESS nvarchar(255),
FIELD nvarchar(128),
OLD nvarchar(4000),
NEW nvarchar(4000),
SEQUENCE int,
ACTION nvarchar(8),
CHANGEDBYAPP nvarchar(200)
)
as begin
declare @USERNAME nvarchar(128);
-- If we are including a child object then we need to get the date added
if (@INCLUDELINEITEMS = 1) and ((@RECORDTYPECODE = 0) or (@RECORDTYPECODE = 2)) or (@RECORDTYPECODE > 2)
begin
declare @FINANCIALTRANSACTIONDATEADDED datetime;
select
@FINANCIALTRANSACTIONDATEADDED = DATEADDED
from dbo.FINANCIALTRANSACTION
where ID = @FINANCIALTRANSACTIONID;
end
if not @USERID is null
select
@USERNAME = USERNAME
from dbo.APPUSER
where APPUSER.ID = @USERID;
else
set @USERNAME = '';
--Handle generic transaction fields
if (@RECORDTYPECODE = 0) or (@RECORDTYPECODE = 1)
begin
-- Get the insert into the financial transaction table
if (@ACTIONTYPECODE = 0) or (@ACTIONTYPECODE = 1)
begin
insert into @HISTORY(RECORDID, AUDITDATE, ACTION, FIELD, OLD, NEW, CHANGEDBYUSER, PROCESS, CHANGEDBYAPP, SEQUENCE)
select
RECORDID,
DATEADDED,
'Insert' as [ACTION],
FIELD,
OLD,
NEW,
CHANGEDBYUSER,
PROCESS,
CHANGEDBYAPP,
-1 as [SEQUENCE]
from dbo.UFN_AUDIT_GETINSERTS_FORTABLE('FINANCIALTRANSACTION', 'ID', @FINANCIALTRANSACTIONID, 0, null)
where (FIELD <> 'TYPECODE')
and (@USERID is null or CHANGEDBYUSER = @USERNAME)
and (@STARTDATE is null or DATEADDED >= @STARTDATE)
and (@ENDDATE is null or DATEADDED <= @ENDDATE);
end
if (@ACTIONTYPECODE = 0) or (@ACTIONTYPECODE = 2)
begin
-- Get updates to the financial transaction table
insert into @HISTORY(RECORDID, AUDITDATE, ACTION, FIELD, OLD, NEW, CHANGEDBYUSER, PROCESS, CHANGEDBYAPP, SEQUENCE)
select
@FINANCIALTRANSACTIONID as [RECORDID],
[CHANGES].DATECHANGED,
'Update' as [ACTION],
[DETAIL].FIELD,
[DETAIL].OLD,
[DETAIL].NEW,
[CHANGES].CHANGEDBYUSER,
'' as [PROCESS],
[CHANGES].CHANGEDBYAPP,
0 as [SEQUENCE]
from dbo.UFN_AUDIT_GETRECENTCHANGES_FORTABLE('FINANCIALTRANSACTION', 500, null, null, 0, 1, 0, null, null, @FINANCIALTRANSACTIONID) as [CHANGES]
cross apply dbo.UFN_AUDIT_GETDETAIL('FINANCIALTRANSACTIONAUDIT', [CHANGES].AUDITKEY, @FINANCIALTRANSACTIONID ) as [DETAIL]
where ( [DETAIL].FIELD <> 'DATECHANGED' and [DETAIL].FIELD <> 'CHANGEDBYID' and [DETAIL].FIELD <> 'ADDEDBYID' and [DETAIL].FIELD <> 'DATEADDED' and [DETAIL].FIELD <> 'TYPECODE')
and (@USERID is null or CHANGEDBYUSER = @USERNAME)
and (@ACTIONTYPECODE = 0 or @ACTIONTYPECODE = 2)
and (@STARTDATE is null or [CHANGES].DATECHANGED >= @STARTDATE)
and (@ENDDATE is null or [CHANGES].DATECHANGED <= @ENDDATE);
end
end
-- Handle generic line item fields
-- Including a way for individual history lists to not expose the line item fields if they do not support a line item.
if (@INCLUDELINEITEMS = 1) and ((@RECORDTYPECODE = 0) or (@RECORDTYPECODE = 2))
begin
insert into @HISTORY(RECORDID, AUDITDATE, ACTION, FIELD, OLD, NEW, CHANGEDBYUSER, PROCESS, CHANGEDBYAPP, SEQUENCE)
select
RECORDID,
case when ACTION = 'Insert' then DATEADDED when ACTION = 'Update' then DATECHANGED else AUDITDATE end as [AUDITDATE],
ACTION,
case (select NEW from dbo.UFN_AUDIT_GETINSERTS_FORTABLE_BYFIELD('TYPECODE', 'FINANCIALTRANSACTIONLINEITEM', 'ID', RECORDID, 1, null))
when 'Standard' then
'Line item:' + FIELD
when 'Reversal' then
'Reversal:' + FIELD
when 'Application' then
'Application:' + FIELD
end,
OLD,
NEW,
CHANGEDBYUSER,
'' as [PROCESS],
CHANGEDBYAPP,
50 as [SEQUENCE]
from dbo.UFN_AUDIT_GETDETAILFORCHILDTABLE_BYFIELDLIST('AMOUNT,SEQUENCE,DESCRIPTION', 'FINANCIALTRANSACTIONLINEITEM', 'FINANCIALTRANSACTIONID', @FINANCIALTRANSACTIONID, @FINANCIALTRANSACTIONDATEADDED, '', '')
where (@ACTIONTYPECODE = 0)
or ((@ACTIONTYPECODE = 1) and (ACTION = 'Insert'))
or ((@ACTIONTYPECODE = 2) and (ACTION = 'Update'))
or ((@ACTIONTYPECODE = 3) and (ACTION = 'Delete'));
end
-- Handle child record types
insert into @HISTORY(RECORDID, AUDITDATE, ACTION, FIELD, OLD, NEW, CHANGEDBYUSER, PROCESS, CHANGEDBYAPP, SEQUENCE)
select
RECORDID,
case when ACTION = 'Insert' then DATEADDED when ACTION = 'Update' then DATECHANGED else AUDITDATE end as [AUDITDATE],
ACTION,
FIELD,
OLD,
NEW,
CHANGEDBYUSER,
'' as [PROCESS],
CHANGEDBYAPP,
130 as [SEQUENCE]
from dbo.UFN_AUDIT_GETDETAILFORCHILDTABLE_BYFIELDLIST('DATEENTERED,TITLE,AUTHORID,TEXTNOTE,FINANCIALTRANSACTIONNOTETYPECODEID', 'FINANCIALTRANSACTIONNOTE', 'FINANCIALTRANSACTIONID', @FINANCIALTRANSACTIONID, @FINANCIALTRANSACTIONDATEADDED, 'Note', '')
where @RECORDTYPECODE = 0 or @RECORDTYPECODE = 3
union all
select
RECORDID,
case when ACTION = 'Insert' then DATEADDED when ACTION = 'Update' then DATECHANGED else AUDITDATE end as [AUDITDATE],
ACTION,
FIELD,
OLD,
NEW,
CHANGEDBYUSER,
'' as [PROCESS],
CHANGEDBYAPP,
131 as [SEQUENCE]
from dbo.UFN_AUDIT_GETDETAILFORCHILDTABLE_BYFIELDLIST('DATEENTERED,TITLE,AUTHORID,FINANCIALTRANSACTIONMEDIALINKTYPECODEID,MEDIAURL', 'FINANCIALTRANSACTIONMEDIALINK', 'FINANCIALTRANSACTIONID', @FINANCIALTRANSACTIONID, @FINANCIALTRANSACTIONDATEADDED, 'Media link', '')
where @RECORDTYPECODE = 0 or @RECORDTYPECODE = 3
union all
select
RECORDID,
case when ACTION = 'Insert' then DATEADDED when ACTION = 'Update' then DATECHANGED else AUDITDATE end as [AUDITDATE],
ACTION,
FIELD,
OLD,
NEW,
CHANGEDBYUSER,
'' as [PROCESS],
CHANGEDBYAPP,
132 as [SEQUENCE]
from dbo.UFN_AUDIT_GETDETAILFORCHILDTABLE_BYFIELDLIST('DATEENTERED,TITLE,AUTHORID,FINANCIALTRANSACTIONATTACHMENTTYPECODEID,FILENAME', 'FINANCIALTRANSACTIONATTACHMENT', 'FINANCIALTRANSACTIONID', @FINANCIALTRANSACTIONID, @FINANCIALTRANSACTIONDATEADDED, 'Attachment', '')
where @RECORDTYPECODE = 0 or @RECORDTYPECODE = 3
return;
end