USP_ADJUSTMENTHISTORY_GIFTINKINDSALE_SAVEHISTORY
Store historical sold gift-in-kind adjustment information for reporting purposes.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@GIFTINKINDSALEID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@GIFTINKINDSALEADJUSTMENTID | uniqueidentifier | IN |
Definition
Copy
create procedure dbo.USP_ADJUSTMENTHISTORY_GIFTINKINDSALE_SAVEHISTORY
(
@GIFTINKINDSALEID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@CHANGEDATE datetime,
@GIFTINKINDSALEADJUSTMENTID uniqueidentifier
)
as
set nocount on;
/*Before calling this procedure, be sure that you call USP_SAVE_GIFTINKINDSALEADJUSTMENT and then save changes to the GIFTINKINDSALE table*/
declare @ADJUSTMENTCOUNT int;
declare @PREVIOUSGIFTINKINDSALEADJUSTMENTID uniqueidentifier;
declare @PREVIOUSADJUSTMENTHISTORYGIFTINKINDID uniqueidentifier;
declare @ADJUSTMENTHISTORYGIFTINKINDID uniqueidentifier;
declare @SALEAMOUNTCHANGED bit;
declare @NUMBEROFUNITSCHANGED bit;
declare @CONSTITUENTCHANGED bit;
declare @PAYMENTNUMBEROFUNITSCHANGED bit;
declare @PAYMENTFAIRMARKETVALUECHANGED bit;
declare @BASERATECHANGED bit;
declare @ORGANIZATIONRATECHANGED bit;
declare @EDITINGADJUSTMENT bit;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
select @ADJUSTMENTCOUNT = count(ID)
from dbo.GIFTINKINDSALEADJUSTMENT
where GIFTINKINDSALEADJUSTMENT.GIFTINKINDSALEID = @GIFTINKINDSALEID;
select @ADJUSTMENTHISTORYGIFTINKINDID = ID
from dbo.ADJUSTMENTHISTORYGIFTINKIND
where GIFTINKINDSALEADJUSTMENTID = @GIFTINKINDSALEADJUSTMENTID
/*if this is a new adjustment, there will only be a header row (no details or distributions). Otherwise, it's an edit*/
if not exists
(
select ID from dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAIL where ADJUSTMENTHISTORYGIFTINKINDID = @ADJUSTMENTHISTORYGIFTINKINDID
union all
select ID from dbo.ADJUSTMENTHISTORYGIFTINKINDDISTRIBUTION where ADJUSTMENTHISTORYGIFTINKINDID = @ADJUSTMENTHISTORYGIFTINKINDID
)
set @EDITINGADJUSTMENT = 0;
else
set @EDITINGADJUSTMENT = 1;
/*delete the previous report information so we can recreate it*/
delete from dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAIL where ADJUSTMENTHISTORYGIFTINKINDID = @ADJUSTMENTHISTORYGIFTINKINDID;
/*determine what changed by comparing the snapshot to the live data*/
select
@SALEAMOUNTCHANGED = case when SNAPSHOT.SALEAMOUNT <> LIVEDATA.SALEAMOUNT then 1 else 0 end,
@NUMBEROFUNITSCHANGED = case when SNAPSHOT.NUMBEROFUNITS <> LIVEDATA.NUMBEROFUNITS then 1 else 0 end,
@CONSTITUENTCHANGED = case when SNAPSHOT.CONSTITUENTIDENTIFIER <> LIVEDATA.CONSTITUENTID then 1 else 0 end,
@PAYMENTNUMBEROFUNITSCHANGED = case when SNAPSHOT.PAYMENTNUMBEROFUNITS <> LIVEDATA.PAYMENTNUMBEROFUNITS then 1 else 0 end,
@PAYMENTFAIRMARKETVALUECHANGED = case when SNAPSHOT.PAYMENTFAIRMARKETVALUE <> LIVEDATA.PAYMENTFAIRMARKETVALUE then 1 else 0 end,
@BASERATECHANGED = case when SNAPSHOT.BASERATE <> LIVEDATA.BASEEXCHANGERATE then 1 else 0 end,
@ORGANIZATIONRATECHANGED = case when SNAPSHOT.ORGANIZATIONRATE <> LIVEDATA.ORGANIZATIONEXCHANGERATE then 1 else 0 end
from dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT as SNAPSHOT
cross join
(
select
GIFTINKINDSALE.SALEAMOUNT,
GIFTINKINDSALE.NUMBEROFUNITS,
BASEEXCHANGERATE.RATE as BASEEXCHANGERATE,
ORGANIZATIONEXCHANGERATE.RATE as ORGANIZATIONEXCHANGERATE,
REVENUE.CONSTITUENTID,
GIFTINKINDPAYMENTMETHODDETAIL.NUMBEROFUNITS as PAYMENTNUMBEROFUNITS,
GIFTINKINDPAYMENTMETHODDETAIL.FAIRMARKETVALUE as PAYMENTFAIRMARKETVALUE
from dbo.GIFTINKINDSALE
inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.ID = GIFTINKINDSALE.GIFTINKINDPAYMENTMETHODDETAILID
inner join dbo.REVENUE on REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID
inner join dbo.GIFTINKINDPAYMENTMETHODDETAIL on GIFTINKINDPAYMENTMETHODDETAIL.ID = GIFTINKINDSALE.GIFTINKINDPAYMENTMETHODDETAILID
left join dbo.CURRENCYEXCHANGERATE as BASEEXCHANGERATE on BASEEXCHANGERATE.ID = GIFTINKINDSALE.BASEEXCHANGERATEID
left join dbo.CURRENCYEXCHANGERATE as ORGANIZATIONEXCHANGERATE on ORGANIZATIONEXCHANGERATE.ID = GIFTINKINDSALE.ORGANIZATIONEXCHANGERATEID
where GIFTINKINDSALE.ID = @GIFTINKINDSALEID
) as LIVEDATA
where ID = @ADJUSTMENTHISTORYGIFTINKINDID;
/*Log the detail for this adjustment*/
--SALEAMOUNTCHANGED or
--PAYMENTFAIRMARKETVALUECHANGED
insert into dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAIL(ADJUSTMENTHISTORYGIFTINKINDID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, ISMONEY, ADJUSTEDFIELDPREVIOUSMONEYVALUE, ADJUSTEDFIELDADJUSTEDMONEYVALUE, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, TRANSACTIONADJUSTEDFIELDPREVIOUSMONEYVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDMONEYVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSMONEYVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDMONEYVALUE, BASECURRENCYID, TRANSACTIONCURRENCYID)
select
@ADJUSTMENTHISTORYGIFTINKINDID,
'Sale amount',
[SNAP].SALEAMOUNT,
[REAL].SALEAMOUNT,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
1,
[SNAP].SALEAMOUNT,
[REAL].SALEAMOUNT,
[SNAP].TRANSACTIONSALEAMOUNT,
[REAL].TRANSACTIONSALEAMOUNT,
[SNAP].TRANSACTIONSALEAMOUNT,
[REAL].TRANSACTIONSALEAMOUNT,
[SNAP].ORGANIZATIONSALEAMOUNT,
[REAL].ORGANIZATIONSALEAMOUNT,
[SNAP].ORGANIZATIONSALEAMOUNT,
[REAL].ORGANIZATIONSALEAMOUNT,
[REAL].BASECURRENCYID,
[REAL].TRANSACTIONCURRENCYID
from dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT as [SNAP]
inner join dbo.GIFTINKINDSALE as [REAL] on [REAL].ID = @GIFTINKINDSALEID
where [SNAP].ID = @ADJUSTMENTHISTORYGIFTINKINDID and @SALEAMOUNTCHANGED = 1
union all
select
@ADJUSTMENTHISTORYGIFTINKINDID,
'Payment''s median price',
[SNAP].PAYMENTFAIRMARKETVALUE,
[REAL].FAIRMARKETVALUE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
1,
[SNAP].PAYMENTFAIRMARKETVALUE,
[REAL].FAIRMARKETVALUE,
[SNAP].TRANSACTIONPAYMENTFAIRMARKETVALUE,
[REAL].TRANSACTIONFAIRMARKETVALUE,
[SNAP].TRANSACTIONPAYMENTFAIRMARKETVALUE,
[REAL].TRANSACTIONFAIRMARKETVALUE,
[SNAP].ORGANIZATIONPAYMENTFAIRMARKETVALUE,
[REAL].ORGANIZATIONFAIRMARKETVALUE,
[SNAP].ORGANIZATIONPAYMENTFAIRMARKETVALUE,
[REAL].ORGANIZATIONFAIRMARKETVALUE,
[REAL].BASECURRENCYID,
[REAL].TRANSACTIONCURRENCYID
from dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT as [SNAP]
inner join dbo.GIFTINKINDSALE on GIFTINKINDSALE.ID = @GIFTINKINDSALEID
inner join dbo.GIFTINKINDPAYMENTMETHODDETAIL as [REAL] on GIFTINKINDSALE.GIFTINKINDPAYMENTMETHODDETAILID = [REAL].ID
where [SNAP].ID = @ADJUSTMENTHISTORYGIFTINKINDID and @PAYMENTFAIRMARKETVALUECHANGED = 1
-- NUMBEROFUNITSCHANGED or
-- CONSTITUENTCHANGED or
-- PAYMENTNUMBEROFUNITSCHANGED or
-- BASERATECHANGED or
-- ORGANIZATIONRATECHANGED
insert into dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAIL(ADJUSTMENTHISTORYGIFTINKINDID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE)
select
@ADJUSTMENTHISTORYGIFTINKINDID,
'Units sold',
[SNAP].NUMBEROFUNITS,
[REAL].NUMBEROFUNITS,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
[SNAP].NUMBEROFUNITS,
[REAL].NUMBEROFUNITS,
[SNAP].NUMBEROFUNITS,
[REAL].NUMBEROFUNITS
from dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT as [SNAP]
inner join dbo.GIFTINKINDSALE as [REAL] on [REAL].ID = @GIFTINKINDSALEID
where [SNAP].ID = @ADJUSTMENTHISTORYGIFTINKINDID and @NUMBEROFUNITSCHANGED = 1
union all
select
@ADJUSTMENTHISTORYGIFTINKINDID,
'Constituent',
dbo.UFN_CONSTITUENT_BUILDNAME([SNAP].CONSTITUENTIDENTIFIER),
dbo.UFN_CONSTITUENT_BUILDNAME(REVENUE.CONSTITUENTID),
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
dbo.UFN_CONSTITUENT_BUILDNAME([SNAP].CONSTITUENTIDENTIFIER),
dbo.UFN_CONSTITUENT_BUILDNAME(REVENUE.CONSTITUENTID),
dbo.UFN_CONSTITUENT_BUILDNAME([SNAP].CONSTITUENTIDENTIFIER),
dbo.UFN_CONSTITUENT_BUILDNAME(REVENUE.CONSTITUENTID)
from dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT as [SNAP]
inner join dbo.GIFTINKINDSALE as [REAL] on [REAL].ID = @GIFTINKINDSALEID
inner join dbo.REVENUEPAYMENTMETHOD on [REAL].ID = REVENUEPAYMENTMETHOD.ID
inner join dbo.REVENUE on REVENUEPAYMENTMETHOD.REVENUEID = REVENUE.ID
where [SNAP].ID = @ADJUSTMENTHISTORYGIFTINKINDID and @CONSTITUENTCHANGED = 1
union all
select
@ADJUSTMENTHISTORYGIFTINKINDID,
'Payment''s number of units',
[SNAP].PAYMENTNUMBEROFUNITS,
[REAL].NUMBEROFUNITS,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
[SNAP].PAYMENTNUMBEROFUNITS,
[REAL].NUMBEROFUNITS,
[SNAP].PAYMENTNUMBEROFUNITS,
[REAL].NUMBEROFUNITS
from dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT as [SNAP]
inner join dbo.GIFTINKINDSALE on GIFTINKINDSALE.ID = @GIFTINKINDSALEID
inner join dbo.GIFTINKINDPAYMENTMETHODDETAIL as [REAL] on GIFTINKINDSALE.GIFTINKINDPAYMENTMETHODDETAILID = [REAL].ID
where [SNAP].ID = @ADJUSTMENTHISTORYGIFTINKINDID and @PAYMENTNUMBEROFUNITSCHANGED = 1
union all
select
@ADJUSTMENTHISTORYGIFTINKINDID,
'Base exchange rate',
ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT.BASERATE,
OLDBASERATE.RATE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT.BASERATE,
OLDBASERATE.RATE,
ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT.BASERATE,
OLDBASERATE.RATE
from dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT
cross join
(
select CURRENCYEXCHANGERATE.RATE
from dbo.GIFTINKINDSALE
left join dbo.CURRENCYEXCHANGERATE on CURRENCYEXCHANGERATE.ID = GIFTINKINDSALE.BASEEXCHANGERATEID
where GIFTINKINDSALE.ID = @GIFTINKINDSALEID
) OLDBASERATE
where ID = @ADJUSTMENTHISTORYGIFTINKINDID and @BASERATECHANGED = 1
union all
select
@ADJUSTMENTHISTORYGIFTINKINDID,
'Organization exchange rate',
ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT.ORGANIZATIONRATE,
OLDORGANIZATIONRATE.RATE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT.ORGANIZATIONRATE,
OLDORGANIZATIONRATE.RATE,
ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT.ORGANIZATIONRATE,
OLDORGANIZATIONRATE.RATE
from dbo.ADJUSTMENTHISTORYGIFTINKINDPAYMENTMETHODDETAILSNAPSHOT
cross join
(
select CURRENCYEXCHANGERATE.RATE
from dbo.GIFTINKINDSALE
left join dbo.CURRENCYEXCHANGERATE on CURRENCYEXCHANGERATE.ID = GIFTINKINDSALE.ORGANIZATIONEXCHANGERATEID
where GIFTINKINDSALE.ID = @GIFTINKINDSALEID
) OLDORGANIZATIONRATE
where ID = @ADJUSTMENTHISTORYGIFTINKINDID and @ORGANIZATIONRATECHANGED = 1;
/*Record the GL reversal and adjustment information*/
if @EDITINGADJUSTMENT = 0 /*if this is a new adjustment, store the reversal that will take place*/
begin
insert into dbo.ADJUSTMENTHISTORYGIFTINKINDDISTRIBUTION(ADJUSTMENTHISTORYGIFTINKINDID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
select
@ADJUSTMENTHISTORYGIFTINKINDID,
0, /*Reversal*/
TRANSACTIONTYPECODE,
ACCOUNT,
PROJECT,
REFERENCE,
AMOUNT,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONCURRENCYID
from dbo.ADJUSTMENTHISTORYGIFTINKINDDISTRIBUTIONSNAPSHOT
where ADJUSTMENTHISTORYGIFTINKINDID = @ADJUSTMENTHISTORYGIFTINKINDID;
end
if @ADJUSTMENTCOUNT > 1 /*if this is not the first adjustment, we need to copy our reversal information to be the adjustment information for the last adjustment */
begin
select top 1
@PREVIOUSGIFTINKINDSALEADJUSTMENTID = ID
from dbo.GIFTINKINDSALEADJUSTMENT
where
GIFTINKINDSALEID = @GIFTINKINDSALEID and
ID <> @GIFTINKINDSALEADJUSTMENTID
order by TSLONG desc;
/*If there is a previous adjustment, write the same reversal as the "adjusted" portion of the previous adjustment */
if not @PREVIOUSGIFTINKINDSALEADJUSTMENTID is null
begin
select
@PREVIOUSADJUSTMENTHISTORYGIFTINKINDID = ID
from dbo.ADJUSTMENTHISTORYGIFTINKIND
where GIFTINKINDSALEADJUSTMENTID = @PREVIOUSGIFTINKINDSALEADJUSTMENTID;
if @PREVIOUSADJUSTMENTHISTORYGIFTINKINDID is not null
begin
/*first, delete the previous adjustment record*/
delete from dbo.ADJUSTMENTHISTORYGIFTINKINDDISTRIBUTION where ADJUSTMENTHISTORYGIFTINKINDID = @PREVIOUSADJUSTMENTHISTORYGIFTINKINDID and TYPECODE = 1;
/*then insert the updated ones*/
insert into dbo.ADJUSTMENTHISTORYGIFTINKINDDISTRIBUTION(ADJUSTMENTHISTORYGIFTINKINDID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
select
@PREVIOUSADJUSTMENTHISTORYGIFTINKINDID,
1, /*Adjustment*/
TRANSACTIONTYPECODE,
ACCOUNT,
PROJECT,
REFERENCE,
AMOUNT,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONCURRENCYID
from dbo.ADJUSTMENTHISTORYGIFTINKINDDISTRIBUTIONSNAPSHOT
where ADJUSTMENTHISTORYGIFTINKINDID = @ADJUSTMENTHISTORYGIFTINKINDID;
end
end
end