USP_DATAFORMTEMPLATE_EDIT_WRITEOFFGLDISTRIBUTIONADJUST

The save procedure used by the edit dataform template "Posted Write-off GL Distribution Edit Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@GLDISTRIBUTION xml IN Write-off GL distribution
@ADJUSTMENTDATE datetime IN Adjusted Date
@ADJUSTMENTPOSTDATE datetime IN Adjusted Post Date
@ADJUSTMENTREASON nvarchar(300) IN Adjustment reason
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.

Definition

Copy


                CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_WRITEOFFGLDISTRIBUTIONADJUST
                    (
                        @ID uniqueidentifier,
                        @GLDISTRIBUTION xml,
                        @ADJUSTMENTDATE datetime,
                        @ADJUSTMENTPOSTDATE datetime,
                        @ADJUSTMENTREASON nvarchar(300),    
                        @CHANGEAGENTID uniqueidentifier = null
                    )
                as
                    begin try

                        set nocount on;

                        declare @WRITEOFFADJUSTMENTID uniqueidentifier;

                        declare @ADJUST bit
                        set @ADJUST = 0

                        declare @ADJUSTMENTEXISTS bit;
                        set @ADJUSTMENTEXISTS = 0;

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

                        if (dbo.UFN_GLDISTRIBUTION_DEBITSEQUALCREDITS(@GLDISTRIBUTION) = 0)
                            raiserror('The sum of the debit accounts must equal the sum of the credit accounts.', 13, 1)

                        /* Already adjusted */
                        if (select COUNT(ADJUSTMENT.ID)
                                from dbo.WRITEOFFADJUSTMENT as ADJUSTMENT
                                where WRITEOFFID = @ID and POSTSTATUSCODE = 1) > 0
                        begin
                            set @ADJUST = 1;
                            set @ADJUSTMENTEXISTS = 1;
                        end

                        /* Distribution Changed */
                        if @ADJUST = 0
                            set @ADJUST = dbo.UFN_WRITEOFF_DISTRIBUTIONCHANGED(@ID, @GLDISTRIBUTION)

                        declare @CURRENTDATE datetime;
                        set @CURRENTDATE = getdate();

                        /* If there was a change to GL related data log an adjustment */
                        if @ADJUST = 1
                            exec dbo.USP_SAVE_WRITEOFFADJUSTMENT @ID, @WRITEOFFADJUSTMENTID output, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON;


                        -- If an unposted adjustment already exists, update the write-off GL distribution rows.

                        -- Otherwise, insert new write-off gl distribution rows using @GLDISTRIBUTION.

                        if @ADJUSTMENTEXISTS = 1 
                        begin
                            exec dbo.USP_REVENUE_GETWRITEOFFGLDISTRIBUTION_CUSTOMUPDATEFROMXML @ID, @GLDISTRIBUTION, @ADJUSTMENTPOSTDATE, @CHANGEAGENTID;
                        end
                        else
                        begin

                            declare @JOURNAL nvarchar(50);
                            set @JOURNAL = 'Blackbaud Enterprise';

                            declare @REVENUEID uniqueidentifier;
                            select @REVENUEID = REVENUEID from dbo.WRITEOFF where ID = @ID;

                            declare @DISTRIBUTIONS table(
                                GLTRANSACTIONID uniqueidentifier,
                                ACCOUNT nvarchar(100),
                                AMOUNT money,
                                PROJECT nvarchar(100),
                                REFERENCE nvarchar(255),
                                TRANSACTIONTYPECODE tinyint,
                                POSTDATE datetime,
                                GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier
                            );

                            -- Get the user-defined GL distributions for the write-off record.

                            insert into @DISTRIBUTIONS(GLTRANSACTIONID, ACCOUNT, AMOUNT, PROJECT, REFERENCE, TRANSACTIONTYPECODE, GLPAYMENTMETHODREVENUETYPEMAPPINGID)
                            select 
                                newid(),
                                WRITEOFFDISTRIBUTION.ACCOUNT,
                                WRITEOFFDISTRIBUTION.AMOUNT,
                                WRITEOFFDISTRIBUTION.PROJECT,
                                WRITEOFFDISTRIBUTION.REFERENCE, 
                                WRITEOFFDISTRIBUTION.TRANSACTIONTYPECODE,
                                WRITEOFFDISTRIBUTION.GLPAYMENTMETHODREVENUETYPEMAPPINGID
                            from 
                                dbo.UFN_REVENUE_GETWRITEOFFGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION) WRITEOFFDISTRIBUTION

                            -- Insert rows in GLTRANSACTION table

                            insert into dbo.GLTRANSACTION(ID, TRANSACTIONTYPECODE, ACCOUNT, AMOUNT, PROJECT, REFERENCE, POSTDATE, JOURNAL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            select
                                GLTRANSACTIONID,
                                TRANSACTIONTYPECODE,
                                ACCOUNT,
                                AMOUNT,
                                PROJECT,
                                REFERENCE,
                                @ADJUSTMENTPOSTDATE,
                                @JOURNAL,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from 
                                @DISTRIBUTIONS;

                            insert into dbo.WRITEOFFGLDISTRIBUTION
                                (ID,GLTRANSACTIONID,WRITEOFFID,REVENUEID,GLPAYMENTMETHODREVENUETYPEMAPPINGID,PROJECT,REFERENCE,AMOUNT,ACCOUNT,TRANSACTIONTYPECODE,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                            select
                                newid(),
                                GLTRANSACTIONID,
                                @ID,
                                @REVENUEID,
                                GLPAYMENTMETHODREVENUETYPEMAPPINGID,
                                PROJECT,
                                REFERENCE,
                                AMOUNT,
                                ACCOUNT,
                                TRANSACTIONTYPECODE,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            from 
                                @DISTRIBUTIONS;
                        end

                        if @ADJUST = 1
                            exec dbo.USP_ADJUSTMENTHISTORY_WRITEOFF_SAVEHISTORY @ID, @CHANGEAGENTID, null, @WRITEOFFADJUSTMENTID;
                    end try

                    begin catch
                        exec dbo.USP_RAISE_ERROR;
                        return 1;
                    end catch

                    return 0;