USP_SAVE_STOCKSALEADJUSTMENT
Stored procedure to log adjustments to sold stock.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@STOCKSALEID | uniqueidentifier | IN | |
@STOCKSALEADJUSTMENTID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@DATE | datetime | IN | |
@POSTDATE | datetime | IN | |
@ADJUSTMENTREASON | nvarchar(300) | IN | |
@ADJUSTMENTREASONCODEID | uniqueidentifier | IN | |
@POSTSTATUSCODE | tinyint | IN |
Definition
Copy
CREATE procedure dbo.USP_SAVE_STOCKSALEADJUSTMENT
(
@STOCKSALEID uniqueidentifier = null,
@STOCKSALEADJUSTMENTID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null,
@DATE datetime = null,
@POSTDATE datetime = null,
@ADJUSTMENTREASON nvarchar(300) = null,
@ADJUSTMENTREASONCODEID uniqueidentifier = null,
@POSTSTATUSCODE tinyint = 1
)
with execute as owner
as
/*call this procedure before making changes to the stock detail tables.*/
set nocount on;
declare @STOCKDETAILPOSTDATE datetime;
--Is the stock detail posted?
if not exists ( select count(ID) from dbo.STOCKSALE
where ID = @STOCKSALEID and SALEPOSTSTATUSCODE = 0)
raiserror('You cannot adjust an unposted sold stock', 13, 1)
--kwb Create FINANCIALTRANSACTIONLINEITEMADJUSTMENT records for original write-offs that will be adjusted
exec dbo.USP_CREATEINITIALADJUSTMENTHISTORY @STOCKSALEID, @CHANGEAGENTID
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = GetDate();
--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);
select @STOCKSALEADJUSTMENTID = ID
from dbo.STOCKSALEADJUSTMENT
where STOCKSALEID = @STOCKSALEID and POSTSTATUSCODE <> 0;
--Update unposted adjustment if existing
if @STOCKSALEADJUSTMENTID is not null and exists(select 1 from dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT where ID = @STOCKSALEADJUSTMENTID)
update dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT set
ADJUSTMENTREASONCODEID = @ADJUSTMENTREASONCODEID
,REASON = @ADJUSTMENTREASON
,DATE = @DATE
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CHANGEDATE
where ID = @STOCKSALEADJUSTMENTID;
else if @STOCKSALEADJUSTMENTID is not null
insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
ID
,ADJUSTMENTREASONCODEID
,REASON
,DATE
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values(
@STOCKSALEADJUSTMENTID
,@ADJUSTMENTREASONCODEID
,@ADJUSTMENTREASON
,@DATE
,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
update dbo.STOCKSALEADJUSTMENT
set DATE = @DATE,
POSTDATE = @POSTDATE,
REASON = @ADJUSTMENTREASON,
REASONCODEID = @ADJUSTMENTREASONCODEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE,
POSTSTATUSCODE = @POSTSTATUSCODE
where ID = @STOCKSALEADJUSTMENTID;
if @@ROWCOUNT = 0
begin
set @STOCKSALEADJUSTMENTID = newid();
--Log Adjustment if new
insert into dbo.STOCKSALEADJUSTMENT(ID, STOCKSALEID, PREVIOUSAMOUNT, DATE, POSTDATE, POSTSTATUSCODE, REASON, REASONCODEID, TRANSACTIONPREVIOUSAMOUNT, ORGANIZATIONPREVIOUSAMOUNT, BASECURRENCYID, ORGANIZATIONEXCHANGERATEID, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select @STOCKSALEADJUSTMENTID, STOCKSALE.ID, STOCKSALE.SALEAMOUNT, @DATE, @POSTDATE, @POSTSTATUSCODE, @ADJUSTMENTREASON, @ADJUSTMENTREASONCODEID, STOCKSALE.TRANSACTIONSALEAMOUNT, STOCKSALE.ORGANIZATIONSALEAMOUNT, STOCKSALE.BASECURRENCYID, STOCKSALE.ORGANIZATIONEXCHANGERATEID, STOCKSALE.TRANSACTIONCURRENCYID, STOCKSALE.BASEEXCHANGERATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
from dbo.STOCKSALE
where STOCKSALE.ID = @STOCKSALEID;
insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
ID
,ADJUSTMENTREASONCODEID
,REASON
,DATE
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values(
@STOCKSALEADJUSTMENTID
,@ADJUSTMENTREASONCODEID
,@ADJUSTMENTREASON
,@DATE
,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
--Save the snapshot before deleting the GL information
exec dbo.USP_ADJUSTMENTHISTORY_STOCK_SAVESNAPSHOT @STOCKSALEADJUSTMENTID, @CHANGEAGENTID;
--Log reversals in the GLTRANSACTION table work item 55993 - added postdate
exec dbo.USP_GLTRANSACTION_ADDSTOCKSALEREVERSALS @STOCKSALEID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE;
end
else /*make sure @STOCKSALEADJUSTMENTID gets set to the correct value */
begin
-- 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.STOCKSALEGLDISTRIBUTION on GLTRANSACTION.ID = STOCKSALEGLDISTRIBUTION.GLTRANSACTIONID
where
STOCKSALEGLDISTRIBUTION.STOCKSALEID = @STOCKSALEID and STOCKSALEGLDISTRIBUTION.OUTDATED = 0);
-- post date for unposted reversal should match the adjustment post date
update
dbo.GLTRANSACTION
set
GLTRANSACTION.POSTDATE = @POSTDATE,
GLTRANSACTION.DATECHANGED = @CHANGEDATE,
GLTRANSACTION.CHANGEDBYID = @CHANGEAGENTID,
GLTRANSACTION.POSTSTATUSCODE = @POSTSTATUSCODE
where GLTRANSACTION.ID in (select GLTRANSACTION.ID
from
dbo.GLTRANSACTION
inner join
dbo.STOCKSALEGLDISTRIBUTION on GLTRANSACTION.REVERSEDGLTRANSACTIONID = STOCKSALEGLDISTRIBUTION.GLTRANSACTIONID
where
STOCKSALEGLDISTRIBUTION.STOCKSALEID = @STOCKSALEID and GLTRANSACTION.POSTSTATUSCODE > 0);
--Save the snapshot before deleting the GL information
exec dbo.USP_ADJUSTMENTHISTORY_STOCK_SAVESNAPSHOT @STOCKSALEADJUSTMENTID, @CHANGEAGENTID;
end
update dbo.FINANCIALTRANSACTIONLINEITEM set
FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @STOCKSALEADJUSTMENTID
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CHANGEDATE
where FINANCIALTRANSACTIONID = @STOCKSALEID and POSTSTATUSCODE = 1;
declare @Error nvarchar(255) = ''
if @@ROWCOUNT > 0 and @POSTSTATUSCODE <> 2
set @Error = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE)
if @Error <> ''
raiserror(@Error, 13, 1)