USP_SAVE_WRITEOFFADJUSTMENT
Stored procedure to log adjustments to write-off.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@WRITEOFFID | uniqueidentifier | IN | |
@WRITEOFFADJUSTMENTID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@DATE | datetime | IN | |
@POSTDATE | datetime | IN | |
@ADJUSTMENTREASON | nvarchar(300) | IN | |
@ADJUSTMENTREASONCODEID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_SAVE_WRITEOFFADJUSTMENT (
@WRITEOFFID uniqueidentifier = null
,@WRITEOFFADJUSTMENTID uniqueidentifier = null output
,@CHANGEAGENTID uniqueidentifier = null
,@CHANGEDATE datetime = null
,@DATE datetime = null
,@POSTDATE datetime = null
,@ADJUSTMENTREASON nvarchar(300) = ''
,@ADJUSTMENTREASONCODEID uniqueidentifier = null
)
with execute as owner
as
set nocount on;
--Is the write-off posted?
if not exists (
select 1
from dbo.FINANCIALTRANSACTION
where ID = @WRITEOFFID
and POSTSTATUSCODE = 2
)
raiserror (
'You cannot adjust an unposted write-off'
,13
,1
)
declare @CURRENTDATE datetime;
declare @WRITEOFFPOSTDATE datetime;
declare @CONSTITUENTID uniqueidentifier;
--JamesWill WI197067 2012-03-08 Ensure that the date used does not have a timestamp
if not @DATE is null
set @DATE = dbo.UFN_DATE_GETEARLIESTTIME(@DATE);
select @WRITEOFFADJUSTMENTID = ID
from dbo.WRITEOFFADJUSTMENT
where WRITEOFFID = @WRITEOFFID
and POSTSTATUSCODE <> 0
if @WRITEOFFADJUSTMENTID is null
set @WRITEOFFADJUSTMENTID = newid();
--kwb Create FINANCIALTRANSACTIONLINEITEMADJUSTMENT records for original write-offs that will be adjusted
exec dbo.USP_CREATEINITIALADJUSTMENTHISTORY @WRITEOFFID
,@CHANGEAGENTID
select @CONSTITUENTID = CONSTITUENTID
from dbo.FINANCIALTRANSACTION
where ID = @WRITEOFFID
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = GetDate();
--Update unposted adjustment if existing
if @WRITEOFFADJUSTMENTID is not null
and exists (
select 1
from dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT
where ID = @WRITEOFFADJUSTMENTID
)
update dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT
set ADJUSTMENTREASONCODEID = @ADJUSTMENTREASONCODEID
,REASON = @ADJUSTMENTREASON
,CONSTITUENTID = @CONSTITUENTID
,[DATE] = @DATE
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CHANGEDATE
where ID = @WRITEOFFADJUSTMENTID;
else
if @WRITEOFFADJUSTMENTID is not null
insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
ID
,ADJUSTMENTREASONCODEID
,REASON
,CONSTITUENTID
,[DATE]
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
)
values (
@WRITEOFFADJUSTMENTID
,@ADJUSTMENTREASONCODEID
,@ADJUSTMENTREASON
,@CONSTITUENTID
,@DATE
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CHANGEDATE
,@CHANGEDATE
);
update dbo.WRITEOFFADJUSTMENT
set [DATE] = @DATE
,POSTDATE = @POSTDATE
,REASON = @ADJUSTMENTREASON
,REASONCODEID = @ADJUSTMENTREASONCODEID
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CHANGEDATE
where ID = @WRITEOFFADJUSTMENTID;
if @@ROWCOUNT = 0
begin
declare @TRANSACTIONAMOUNT money;
declare @AMOUNT money;
declare @ORGANIZATIONAMOUNT money;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
select @TRANSACTIONAMOUNT = sum(WRITEOFFSPLIT.TRANSACTIONAMOUNT)
,@AMOUNT = sum(WRITEOFFSPLIT.AMOUNT)
,@ORGANIZATIONAMOUNT = sum(WRITEOFFSPLIT.ORGANIZATIONAMOUNT)
,@TRANSACTIONCURRENCYID = WRITEOFFSPLIT.TRANSACTIONCURRENCYID
,@BASECURRENCYID = WRITEOFFSPLIT.BASECURRENCYID
,@BASEEXCHANGERATEID = WRITEOFFSPLIT.BASEEXCHANGERATEID
,@ORGANIZATIONEXCHANGERATEID = WRITEOFFSPLIT.ORGANIZATIONEXCHANGERATEID
from dbo.WRITEOFFSPLIT
where WRITEOFFSPLIT.WRITEOFFID = @WRITEOFFID
group by WRITEOFFSPLIT.TRANSACTIONCURRENCYID
,WRITEOFFSPLIT.BASECURRENCYID
,WRITEOFFSPLIT.BASEEXCHANGERATEID
,WRITEOFFSPLIT.ORGANIZATIONEXCHANGERATEID;
--Log Adjustment if new
insert into dbo.WRITEOFFADJUSTMENT (
ID
,WRITEOFFID
,TRANSACTIONPREVIOUSAMOUNT
,PREVIOUSAMOUNT
,ORGANIZATIONPREVIOUSAMOUNT
,[DATE]
,POSTDATE
,POSTSTATUSCODE
,REASON
,REASONCODEID
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
)
select @WRITEOFFADJUSTMENTID
,ID
,@TRANSACTIONAMOUNT
,@AMOUNT
,@ORGANIZATIONAMOUNT
,@DATE
,@POSTDATE
,1
,@ADJUSTMENTREASON
,@ADJUSTMENTREASONCODEID
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CHANGEDATE
,@CHANGEDATE
,@TRANSACTIONCURRENCYID
,@BASECURRENCYID
,@BASEEXCHANGERATEID
,@ORGANIZATIONEXCHANGERATEID
from dbo.WRITEOFF
where ID = @WRITEOFFID;
--Save the snapshot before deleting the GL information
exec dbo.USP_ADJUSTMENTHISTORY_WRITEOFF_SAVESNAPSHOT @WRITEOFFADJUSTMENTID
,@CHANGEAGENTID;
--Log reversals in the GLTRANSACTION table work item 55993 - added postdate
exec dbo.USP_GLTRANSACTION_ADDWRITEOFFREVERSALS @WRITEOFFID
,@CHANGEAGENTID
,@CHANGEDATE
,@POSTDATE;
end
else /*make sure @WRITEOFFADJUSTMENTID gets set to the correct value */
begin
--select
-- @WRITEOFFADJUSTMENTID = ID
--from dbo.WRITEOFFADJUSTMENT
--where WRITEOFFID = @WRITEOFFID and POSTSTATUSCODE <> 0;
-- Update the post date on the GL transaction records
update dbo.JOURNALENTRY
set JOURNALENTRY.POSTDATE = @POSTDATE
,JOURNALENTRY.DATECHANGED = @CHANGEDATE
,JOURNALENTRY.CHANGEDBYID = @CHANGEAGENTID
from dbo.JOURNALENTRY as JE
inner join dbo.JOURNALENTRY_EXT as JEE on JE.ID = JEE.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI on JE.FINANCIALTRANSACTIONLINEITEMID = FTLI.ID
where FTLI.FINANCIALTRANSACTIONID = @WRITEOFFID
and JEE.OUTDATED = 0
and FTLI.POSTSTATUSCODE = 1;
-- post date for unposted reversals should match the adjustment post date
update dbo.JOURNALENTRY
set JOURNALENTRY.POSTDATE = @POSTDATE
,JOURNALENTRY.DATECHANGED = @CHANGEDATE
,JOURNALENTRY.CHANGEDBYID = @CHANGEAGENTID
from dbo.JOURNALENTRY
inner join dbo.JOURNALENTRY_EXT as JEE on JOURNALENTRY.ID = JEE.ID
inner join dbo.JOURNALENTRY as JE_REV on JEE.REVERSEDGLTRANSACTIONID = JE_REV.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI_REV on JE_REV.FINANCIALTRANSACTIONLINEITEMID = FTLI_REV.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI on FTLI.ID = JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID
where FTLI_REV.FINANCIALTRANSACTIONID = @WRITEOFFID
and FTLI.POSTSTATUSCODE = 1;
--Save the snapshot before deleting the GL information
exec dbo.USP_ADJUSTMENTHISTORY_WRITEOFF_SAVESNAPSHOT @WRITEOFFADJUSTMENTID
,@CHANGEAGENTID;
end
declare @Error nvarchar(255) = ''
if @@ROWCOUNT > 0
set @Error = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE)
if @Error <> ''
raiserror (
@Error
,13
,1
);