USP_ADJUSTMENTHISTORY_PROPERTY_SAVEHISTORY

Store historical sold property adjustment information for reporting purposes.

Parameters

Parameter Parameter Type Mode Description
@PROPERTYDETAILID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@PROPERTYDETAILADJUSTMENTID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_ADJUSTMENTHISTORY_PROPERTY_SAVEHISTORY
            (
                @PROPERTYDETAILID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier,
                @CHANGEDATE datetime,
                @PROPERTYDETAILADJUSTMENTID uniqueidentifier
            )
            as
            set nocount on;
            /*Before calling this procedure, be sure that you call USP_SAVE_PROPERTYDETAILADJUSTMENT and then save changes to the PROPERTYDETAIL table*/

            declare @ADJUSTMENTCOUNT int;
            declare @PREVIOUSPROPERTYDETAILADJUSTMENTID uniqueidentifier;
            declare @PREVIOUSADJUSTMENTHISTORYPROPERTYID uniqueidentifier;
            declare @ADJUSTMENTHISTORYPROPERTYID uniqueidentifier;

            declare @SALEAMOUNTCHANGED bit;
            declare @BROKERFEECHANGED bit;
            declare @CONSTITUENTCHANGED bit;
            declare @BASERATECHANGED bit;
            declare @ORGANIZATIONRATECHANGED bit;

            declare @EDITINGADJUSTMENT bit;

            if @CHANGEDATE is null
                set @CHANGEDATE = getdate();

            select @ADJUSTMENTCOUNT = count(ID) 
            from dbo.PROPERTYDETAILADJUSTMENT
            where PROPERTYDETAILADJUSTMENT.PROPERTYDETAILID = @PROPERTYDETAILID;

            select @ADJUSTMENTHISTORYPROPERTYID = ID
            from dbo.ADJUSTMENTHISTORYPROPERTY 
            where PROPERTYDETAILADJUSTMENTID = @PROPERTYDETAILADJUSTMENTID 

            /*if this is a new adjustment, there will only be a header row (no details or distributions). Otherwise, it's an edit*/
            if (select count(ID) from dbo.ADJUSTMENTHISTORYPROPERTYDETAIL where ADJUSTMENTHISTORYPROPERTYID = @ADJUSTMENTHISTORYPROPERTYID) = 0
                and (select count(ID) from dbo.ADJUSTMENTHISTORYPROPERTYDISTRIBUTION where ADJUSTMENTHISTORYPROPERTYID = @ADJUSTMENTHISTORYPROPERTYID) = 0
                set @EDITINGADJUSTMENT = 0;
            else
                set @EDITINGADJUSTMENT = 1;

            if @EDITINGADJUSTMENT = 1
            begin
                /*if we're editing the adjustment, delete the previous report information so we can recreate it*/
                delete from ADJUSTMENTHISTORYPROPERTYDETAIL where ADJUSTMENTHISTORYPROPERTYID = @ADJUSTMENTHISTORYPROPERTYID;
            end

            /*determine what changed by comparing the snapshot to the live data*/
            if (select SALEAMOUNT from dbo.ADJUSTMENTHISTORYPROPERTYSNAPSHOT where ID = @ADJUSTMENTHISTORYPROPERTYID
                <> (select SALEAMOUNT from dbo.PROPERTYDETAIL where ID = @PROPERTYDETAILID
                set @SALEAMOUNTCHANGED = 1;
            else
                set @SALEAMOUNTCHANGED = 0;
            if (select BROKERFEE from dbo.ADJUSTMENTHISTORYPROPERTYSNAPSHOT where ID = @ADJUSTMENTHISTORYPROPERTYID)
                <> (select BROKERFEE from dbo.PROPERTYDETAIL where ID = @PROPERTYDETAILID)
                set @BROKERFEECHANGED = 1;
            else 
                set @BROKERFEECHANGED = 0;

            if (select CONSTITUENTIDENTIFIER from dbo.ADJUSTMENTHISTORYPROPERTYSNAPSHOT where ID = @ADJUSTMENTHISTORYPROPERTYID)
                <> (select REVENUE.CONSTITUENTID from dbo.REVENUE inner join dbo.REVENUEPAYMENTMETHOD on REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID where REVENUEPAYMENTMETHOD.ID = @PROPERTYDETAILID)
                set @CONSTITUENTCHANGED = 1;
            else
                set @CONSTITUENTCHANGED = 0;

            if (select BASERATE from dbo.ADJUSTMENTHISTORYPROPERTYSNAPSHOT where ID = @ADJUSTMENTHISTORYPROPERTYID
                    <> (select CURRENCYEXCHANGERATE.RATE from dbo.PROPERTYDETAIL left join dbo.CURRENCYEXCHANGERATE on CURRENCYEXCHANGERATE.ID = PROPERTYDETAIL.BASEEXCHANGERATEID where PROPERTYDETAIL.ID = @PROPERTYDETAILID)
                set @BASERATECHANGED = 1;
            else
                set @BASERATECHANGED = 0;

            if (select ORGANIZATIONRATE from dbo.ADJUSTMENTHISTORYPROPERTYSNAPSHOT where ID = @ADJUSTMENTHISTORYPROPERTYID
                    <> (select CURRENCYEXCHANGERATE.RATE from dbo.PROPERTYDETAIL left join dbo.CURRENCYEXCHANGERATE on CURRENCYEXCHANGERATE.ID = PROPERTYDETAIL.ORGANIZATIONEXCHANGERATEID where PROPERTYDETAIL.ID = @PROPERTYDETAILID)
                set @ORGANIZATIONRATECHANGED = 1;
            else
                set @ORGANIZATIONRATECHANGED = 0;

            /*Log the detail for this adjustment*/
            if @SALEAMOUNTCHANGED = 1
                insert into dbo.ADJUSTMENTHISTORYPROPERTYDETAIL(ADJUSTMENTHISTORYPROPERTYID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, ISMONEY, ADJUSTEDFIELDPREVIOUSMONEYVALUE, ADJUSTEDFIELDADJUSTEDMONEYVALUE, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, TRANSACTIONADJUSTEDFIELDPREVIOUSMONEYVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDMONEYVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSMONEYVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDMONEYVALUE, BASECURRENCYID, TRANSACTIONCURRENCYID)
                    select
                        @ADJUSTMENTHISTORYPROPERTYID,
                        '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.ADJUSTMENTHISTORYPROPERTYSNAPSHOT as [SNAP]
                    inner join dbo.PROPERTYDETAIL as [REAL] on [REAL].ID = @PROPERTYDETAILID
                    where [SNAP].ID = @ADJUSTMENTHISTORYPROPERTYID

            if @BROKERFEECHANGED = 1
                insert into dbo.ADJUSTMENTHISTORYPROPERTYDETAIL(ADJUSTMENTHISTORYPROPERTYID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, ISMONEY, ADJUSTEDFIELDPREVIOUSMONEYVALUE, ADJUSTEDFIELDADJUSTEDMONEYVALUE, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, TRANSACTIONADJUSTEDFIELDPREVIOUSMONEYVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDMONEYVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSMONEYVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDMONEYVALUE, BASECURRENCYID, TRANSACTIONCURRENCYID)
                    select
                        @ADJUSTMENTHISTORYPROPERTYID,
                        'Fees',
                        [SNAP].BROKERFEE,
                        [REAL].BROKERFEE,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        1,
                        [SNAP].BROKERFEE,
                        [REAL].BROKERFEE,
                        [SNAP].TRANSACTIONBROKERFEE,
                        [REAL].TRANSACTIONBROKERFEE,
                        [SNAP].TRANSACTIONBROKERFEE,
                        [REAL].TRANSACTIONBROKERFEE,
                        [SNAP].ORGANIZATIONBROKERFEE,
                        [REAL].ORGANIZATIONBROKERFEE,
                        [SNAP].ORGANIZATIONBROKERFEE,
                        [REAL].ORGANIZATIONBROKERFEE,
                        [REAL].BASECURRENCYID,
                        [REAL].TRANSACTIONCURRENCYID
                    from dbo.ADJUSTMENTHISTORYPROPERTYSNAPSHOT as [SNAP]
                    inner join dbo.PROPERTYDETAIL as [REAL] on [REAL].ID = @PROPERTYDETAILID
                    where [SNAP].ID = @ADJUSTMENTHISTORYPROPERTYID

            if @CONSTITUENTCHANGED = 1
                insert into dbo.ADJUSTMENTHISTORYPROPERTYDETAIL(ADJUSTMENTHISTORYPROPERTYID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE)
                    select
                        @ADJUSTMENTHISTORYPROPERTYID,
                        '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.ADJUSTMENTHISTORYPROPERTYSNAPSHOT as [SNAP]
                    inner join dbo.PROPERTYDETAIL as [REAL] on [REAL].ID = @PROPERTYDETAILID
                    inner join dbo.REVENUEPAYMENTMETHOD on [REAL].ID = REVENUEPAYMENTMETHOD.ID
                    inner join dbo.REVENUE on REVENUEPAYMENTMETHOD.REVENUEID = REVENUE.ID
                    where [SNAP].ID = @ADJUSTMENTHISTORYPROPERTYID

            if @BASERATECHANGED = 1
            begin
                declare @OLDBASERATE decimal(20,8);
                select @OLDBASERATE = CURRENCYEXCHANGERATE.RATE 
                from dbo.PROPERTYDETAIL 
                    left join dbo.CURRENCYEXCHANGERATE on CURRENCYEXCHANGERATE.ID = PROPERTYDETAIL.BASEEXCHANGERATEID 
                where PROPERTYDETAIL.ID = @PROPERTYDETAILID

                insert into dbo.ADJUSTMENTHISTORYPROPERTYDETAIL(ADJUSTMENTHISTORYPROPERTYID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE)
                    select 
                        @ADJUSTMENTHISTORYPROPERTYID,
                        'Base exchange rate',
                        ADJUSTMENTHISTORYPROPERTYSNAPSHOT.BASERATE,
                        @OLDBASERATE,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        ADJUSTMENTHISTORYPROPERTYSNAPSHOT.BASERATE,
                        @OLDBASERATE,
                        ADJUSTMENTHISTORYPROPERTYSNAPSHOT.BASERATE,
                        @OLDBASERATE
                    from dbo.ADJUSTMENTHISTORYPROPERTYSNAPSHOT
                    where ID = @ADJUSTMENTHISTORYPROPERTYID;
            end

            if @ORGANIZATIONRATECHANGED = 1
            begin
                declare @OLDORGANIZATIONRATE decimal(20,8);
                select @OLDORGANIZATIONRATE = CURRENCYEXCHANGERATE.RATE 
                from dbo.PROPERTYDETAIL 
                    left join dbo.CURRENCYEXCHANGERATE on CURRENCYEXCHANGERATE.ID = PROPERTYDETAIL.ORGANIZATIONEXCHANGERATEID 
                where PROPERTYDETAIL.ID = @PROPERTYDETAILID

                insert into dbo.ADJUSTMENTHISTORYPROPERTYDETAIL(ADJUSTMENTHISTORYPROPERTYID, ADJUSTEDFIELD, ADJUSTEDFIELDPREVIOUSVALUE, ADJUSTEDFIELDADJUSTEDVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONADJUSTEDFIELDPREVIOUSVALUE, TRANSACTIONADJUSTEDFIELDADJUSTEDVALUE, ORGANIZATIONADJUSTEDFIELDPREVIOUSVALUE, ORGANIZATIONADJUSTEDFIELDADJUSTEDVALUE)
                    select 
                        @ADJUSTMENTHISTORYPROPERTYID,
                        'Organization exchange rate',
                        ADJUSTMENTHISTORYPROPERTYSNAPSHOT.ORGANIZATIONRATE,
                        @OLDORGANIZATIONRATE,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        ADJUSTMENTHISTORYPROPERTYSNAPSHOT.ORGANIZATIONRATE,
                        @OLDORGANIZATIONRATE,
                        ADJUSTMENTHISTORYPROPERTYSNAPSHOT.ORGANIZATIONRATE,
                        @OLDORGANIZATIONRATE
                    from dbo.ADJUSTMENTHISTORYPROPERTYSNAPSHOT
                    where ID = @ADJUSTMENTHISTORYPROPERTYID;
            end

            /*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.ADJUSTMENTHISTORYPROPERTYDISTRIBUTION(ADJUSTMENTHISTORYPROPERTYID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
                    select
                        @ADJUSTMENTHISTORYPROPERTYID,
                        0, /*Reversal*/
                        TRANSACTIONTYPECODE,
                        ACCOUNT,
                        PROJECT,
                        REFERENCE,
                        AMOUNT,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        TRANSACTIONAMOUNT,
                        ORGANIZATIONAMOUNT,
                        BASECURRENCYID,
                        TRANSACTIONCURRENCYID
                    from dbo.ADJUSTMENTHISTORYPROPERTYDISTRIBUTIONSNAPSHOT
                    where ADJUSTMENTHISTORYPROPERTYID = @ADJUSTMENTHISTORYPROPERTYID;
            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 
                    @PREVIOUSPROPERTYDETAILADJUSTMENTID = ID
                from dbo.PROPERTYDETAILADJUSTMENT
                where
                    PROPERTYDETAILID = @PROPERTYDETAILID and
                    ID <> @PROPERTYDETAILADJUSTMENTID
                order by TSLONG desc;

                /*If there is a previous adjustment, write the same reversal as the "adjusted" portion of the previous adjustment */
                if not @PREVIOUSPROPERTYDETAILADJUSTMENTID is null
                begin
                    select 
                        @PREVIOUSADJUSTMENTHISTORYPROPERTYID = ID
                    from dbo.ADJUSTMENTHISTORYPROPERTY
                    where PROPERTYDETAILADJUSTMENTID = @PREVIOUSPROPERTYDETAILADJUSTMENTID;

                    if not @PREVIOUSADJUSTMENTHISTORYPROPERTYID is null
                    begin

                        /*first, delete the previous adjustment record*/
                        delete from dbo.ADJUSTMENTHISTORYPROPERTYDISTRIBUTION where ADJUSTMENTHISTORYPROPERTYID = @PREVIOUSADJUSTMENTHISTORYPROPERTYID and TYPECODE = 1;

                        /*then insert the updated ones*/
                        insert into dbo.ADJUSTMENTHISTORYPROPERTYDISTRIBUTION(ADJUSTMENTHISTORYPROPERTYID, TYPECODE, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
                            select
                                @PREVIOUSADJUSTMENTHISTORYPROPERTYID,
                                1, /*Adjustment*/
                                TRANSACTIONTYPECODE,
                                ACCOUNT,
                                PROJECT,
                                REFERENCE,
                                AMOUNT,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CHANGEDATE,
                                @CHANGEDATE,
                                TRANSACTIONAMOUNT,
                                ORGANIZATIONAMOUNT,
                                BASECURRENCYID,
                                TRANSACTIONCURRENCYID
                            from dbo.ADJUSTMENTHISTORYPROPERTYDISTRIBUTIONSNAPSHOT
                            where ADJUSTMENTHISTORYPROPERTYID = @ADJUSTMENTHISTORYPROPERTYID;
                    end
                end
            end