USP_DATAFORMTEMPLATE_EDIT_ADJUSTAUCTIONPURCHASEGLDISTRIBUTION

The save procedure used by the edit dataform template "Auction Purchase GL Distribution Adjust Data 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 Auction purchase GL distribution
@ADJUSTMENTDATE datetime IN Adjustment date
@ADJUSTMENTPOSTDATE datetime IN Adjustment post date
@ADJUSTMENTREASON nvarchar(300) IN Adjustment details
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@ADJUSTMENTREASONCODEID uniqueidentifier IN Adjustment reason

Definition

Copy

                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_ADJUSTAUCTIONPURCHASEGLDISTRIBUTION 
                    (
                        @ID uniqueidentifier,
                        @GLDISTRIBUTION xml,
                        @ADJUSTMENTDATE datetime,
                        @ADJUSTMENTPOSTDATE datetime,
                        @ADJUSTMENTREASON nvarchar(300),
                        @CHANGEAGENTID uniqueidentifier = null,
                        @ADJUSTMENTREASONCODEID uniqueidentifier
                    )
                as
                    set nocount on;

                    declare @ADJUST bit;
                    set @ADJUST = 0;

                    declare @ADJUSTMENTEXISTS bit;
                    set @ADJUSTMENTEXISTS = 0;

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

                    declare @AUCTIONPURCHASEADJUSTMENTID uniqueidentifier;

                    begin try

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

                        if (dbo.UFN_GLDISTRIBUTION_DEBITSEQUALCREDITS(@GLDISTRIBUTION) = 0)
                            begin 
                                if (select sum(case transactiontypecode when 1 then -1 * AMOUNT else AMOUNT end)
                                from dbo.UFN_REVENUE_GETGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION)) != 0 
                                  raiserror('BBERR_SUMOFCREDITSMUSTEQUALSUMOFDEBITS', 13, 1);
                            end        

                        if (dbo.UFN_GLDISTRIBUTION_ACCOUNTEXISTS_2(@GLDISTRIBUTION,@ID) = 0)
                          raiserror('BBERR_ACCOUNTDOESNOTEXIST', 13, 1);                            


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

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

                        /* If there was a change to GL related data log an adjustment */
                        if @ADJUST = 1
                        begin
                            if @ADJUSTMENTREASONCODEID is null
                                raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1)

                            set @AUCTIONPURCHASEADJUSTMENTID = null;
                            exec dbo.USP_SAVE_AUCTIONPURCHASEADJUSTMENT @ID, @AUCTIONPURCHASEADJUSTMENTID output, @CHANGEAGENTID, @CHANGEDATE
                                @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @ADJUSTMENTREASONCODEID;

                            set @GLDISTRIBUTION = dbo.UFN_GLDISTRIBUTION_AUCTIONPURCHASE_CONVERTAMOUNTSINXML(@GLDISTRIBUTION,@ID);

                            -- If an unposted adjustment already exists, update the auction purchase GL distribution rows.
                            -- Otherwise, insert new auction purchase GL distribution rows using @GLDISTRIBUTION.
                            if @ADJUSTMENTEXISTS = 1 
                            begin
                                exec dbo.USP_REVENUE_GETAUCTIONPURCHASEGLDISTRIBUTION_CUSTOMUPDATEFROMXML_2 @ID, @GLDISTRIBUTION, @ADJUSTMENTPOSTDATE, @CHANGEAGENTID;
                            end
                            else
                            begin
                                declare @JOURNAL nvarchar(50);
                                set @JOURNAL = 'Blackbaud Enterprise';

                                set @CHANGEDATE = getdate();

                                declare @DISTRIBUTIONS table(
                                    GLTRANSACTIONID uniqueidentifier,
                                    ACCOUNT nvarchar(100),
                                    AMOUNT money,
                                    PROJECT nvarchar(100),
                                    REFERENCE nvarchar(255),
                                    TRANSACTIONTYPECODE tinyint,
                                    GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier,
                                    ORGANIZATIONAMOUNT money,
                                    BASECURRENCYID uniqueidentifier,
                                    TRANSACTIONAMOUNT money,
                                    TRANSACTIONCURRENCYID uniqueidentifier,
                                    BASEEXCHANGERATEID uniqueidentifier,
                                    ORGANIZATIONEXCHANGERATEID uniqueidentifier,
                                    REVENUESPLITID uniqueidentifier
                                );

                                -- Get the user-defined GL distributions
                                insert into @DISTRIBUTIONS(GLTRANSACTIONID, ACCOUNT, AMOUNT, PROJECT, REFERENCE, TRANSACTIONTYPECODE, GLPAYMENTMETHODREVENUETYPEMAPPINGID, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID, REVENUESPLITID)
                                select 
                                    newid(),
                                    AUCTIONPURCHASEDISTRIBUTIONS.ACCOUNT,
                                    AUCTIONPURCHASEDISTRIBUTIONS.AMOUNT,
                                    AUCTIONPURCHASEDISTRIBUTIONS.PROJECT,
                                    AUCTIONPURCHASEDISTRIBUTIONS.REFERENCE, 
                                    AUCTIONPURCHASEDISTRIBUTIONS.TRANSACTIONTYPECODE,
                                    AUCTIONPURCHASEDISTRIBUTIONS.GLPAYMENTMETHODREVENUETYPEMAPPINGID,
                                    AUCTIONPURCHASEDISTRIBUTIONS.ORGANIZATIONAMOUNT,
                                    AUCTIONPURCHASEDISTRIBUTIONS.BASECURRENCYID,
                                    AUCTIONPURCHASEDISTRIBUTIONS.TRANSACTIONAMOUNT,
                                    AUCTIONPURCHASEDISTRIBUTIONS.TRANSACTIONCURRENCYID,
                                    AUCTIONPURCHASEDISTRIBUTIONS.BASEEXCHANGERATEID,
                                    AUCTIONPURCHASEDISTRIBUTIONS.ORGANIZATIONEXCHANGERATEID,
                                    isnull(LI.REVERSEDLINEITEMID, LI.ID)
                                from 
                                    dbo.UFN_REVENUE_GETAUCTIONPURCHASEGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION) AUCTIONPURCHASEDISTRIBUTIONS
                                    inner join dbo.JOURNALENTRY JE on JE.ID = AUCTIONPURCHASEDISTRIBUTIONS.ID
                                    inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = JE.FINANCIALTRANSACTIONLINEITEMID

                                --Change to FTM.  First change is just do a single insert into JournalEntry                 
                                insert into dbo.JOURNALENTRY (ID, FINANCIALTRANSACTIONLINEITEMID, TRANSACTIONTYPECODE, BASEAMOUNT, COMMENT
                                    POSTDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, GLACCOUNTID,
                                    ORGAMOUNT, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, TYPECODE, SUBLEDGERTYPECODE)        
                                select GLTRANSACTIONID, REVENUESPLITID, TRANSACTIONTYPECODE, AMOUNT, REFERENCE,
                                    @ADJUSTMENTPOSTDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE, dbo.UFN_GLACCOUNT_GETIDFROMACCOUNTANDREVENUE([ACCOUNT],@ID),
                                    ORGANIZATIONAMOUNT, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, 0, TRANSACTIONTYPECODE
                                from @DISTRIBUTIONS

                                insert into dbo.JOURNALENTRY_EXT (ID, DISTRIBUTIONTABLEID, TABLENAMECODE, PROJECT, JOURNAL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, PRECALCPOSTSTATUSCODE, PRECALCORGANIZATIONEXCHANGERATEID,
                                    PRECALCBASEEXCHANGERATEID,  ACCOUNT, GLPAYMENTMETHODREVENUETYPEMAPPINGID, REVENUEPURCHASEID)
                                select GLTRANSACTIONID,GLTRANSACTIONID,2,PROJECT, @JOURNAL, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE, 1, ORGANIZATIONEXCHANGERATEID,
                                    BASEEXCHANGERATEID,  ACCOUNT, GLPAYMENTMETHODREVENUETYPEMAPPINGID, @ID
                                from @DISTRIBUTIONS

                            end
                        end                            

                        update LI set
                            LI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @AUCTIONPURCHASEADJUSTMENTID
                        from
                            dbo.FINANCIALTRANSACTION FT
                            join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.FINANCIALTRANSACTIONID = FT.ID
                        where
                            FT.ID = @ID
                            and LI.DELETEDON is null
                            and LI.POSTSTATUSCODE <> 2
                            and LI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID is null

                    end try

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

                    return 0;