USP_DATALIST_BANKACCOUNTREGISTER
This data list displays bank account register data.
Parameters
| Parameter | Parameter Type | Mode | Description |
|---|---|---|---|
| @BANKACCOUNTID | uniqueidentifier | IN | Input parameter indicating the context ID for the data list. |
| @STARTDATE | datetime | IN | Start date |
| @ENDDATE | datetime | IN | End date |
| @SHOWCODE | smallint | IN | Show |
| @MAXNUMROWS | int | IN | Limit |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_BANKACCOUNTREGISTER(
@BANKACCOUNTID uniqueidentifier,
@STARTDATE datetime = NULL,
@ENDDATE datetime = NULL,
@SHOWCODE smallint = 0,
@MAXNUMROWS int = 1000
)
as
begin
set nocount on;
DECLARE @ResultSet TABLE(ID uniqueidentifier, RowNum int, TranDate date, TranType nvarchar(26), TranNum nvarchar(50), Ref nvarchar(100), Payment money, Deposit money, Balance money, Amount money, TranTypeCode int, RunningTotal money, PostStatusCode int, Status nvarchar(11), TransactionCurrencyID uniqueidentifier);
DECLARE @AccountBalance money;
DECLARE @RunningTotal money;
DECLARE @TempRowNum int;
DECLARE @LastAmount money;
declare @CURRENTDATE datetime;
--There are still records in the resultset after we change the filters. Hence I am clearing the resultset here.
--Since this is right after Declare @ResultSet statement, we expect resultset to not have any values but I don't think it is
--working that way
DELETE FROM @ResultSet;
--Retrieve the entire registry to ensure valid row balances
INSERT INTO @ResultSet (ID, RowNum, TranDate, TranType, TranNum, Ref, Payment, Deposit, Balance, Amount, TranTypeCode, RunningTotal, PostStatusCode, Status, TransactionCurrencyID)
SELECT ID,
Row_Number() OVER (order by TRANSACTIONDATE DESC, GENERALLEDGERTRANSACTION, TRANSACTIONNUMBER),
TransactionDate,
TransactionType,
TransactionNumber,
Reference,
case when STATUSCODE = 4 then 0 else CASE GENERALLEDGERTRANSACTION WHEN 2 THEN TRANSACTIONAMOUNT ELSE NULL END end,
CASE GENERALLEDGERTRANSACTION WHEN 1 THEN TRANSACTIONAMOUNT ELSE NULL END,
NULL,
case when STATUSCODE = 4 then 0 else CASE GENERALLEDGERTRANSACTION WHEN 1 THEN TRANSACTIONAMOUNT ELSE -1*TRANSACTIONAMOUNT END end,
TRANSACTIONTYPECODE,
NULL,
BANKACCOUNTTRANSACTION.POSTSTATUSCODE,
BANKACCOUNTTRANSACTION.STATUS,
(select TRANSACTIONCURRENCYID from dbo.BANKACCOUNT where BANKACCOUNT.ID = @BANKACCOUNTID) TransactionCurrencyID
from dbo.BANKACCOUNTTRANSACTION
where
BANKACCOUNTID = @BANKACCOUNTID
and DELETED = 0
and PROCESSING = 0
order by TRANSACTIONDATE DESC, GENERALLEDGERTRANSACTION, TRANSACTIONNUMBER
begin try
--Get the Total Account Balance of all transactions
SELECT @AccountBalance=SUM(Amount) FROM @ResultSet
--Update each transaction with the associated account balance
SET @LastAmount=0;
UPDATE @ResultSet
SET @AccountBalance = Balance = @AccountBalance - @LastAmount, @LastAmount = Amount = Amount
FROM @ResultSet
end try
begin catch
end catch
if @SHOWCODE = 99 begin --Specific Range
set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);
end else begin
set @CURRENTDATE = getdate();
set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@CURRENTDATE);
if @SHOWCODE = 1 --Last 30 days
set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,-29,@CURRENTDATE));
else if @SHOWCODE = 2 --Last 60 days
set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,-59,@CURRENTDATE));
else if @SHOWCODE = 3 --Last 90 days
set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,-89,@CURRENTDATE));
else if @SHOWCODE = 4 --Last 6 months
set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,1,dateadd(month,-6,@CURRENTDATE)));
else if @SHOWCODE = 5 --Last year
set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,1,dateadd(year,-1,@CURRENTDATE)));
else if @SHOWCODE = 6 --Last 5 years
set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(dateadd(day,1,dateadd(year,-5,@CURRENTDATE)));
else begin --All
set @STARTDATE = null;
set @ENDDATE = null;
end
end
--Remove unwanted transactions from the result set
if @STARTDATE IS NOT NULL DELETE FROM @ResultSet WHERE TranDate < @STARTDATE;
if @ENDDATE IS NOT NULL DELETE FROM @ResultSet WHERE TranDate > @ENDDATE;
SET @TempRowNum = 0;
SET @RunningTotal = 0;
begin try
--Resequence the resultset, and update the running totals
UPDATE @ResultSet
SET @TempRowNum = RowNum = @TempRowNum + 1, @RunningTotal = RunningTotal = @RunningTotal+Amount
FROM @ResultSet
end try
begin catch
end catch
SELECT ID, RowNum, TranDate, TranType, TranNum, Ref, Deposit, Payment, Balance, TranTypeCode, RunningTotal, PostStatusCode, Status, TransactionCurrencyID
FROM @ResultSet
WHERE RowNum <= @MAXNUMROWS OR @MAXNUMROWS IS NULL
end