USP_GLTRANSACTION_ADDSTOCKSALEREVERSALS
Adds stock sale reversal transactions for the given stock sale record.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@STOCKSALEID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@POSTDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_GLTRANSACTION_ADDSTOCKSALEREVERSALS
(
@STOCKSALEID 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.STOCKSALEADJUSTMENT where STOCKSALEID = @STOCKSALEID 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 = SALEPOSTDATE from dbo.STOCKSALE where ID = @STOCKSALEID;
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,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
GLACCOUNTID,
SEQUENCE
)
select
JE.ID
,newid()
,coalesce(A.ACCOUNTNUMBER,JEX.ACCOUNT,'')
,JE.BASEAMOUNT
,JEX.PROJECT
,JE.COMMENT
,JE.TRANSACTIONTYPECODE
,JE.TRANSACTIONAMOUNT
,isnull(JE.TRANSACTIONCURRENCYID, FT.TRANSACTIONCURRENCYID)
,FT.BASEEXCHANGERATEID
,JE.ORGAMOUNT
,FT.ORGEXCHANGERATEID
,JE.GLACCOUNTID
,row_number() over (order by JE.DATEADDED)
from dbo.JOURNALENTRY JE
inner join dbo.JOURNALENTRY_EXT JEX on JE.ID = JEX.ID
left join dbo.GLACCOUNT A on A.ID = JE.GLACCOUNTID
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = JE.FINANCIALTRANSACTIONLINEITEMID
inner join dbo.FINANCIALTRANSACTION FT on LI.FINANCIALTRANSACTIONID = FT.ID
where JEX.TABLENAMECODE = 11 and (JEX.STOCKSALEID = @STOCKSALEID or FT.ID = @STOCKSALEID) and JEX.OUTDATED = 0 and LI.POSTSTATUSCODE = 2;
declare @ADJUSTMENTID uniqueidentifier
declare @ADJUSTMENTPOSTSTATUSCODE tinyint
Select top 1 @ADJUSTMENTPOSTSTATUSCODE = case A.POSTSTATUSCODE when 2 then 3 else 1 end
,@ADJUSTMENTID = LIA.ID
from dbo.STOCKSALEADJUSTMENT A
inner join dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT LIA on LIA.ID = A.ID
where STOCKSALEID = @STOCKSALEID
order by A.DATEADDED desc;
if @ADJUSTMENTPOSTSTATUSCODE <> 3 or @ADJUSTMENTPOSTSTATUSCODE is null
set @ADJUSTMENTPOSTSTATUSCODE = 1;
if @ADJUSTMENTID is null
begin
set @ADJUSTMENTID = newid();
insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
ID
,DATE
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (
@ADJUSTMENTID
,@CHANGEDATE
,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
)
end
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
if exists (select 1 from dbo.FINANCIALTRANSACTION FT inner join dbo.STOCKSALEADJUSTMENT T1 on T1.STOCKSALEID = FT.ID and T1.POSTSTATUSCODE != 0 where FT.ID = @FTID)
set @ISADJUSTMENT = 1
if @ISADJUSTMENT = 1
begin
insert into dbo.FINANCIALTRANSACTIONLINEITEM (
ID
,REVERSEDLINEITEMID
,FINANCIALTRANSACTIONID
,TRANSACTIONAMOUNT
,VISIBLE
,DESCRIPTION
,SEQUENCE
,TYPECODE
,POSTDATE
,POSTSTATUSCODE
,BASEAMOUNT
,ORGAMOUNT
,FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select distinct
T1.COPYFTLIID
,T1.REVERSEDFTLIID
,T3.FINANCIALTRANSACTIONID
,T3.TRANSACTIONAMOUNT
,1
,T3.DESCRIPTION
,T3.SEQUENCE
,T3.TYPECODE
,T3.POSTDATE
,2
,T3.TRANSACTIONAMOUNT
,T3.ORGAMOUNT
,T3.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
,@CHANGEAGENTID, @CHANGEAGENTID, @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
update T3 set
FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CHANGEDATE
from @REVERSALS T1
inner join dbo.JOURNALENTRY T2 on T1.ORIGINALTRANSACTIONID = T2.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM T3 on T2.FINANCIALTRANSACTIONLINEITEMID = T3.ID
end
insert into dbo.FINANCIALTRANSACTIONLINEITEM (
ID
,REVERSEDLINEITEMID
,FINANCIALTRANSACTIONID
,TRANSACTIONAMOUNT
,VISIBLE
,DESCRIPTION
,SEQUENCE
,TYPECODE
,POSTDATE
,POSTSTATUSCODE
,BASEAMOUNT
,ORGAMOUNT
,FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select distinct
T1.FTLIID
,T1.REVERSEDFTLIID
,T3.FINANCIALTRANSACTIONID
,T3.TRANSACTIONAMOUNT
,1
,T3.DESCRIPTION
,T3.SEQUENCE
,1
,@POSTDATE
,@ADJUSTMENTPOSTSTATUSCODE
,T3.TRANSACTIONAMOUNT
,T3.ORGAMOUNT
,@ADJUSTMENTID
,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
if @ISADJUSTMENT = 1
update FTLI set POSTSTATUSCODE = @ADJUSTMENTPOSTSTATUSCODE,POSTDATE = @POSTDATE, FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID from dbo.FINANCIALTRANSACTIONLINEITEM FTLI inner join @REVERSEDFTLIID R on FTLI.ID = R.REVERSEDFTLIID inner join @REVERSALS INS on R.REVERSEDFTLIID = INS.REVERSEDFTLIID
update FTLI set DELETEDON = getdate() from dbo.FINANCIALTRANSACTIONLINEITEM FTLI inner join @REVERSEDFTLIID R on FTLI.ID = R.COPYFTLIID
if @ISADJUSTMENT = 1
update JOURNALENTRY set FINANCIALTRANSACTIONLINEITEMID = T1.COPYFTLIID from @REVERSALS T1 where JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = T1.REVERSEDFTLIID
--Log reversal GL distributions
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
,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
,OUTDATED
,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
select
source.REVERSALTRANSACTIONID
,source.PROJECT
,source.ACCOUNT
,@JOURNAL
,source.ORIGINALTRANSACTIONID
,0
,source.ORGANIZATIONEXCHANGERATEID
,source.BASEEXCHANGERATEID
,1
,@CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate()
from @REVERSALS as source
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;