USP_SAVE_GIFTINKINDSALEADJUSTMENT

Stored procedure to log adjustments to sold gift-in-kind.

Parameters

Parameter Parameter Type Mode Description
@GIFTINKINDSALEID uniqueidentifier IN
@GIFTINKINDSALEADJUSTMENTID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@DATE datetime IN
@POSTDATE datetime IN
@ADJUSTMENTREASON nvarchar(300) IN
@ADJUSTMENTREASONCODEID uniqueidentifier IN
@POSTSTATUSCODE tinyint IN

Definition

Copy


            CREATE procedure dbo.USP_SAVE_GIFTINKINDSALEADJUSTMENT
            (
                @GIFTINKINDSALEID uniqueidentifier = null,
                @GIFTINKINDSALEADJUSTMENTID uniqueidentifier = null output,
                @CHANGEAGENTID uniqueidentifier = null,
                @CHANGEDATE datetime = null
                @DATE datetime = null,
                @POSTDATE datetime = null,
                @ADJUSTMENTREASON nvarchar(300) = null,
                @ADJUSTMENTREASONCODEID uniqueidentifier = null,
                @POSTSTATUSCODE tinyint = 1
            )
            with execute as owner
            as
            /*Call this procedure before making changes to the gift-in-kind detail tables.*/

            set nocount on;

            declare @GIFTINKINDPAYMENTMETHODDETAILPOSTDATE datetime;

            --Is the gift-in-kind detail posted?

            if not exists (select ID from dbo.GIFTINKINDSALE where ID = @GIFTINKINDSALEID and SALEPOSTSTATUSCODE = 0)
                raiserror('You cannot adjust an unposted sold gift-in-kind', 13, 1)

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

            exec dbo.USP_CREATEINITIALADJUSTMENTHISTORY @GIFTINKINDSALEID, @CHANGEAGENTID

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

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

            --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);

            --Update unposted adjustment if existing

            select @GIFTINKINDSALEADJUSTMENTID = ID
            from dbo.GIFTINKINDSALEADJUSTMENT
            where GIFTINKINDSALEID = @GIFTINKINDSALEID and POSTSTATUSCODE <> 0;

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

            update dbo.GIFTINKINDSALEADJUSTMENT
            set DATE = @DATE
                POSTDATE = @POSTDATE,
                REASON = @ADJUSTMENTREASON,
                REASONCODEID = @ADJUSTMENTREASONCODEID,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CHANGEDATE,
                POSTSTATUSCODE = @POSTSTATUSCODE
            where ID = @GIFTINKINDSALEADJUSTMENTID;

            if @@ROWCOUNT = 0
            begin
                set @GIFTINKINDSALEADJUSTMENTID = newid();

                --Log Adjustment if new

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

                    insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
                        ID
                        ,ADJUSTMENTREASONCODEID
                        ,REASON
                        ,DATE
                        ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                    values(
                        @GIFTINKINDSALEADJUSTMENTID
                        ,@ADJUSTMENTREASONCODEID
                        ,@ADJUSTMENTREASON
                        ,@DATE
                        ,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                --Save the snapshot before deleting the GL information

                exec dbo.USP_ADJUSTMENTHISTORY_GIFTINKIND_SAVESNAPSHOT @GIFTINKINDSALEADJUSTMENTID, @CHANGEAGENTID;

                --Log reversals in the GLTRANSACTION table

                exec dbo.USP_GLTRANSACTION_ADDGIFTINKINDSALEREVERSALS @GIFTINKINDSALEID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE;

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

                -- Update the post date on the GL transaction records

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

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

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

                --Save the snapshot before deleting the GL information

                exec dbo.USP_ADJUSTMENTHISTORY_GIFTINKIND_SAVESNAPSHOT @GIFTINKINDSALEADJUSTMENTID, @CHANGEAGENTID;
            end

            update dbo.FINANCIALTRANSACTIONLINEITEM set
                FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @GIFTINKINDSALEADJUSTMENTID
                ,CHANGEDBYID = @CHANGEAGENTID
                ,DATECHANGED = @CHANGEDATE
            where FINANCIALTRANSACTIONID = @GIFTINKINDSALEID and POSTSTATUSCODE = 1;

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

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