USP_SAVE_ADJUSTMENT
Stored procedure to log adjustments to revenue.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@ADJUSTMENTID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@DATE | datetime | IN | |
@POSTDATE | datetime | IN | |
@ADJUSTMENTREASON | nvarchar(300) | IN | |
@ISNEWREVENUE | bit | IN | |
@ADJUSTMENTREASONCODEID | uniqueidentifier | IN | |
@POSTSTATUSCODE | tinyint | IN | |
@ADJUSTMENTCODE | tinyint | IN |
Definition
Copy
CREATE procedure dbo.USP_SAVE_ADJUSTMENT (
@REVENUEID uniqueidentifier = null
,@ADJUSTMENTID uniqueidentifier = null output
,@CHANGEAGENTID uniqueidentifier = null
,@CHANGEDATE datetime = null
,@DATE datetime = null
,@POSTDATE datetime = null
,@ADJUSTMENTREASON nvarchar(300) = null
,@ISNEWREVENUE bit = 0
,@ADJUSTMENTREASONCODEID uniqueidentifier = null
,@POSTSTATUSCODE tinyint = 1
,@ADJUSTMENTCODE tinyint = 0
)
with execute as owner
as
/*call this procedure before making changes to the revenue tables.*/
set nocount on;
declare @REVENUEPOSTDATE datetime;
declare @CONSTITUENTID uniqueidentifier;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
select @ADJUSTMENTID = ID
from dbo.ADJUSTMENT
where REVENUEID = @REVENUEID
and POSTSTATUSCODE <> 0
if @ADJUSTMENTID is null
set @ADJUSTMENTID = newid();
--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);
--Is the revenue posted?
/*
if (select count(REVENUE.ID) from dbo.REVENUE
inner join dbo.REVENUEPOSTED on REVENUEPOSTED.ID = REVENUE.ID
where REVENUE.ID = @REVENUEID) = 0*/
if (
select POSTSTATUSCODE
from dbo.FINANCIALTRANSACTION
where ID = @REVENUEID
) != 2
raiserror (
'You cannot adjust an unposted gift'
,13
,1
)
--kwb This sp checks to see if it's the original pledge record, ie it hasn't been adjusted yet.
--If yes, create a row in FINANCIALTRANSACTIONLINEITEMADJUSTMENT to store the current ConstituentID
exec dbo.USP_CREATEINITIALADJUSTMENTHISTORY @REVENUEID
,@CHANGEAGENTID
select @CONSTITUENTID = CONSTITUENTID
from dbo.FINANCIALTRANSACTION
where ID = @REVENUEID
--Update unposted adjustment if existing
if @ADJUSTMENTID is not null
and exists (
select 1
from dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT
where ID = @ADJUSTMENTID
)
update dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT
set ADJUSTMENTREASONCODEID = @ADJUSTMENTREASONCODEID
,REASON = @ADJUSTMENTREASON
,CONSTITUENTID = @CONSTITUENTID
,[DATE] = @DATE
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CHANGEDATE
where ID = @ADJUSTMENTID;
else
if @ADJUSTMENTID is not null
insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
ID
,ADJUSTMENTREASONCODEID
,REASON
,CONSTITUENTID
,[DATE]
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
)
values (
@ADJUSTMENTID
,@ADJUSTMENTREASONCODEID
,@ADJUSTMENTREASON
,@CONSTITUENTID
,@DATE
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CHANGEDATE
,@CHANGEDATE
);
update dbo.ADJUSTMENT
set [DATE] = @DATE
,POSTDATE = @POSTDATE
,REASON = @ADJUSTMENTREASON
,REASONCODEID = @ADJUSTMENTREASONCODEID
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CHANGEDATE
,POSTSTATUSCODE = @POSTSTATUSCODE
,ADJUSTMENTCODE = case when ADJUSTMENTCODE = 0 then @ADJUSTMENTCODE else ADJUSTMENTCODE end
where ID = @ADJUSTMENTID;
if @@ROWCOUNT = 0
begin
if @POSTSTATUSCODE = 0
set @POSTSTATUSCODE = 1
--Log Adjustment if new
insert into dbo.ADJUSTMENT (
ID
,REVENUEID
,PREVIOUSAMOUNT
,[DATE]
,POSTDATE
,POSTSTATUSCODE
,REASON
,REASONCODEID
,ADJUSTMENTCODE
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
,BASECURRENCYID
,TRANSACTIONCURRENCYID
,TRANSACTIONPREVIOUSAMOUNT
,BASEEXCHANGERATEID
,ORGANIZATIONPREVIOUSAMOUNT
,ORGANIZATIONEXCHANGERATEID
)
select @ADJUSTMENTID
,FINANCIALTRANSACTION.ID
,FINANCIALTRANSACTION.BASEAMOUNT
,@DATE
,@POSTDATE
,@POSTSTATUSCODE
,@ADJUSTMENTREASON
,@ADJUSTMENTREASONCODEID
,@ADJUSTMENTCODE
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CHANGEDATE
,@CHANGEDATE
,CURRENCYSET.BASECURRENCYID
,FINANCIALTRANSACTION.TRANSACTIONCURRENCYID
,FINANCIALTRANSACTION.TRANSACTIONAMOUNT
,FINANCIALTRANSACTION.BASEEXCHANGERATEID
,FINANCIALTRANSACTION.ORGAMOUNT
,FINANCIALTRANSACTION.ORGEXCHANGERATEID
from dbo.FINANCIALTRANSACTION
inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
where FINANCIALTRANSACTION.ID = @REVENUEID;
--Save the snapshot before deleting the GL information
exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVESNAPSHOT @ADJUSTMENTID
,@CHANGEAGENTID
,@ISNEWREVENUE;
--Log reversals in the GLTRANSACTION table work item 55993 - added postdate
exec dbo.USP_GLTRANSACTION_ADDREVENUEREVERSALS @REVENUEID
,@CHANGEAGENTID
,@CHANGEDATE
,@POSTDATE;
end
else /*make sure @ADJUSTMENTID gets set to the correct value*/
begin
update dbo.FINANCIALTRANSACTIONLINEITEM set
POSTDATE = @POSTDATE
,POSTSTATUSCODE = case @POSTSTATUSCODE when 2 then 3 else 1 end
,DATECHANGED = @CHANGEDATE
,CHANGEDBYID = @CHANGEAGENTID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @REVENUEID and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
-- Update the post date on the GL transaction records
update dbo.JOURNALENTRY
set JOURNALENTRY.POSTDATE = @POSTDATE
,JOURNALENTRY.DATECHANGED = @CHANGEDATE
,JOURNALENTRY.CHANGEDBYID = @CHANGEAGENTID
from dbo.JOURNALENTRY as JE
inner join dbo.JOURNALENTRY_EXT as JEE on JE.ID = JEE.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI on JE.FINANCIALTRANSACTIONLINEITEMID = FTLI.ID
and FTLI.POSTSTATUSCODE != 2
where FTLI.FINANCIALTRANSACTIONID = @REVENUEID
and (
JEE.OUTDATED = 0
or JEE.TABLENAMECODE = 0
);
-- post date for unposted reversals should match the adjustment post date
update dbo.JOURNALENTRY set
JOURNALENTRY.POSTDATE = @POSTDATE
,JOURNALENTRY.DATECHANGED = @CHANGEDATE
,JOURNALENTRY.CHANGEDBYID = @CHANGEAGENTID
from dbo.FINANCIALTRANSACTIONLINEITEM as FTLI
inner join dbo.JOURNALENTRY on FTLI.ID = JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID
inner join dbo.JOURNALENTRY_EXT as JEE on JOURNALENTRY.ID = JEE.ID
where FTLI.FINANCIALTRANSACTIONID = @REVENUEID
and FTLI.POSTSTATUSCODE = 1
and FTLI.TYPECODE = 1
and FTLI.DELETEDON is null
and JEE.TABLENAMECODE in (0, 1);
--Save the snapshot
exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVESNAPSHOT @ADJUSTMENTID
,@CHANGEAGENTID;
end
declare @Error nvarchar(255) = ''
-- Bug 70136 - Null post date if adjustment is DNP
if @@ROWCOUNT > 0
and @POSTSTATUSCODE <> 2
set @Error = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE)
if @Error <> ''
raiserror (
@Error
,13
,1
)