USP_ADJUSTMENTHISTORY_GIFTINKIND_FIXFORDELETE
Fixes adjustment history for a sold gift-in-kind item to prepare for the deletion of that sold gift-in-kind.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@GIFTINKINDPAYMENTMETHODDETAILID | uniqueidentifier | IN | |
@UNSOLD | bit | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@REVERSALADJUSTMENTHISTORYGIFTINKINDID | uniqueidentifier | INOUT | |
@GIFTINKINDSALEID | uniqueidentifier | IN |
Definition
Copy
create procedure dbo.USP_ADJUSTMENTHISTORY_GIFTINKIND_FIXFORDELETE
(
@GIFTINKINDPAYMENTMETHODDETAILID uniqueidentifier,
@UNSOLD bit,
@CHANGEAGENTID uniqueidentifier,
@CHANGEDATE datetime = null,
@REVERSALADJUSTMENTHISTORYGIFTINKINDID uniqueidentifier = null output,
@GIFTINKINDSALEID uniqueidentifier = null
)
as
set nocount on;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
declare @UNPOSTEDGIFTINKINDSALEADJUSTMENTID uniqueidentifier;
declare @UNPOSTEDADJUSTMENTHISTORYGIFTINKINDID uniqueidentifier;
declare @LASTPOSTEDGIFTINKINDSALEADJUSTMENTID uniqueidentifier;
declare @LASTPOSTEDADJUSTMENTHISTORYGIFTINKINDID uniqueidentifier;
/*make sure the sold gift-in-kind information is posted*/
if exists(select top 1 ID from dbo.GIFTINKINDSALE where GIFTINKINDPAYMENTMETHODDETAILID = @GIFTINKINDPAYMENTMETHODDETAILID and SALEPOSTSTATUSCODE = 0 and (@GIFTINKINDSALEID is null or @GIFTINKINDSALEID = GIFTINKINDSALE.ID))
begin
/*determine if there is an unposted adjustment for this gift-in-kind */
select
@UNPOSTEDGIFTINKINDSALEADJUSTMENTID = GIFTINKINDSALEADJUSTMENT.ID
from dbo.GIFTINKINDSALEADJUSTMENT
inner join dbo.GIFTINKINDSALE on GIFTINKINDSALEADJUSTMENT.GIFTINKINDSALEID = GIFTINKINDSALE.ID
where
GIFTINKINDSALE.GIFTINKINDPAYMENTMETHODDETAILID = @GIFTINKINDPAYMENTMETHODDETAILID and
GIFTINKINDSALE.SALEPOSTSTATUSCODE = 1 and
(@GIFTINKINDSALEID is null or @GIFTINKINDSALEID = GIFTINKINDSALE.ID);
select
@UNPOSTEDADJUSTMENTHISTORYGIFTINKINDID = ID
from dbo.ADJUSTMENTHISTORYGIFTINKIND
where GIFTINKINDSALEADJUSTMENTID = @UNPOSTEDGIFTINKINDSALEADJUSTMENTID;
/*get the most recent posted adjustment so we can write out GL history for it*/
select top 1
@LASTPOSTEDGIFTINKINDSALEADJUSTMENTID = GIFTINKINDSALEADJUSTMENT.ID
from dbo.GIFTINKINDSALEADJUSTMENT
inner join dbo.GIFTINKINDSALE on GIFTINKINDSALEADJUSTMENT.GIFTINKINDSALEID = GIFTINKINDSALE.ID
where
GIFTINKINDSALE.GIFTINKINDPAYMENTMETHODDETAILID = @GIFTINKINDPAYMENTMETHODDETAILID and
GIFTINKINDSALE.SALEPOSTSTATUSCODE = 0 and
(@GIFTINKINDSALEID is null or @GIFTINKINDSALEID = GIFTINKINDSALE.ID)
order by GIFTINKINDSALEADJUSTMENT.TSLONG desc;
/*if there is an unposted adjustment, the last posted adjustment will already have distribution information in its history*/
/*so do nothing*/
/*write the current GL information to the history for the last posted adjustment only if there was not an adjustment after it*/
if @UNPOSTEDGIFTINKINDSALEADJUSTMENTID is null and not @LASTPOSTEDGIFTINKINDSALEADJUSTMENTID is null
begin
select @LASTPOSTEDADJUSTMENTHISTORYGIFTINKINDID = ID
from dbo.ADJUSTMENTHISTORYGIFTINKIND
where GIFTINKINDSALEADJUSTMENTID = @LASTPOSTEDGIFTINKINDSALEADJUSTMENTID;
if not @LASTPOSTEDADJUSTMENTHISTORYGIFTINKINDID is null
insert into dbo.ADJUSTMENTHISTORYGIFTINKINDDISTRIBUTION(ADJUSTMENTHISTORYGIFTINKINDID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
select
@LASTPOSTEDADJUSTMENTHISTORYGIFTINKINDID,
1, --'Adjustment'
TRANSACTIONTYPECODE,
ACCOUNT,
PROJECT,
'', --The function does not return a reference
AMOUNT,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONCURRENCYID
from dbo.UFN_REVENUE_GETGIFTINKINDPAYMENTMETHODDETAILGLDISTRIBUTION(@GIFTINKINDPAYMENTMETHODDETAILID);
end
/*log the history header for the reversal*/
set @REVERSALADJUSTMENTHISTORYGIFTINKINDID = newid();
insert into dbo.ADJUSTMENTHISTORYGIFTINKIND(ID, GIFTINKINDSALEADJUSTMENTID, GIFTINKINDPAYMENTMETHODDETAILIDENTIFIER, ADJUSTMENTIDENTIFIER, CONSTITUENTNAME, REVENUEDATE, ADJUSTMENTDATE, ADJUSTMENTPOSTDATE, ADJUSTMENTREASON, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
@REVERSALADJUSTMENTHISTORYGIFTINKINDID,
null,
cast(@GIFTINKINDPAYMENTMETHODDETAILID as nvarchar(36)),
cast(newid() as nvarchar(36)), --This is just something to group by
CONSTITUENT.NAME,
REVENUE.DATE, --This is the postdate of the reversal that got logged, so we'll use it too
@CHANGEDATE,
dbo.UFN_DATE_GETEARLIESTTIME(@CHANGEDATE), --The adjustment post date needs to be the date of the deletion
'',
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from dbo.REVENUEPAYMENTMETHOD
inner join dbo.REVENUE on dbo.REVENUEPAYMENTMETHOD.REVENUEID = REVENUE.ID
inner join dbo.CONSTITUENT on CONSTITUENT.ID = REVENUE.CONSTITUENTID
where REVENUEPAYMENTMETHOD.ID = @GIFTINKINDPAYMENTMETHODDETAILID; --This works because the PK for GIFTINKINDPAYMENTMETHODDETAIL is an FK to REVENUE
insert into dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAIL(ID, ADJUSTMENTHISTORYGIFTINKINDID, ADJUSTEDFIELD,ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE)
select
newid(),
@REVERSALADJUSTMENTHISTORYGIFTINKINDID,
case when @UNSOLD = 1 then 'Unsold' else 'Deleted' end,
'',
'',
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
'',
'',
'',
'';
/*if there's not an unposted adjustment, the reversal for the deletion will be the calculated GL information*/
if @UNPOSTEDGIFTINKINDSALEADJUSTMENTID is null
insert into dbo.ADJUSTMENTHISTORYGIFTINKINDDISTRIBUTION(ADJUSTMENTHISTORYGIFTINKINDID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
select
@REVERSALADJUSTMENTHISTORYGIFTINKINDID,
0, --'Reversal'
case TRANSACTIONTYPECODE when 0 then 1 else 0 end,
ACCOUNT,
PROJECT,
'', --The function does not return a reference
AMOUNT,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONCURRENCYID
from dbo.UFN_REVENUE_GETGIFTINKINDPAYMENTMETHODDETAILGLDISTRIBUTION(@GIFTINKINDPAYMENTMETHODDETAILID)
where @GIFTINKINDSALEID is null or GIFTINKINDSALEID = @GIFTINKINDSALEID;
else /*otherwise, the reversal will be the reversal from the unposted adjustment */
update dbo.ADJUSTMENTHISTORYGIFTINKINDDISTRIBUTION
set ADJUSTMENTHISTORYGIFTINKINDID = @REVERSALADJUSTMENTHISTORYGIFTINKINDID
where ADJUSTMENTHISTORYGIFTINKINDID = @UNPOSTEDADJUSTMENTHISTORYGIFTINKINDID and TYPECODE = 0 --We only want the reversals
/*if it exists, delete the unposted adjustment history. Since this will never post, it will never interact with the GL
and we don't need to remember it.*/
declare @CONTEXTCACHE varbinary(128);
set @CONTEXTCACHE = CONTEXT_INFO();
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
if not @UNPOSTEDGIFTINKINDSALEADJUSTMENTID is null /*ADJUSTMENTGIFTINKINDHISTORY.GIFTINKINDSALEADJUSTMENTID is allowed to be null, so check first*/
delete from dbo.ADJUSTMENTHISTORYGIFTINKIND where GIFTINKINDSALEADJUSTMENTID = @UNPOSTEDGIFTINKINDSALEADJUSTMENTID
if not @CONTEXTCACHE is null
set CONTEXT_INFO @CONTEXTCACHE;
end