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