USP_ADJUSTMENTHISTORY_WRITEOFF_FIXFORDELETE
Fixes adjustment history for a write-off item to prepare for the deletion of that write-off.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@WRITEOFFID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@REVERSALADJUSTMENTHISTORYWRITEOFFID | uniqueidentifier | INOUT |
Definition
Copy
CREATE procedure dbo.USP_ADJUSTMENTHISTORY_WRITEOFF_FIXFORDELETE
(
@WRITEOFFID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@CHANGEDATE datetime = null,
@REVERSALADJUSTMENTHISTORYWRITEOFFID uniqueidentifier = null output
)
as
set nocount on;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
declare @UNPOSTEDWRITEOFFADJUSTMENTID uniqueidentifier;
declare @UNPOSTEDADJUSTMENTHISTORYWRITEOFFID uniqueidentifier;
declare @LASTPOSTEDWRITEOFFADJUSTMENTID uniqueidentifier;
declare @LASTPOSTEDADJUSTMENTHISTORYWRITEOFFID uniqueidentifier;
--declare @REVERSALADJUSTMENTHISTORYWRITEOFFID uniqueidentifier;
/*determine if there is an unposted adjustment for this write-off*/
select
@UNPOSTEDWRITEOFFADJUSTMENTID = ID
from dbo.WRITEOFFADJUSTMENT
where WRITEOFFID = @WRITEOFFID and WRITEOFFADJUSTMENT.POSTSTATUSCODE = 1;
select
@UNPOSTEDADJUSTMENTHISTORYWRITEOFFID = ID
from dbo.ADJUSTMENTHISTORYWRITEOFF
where WRITEOFFADJUSTMENTID = @UNPOSTEDWRITEOFFADJUSTMENTID;
/*get the most recent posted adjustment so we can write out GL history for it*/
select top 1
@LASTPOSTEDWRITEOFFADJUSTMENTID = ID
from dbo.WRITEOFFADJUSTMENT
where WRITEOFFID = @WRITEOFFID and WRITEOFFADJUSTMENT.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 @UNPOSTEDWRITEOFFADJUSTMENTID is null and not @LASTPOSTEDWRITEOFFADJUSTMENTID is null
begin
select @LASTPOSTEDADJUSTMENTHISTORYWRITEOFFID = ID
from dbo.ADJUSTMENTHISTORYWRITEOFF
where WRITEOFFADJUSTMENTID = @LASTPOSTEDWRITEOFFADJUSTMENTID;
if not @LASTPOSTEDADJUSTMENTHISTORYWRITEOFFID is null
insert into dbo.ADJUSTMENTHISTORYWRITEOFFDISTRIBUTION(ADJUSTMENTHISTORYWRITEOFFID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
select
@LASTPOSTEDADJUSTMENTHISTORYWRITEOFFID,
1, --'Adjustment'
TRANSACTIONTYPECODE,
ACCOUNT,
PROJECT,
REFERENCE,
AMOUNT,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONCURRENCYID
from dbo.UFN_JOURNALENTRY_GETWRITEOFFGLDISTRIBUTION(@WRITEOFFID);
end
/*log the history header for the reversal*/
set @REVERSALADJUSTMENTHISTORYWRITEOFFID = newid();
insert into dbo.ADJUSTMENTHISTORYWRITEOFF(ID,WRITEOFFADJUSTMENTID, WRITEOFFIDENTIFIER, ADJUSTMENTIDENTIFIER, REVENUETYPE, CONSTITUENTNAME, DATE, ADJUSTMENTDATE, ADJUSTMENTPOSTDATE, ADJUSTMENTREASON, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
@REVERSALADJUSTMENTHISTORYWRITEOFFID,
null,
cast(@WRITEOFFID as nvarchar(36)),
cast(newid() as nvarchar(36)), --This is just something to group by
FINANCIALTRANSACTION.TYPE,
CONSTITUENT.NAME,
FINANCIALTRANSACTION.DATE, --This is the postdate of the reversal that got logged, so we'll use it too
@CHANGEDATE,
dbo.UFN_DATE_GETEARLIESTTIME(@CHANGEDATE), --The adjustment post date needs to be the date of the deletion
'' as ADJUSTMENTREASON,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from dbo.WRITEOFF
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = WRITEOFF.REVENUEID
inner join dbo.CONSTITUENT on CONSTITUENT.ID = FINANCIALTRANSACTION.CONSTITUENTID
where WRITEOFF.ID = @WRITEOFFID;
insert into dbo.ADJUSTMENTHISTORYWRITEOFFDETAIL(ID, ADJUSTMENTHISTORYWRITEOFFID, ADJUSTEDFIELD,ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE)
select
newid(),
@REVERSALADJUSTMENTHISTORYWRITEOFFID,
'Deleted write-off',
'',
'',
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
'',
'',
'',
'';
/*if there's not an unposted adjustment, the reversal for the deletion will be the calculated GL information*/
if @UNPOSTEDWRITEOFFADJUSTMENTID is null
insert into dbo.ADJUSTMENTHISTORYWRITEOFFDISTRIBUTION(ADJUSTMENTHISTORYWRITEOFFID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
select
@REVERSALADJUSTMENTHISTORYWRITEOFFID,
0, --Reversal
case TRANSACTIONTYPECODE when 0 then 1 else 0 end,
ACCOUNT,
PROJECT,
REFERENCE,
AMOUNT,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONCURRENCYID
from dbo.UFN_JOURNALENTRY_GETWRITEOFFGLDISTRIBUTION(@WRITEOFFID);
else
update dbo.ADJUSTMENTHISTORYWRITEOFFDISTRIBUTION
set ADJUSTMENTHISTORYWRITEOFFID = @REVERSALADJUSTMENTHISTORYWRITEOFFID
where ADJUSTMENTHISTORYWRITEOFFID = @UNPOSTEDADJUSTMENTHISTORYWRITEOFFID and TYPECODE = 0 --We only want the reversals
declare @CONTEXTCACHE varbinary(128);
set @CONTEXTCACHE = CONTEXT_INFO();
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
if not @UNPOSTEDWRITEOFFADJUSTMENTID is null /*ADJUSTMENTWRITEOFFHISTORY.WRITEOFFADJUSTMENTID is allowed to be null, so check first*/
delete from dbo.ADJUSTMENTHISTORYWRITEOFF where WRITEOFFADJUSTMENTID = @UNPOSTEDWRITEOFFADJUSTMENTID
if not @CONTEXTCACHE is null
set CONTEXT_INFO @CONTEXTCACHE;