USP_ADJUSTMENTHISTORY_GIFTINKIND_SAVESNAPSHOT
Stores snapshot of gift-in-kind detail information at the time of an adjustment for use in reporting.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@GIFTINKINDSALEADJUSTMENTID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
create procedure dbo.USP_ADJUSTMENTHISTORY_GIFTINKIND_SAVESNAPSHOT
(
@GIFTINKINDSALEADJUSTMENTID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier
)
as
set nocount on;
declare @CHANGEDATE datetime;
declare @GIFTINKINDSALEID uniqueidentifier;
declare @ADJUSTMENTHISTORYGIFTINKINDID uniqueidentifier;
declare @SNAPSHOTEXISTS bit;
set @CHANGEDATE = getdate();
set @SNAPSHOTEXISTS = 0;
/*determine if a snapshot exists*/
if exists
(
select
ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT.ID
from
dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT
inner join
dbo.ADJUSTMENTHISTORYGIFTINKIND on ADJUSTMENTHISTORYGIFTINKIND.ID = ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT.ID
where
ADJUSTMENTHISTORYGIFTINKIND.GIFTINKINDSALEADJUSTMENTID = @GIFTINKINDSALEADJUSTMENTID
)
set @SNAPSHOTEXISTS = 1;
if @SNAPSHOTEXISTS = 1
/*update the ADJUSTMENTHISTORYGIFTINKIND record to match GIFTINKINDSALEADJUSTMENT */
begin
select @ADJUSTMENTHISTORYGIFTINKINDID = ID
from dbo.ADJUSTMENTHISTORYGIFTINKIND
where GIFTINKINDSALEADJUSTMENTID = @GIFTINKINDSALEADJUSTMENTID;
if @GIFTINKINDSALEADJUSTMENTID is not null
update dbo.ADJUSTMENTHISTORYGIFTINKIND set
ADJUSTMENTHISTORYGIFTINKIND.CONSTITUENTNAME = CONSTITUENT.NAME,
ADJUSTMENTHISTORYGIFTINKIND.REVENUEDATE = REVENUE.DATE,
ADJUSTMENTHISTORYGIFTINKIND.ADJUSTMENTDATE = GIFTINKINDSALEADJUSTMENT.DATE,
ADJUSTMENTHISTORYGIFTINKIND.ADJUSTMENTPOSTDATE = GIFTINKINDSALEADJUSTMENT.POSTDATE,
ADJUSTMENTHISTORYGIFTINKIND.ADJUSTMENTREASON = GIFTINKINDSALEADJUSTMENT.REASON,
ADJUSTMENTHISTORYGIFTINKIND.ADJUSTMENTREASONCODEID = GIFTINKINDSALEADJUSTMENT.REASONCODEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
from
dbo.ADJUSTMENTHISTORYGIFTINKIND
inner join
dbo.GIFTINKINDSALEADJUSTMENT on GIFTINKINDSALEADJUSTMENT.ID = ADJUSTMENTHISTORYGIFTINKIND.GIFTINKINDSALEADJUSTMENTID
inner join
dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.ID = GIFTINKINDSALEADJUSTMENT.GIFTINKINDSALEID
inner join
dbo.REVENUE on REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID
inner join
dbo.CONSTITUENT on CONSTITUENT.ID = REVENUE.CONSTITUENTID
where
GIFTINKINDSALEADJUSTMENT.ID = @GIFTINKINDSALEADJUSTMENTID;
end
else
begin
/*since the snapshot has an FK ADJUSTMENTHISTORYGIFTINKIND,
need to create an ADJUSTMENTHISTORYGIFTINKIND row.
The needed information is attached to the GIFTINKINDSALEADJUSTMENT record*/
select
@GIFTINKINDSALEID = GIFTINKINDSALEADJUSTMENT.GIFTINKINDSALEID
from
dbo.GIFTINKINDSALEADJUSTMENT
where
ID = @GIFTINKINDSALEADJUSTMENTID;
set @ADJUSTMENTHISTORYGIFTINKINDID = newid();
insert into dbo.ADJUSTMENTHISTORYGIFTINKIND
(
ID,
GIFTINKINDSALEADJUSTMENTID,
GIFTINKINDPAYMENTMETHODDETAILIDENTIFIER,
ADJUSTMENTIDENTIFIER,
CONSTITUENTNAME,
REVENUEDATE,
ADJUSTMENTDATE,
ADJUSTMENTPOSTDATE,
ADJUSTMENTREASON,
ADJUSTMENTREASONCODEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select top 1
@ADJUSTMENTHISTORYGIFTINKINDID,
GIFTINKINDSALEADJUSTMENT.ID,
cast(GIFTINKINDSALEADJUSTMENT.GIFTINKINDSALEID as nvarchar(36)),
cast(GIFTINKINDSALEADJUSTMENT.ID as nvarchar(36)),
CONSTITUENT.NAME,
REVENUE.DATE,
GIFTINKINDSALEADJUSTMENT.DATE,
GIFTINKINDSALEADJUSTMENT.POSTDATE,
GIFTINKINDSALEADJUSTMENT.REASON,
GIFTINKINDSALEADJUSTMENT.REASONCODEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from dbo.GIFTINKINDSALEADJUSTMENT
inner join
dbo.GIFTINKINDSALE on GIFTINKINDSALEADJUSTMENT.GIFTINKINDSALEID = GIFTINKINDSALE.ID
inner join
dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.ID = GIFTINKINDSALE.GIFTINKINDPAYMENTMETHODDETAILID
inner join
dbo.REVENUE on REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID
inner join
dbo.CONSTITUENT on CONSTITUENT.ID = REVENUE.CONSTITUENTID
where
GIFTINKINDSALEADJUSTMENT.ID = @GIFTINKINDSALEADJUSTMENTID;
/*create the snapshot of the gift-in-kind detail information*/
insert into
dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT
(
ID,
SALEAMOUNT,
CONSTITUENTIDENTIFIER,
NUMBEROFUNITS,
PAYMENTNUMBEROFUNITS,
PAYMENTFAIRMARKETVALUE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED,
TRANSACTIONSALEAMOUNT,
TRANSACTIONPAYMENTFAIRMARKETVALUE,
ORGANIZATIONSALEAMOUNT,
ORGANIZATIONPAYMENTFAIRMARKETVALUE,
BASECURRENCYID,
TRANSACTIONCURRENCYID,
BASERATE,
ORGANIZATIONRATE)
select
@ADJUSTMENTHISTORYGIFTINKINDID,
GIFTINKINDSALE.SALEAMOUNT,
REVENUE.CONSTITUENTID,
GIFTINKINDSALE.NUMBEROFUNITS,
GIFTINKINDPAYMENTMETHODDETAIL.NUMBEROFUNITS,
GIFTINKINDPAYMENTMETHODDETAIL.FAIRMARKETVALUE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
GIFTINKINDSALE.TRANSACTIONSALEAMOUNT,
GIFTINKINDPAYMENTMETHODDETAIL.TRANSACTIONFAIRMARKETVALUE,
GIFTINKINDSALE.ORGANIZATIONSALEAMOUNT,
GIFTINKINDPAYMENTMETHODDETAIL.ORGANIZATIONFAIRMARKETVALUE,
GIFTINKINDSALE.BASECURRENCYID,
GIFTINKINDSALE.TRANSACTIONCURRENCYID,
coalesce(BASERATE.RATE,0),
coalesce(ORGANIZATIONRATE.RATE,0)
from
dbo.GIFTINKINDSALE
inner join
dbo.GIFTINKINDSALEADJUSTMENT on GIFTINKINDSALEADJUSTMENT.GIFTINKINDSALEID = GIFTINKINDSALE.ID
inner join
dbo.GIFTINKINDPAYMENTMETHODDETAIL on GIFTINKINDSALE.GIFTINKINDPAYMENTMETHODDETAILID = GIFTINKINDPAYMENTMETHODDETAIL.ID
inner join
dbo.REVENUEPAYMENTMETHOD on GIFTINKINDSALE.GIFTINKINDPAYMENTMETHODDETAILID = REVENUEPAYMENTMETHOD.ID
inner join
dbo.REVENUE on REVENUEPAYMENTMETHOD.REVENUEID = REVENUE.ID
left join
dbo.CURRENCYEXCHANGERATE BASERATE on BASERATE.ID = GIFTINKINDSALE.BASEEXCHANGERATEID
left join
dbo.CURRENCYEXCHANGERATE ORGANIZATIONRATE on ORGANIZATIONRATE.ID = GIFTINKINDSALE.ORGANIZATIONEXCHANGERATEID
where
GIFTINKINDSALEADJUSTMENT.ID = @GIFTINKINDSALEADJUSTMENTID;
/*create the distribution snapshot*/
insert into
dbo.ADJUSTMENTHISTORYGIFTINKINDDISTRIBUTIONSNAPSHOT
(
ADJUSTMENTHISTORYGIFTINKINDID,
TRANSACTIONTYPECODE,
ACCOUNT,
PROJECT,
REFERENCE,
AMOUNT,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED,
TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONCURRENCYID)
select
@ADJUSTMENTHISTORYGIFTINKINDID,
case TRANSACTIONTYPECODE when 0 then 1 else 0 end,
ACCOUNT,
PROJECT,
REFERENCE,
AMOUNT,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONCURRENCYID
from
dbo.GIFTINKINDSALEGLDISTRIBUTION
where
GIFTINKINDSALEID = @GIFTINKINDSALEID
and
GIFTINKINDSALEGLDISTRIBUTION.OUTDATED = 0;
end