USP_BANKACCOUNTDEPOSIT_OVERWRITECREDITPAYMENTCREDITACCOUNTS

Overwrite the credit payment's debit accounts with the bank account's default cash account

Parameters

Parameter Parameter Type Mode Description
@CREDITPAYMENTID uniqueidentifier IN
@DEPOSITID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_BANKACCOUNTDEPOSIT_OVERWRITECREDITPAYMENTCREDITACCOUNTS
            (
              @CREDITPAYMENTID uniqueidentifier,
              @DEPOSITID uniqueidentifier,
              @CHANGEAGENTID uniqueidentifier = null,
              @CHANGEDATE datetime = null
            )
            as
            begin
                set nocount on;

                if @CHANGEAGENTID is null
                    exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

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

                declare @GLACCOUNTID uniqueidentifier = null;
                declare @PDACCOUNTSEGMENTVALUEID uniqueidentifier = null;
                declare @ACCOUNT nvarchar(100) = '';
                declare @ACCOUNTCODE nvarchar(30) = '';
                declare @PDACCOUNTSYSTEMID uniqueidentifier = null;
                declare @DEFAULTGLACCOUNTID uniqueidentifier = null;
                declare @DEFAULTGLACCOUNT nvarchar(100);
                declare @DEPOSITPOSTDATE datetime;

                select 
                    @GLACCOUNTID = [BANKACCOUNT].[GLACCOUNTID],
                    @PDACCOUNTSEGMENTVALUEID = [BANKACCOUNT].[PDACCOUNTSEGMENTVALUEID], 
                    @ACCOUNT = [GLACCOUNT].[ACCOUNTNUMBER],
                    @ACCOUNTCODE = [PDACCOUNTSEGMENTVALUE].[SHORTDESCRIPTION],
                    @PDACCOUNTSYSTEMID = BANKACCOUNT.PDACCOUNTSYSTEMID,
                    @DEPOSITPOSTDATE = BANKACCOUNTTRANSACTION.POSTDATE
                from dbo.[BANKACCOUNTTRANSACTION]
                inner join dbo.[BANKACCOUNT] 
                    on [BANKACCOUNTTRANSACTION].[BANKACCOUNTID] = [BANKACCOUNT].[ID]
                left outer join dbo.[GLACCOUNT] 
                    on [GLACCOUNT].[ID] = [BANKACCOUNT].[GLACCOUNTID]
                left outer join dbo.[PDACCOUNTSEGMENTVALUE] 
                    on [PDACCOUNTSEGMENTVALUE].[ID] = [BANKACCOUNT].[PDACCOUNTSEGMENTVALUEID]
                where [BANKACCOUNTTRANSACTION].[ID] = @DEPOSITID;

                update dbo.JOURNALENTRY
                    set POSTDATE = @DEPOSITPOSTDATE
                where JOURNALENTRY.ID in (
                    select JE.ID
                        from dbo.FINANCIALTRANSACTION FT
                        inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.FINANCIALTRANSACTIONID = FT.ID
                        inner join dbo.JOURNALENTRY JE on JE.FINANCIALTRANSACTIONLINEITEMID = LI.ID
                        inner join dbo.JOURNALENTRY_EXT JEX on JEX.ID = JE.ID
                        inner join dbo.BANKACCOUNTDEPOSITCREDITPAYMENT CP on CP.ID = JEX.CREDITPAYMENTID
                        inner join dbo.FINANCIALTRANSACTION DEPOSIT on DEPOSIT.ID = CP.DEPOSITID
                        where DEPOSIT.ID = @DEPOSITID
                            and CP.ID = @CREDITPAYMENTID)


                select @DEFAULTGLACCOUNTID = PDACCOUNTSYSTEM.DEFAULTGLACCOUNTID, @DEFAULTGLACCOUNT = GLACCOUNT.ACCOUNTNUMBER 
                from dbo.PDACCOUNTSYSTEM left join dbo.GLACCOUNT on PDACCOUNTSYSTEM.DEFAULTGLACCOUNTID = GLACCOUNT.ID
                where PDACCOUNTSYSTEM.ID = @PDACCOUNTSYSTEMID

                declare @NEWACCOUNTS table (
                    [ID] uniqueidentifier,
                    [CREDITPAYMENTID] uniqueidentifier, 
                    [GLPAYMENTMETHODREVENUETYPEMAPPINGID] uniqueidentifier, 
                    [PROJECT] nvarchar(100),
                    [REFERENCE] nvarchar(255),
                    [GLACCOUNTID] uniqueidentifier, 
                    [ACCOUNTNUMBERS] nvarchar(100), 
                    [AMOUNT] money,
                    [JOURNAL] nvarchar(255),
                    [POSTDATE] datetime,
                    [CREDITITEMID] uniqueidentifier,
                    [TRANSACTIONCURRENCYID] uniqueidentifier
                );

                update dbo.GLTRANSACTION set
                    POSTDATE = @DEPOSITPOSTDATE,
                    CHANGEDBYID = @CHANGEAGENTID
                    DATECHANGED = @CHANGEDATE
                where [GLTRANSACTION].[POSTSTATUSCODE] <> 0
                    and [GLTRANSACTION].[ID] in (select [CREDITGLDISTRIBUTION].[GLTRANSACTIONID] from dbo.[CREDITGLDISTRIBUTION] where [CREDITGLDISTRIBUTION].[CREDITPAYMENTID] = @CREDITPAYMENTID);

                insert into @NewAccounts(
                    [ID], 
                    [CREDITPAYMENTID], 
                    [REFERENCE], 
                    [AMOUNT], 
                    [JOURNAL], 
                    [POSTDATE], 
                    [ACCOUNTNUMBERS], 
                    [GLACCOUNTID],
                    [CREDITITEMID],
                    [TRANSACTIONCURRENCYID],
                    [PROJECT]
                )
                select 
                    newid(), 
                    @CREDITPAYMENTID
                    JE.COMMENT
                    JE.TRANSACTIONAMOUNT, 
                    EXT.JOURNAL, 
                    @DEPOSITPOSTDATE,
                    isnull(@ACCOUNT, dbo.UFN_BANKACCOUNT_PAYMENT_COMBINEACCOUNTCODE_BYACCOUNTSYSTEM(JE.[GLACCOUNTID], @ACCOUNTCODE,@PDACCOUNTSYSTEMID)), 
                    @GLACCOUNTID,
                    EXT.CREDITITEMID,
                    JE.TRANSACTIONCURRENCYID,
                    EXT.PROJECT
                from dbo.JOURNALENTRY JE
                inner join dbo.JOURNALENTRY_EXT EXT on JE.ID = EXT.ID
                inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = JE.FINANCIALTRANSACTIONLINEITEMID
                where 
                    [EXT].[CREDITPAYMENTID] = @CREDITPAYMENTID and 
                    [JE].[TRANSACTIONTYPECODE] = 0 and 
                    [LI].[POSTSTATUSCODE] <> 2;

                if @GLACCOUNTID is null
                begin
                    update @NEWACCOUNTS
                    set [GLACCOUNTID] = (select [GLACCOUNT].[ID] from dbo.[GLACCOUNT] where [GLACCOUNT].[ACCOUNTNUMBER] = [ACCOUNTNUMBERS]);

                    if exists(select [ID] from @NewAccounts where [GLACCOUNTID] is null) and @DEFAULTGLACCOUNTID is null
                    begin
                        select top 1 @ACCOUNT = [ACCOUNTNUMBERS]
                        from @NewAccounts 
                        where [GLACCOUNTID] is null;
                        raiserror('The account %s does not exist. The action could not be completed.', 13, 1, @ACCOUNT);
                    end
                    else if @DEFAULTGLACCOUNTID is not null
                        update @NewAccounts set
                            GLACCOUNTID = @DEFAULTGLACCOUNTID
                            ,ACCOUNTNUMBERS = @DEFAULTGLACCOUNT
                        where GLACCOUNTID is null;
                end

                --remove gltransactions for this creditpayment

                declare gltransactiondelete_cursor cursor local fast_forward for 
                    select [GLTRANSACTION].[ID]
                    from dbo.[GLTRANSACTION]
                    inner join dbo.[CREDITGLDISTRIBUTION]
                        on [GLTRANSACTION].[ID] = [CREDITGLDISTRIBUTION].[GLTRANSACTIONID]
                    where 
                        [CREDITGLDISTRIBUTION].[CREDITPAYMENTID] = @CREDITPAYMENTID and
                        [CREDITGLDISTRIBUTION].[TRANSACTIONTYPECODE] = 1 and
                        [GLTRANSACTION].[TRANSACTIONTYPECODE] = 1 and 
                        [GLTRANSACTION].[POSTSTATUSCODE] <> 0;

                open gltransactiondelete_cursor

                declare @GLTRANSACTIONID uniqueidentifier = null
                fetch next from gltransactiondelete_cursor
                into @GLTRANSACTIONID

                while @@FETCH_STATUS = 0
                begin
                    exec dbo.USP_GLTRANSACTION_DELETEBYID_WITHCHANGEAGENTID @GLTRANSACTIONID, @CHANGEAGENTID

                    fetch next from gltransactiondelete_cursor
                    into @GLTRANSACTIONID
                end

                --When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long

                close gltransactiondelete_cursor;
                deallocate gltransactiondelete_cursor;

                insert into dbo.JOURNALENTRY (
                    ID
                    ,FINANCIALTRANSACTIONLINEITEMID
                    ,GLACCOUNTID
                    ,TRANSACTIONAMOUNT
                    ,BASEAMOUNT
                    ,ORGAMOUNT
                    ,COMMENT
                    ,POSTDATE
                    ,TRANSACTIONTYPECODE
                    ,TRANSACTIONCURRENCYID
                    ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                select 
                    [NEW].ID
                    ,[NEW].CREDITITEMID
                    ,[NEW].GLACCOUNTID
                    ,[NEW].AMOUNT
                    ,[NEW].AMOUNT
                    ,[NEW].AMOUNT
                    ,[NEW].REFERENCE
                    ,[NEW].POSTDATE
                    ,1
                    ,[NEW].TRANSACTIONCURRENCYID
                    ,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
                from @NewAccounts as [NEW];

                insert into dbo.JOURNALENTRY_EXT (
                    ID
                    ,PROJECT
                    ,ACCOUNT
                    ,JOURNAL
                    ,CREDITITEMID
                    ,CREDITPAYMENTID
                    ,TABLENAMECODE
                    ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                select
                    [NEW].ID
                    ,[NEW].PROJECT
                    ,[NEW].ACCOUNTNUMBERS
                    ,[NEW].JOURNAL
                    ,[NEW].CREDITITEMID
                    ,[NEW].CREDITPAYMENTID
                    ,6
                    ,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
                from @NewAccounts as [NEW];
            end