USP_WRITEOFF_DELETEPOSTED
Executes the "Posted Pledge Write-off: Delete" record operation.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | Input parameter indicating the ID of the record being deleted. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the delete. |
Definition
Copy
CREATE procedure dbo.USP_WRITEOFF_DELETEPOSTED
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier
)
as
set nocount on;
declare @CHANGEDATE datetime;
set @CHANGEDATE = getdate();
declare @GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier;
declare @ADJUSTMENTHISTORYWRITEOFFID uniqueidentifier;
create table #WRITEOFFGLDISTRIBUTIONTABLE
(
ID uniqueIdentifier,
GLTRANSACTIONID uniqueIdentifier
)
if (select POSTSTATUSCODE from dbo.WRITEOFF where ID = @ID) <> 0
raiserror('Unposted write-offs cannot be deleted with this task.', 13, 1);
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
exec dbo.USP_ADJUSTMENTHISTORY_WRITEOFF_FIXFORDELETE @ID, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTHISTORYWRITEOFFID output;
/* LOG REVERSAL */
if not exists (select ADJ.ID from dbo.WRITEOFFADJUSTMENT ADJ where ADJ.WRITEOFFID = @ID and ADJ.POSTSTATUSCODE = 1)
begin
declare @POSTDATE datetime;
declare @ERRORMESSAGE nvarchar(255);
select top 1 @POSTDATE = POSTDATE from dbo.WRITEOFFADJUSTMENT where WRITEOFFID = @ID and POSTSTATUSCODE = 0 order by DATEADDED desc
if @POSTDATE is null
select @POSTDATE = POSTDATE from dbo.WRITEOFF where ID = @ID;
set @ERRORMESSAGE = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE);
if @ERRORMESSAGE <> ''
raiserror(@ERRORMESSAGE, 13, 1);
--Log reversals in the GLTRANSACTION table
exec dbo.USP_GLTRANSACTION_ADDWRITEOFFREVERSALS @ID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE;
declare @LIAID uniqueidentifier = NEWID();
insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT
(ID, ADJUSTMENTREASONCODEID, REASON, DATE, CONSTITUENTID,
DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID)
values
(@LIAID, NULL, '', @POSTDATE, NULL,
@CHANGEDATE, @CHANGEDATE, @CHANGEAGENTID, @CHANGEAGENTID)
update LI set
FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @LIAID
from
dbo.FINANCIALTRANSACTIONLINEITEM LI
where
LI.FINANCIALTRANSACTIONID = @ID
and LI.TYPECODE = 1
and LI.POSTSTATUSCODE = 1
end
else --Update the post date of the existing reversal rows to today's date
insert into #WRITEOFFGLDISTRIBUTIONTABLE(ID, GLTRANSACTIONID)
select ID, GLTRANSACTIONID from dbo.UFN_JOURNALENTRY_GETWRITEOFFGLDISTRIBUTION(@ID);
begin
update dbo.GLTRANSACTION
set
POSTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@CHANGEDATE),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where ID in (
select
REVERSAL.ID
from
#WRITEOFFGLDISTRIBUTIONTABLE WRITEOFFGLDISTRIBUTION
inner join
dbo.GLTRANSACTION on WRITEOFFGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
inner join
dbo.GLTRANSACTION REVERSAL on GLTRANSACTION.ID = REVERSAL.REVERSEDGLTRANSACTIONID
where
REVERSAL.POSTSTATUSCODE = 1);
end
--Update the new ADJUSTMENTHISTORYWRITEOFF record with one of the newly created GLTRANSACTION reversal IDs
update dbo.ADJUSTMENTHISTORYWRITEOFF
set GLTRANSACTIONID = (
select top 1 REVERSAL.ID from #WRITEOFFGLDISTRIBUTIONTABLE WRITEOFFGLDISTRIBUTION
inner join dbo.GLTRANSACTION on WRITEOFFGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
inner join dbo.GLTRANSACTION REVERSAL on GLTRANSACTION.ID = REVERSAL.REVERSEDGLTRANSACTIONID
order by REVERSAL.DATEADDED desc)
where ID = @ADJUSTMENTHISTORYWRITEOFFID;
-- Delete unposted write-off distributions.
delete from dbo.WRITEOFFGLDISTRIBUTION where ID in (
select WRITEOFFGLDISTRIBUTION.ID
from #WRITEOFFGLDISTRIBUTIONTABLE WRITEOFFGLDISTRIBUTION
inner join dbo.GLTRANSACTION on WRITEOFFGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
where GLTRANSACTION.POSTSTATUSCODE <> 0
);
/* DELETE WRITE-OFF */
exec dbo.USP_WRITEOFF_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;
return 0;