USP_SAVE_PROPERTYDETAILADJUSTMENT

Stored procedure to log adjustments to sold property.

Parameters

Parameter Parameter Type Mode Description
@PROPERTYDETAILID uniqueidentifier IN
@PROPERTYDETAILADJUSTMENTID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@DATE datetime IN
@POSTDATE datetime IN
@ADJUSTMENTREASON nvarchar(300) IN
@ADJUSTMENTREASONCODEID uniqueidentifier IN
@ADJUSTMENTPOSTSTATUSCODE tinyint IN

Definition

Copy


            CREATE procedure dbo.USP_SAVE_PROPERTYDETAILADJUSTMENT
            (
                @PROPERTYDETAILID uniqueidentifier = null,
                @PROPERTYDETAILADJUSTMENTID uniqueidentifier = null output,
                @CHANGEAGENTID uniqueidentifier = null,
                @CHANGEDATE datetime = null,
                @DATE datetime = null,
                @POSTDATE datetime = null,
                @ADJUSTMENTREASON nvarchar(300) = null,
                @ADJUSTMENTREASONCODEID uniqueidentifier = null,
                @ADJUSTMENTPOSTSTATUSCODE tinyint = 1
            )
            with execute as owner
            as
            /*call this procedure before making changes to the property detail tables.*/
            set nocount on;

            declare @CURRENTDATE datetime;
            declare @PROPERTYDETAILPOSTDATE datetime;
            declare @CONSTITUENTID uniqueidentifier;

            --JamesWill WI197067 2012-03-08 Ensure that the date used does not have a timestamp

            if not @DATE is null
                set @DATE = dbo.UFN_DATE_GETEARLIESTTIME(@DATE);

            --Is the property detail posted?

            if (select count(ID) from dbo.PROPERTYDETAIL
                where ID = @PROPERTYDETAILID and SALEPOSTSTATUSCODE = 0) = 0
                raiserror('You cannot adjust an unposted sold property', 13, 1)

            --kwb Create FINANCIALTRANSACTIONLINEITEMADJUSTMENT records for original write-offs that will be adjusted

            exec dbo.USP_CREATEINITIALADJUSTMENTHISTORY @PROPERTYDETAILID, @CHANGEAGENTID

            if @CHANGEAGENTID is null  
                exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

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

            select @PROPERTYDETAILADJUSTMENTID = ID
            from dbo.PROPERTYDETAILADJUSTMENT
            where PROPERTYDETAILID = @PROPERTYDETAILID and POSTSTATUSCODE <> 0;

            if @PROPERTYDETAILADJUSTMENTID is null
                set @PROPERTYDETAILADJUSTMENTID = newid();

            select @CONSTITUENTID = CONSTITUENTID from dbo.FINANCIALTRANSACTION where ID = @PROPERTYDETAILID

            --Update unposted adjustment if existing

            if @PROPERTYDETAILADJUSTMENTID is not null and exists(select 1 from dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT where ID = @PROPERTYDETAILADJUSTMENTID)
                update dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT set
                    ADJUSTMENTREASONCODEID = @ADJUSTMENTREASONCODEID
                    ,REASON = @ADJUSTMENTREASON
                    ,CONSTITUENTID = @CONSTITUENTID
                    ,DATE = @DATE
                    ,CHANGEDBYID = @CHANGEAGENTID
                    ,DATECHANGED = @CHANGEDATE
                where ID = @PROPERTYDETAILADJUSTMENTID;
            else if @PROPERTYDETAILADJUSTMENTID is not null
                insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
                    ID
                    ,ADJUSTMENTREASONCODEID
                    ,REASON
                    ,CONSTITUENTID
                    ,DATE
                    ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                values (@PROPERTYDETAILADJUSTMENTID
                    ,@ADJUSTMENTREASONCODEID
                    ,@ADJUSTMENTREASON
                    ,@CONSTITUENTID
                    ,@DATE
                    ,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

            update dbo.PROPERTYDETAILADJUSTMENT
            set DATE = @DATE
                POSTDATE = @POSTDATE,
                REASON = @ADJUSTMENTREASON,
                REASONCODEID = @ADJUSTMENTREASONCODEID,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CHANGEDATE,
                POSTSTATUSCODE = @ADJUSTMENTPOSTSTATUSCODE
            where ID = @PROPERTYDETAILADJUSTMENTID

            if @@ROWCOUNT = 0
            begin

                --Log Adjustment if new

                insert into dbo.PROPERTYDETAILADJUSTMENT(
                    ID, 
                    PROPERTYDETAILID, 
                    PREVIOUSAMOUNT, 
                    DATE
                    POSTDATE, 
                    POSTSTATUSCODE, 
                    REASON, 
                    REASONCODEID, 
                    ADDEDBYID, 
                    CHANGEDBYID, 
                    DATEADDED, 
                    DATECHANGED,
                    TRANSACTIONPREVIOUSAMOUNT,
                    ORGANIZATIONPREVIOUSAMOUNT,
                    TRANSACTIONCURRENCYID,
                    BASECURRENCYID,
                    BASEEXCHANGERATEID,
                    ORGANIZATIONEXCHANGERATEID
                )
                select 
                    @PROPERTYDETAILADJUSTMENTID
                    ID, 
                    SALEAMOUNT, 
                    @DATE
                    @POSTDATE
                    @ADJUSTMENTPOSTSTATUSCODE
                    @ADJUSTMENTREASON
                    @ADJUSTMENTREASONCODEID
                    @CHANGEAGENTID
                    @CHANGEAGENTID
                    @CHANGEDATE
                    @CHANGEDATE,
                    TRANSACTIONSALEAMOUNT,
                    ORGANIZATIONSALEAMOUNT,
                    TRANSACTIONCURRENCYID,
                    BASECURRENCYID,
                    BASEEXCHANGERATEID,
                    ORGANIZATIONEXCHANGERATEID
                from dbo.PROPERTYDETAIL
                where ID = @PROPERTYDETAILID;

                --Get the postdate for REVERSAL from the last adjustment posted

                select TOP 1 @PROPERTYDETAILPOSTDATE = POSTDATE from dbo.PROPERTYDETAILADJUSTMENT where PROPERTYDETAILID = @PROPERTYDETAILID and POSTSTATUSCODE = 0 order by DATEADDED desc

                --If there are no posted adjustments then get the postdate for REVERSAL from the REVENUE record

                if @PROPERTYDETAILPOSTDATE is null
                    select @PROPERTYDETAILPOSTDATE = SALEPOSTDATE from dbo.PROPERTYDETAIL where ID = @PROPERTYDETAILID;    

                --Save the snapshot before deleting the GL information

                exec dbo.USP_ADJUSTMENTHISTORY_PROPERTY_SAVESNAPSHOT @PROPERTYDETAILADJUSTMENTID, @CHANGEAGENTID;

                --Log reversals in the GLTRANSACTION table                    work item 55993 - added postdate 

                exec dbo.USP_GLTRANSACTION_ADDPROPERTYDETAILREVERSALS @PROPERTYDETAILID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE,@ADJUSTMENTPOSTSTATUSCODE;

            end
            else /*make sure @PROPERTYDETAILADJUSTMENTID gets set to the correct value */
            begin

                -- Update the post date on the GL transaction records

                update 
                    dbo.GLTRANSACTION
                set
                    GLTRANSACTION.POSTSTATUSCODE = @ADJUSTMENTPOSTSTATUSCODE,
                    GLTRANSACTION.POSTDATE = @POSTDATE,
                    GLTRANSACTION.DATECHANGED = @CHANGEDATE,
                    GLTRANSACTION.CHANGEDBYID = @CHANGEAGENTID
                where ID in 
                (select GLTRANSACTION.ID 
                from
                    dbo.GLTRANSACTION
                inner join
                    dbo.PROPERTYDETAILGLDISTRIBUTION on GLTRANSACTION.ID = PROPERTYDETAILGLDISTRIBUTION.GLTRANSACTIONID
                where    
                    PROPERTYDETAILGLDISTRIBUTION.PROPERTYDETAILID = @PROPERTYDETAILID and PROPERTYDETAILGLDISTRIBUTION.OUTDATED = 0);

        -- post date for unposted reversals should match the adjustment post date


        update
          dbo.GLTRANSACTION
        set
          GLTRANSACTION.POSTSTATUSCODE = @ADJUSTMENTPOSTSTATUSCODE,
          GLTRANSACTION.POSTDATE = @POSTDATE,
          GLTRANSACTION.DATECHANGED = @CHANGEDATE,
          GLTRANSACTION.CHANGEDBYID = @CHANGEAGENTID
        where ID in
          (select  GLTRANSACTION.ID from dbo.GLTRANSACTION
        inner join 
          dbo.PROPERTYDETAILGLDISTRIBUTION on GLTRANSACTION.REVERSEDGLTRANSACTIONID = PROPERTYDETAILGLDISTRIBUTION.GLTRANSACTIONID
        where
          PROPERTYDETAILGLDISTRIBUTION.PROPERTYDETAILID = @PROPERTYDETAILID and GLTRANSACTION.POSTSTATUSCODE > 0); 

                update dbo.FINANCIALTRANSACTIONLINEITEM set
                    POSTDATE = @POSTDATE
                    ,POSTSTATUSCODE = case @ADJUSTMENTPOSTSTATUSCODE when 2 then 3 else 1 end
                    ,DATECHANGED = @CHANGEDATE
                    ,CHANGEDBYID = @CHANGEAGENTID
                where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @PROPERTYDETAILID and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2

                --Save the snapshot before deleting the GL information

                exec dbo.USP_ADJUSTMENTHISTORY_PROPERTY_SAVESNAPSHOT @PROPERTYDETAILADJUSTMENTID, @CHANGEAGENTID;
            end

            declare @Error nvarchar(255) = ''
            if @@ROWCOUNT > 0 and @ADJUSTMENTPOSTSTATUSCODE <> 2
                set @Error = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE)

            if @Error <> '' 
                raiserror(@Error, 13, 1)