USP_SAVE_UNREALIZEDGAINLOSSADJUSTMENT
Stored procedure to log adjustments to unrealized gains and losses.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@ADJUSTMENTID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@DATE | datetime | IN | |
@POSTDATE | datetime | IN | |
@ADJUSTMENTREASON | nvarchar(300) | IN | |
@ISNEWREVENUE | bit | IN | |
@ADJUSTMENTREASONCODEID | uniqueidentifier | IN | |
@POSTSTATUSCODE | tinyint | IN | |
@ADJUSTMENTCODE | tinyint | IN |
Definition
Copy
CREATE procedure dbo.USP_SAVE_UNREALIZEDGAINLOSSADJUSTMENT
(
@REVENUEID uniqueidentifier = null,
@ADJUSTMENTID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null,
@DATE datetime = null,
@POSTDATE datetime = null,
@ADJUSTMENTREASON nvarchar(300) = null,
@ISNEWREVENUE bit = 0,
@ADJUSTMENTREASONCODEID uniqueidentifier = null,
@POSTSTATUSCODE tinyint = 1,
@ADJUSTMENTCODE tinyint = 0
)
with execute as owner
as
/*call this procedure before making changes to the revenue tables.*/
set nocount on;
declare @REVENUEPOSTDATE datetime;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
if @ADJUSTMENTID is null
set @ADJUSTMENTID = newid();
--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);
--Is the gain/loss posted?
if dbo.UFN_REVENUE_ISUNREALIZEDGAINLOSSPOSTED(@REVENUEID) = 0
raiserror('You cannot adjust unposted gain/loss', 13, 1);
--kwb Create FINANCIALTRANSACTIONLINEITEMADJUSTMENT records for original write-offs that will be adjusted
exec dbo.USP_CREATEINITIALADJUSTMENTHISTORY @REVENUEID, @CHANGEAGENTID
--Update unposted adjustment if existing
update
dbo.UNREALIZEDGAINLOSSADJUSTMENT
set
DATE = @DATE,
POSTDATE = @POSTDATE,
REASON = @ADJUSTMENTREASON,
REASONCODEID = @ADJUSTMENTREASONCODEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE,
POSTSTATUSCODE = @POSTSTATUSCODE,
ADJUSTMENTCODE = case when ADJUSTMENTCODE = 0 then @ADJUSTMENTCODE else ADJUSTMENTCODE end
where
REVENUEID = @REVENUEID
and POSTSTATUSCODE <> 0;
if @@ROWCOUNT = 0
begin
--Log Adjustment if new
insert into dbo.UNREALIZEDGAINLOSSADJUSTMENT
(
ID,
REVENUEID,
PREVIOUSAMOUNT,
DATE,
POSTDATE,
POSTSTATUSCODE,
REASON,
REASONCODEID,
ADJUSTMENTCODE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED,
BASECURRENCYID,
TRANSACTIONCURRENCYID,
TRANSACTIONPREVIOUSAMOUNT,
BASEEXCHANGERATEID,
ORGANIZATIONPREVIOUSAMOUNT,
ORGANIZATIONEXCHANGERATEID
)
select
@ADJUSTMENTID,
REVENUE.ID,
AMOUNT,
@DATE,
@POSTDATE,
@POSTSTATUSCODE,
@ADJUSTMENTREASON,
@ADJUSTMENTREASONCODEID,
@ADJUSTMENTCODE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
REVENUE.BASECURRENCYID,
REVENUE.TRANSACTIONCURRENCYID,
REVENUE.TRANSACTIONAMOUNT,
REVENUE.BASEEXCHANGERATEID,
REVENUE.ORGANIZATIONAMOUNT,
REVENUE.ORGANIZATIONEXCHANGERATEID
from
dbo.REVENUE
where
REVENUE.ID = @REVENUEID;
--Save the snapshot before deleting the GL information
exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVESNAPSHOT @ADJUSTMENTID, @CHANGEAGENTID, @ISNEWREVENUE;
--Log reversals in the GLTRANSACTION table
exec dbo.USP_GLTRANSACTION_ADDUNREALIZEDGAINLOSSREVERSALS @REVENUEID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE;
end
else /*make sure @ADJUSTMENTID gets set to the correct value*/
begin
select
@ADJUSTMENTID = ID
from
dbo.UNREALIZEDGAINLOSSADJUSTMENT
where
REVENUEID = @REVENUEID
and POSTSTATUSCODE <> 0;
-- Update the post date on the GL transaction records
update
dbo.GLTRANSACTION
set
GLTRANSACTION.POSTDATE = @POSTDATE,
GLTRANSACTION.DATECHANGED = @CHANGEDATE,
GLTRANSACTION.CHANGEDBYID = @CHANGEAGENTID
where GLTRANSACTION.ID in (select GLTRANSACTION.ID
from
dbo.GLTRANSACTION
inner join dbo.UNREALIZEDGAINLOSSGLDISTRIBUTION on GLTRANSACTION.ID = UNREALIZEDGAINLOSSGLDISTRIBUTION.GLTRANSACTIONID
where
UNREALIZEDGAINLOSSGLDISTRIBUTION.REVENUEID = @REVENUEID
and UNREALIZEDGAINLOSSGLDISTRIBUTION.OUTDATED = 0);
-- post date for unposted reversals should match the adjustment post date
update
dbo.GLTRANSACTION
set
GLTRANSACTION.POSTDATE = @POSTDATE,
GLTRANSACTION.DATECHANGED = @CHANGEDATE,
GLTRANSACTION.CHANGEDBYID = @CHANGEAGENTID
where GLTRANSACTION.ID in (select GLTRANSACTION.ID
from
dbo.GLTRANSACTION
inner join dbo.UNREALIZEDGAINLOSSGLDISTRIBUTION on GLTRANSACTION.REVERSEDGLTRANSACTIONID = UNREALIZEDGAINLOSSGLDISTRIBUTION.GLTRANSACTIONID
where
UNREALIZEDGAINLOSSGLDISTRIBUTION.REVENUEID = @REVENUEID
and GLTRANSACTION.POSTSTATUSCODE = 1);
--Save the snapshot
exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVESNAPSHOT @ADJUSTMENTID, @CHANGEAGENTID;
end
declare @Error nvarchar(255) = '';
-- Bug 70136 - Null post date if adjustment is DNP
if @@ROWCOUNT > 0 and @POSTSTATUSCODE <> 2
set @Error = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE)
if @Error <> ''
raiserror(@Error, 13, 1)