USP_BANKACCOUNT_UPDATECASHACCOUNTFORTRANSACTIONS
Update all deposits' and payments' debit account to the default cash account
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@BANKACCOUNTID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_BANKACCOUNT_UPDATECASHACCOUNTFORTRANSACTIONS
(
@BANKACCOUNTID 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 @STATUSCODE tinyint = 0;
declare @PDACCOUNTSYSTEMID uniqueidentifier = null;
select @GLACCOUNTID = BANKACCOUNT.GLACCOUNTID,
@PDACCOUNTSEGMENTVALUEID = BANKACCOUNT.PDACCOUNTSEGMENTVALUEID,
@ACCOUNT = GLACCOUNT.ACCOUNTNUMBER,
@ACCOUNTCODE = PDACCOUNTSEGMENTVALUE.SHORTDESCRIPTION,
@STATUSCODE = BANKACCOUNT.STATUSCODE,
@PDACCOUNTSYSTEMID = BANKACCOUNT.PDACCOUNTSYSTEMID
from dbo.BANKACCOUNT
left outer join dbo.GLACCOUNT on GLACCOUNT.ID = BANKACCOUNT.GLACCOUNTID
left outer join PDACCOUNTSEGMENTVALUE on PDACCOUNTSEGMENTVALUE.ID = BANKACCOUNT.PDACCOUNTSEGMENTVALUEID
where BANKACCOUNT.ID = @BANKACCOUNTID;
declare @NewAccounts table (ID uniqueidentifier,
TRANID uniqueidentifier,
TRANSACTIONTYPECODE tinyint,
GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier,
PROJECT nvarchar(100),
REFERENCE nvarchar(255),
GLACCOUNTID uniqueidentifier,
ACCOUNTNUMBERS nvarchar(100),
AMOUNT money,
JOURNAL nvarchar(255),
POSTDATE datetime,
STATUSCODE tinyint);
--This section updates the payments (revenue records) with the new cash account.
insert into @NewAccounts(ID, TRANSACTIONTYPECODE, TRANID, PROJECT, REFERENCE, AMOUNT, JOURNAL, POSTDATE, ACCOUNTNUMBERS, GLACCOUNTID, GLPAYMENTMETHODREVENUETYPEMAPPINGID, STATUSCODE)
select NEWID(), 0, R.REVENUEID, R.PROJECT, R.REFERENCE, R.AMOUNT, T.JOURNAL, T.POSTDATE,
isnull(@ACCOUNT, dbo.UFN_BANKACCOUNT_PAYMENT_COMBINEACCOUNTCODE_BYACCOUNTSYSTEM(T.GLACCOUNTID, @ACCOUNTCODE,@PDACCOUNTSYSTEMID)), @GLACCOUNTID,
MAP1.ID, @STATUSCODE
from dbo.REVENUEGLDISTRIBUTION R
inner join dbo.GLTRANSACTION T on R.GLTRANSACTIONID = T.ID
inner join dbo.GLPAYMENTMETHODREVENUETYPEMAPPING MAP on MAP.ID = R.GLPAYMENTMETHODREVENUETYPEMAPPINGID
inner join dbo.GLPAYMENTMETHODREVENUETYPEMAPPING MAP1 on MAP.PAYMENTMETHODCODE = MAP1.PAYMENTMETHODCODE and MAP.REVENUETRANSACTIONTYPECODE = MAP1.REVENUETRANSACTIONTYPECODE and MAP.REVENUESPLITTYPECODE = MAP1.REVENUESPLITTYPECODE and MAP.APPLICATIONCODE = MAP1.APPLICATIONCODE and MAP1.TRANSACTIONTYPECODE = 0
inner join dbo.BANKACCOUNTDEPOSITPAYMENT on BANKACCOUNTDEPOSITPAYMENT.ID = R.REVENUEID
inner join dbo.BANKACCOUNTTRANSACTION on BANKACCOUNTDEPOSITPAYMENT.DEPOSITID = BANKACCOUNTTRANSACTION.ID
where BANKACCOUNTTRANSACTION.BANKACCOUNTID = @BANKACCOUNTID and R.TRANSACTIONTYPECODE = 1
and T.POSTSTATUSCODE != 0;
if @GLACCOUNTID is null
begin
-- if it's closed allow the glaccountid to be null
if @STATUSCODE = 1
begin
update @NewAccounts set
GLACCOUNTID = (select A.ID from GLACCOUNT A where A.ACCOUNTNUMBER = ACCOUNTNUMBERS);
if exists(select ID from @NewAccounts where GLACCOUNTID 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
end
else return
end
--delete all the distributions that we are replacing
delete from dbo.GLTRANSACTION
where GLTRANSACTION.ID in
(select R.GLTRANSACTIONID
from dbo.REVENUEGLDISTRIBUTION R
inner join dbo.BANKACCOUNTDEPOSITPAYMENT on BANKACCOUNTDEPOSITPAYMENT.ID = R.REVENUEID
inner join dbo.BANKACCOUNTTRANSACTION on BANKACCOUNTDEPOSITPAYMENT.DEPOSITID = BANKACCOUNTTRANSACTION.ID
where BANKACCOUNTTRANSACTION.BANKACCOUNTID = @BANKACCOUNTID and R.TRANSACTIONTYPECODE = 0)
and GLTRANSACTION.TRANSACTIONTYPECODE = 0 and GLTRANSACTION.POSTSTATUSCODE != 0;
--insert new distributions
insert into dbo.GLTRANSACTION
(ID, TRANSACTIONTYPECODE, ACCOUNT, AMOUNT, PROJECT, REFERENCE, POSTDATE, JOURNAL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,GLACCOUNTID)
select
NEW.ID,
NEW.TRANSACTIONTYPECODE,
NEW.ACCOUNTNUMBERS,
NEW.AMOUNT,
NEW.PROJECT,
new.REFERENCE,
NEW.POSTDATE,
NEW.JOURNAL,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
NEW.GLACCOUNTID
from @NewAccounts as NEW;
insert into dbo.REVENUEGLDISTRIBUTION
(ID, REVENUEID, GLPAYMENTMETHODREVENUETYPEMAPPINGID, PROJECT, REFERENCE, AMOUNT, ACCOUNT, TRANSACTIONTYPECODE, GLTRANSACTIONID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
NEWID(),
NEW.TRANID,
NEW.GLPAYMENTMETHODREVENUETYPEMAPPINGID,
NEW.PROJECT,
NEW.REFERENCE,
NEW.AMOUNT,
NEW.ACCOUNTNUMBERS,
NEW.TRANSACTIONTYPECODE,
NEW.ID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from @NewAccounts as NEW;
delete from @NewAccounts;
--Update the adjustment distributions
insert into @NewAccounts(ID, TRANSACTIONTYPECODE, TRANID, PROJECT, REFERENCE, AMOUNT, JOURNAL, POSTDATE, ACCOUNTNUMBERS, GLACCOUNTID)
select NEWID(),
CASE WHEN BT.TRANSACTIONTYPECODE in (16, 33)
THEN CASE WHEN BT.BANKACCOUNTID = @BANKACCOUNTID
THEN 0
ELSE 1 END
WHEN BT.TRANSACTIONTYPECODE in (17, 32)
THEN CASE WHEN BT.BANKACCOUNTID = @BANKACCOUNTID
THEN 1
ELSE 0 END
END,
D.BANKACCOUNTTRANSACTIONID, T.PROJECT, T.REFERENCE, T.AMOUNT, T.JOURNAL, T.POSTDATE,
isnull(@ACCOUNT, dbo.UFN_BANKACCOUNT_PAYMENT_COMBINEACCOUNTCODE_BYACCOUNTSYSTEM(T.GLACCOUNTID, @ACCOUNTCODE,@PDACCOUNTSYSTEMID)), @GLACCOUNTID
from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION D
inner join dbo.GLTRANSACTION T on D.GLTRANSACTIONID = T.ID
inner join dbo.BANKACCOUNTTRANSACTION BT on BT.ID = D.BANKACCOUNTTRANSACTIONID
where ((D.TRANSACTIONTYPECODE = 1 and BT.TRANSACTIONTYPECODE in (16, 33)) or (D.TRANSACTIONTYPECODE = 0 and BT.TRANSACTIONTYPECODE in (17, 32)))
and (BT.BANKACCOUNTID = @BANKACCOUNTID or BT.TRANSFERBANKACCOUNTID = @BANKACCOUNTID) and T.POSTSTATUSCODE != 0;
if @GLACCOUNTID is null
begin
-- if it's closed allow the glaccountid to be null
if @STATUSCODE = 1
begin
update @NewAccounts set
GLACCOUNTID = (select A.ID from GLACCOUNT A where A.ACCOUNTNUMBER = ACCOUNTNUMBERS);
if exists(select ID from @NewAccounts where GLACCOUNTID 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
end
else return
end
delete from dbo.GLTRANSACTION
where GLTRANSACTION.ID in
(select D.GLTRANSACTIONID
from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION D
inner join dbo.BANKACCOUNTTRANSACTION BT on BT.ID = D.BANKACCOUNTTRANSACTIONID
where (BT.BANKACCOUNTID = @BANKACCOUNTID
and ((D.TRANSACTIONTYPECODE = 0 and BT.TRANSACTIONTYPECODE in (16, 33))
or (D.TRANSACTIONTYPECODE = 1 and BT.TRANSACTIONTYPECODE in (17, 32))))
or (BT.TRANSFERBANKACCOUNTID = @BANKACCOUNTID
and ((D.TRANSACTIONTYPECODE = 1 and BT.TRANSACTIONTYPECODE in (16, 33))
or (D.TRANSACTIONTYPECODE = 0 and BT.TRANSACTIONTYPECODE in (17, 32)))))
and GLTRANSACTION.POSTSTATUSCODE != 0;
--insert new distributions
insert into dbo.GLTRANSACTION
(ID, TRANSACTIONTYPECODE, ACCOUNT, AMOUNT, PROJECT, REFERENCE, POSTDATE, JOURNAL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,GLACCOUNTID)
select
NEW.ID,
NEW.TRANSACTIONTYPECODE,
NEW.ACCOUNTNUMBERS,
NEW.AMOUNT,
NEW.PROJECT,
NEW.REFERENCE,
NEW.POSTDATE,
NEW.JOURNAL,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
NEW.GLACCOUNTID
from @NewAccounts as NEW;
insert into dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION
(ID, BANKACCOUNTTRANSACTIONID, PROJECT, REFERENCE, AMOUNT, ACCOUNT, TRANSACTIONTYPECODE, GLTRANSACTIONID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
NEWID(),
NEW.TRANID,
NEW.PROJECT,
NEW.REFERENCE,
NEW.AMOUNT,
NEW.ACCOUNTNUMBERS,
NEW.TRANSACTIONTYPECODE,
NEW.ID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from @NewAccounts as NEW;
delete from @NewAccounts;
--Update Deposit Correction distributions
insert into @NewAccounts(ID, TRANSACTIONTYPECODE, TRANID, PROJECT, REFERENCE, AMOUNT, JOURNAL, POSTDATE, ACCOUNTNUMBERS, GLACCOUNTID)
select NEWID(),
CASE WHEN C.CORRECTIONTYPECODE in (0, 2, 4)
THEN 1
WHEN C.CORRECTIONTYPECODE in (1, 3)
THEN 0
END,
D.BANKACCOUNTDEPOSITCORRECTIONID, T.PROJECT, T.REFERENCE, T.AMOUNT, T.JOURNAL, T.POSTDATE,
isnull(@ACCOUNT, dbo.UFN_BANKACCOUNT_PAYMENT_COMBINEACCOUNTCODE_BYACCOUNTSYSTEM(T.GLACCOUNTID, @ACCOUNTCODE, @PDACCOUNTSYSTEMID)), @GLACCOUNTID
from dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION D
inner join dbo.GLTRANSACTION T on D.GLTRANSACTIONID = T.ID
inner join dbo.BANKACCOUNTDEPOSITCORRECTION C on C.ID = D.BANKACCOUNTDEPOSITCORRECTIONID
inner join dbo.BANKACCOUNTTRANSACTION BT on BT.ID = C.DEPOSITID
where ((D.TRANSACTIONTYPECODE = 0 and C.CORRECTIONTYPECODE in (0, 2, 4)) or (D.TRANSACTIONTYPECODE = 1 and C.CORRECTIONTYPECODE in (1, 3)))
and BT.BANKACCOUNTID = @BANKACCOUNTID and T.POSTSTATUSCODE != 0;
if @GLACCOUNTID is null
begin
-- if it's closed allow the glaccountid to be null
if @STATUSCODE = 1
begin
update @NewAccounts set
GLACCOUNTID = (select A.ID from GLACCOUNT A where A.ACCOUNTNUMBER = ACCOUNTNUMBERS);
if exists(select ID from @NewAccounts where GLACCOUNTID 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
end
else return
end
delete from dbo.GLTRANSACTION
where GLTRANSACTION.ID in
(select D.GLTRANSACTIONID
from dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION D
inner join dbo.BANKACCOUNTDEPOSITCORRECTION C on C.ID = D.BANKACCOUNTDEPOSITCORRECTIONID
inner join dbo.BANKACCOUNTTRANSACTION BT on BT.ID = C.DEPOSITID
where BT.BANKACCOUNTID = @BANKACCOUNTID
and ((D.TRANSACTIONTYPECODE = 1 and C.CORRECTIONTYPECODE in (0, 2, 4))
or (D.TRANSACTIONTYPECODE = 0 and C.CORRECTIONTYPECODE in (1, 3))))
and GLTRANSACTION.POSTSTATUSCODE != 0;
--insert new distributions
insert into dbo.GLTRANSACTION
(ID, TRANSACTIONTYPECODE, ACCOUNT, AMOUNT, PROJECT, REFERENCE, POSTDATE, JOURNAL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,GLACCOUNTID)
select
NEW.ID,
NEW.TRANSACTIONTYPECODE,
NEW.ACCOUNTNUMBERS,
NEW.AMOUNT,
NEW.PROJECT,
NEW.REFERENCE,
NEW.POSTDATE,
NEW.JOURNAL,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
NEW.GLACCOUNTID
from @NewAccounts as NEW;
insert into dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION
(ID, BANKACCOUNTDEPOSITCORRECTIONID, PROJECT, REFERENCE, AMOUNT, ACCOUNT, TRANSACTIONTYPECODE, GLTRANSACTIONID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
NEWID(),
NEW.TRANID,
NEW.PROJECT,
NEW.REFERENCE,
NEW.AMOUNT,
NEW.ACCOUNTNUMBERS,
NEW.TRANSACTIONTYPECODE,
NEW.ID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from @NewAccounts as NEW;
delete from @NewAccounts;
end