USP_GLTRANSACTION_ADDSTOCKDETAILREVERSALS
Adds stock detail reversal transactions for the given stock detail record.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@STOCKDETAILID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@POSTDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_GLTRANSACTION_ADDSTOCKDETAILREVERSALS
(
@STOCKDETAILID 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
inner join dbo.STOCKSALE on STOCKSALE.ID = STOCKSALEADJUSTMENT.STOCKSALEID
where STOCKSALE.STOCKDETAILID = @STOCKDETAILID and POSTSTATUSCODE = 0
order by STOCKSALEADJUSTMENT.DATEADDED desc;
--If there are no posted adjustments then get the postdate for REVERSAL from the REVENUE record
if @POSTDATE is null
select @POSTDATE = REVENUE.POSTDATE from dbo.REVENUE
inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.REVENUEID = REVENUE.ID
where REVENUEPAYMENTMETHOD.ID = @STOCKDETAILID;
declare @REVERSALS table(
ORIGINALTRANSACTIONID uniqueidentifier,
REVERSALTRANSACTIONID uniqueidentifier,
ACCOUNT nvarchar(100),
AMOUNT money,
PROJECT nvarchar(100),
REFERENCE nvarchar(255),
TRANSACTIONTYPECODE tinyint,
TRANSACTIONCURRENCYID uniqueidentifier
);
insert into @REVERSALS(ORIGINALTRANSACTIONID, REVERSALTRANSACTIONID, ACCOUNT, AMOUNT, PROJECT, REFERENCE, TRANSACTIONTYPECODE, TRANSACTIONCURRENCYID)
select
STOCKSALEGLDISTRIBUTION.GLTRANSACTIONID, newid(), ACCOUNT, AMOUNT, PROJECT, REFERENCE, TRANSACTIONTYPECODE, STOCKSALEGLDISTRIBUTION.TRANSACTIONCURRENCYID
from dbo.STOCKSALEGLDISTRIBUTION
inner join dbo.STOCKSALE on STOCKSALEGLDISTRIBUTION.STOCKSALEID = STOCKSALE.ID
where
STOCKSALE.STOCKDETAILID = @STOCKDETAILID and OUTDATED = 0;
--Log reversal GL distributions
insert into dbo.GLTRANSACTION(ID,REVERSEDGLTRANSACTIONID,TRANSACTIONTYPECODE,ACCOUNT,AMOUNT,PROJECT,REFERENCE,POSTDATE,JOURNAL,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED,GLACCOUNTID, TRANSACTIONCURRENCYID)
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),
TRANSACTIONCURRENCYID
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 stock detail GL distributions as out of date
update dbo.STOCKSALEGLDISTRIBUTION
set
OUTDATED = 1,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where GLTRANSACTIONID in (select ORIGINALTRANSACTIONID from @REVERSALS)