USP_GLTRANSACTION_ADDUNREALIZEDGAINLOSSREVERSALS
Adds unrealized gain/loss reversal transactions for the given revenue record.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@POSTDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_GLTRANSACTION_ADDUNREALIZEDGAINLOSSREVERSALS
(
@REVENUEID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null,
@POSTDATE datetime = null
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
declare @JOURNAL nvarchar(50);
set @JOURNAL = 'Blackbaud Enterprise';
--Get the postdate for REVERSAL from the last adjustment posted
if @POSTDATE is null
select top 1 @POSTDATE = POSTDATE from dbo.UNREALIZEDGAINLOSSADJUSTMENT where REVENUEID = @REVENUEID and POSTSTATUSCODE = 0 order by DATEADDED desc;
--If there are no posted adjustments then get the postdate for REVERSAL from the REVENUE record
if @POSTDATE is null
select @POSTDATE = POSTDATE from dbo.REVENUE where ID = @REVENUEID;
declare @REVERSALS table(
ORIGINALTRANSACTIONID uniqueidentifier,
REVERSALTRANSACTIONID uniqueidentifier,
ACCOUNT nvarchar(100),
AMOUNT money,
PROJECT nvarchar(100),
REFERENCE nvarchar(255),
TRANSACTIONTYPECODE tinyint,
BASECURRENCYID uniqueidentifier,
ORGANIZATIONAMOUNT money
);
insert into @REVERSALS
(
ORIGINALTRANSACTIONID,
REVERSALTRANSACTIONID,
ACCOUNT,
AMOUNT,
PROJECT,
REFERENCE,
TRANSACTIONTYPECODE,
BASECURRENCYID,
ORGANIZATIONAMOUNT
)
select
UNREALIZEDGAINLOSSGLDISTRIBUTION.GLTRANSACTIONID,
newid(),
UNREALIZEDGAINLOSSGLDISTRIBUTION.ACCOUNT,
UNREALIZEDGAINLOSSGLDISTRIBUTION.AMOUNT,
UNREALIZEDGAINLOSSGLDISTRIBUTION.PROJECT,
UNREALIZEDGAINLOSSGLDISTRIBUTION.REFERENCE,
UNREALIZEDGAINLOSSGLDISTRIBUTION.TRANSACTIONTYPECODE,
UNREALIZEDGAINLOSSGLDISTRIBUTION.BASECURRENCYID,
UNREALIZEDGAINLOSSGLDISTRIBUTION.ORGANIZATIONAMOUNT
from
dbo.UNREALIZEDGAINLOSSGLDISTRIBUTION
where
UNREALIZEDGAINLOSSGLDISTRIBUTION.REVENUEID = @REVENUEID
and UNREALIZEDGAINLOSSGLDISTRIBUTION.OUTDATED = 0;
declare @ADJUSTMENTPOSTSTATUSCODE tinyint;
select
@ADJUSTMENTPOSTSTATUSCODE = POSTSTATUSCODE
from
dbo.UNREALIZEDGAINLOSSADJUSTMENT
where
REVENUEID = @REVENUEID ;
if @ADJUSTMENTPOSTSTATUSCODE <> 2
set @ADJUSTMENTPOSTSTATUSCODE = 1
--Log reversal GL distributions
insert into dbo.GLTRANSACTION
(
ID,
REVERSEDGLTRANSACTIONID,
TRANSACTIONTYPECODE,
ACCOUNT,
AMOUNT,
PROJECT,
REFERENCE,
POSTDATE,
JOURNAL,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED,
GLACCOUNTID,
POSTSTATUSCODE,
BASECURRENCYID,
ORGANIZATIONAMOUNT
)
select
REVERSALTRANSACTIONID,
ORIGINALTRANSACTIONID,
case TRANSACTIONTYPECODE when 0 then 1 else 0 end,
ACCOUNT,
AMOUNT,
PROJECT,
REFERENCE,
dbo.UFN_DATE_GETEARLIESTTIME(@POSTDATE),
@JOURNAL,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
(select GLACCOUNTID from dbo.GLTRANSACTION where GLTRANSACTION.id = ORIGINALTRANSACTIONID),
isnull(@ADJUSTMENTPOSTSTATUSCODE,1),
BASECURRENCYID,
ORGANIZATIONAMOUNT
from
@REVERSALS
--Set the REVERSEDATE of the original GL transactions to the current date
update dbo.GLTRANSACTION
set
REVERSEDATE = @CHANGEDATE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where ID in (select ORIGINALTRANSACTIONID from @REVERSALS)
--Set the reversed revenue GL distributions as out of date
update dbo.UNREALIZEDGAINLOSSGLDISTRIBUTION
set
OUTDATED = 1,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where GLTRANSACTIONID in (select ORIGINALTRANSACTIONID from @REVERSALS)