UFN_ADJUSTMENTHISTORY_GETDISTRIBUTION
Returns the GL distribution for an adjustment history item.
Return
Return Type |
---|
table |
Definition
Copy
CREATE function dbo.UFN_ADJUSTMENTHISTORY_GETDISTRIBUTION
(
)
returns @RESULT table
(
ID nvarchar(36),
ADJUSTMENTHISTORYID uniqueidentifier,
TYPECODE tinyint,
TYPE nvarchar(20),
TRANSACTIONTYPECODE tinyint,
TRANSACTIONTYPE nvarchar(50),
ACCOUNT nvarchar(100),
PROJECT nvarchar(100),
REFERENCE nvarchar(255),
AMOUNT money
)
as
begin
declare @TEMP table
(
ID nvarchar(36),
ADJUSTMENTHISTORYID uniqueidentifier,
TYPECODE tinyint,
TYPE nvarchar(20),
TRANSACTIONTYPECODE tinyint,
TRANSACTIONTYPE nvarchar(50),
ACCOUNT nvarchar(100),
PROJECT nvarchar(100),
REFERENCE nvarchar(255),
AMOUNT money
);
declare @REVENUEID uniqueidentifier;
declare @ADJUSTMENTHISTORYID uniqueidentifier;
declare NEEDSGLCURSOR cursor local fast_forward for
select
ADJUSTMENTHISTORYID
from @TEMP
where ADJUSTMENTHISTORYID not in (select ADJUSTMENTHISTORYID from @TEMP where TYPECODE = 1);
--JamesWill 03/11/2008 Need to account for revenues added by the "Add revenue to posted" button. These will not have a distribution saved until after they are posted.
declare NEWREVENUE cursor local fast_forward for
select
ADJUSTMENTHISTORY.ID
from dbo.ADJUSTMENTHISTORY
left join @TEMP as [R] on [R].ADJUSTMENTHISTORYID = ADJUSTMENTHISTORY.ID
where [R].ID is null;
insert into @TEMP(ID, ADJUSTMENTHISTORYID, TYPECODE, TYPE, TRANSACTIONTYPECODE, TRANSACTIONTYPE, ACCOUNT, PROJECT, REFERENCE, AMOUNT)
select
cast(ID as nvarchar(36)),
ADJUSTMENTHISTORYID,
TYPECODE,
TYPE,
TRANSACTIONTYPECODE,
TRANSACTIONTYPE,
ACCOUNT,
PROJECT,
REFERENCE,
AMOUNT
from dbo.ADJUSTMENTHISTORYDISTRIBUTION;
/*for all the adjustmenthistories where the GL distribution hasn't been stored, return the calculated distribution*/
open NEEDSGLCURSOR;
fetch next from NEEDSGLCURSOR into @ADJUSTMENTHISTORYID;
while @@FETCH_STATUS = 0
begin
set @REVENUEID = null;
/*this should only be the case for undeleted revenue, so find that revenue*/
select
@REVENUEID = ADJUSTMENT.REVENUEID
from dbo.ADJUSTMENT
inner join dbo.ADJUSTMENTHISTORY on ADJUSTMENTHISTORY.ADJUSTMENTID = ADJUSTMENT.ID
where ADJUSTMENTHISTORY.ID = @ADJUSTMENTHISTORYID;
if not @REVENUEID is null /*if we couldn't find the revenue, there's no sense in finding its GL info*/
insert into @TEMP(ID, ADJUSTMENTHISTORYID, TYPECODE, TYPE, TRANSACTIONTYPECODE, TRANSACTIONTYPE, ACCOUNT, PROJECT, REFERENCE, AMOUNT)
select
cast(row_number() over (order by AMOUNT) as nvarchar(36)),
@ADJUSTMENTHISTORYID,
1,
'Adjustment',
TRANSACTIONTYPECODE,
DEBITCREDIT,
ACCOUNT,
PROJECT,
REFERENCE,
AMOUNT
from dbo.UFN_REVENUE_GETGLDISTRIBUTION(@REVENUEID);
fetch next from NEEDSGLCURSOR into @ADJUSTMENTHISTORYID;
end
--When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long
close NEEDSGLCURSOR;
deallocate NEEDSGLCURSOR;
--JamesWill 03/11/2008 Need to account for revenues added by the "Add revenue to posted" button. These will not have a distribution saved until after they are posted.
open NEWREVENUE;
fetch next from NEWREVENUE into @ADJUSTMENTHISTORYID;
while @@FETCH_STATUS = 0
begin
set @REVENUEID = null
select
@REVENUEID = ADJUSTMENT.REVENUEID
from dbo.ADJUSTMENT
inner join dbo.ADJUSTMENTHISTORY on ADJUSTMENTHISTORY.ADJUSTMENTID = ADJUSTMENT.ID
where ADJUSTMENTHISTORY.ID = @ADJUSTMENTHISTORYID;
if not @REVENUEID is null
insert into @TEMP(ID, ADJUSTMENTHISTORYID, TYPECODE, TYPE, TRANSACTIONTYPECODE, TRANSACTIONTYPE, ACCOUNT, PROJECT, REFERENCE, AMOUNT)
select
cast(row_number() over (order by AMOUNT) as nvarchar(36)),
@ADJUSTMENTHISTORYID,
1,
'Adjustment',
TRANSACTIONTYPECODE,
DEBITCREDIT,
ACCOUNT,
PROJECT,
REFERENCE,
AMOUNT
from dbo.UFN_REVENUE_GETGLDISTRIBUTION(@REVENUEID);
fetch next from NEWREVENUE into @ADJUSTMENTHISTORYID;
end
--When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long
close NEWREVENUE;
deallocate NEWREVENUE;
--Make sure every row in @RESULT has a unique ID
insert into @RESULT(ID, ADJUSTMENTHISTORYID, TYPECODE, TYPE, TRANSACTIONTYPECODE, TRANSACTIONTYPE, ACCOUNT, PROJECT, REFERENCE, AMOUNT)
select
cast(row_number() over (order by AMOUNT) as nvarchar(36)),
ADJUSTMENTHISTORYID,
TYPECODE,
TYPE,
TRANSACTIONTYPECODE,
TRANSACTIONTYPE,
ACCOUNT,
PROJECT,
REFERENCE,
AMOUNT
from @TEMP
return;
end