USP_ADJUSTMENTHISTORY_REVENUE_FIXFORDELETE
Fixes adjustment history for a revenue item to prepare for the deletion of that revenue.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@DATECHANGED | datetime | IN | |
@REVERSALADJUSTMENTHISTORYID | uniqueidentifier | INOUT |
Definition
Copy
CREATE procedure dbo.USP_ADJUSTMENTHISTORY_REVENUE_FIXFORDELETE
(
@REVENUEID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@DATECHANGED datetime = null,
@REVERSALADJUSTMENTHISTORYID uniqueidentifier = null output
)
as
set nocount on;
if @DATECHANGED is null
set @DATECHANGED = getdate();
declare @UNPOSTEDADJUSTMENTID uniqueidentifier;
declare @UNPOSTEDADJUSTMENTHISTORYID uniqueidentifier;
declare @LASTPOSTEDADJUSTMENTID uniqueidentifier;
declare @LASTPOSTEDADJUSTMENTHISTORYID uniqueidentifier;
/*determine if there is an unposted adjustment for this revenue*/
select
@UNPOSTEDADJUSTMENTID = ID
from dbo.ADJUSTMENT
where REVENUEID = @REVENUEID and POSTSTATUSCODE = 1;
select
@UNPOSTEDADJUSTMENTHISTORYID = ID
from dbo.ADJUSTMENTHISTORY
where ADJUSTMENTID = @UNPOSTEDADJUSTMENTID;
/*get the most recent posted adjustment so we can write out GL history for it*/
select top 1
@LASTPOSTEDADJUSTMENTID = ID
from dbo.ADJUSTMENT
where REVENUEID = @REVENUEID and POSTSTATUSCODE = 0
order by TSLONG desc;
/*if there is an unposted adjustment, the last posted adjustment will already have distribution information in its history.*/
/* so do nothing */
/*write the current GL information to the history for the last posted adjustment only if there was not an adjustment after it*/
if @UNPOSTEDADJUSTMENTID is null and not @LASTPOSTEDADJUSTMENTID is null
begin
select @LASTPOSTEDADJUSTMENTHISTORYID = ID
from dbo.ADJUSTMENTHISTORY
where ADJUSTMENTID = @LASTPOSTEDADJUSTMENTID;
if not @LASTPOSTEDADJUSTMENTHISTORYID is null
insert into dbo.ADJUSTMENTHISTORYDISTRIBUTION(ADJUSTMENTHISTORYID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
select
@LASTPOSTEDADJUSTMENTHISTORYID,
1, --'Adjustment'
TRANSACTIONTYPECODE,
ACCOUNT,
PROJECT,
'', --The function does not return a reference
AMOUNT,
@CHANGEAGENTID,
@CHANGEAGENTID,
@DATECHANGED,
@DATECHANGED,
TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONCURRENCYID
from dbo.UFN_REVENUE_GETGLDISTRIBUTION(@REVENUEID);
end
/*log the history header for the reversal*/
set @REVERSALADJUSTMENTHISTORYID = newid();
insert into dbo.ADJUSTMENTHISTORY(ID, ADJUSTMENTID, REVENUEIDENTIFIER, ADJUSTMENTIDENTIFIER, CONSTITUENTNAME, REVENUETYPE, REVENUEDATE, ADJUSTMENTDATE, ADJUSTMENTPOSTDATE, ADJUSTMENTREASON, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
@REVERSALADJUSTMENTHISTORYID,
null,
cast(@REVENUEID as nvarchar(36)),
cast(newid() as nvarchar(36)), --This is just something to group by
CONSTITUENT.NAME,
FINANCIALTRANSACTION.TYPE,
FINANCIALTRANSACTION.DATE, --This is the postdate of the reversal that got logged, so we'll use it too
@DATECHANGED,
dbo.UFN_DATE_GETEARLIESTTIME(@DATECHANGED), --The adjustment post date needs to be the date of the deletion
'',
@CHANGEAGENTID,
@CHANGEAGENTID,
@DATECHANGED,
@DATECHANGED
from dbo.FINANCIALTRANSACTION
inner join dbo.CONSTITUENT on CONSTITUENT.ID = FINANCIALTRANSACTION.CONSTITUENTID
where FINANCIALTRANSACTION.ID = @REVENUEID;
insert into dbo.ADJUSTMENTHISTORYDETAIL(ID, ADJUSTMENTHISTORYID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE)
values(newid(), @REVERSALADJUSTMENTHISTORYID, 'Deleted', '', '', @CHANGEAGENTID, @CHANGEAGENTID, @DATECHANGED, @DATECHANGED, '', '', '', '');
/*if there's not an unposted adjustment, the reversal for the deletion will be the calculated GL information*/
if @UNPOSTEDADJUSTMENTID is null
insert into dbo.ADJUSTMENTHISTORYDISTRIBUTION(ADJUSTMENTHISTORYID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
select
@REVERSALADJUSTMENTHISTORYID,
0, --'Reversal'
case TRANSACTIONTYPECODE when 0 then 1 else 0 end,
ACCOUNT,
PROJECT,
'', --The function does not return a reference
AMOUNT,
@CHANGEAGENTID,
@CHANGEAGENTID,
@DATECHANGED,
@DATECHANGED,
TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONCURRENCYID
from dbo.UFN_REVENUE_GETGLDISTRIBUTION(@REVENUEID);
else /*otherwise, the reversal will be the reversal from the unposted adjustment */
update dbo.ADJUSTMENTHISTORYDISTRIBUTION
set ADJUSTMENTHISTORYID = @REVERSALADJUSTMENTHISTORYID
where ADJUSTMENTHISTORYID = @UNPOSTEDADJUSTMENTHISTORYID and TYPECODE = 0 --We only want the reversals
/*if it exists, delete the unposted adjustment history. Since this will never post, it will never interact with GL and we don't
need to remember it.*/
declare @CONTEXTCACHE varbinary(128);
set @CONTEXTCACHE = CONTEXT_INFO();
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
if not @UNPOSTEDADJUSTMENTID is null /*ADJUSTMENTHISTORY.ADJUSTMENTID is allowed to be null, so check first*/
delete from dbo.ADJUSTMENTHISTORY where ADJUSTMENTID = @UNPOSTEDADJUSTMENTID
if not @CONTEXTCACHE is null
set CONTEXT_INFO @CONTEXTCACHE;