USP_GLTRANSACTION_ADDWRITEOFFREVERSALS_BYREVENUEID
Adds write-off 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_ADDWRITEOFFREVERSALS_BYREVENUEID
(
@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 = WRITEOFFADJUSTMENT.POSTDATE from dbo.WRITEOFFADJUSTMENT
inner join dbo.WRITEOFF on WRITEOFFADJUSTMENT.WRITEOFFID = WRITEOFF.ID
where WRITEOFF.REVENUEID = @REVENUEID and WRITEOFFADJUSTMENT.POSTSTATUSCODE = 0 order by WRITEOFFADJUSTMENT.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.WRITEOFF where REVENUEID = @REVENUEID;
declare @REVERSALS table(
ORIGINALTRANSACTIONID uniqueidentifier,
REVERSALTRANSACTIONID uniqueidentifier,
ACCOUNT nvarchar(100),
AMOUNT money,
PROJECT nvarchar(100),
REFERENCE nvarchar(255),
TRANSACTIONTYPECODE tinyint,
BASECURRENCYID uniqueidentifier,
TRANSACTIONAMOUNT money,
TRANSACTIONCURRENCYID uniqueidentifier,
BASEEXCHANGERATEID uniqueidentifier,
ORGANIZATIONAMOUNT money,
ORGANIZATIONEXCHANGERATEID uniqueidentifier,
GLACCOUNTID uniqueidentifier,
FTLIID uniqueidentifier,
COPYFTLIID uniqueidentifier,
REVERSEDFTLIID uniqueidentifier,
SEQUENCE int
);
insert into @REVERSALS(ORIGINALTRANSACTIONID, REVERSALTRANSACTIONID, ACCOUNT, AMOUNT, PROJECT, REFERENCE, TRANSACTIONTYPECODE,
BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID,
GLACCOUNTID, SEQUENCE)
select
JOURNALENTRY.ID, newid(), JOURNALENTRY_EXT.ACCOUNT, JOURNALENTRY.BASEAMOUNT, JOURNALENTRY_EXT.PROJECT, JOURNALENTRY.COMMENT,
JOURNALENTRY.TRANSACTIONTYPECODE, V.BASECURRENCYID, JOURNALENTRY.TRANSACTIONAMOUNT, JOURNALENTRY.TRANSACTIONCURRENCYID,
JOURNALENTRY_EXT.PRECALCBASEEXCHANGERATEID, JOURNALENTRY.ORGAMOUNT, JOURNALENTRY_EXT.PRECALCORGANIZATIONEXCHANGERATEID,
JOURNALENTRY.GLACCOUNTID, row_number() over (order by JOURNALENTRY.DATEADDED)
from
dbo.JOURNALENTRY
inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = V.FINANCIALTRANSACTIONID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID and JOURNALENTRY_EXT.TABLENAMECODE = 12
where
FINANCIALTRANSACTION.PARENTID = @REVENUEID and OUTDATED = 0;
declare @REVERSEDFTLIID as table
(
NEWFTLIID uniqueidentifier,
REVERSEDFTLIID uniqueidentifier,
COPYFTLIID uniqueidentifier
);
declare @FTID uniqueidentifier;
declare @TABLENAMECODE tinyint;
declare @ISADJUSTMENT bit = 0;
insert into @REVERSEDFTLIID (NEWFTLIID,REVERSEDFTLIID,COPYFTLIID)
select
NEWID(),T2.FINANCIALTRANSACTIONLINEITEMID, NEWID()
from @REVERSALS T1
inner join dbo.JOURNALENTRY T2 on T1.ORIGINALTRANSACTIONID = T2.ID
group by T2.FINANCIALTRANSACTIONLINEITEMID
update @REVERSALS set FTLIID = t3.NEWFTLIID, COPYFTLIID = T3.COPYFTLIID , REVERSEDFTLIID = T3.REVERSEDFTLIID
from @REVERSALS t1 inner join dbo.JOURNALENTRY t2 on t1.ORIGINALTRANSACTIONID = t2.ID
inner join @REVERSEDFTLIID t3 on t2.FINANCIALTRANSACTIONLINEITEMID = t3.REVERSEDFTLIID
select top 1 @FTID = FTLI.FINANCIALTRANSACTIONID from dbo.FINANCIALTRANSACTIONLINEITEM FTLI join @REVERSEDFTLIID T1 on FTLI.ID = T1.REVERSEDFTLIID
insert into dbo.FINANCIALTRANSACTIONLINEITEM (
ID,REVERSEDLINEITEMID, FINANCIALTRANSACTIONID, TRANSACTIONAMOUNT, VISIBLE,DESCRIPTION,SEQUENCE,TYPECODE,POSTDATE,POSTSTATUSCODE
,BASEAMOUNT,ORGAMOUNT , ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select distinct T1.FTLIID, T1.REVERSEDFTLIID, T3.FINANCIALTRANSACTIONID, T3.TRANSACTIONAMOUNT, 1,
T3.DESCRIPTION,
--'reverse',
T3.SEQUENCE, 1, @POSTDATE, 1, T3.TRANSACTIONAMOUNT, T3.ORGAMOUNT, T3.ADDEDBYID, T3.CHANGEDBYID, @CHANGEDATE, @CHANGEDATE
from @REVERSALS T1
inner join dbo.JOURNALENTRY T2 on T1.ORIGINALTRANSACTIONID = T2.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM T3 on T2.FINANCIALTRANSACTIONLINEITEMID = T3.ID
--group by T1.FTLIID ,T1.REVERSEDFTLIID ,T1.COPYFTLIID, T3.FINANCIALTRANSACTIONID , T3.TRANSACTIONAMOUNT, T3.DESCRIPTION,T3.SEQUENCE,
--T3.TRANSACTIONAMOUNT, T3.ORGAMOUNT,T3.ADDEDBYID, T3.CHANGEDBYID
update FTLI set DELETEDON = getdate() from dbo.FINANCIALTRANSACTIONLINEITEM FTLI inner join @REVERSEDFTLIID R on FTLI.ID = R.COPYFTLIID
insert into dbo.JOURNALENTRY
(ID,FINANCIALTRANSACTIONLINEITEMID,TRANSACTIONTYPECODE,SUBLEDGERTYPECODE, TRANSACTIONAMOUNT, BASEAMOUNT,ORGAMOUNT,COMMENT,POSTDATE,GLACCOUNTID,SEQUENCE ,TYPECODE,TRANSACTIONCURRENCYID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
select
source.REVERSALTRANSACTIONID
,source.FTLIID
,case source.TRANSACTIONTYPECODE when 0 then 1 else 0 end --check this
,case source.TRANSACTIONTYPECODE when 0 then 1 else 0 end
,source.TRANSACTIONAMOUNT
,source.AMOUNT
,source.ORGANIZATIONAMOUNT
,source.REFERENCE
,@POSTDATE
,source.GLACCOUNTID
,source.SEQUENCE
,case when source.TRANSACTIONCURRENCYID is null then 1 else 0 end
,source.TRANSACTIONCURRENCYID
,@CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate()
from @REVERSALS as source
insert into dbo.JOURNALENTRY_EXT
(ID,PROJECT,ACCOUNT,JOURNAL,REVERSEDGLTRANSACTIONID,TABLENAMECODE,
PRECALCORGANIZATIONEXCHANGERATEID,PRECALCBASEEXCHANGERATEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED,OUTDATED)
select
source.REVERSALTRANSACTIONID
,source.PROJECT
,source.ACCOUNT
,@JOURNAL
,source.ORIGINALTRANSACTIONID
,0 -- gltransaction table
,source.ORGANIZATIONEXCHANGERATEID
,source.BASEEXCHANGERATEID
,@CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate(),1
from @REVERSALS as source
--Set the REVERSEDATE of the original GL transactions to the current date
update dbo.JOURNALENTRY_EXT
set
REVERSEDATE = @CHANGEDATE
,OUTDATED = 1
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CHANGEDATE
from
@REVERSALS as REV
inner join
dbo.JOURNALENTRY_EXT on REV.ORIGINALTRANSACTIONID = JOURNALENTRY_EXT.ID