1
0
mirror of https://github.com/aclindsa/moneygo.git synced 2024-12-26 15:42:27 -05:00

Report account balances correctly for both date sorts

This commit is contained in:
Aaron Lindsay 2015-08-22 09:46:11 -04:00
parent 693f1e8253
commit 770cd384a7
2 changed files with 21 additions and 11 deletions

View File

@ -355,20 +355,20 @@ const AccountRegister = React.createClass({
} }
var transactions = []; var transactions = [];
var balance = new Big(data.BeginningBalance); var balance = new Big(data.EndingBalance);
for (var i = 0; i < data.Transactions.length; i++) { for (var i = 0; i < data.Transactions.length; i++) {
var t = new Transaction(); var t = new Transaction();
t.fromJSON(data.Transactions[i]); t.fromJSON(data.Transactions[i]);
t.Balance = balance.plus(0); // Make a copy of the current balance
// Keep a talley of the running balance of these transactions // Keep a talley of the running balance of these transactions
for (var j = 0; j < data.Transactions[i].Splits.length; j++) { for (var j = 0; j < data.Transactions[i].Splits.length; j++) {
var split = data.Transactions[i].Splits[j]; var split = data.Transactions[i].Splits[j];
if (this.props.selectedAccount.AccountId == split.AccountId) { if (this.props.selectedAccount.AccountId == split.AccountId) {
balance = balance.plus(split.Amount); balance = balance.minus(split.Amount);
} }
} }
t.Balance = balance.plus(0); // Make a copy
transactions.push(t); transactions.push(t);
} }
var a = new Account(); var a = new Account();

View File

@ -541,11 +541,26 @@ func GetAccountTransactions(user *User, accountid int64, sort string, page uint6
var transactions []Transaction var transactions []Transaction
var atl AccountTransactionsList var atl AccountTransactionsList
var sqlsort string transaction, err := DB.Begin()
if err != nil {
return nil, err
}
var sqlsort, balanceLimitOffset string
var balanceLimitOffsetArg uint64
if sort == "date-asc" { if sort == "date-asc" {
sqlsort = " ORDER BY transactions.Date ASC" sqlsort = " ORDER BY transactions.Date ASC"
balanceLimitOffset = " LIMIT ?"
balanceLimitOffsetArg = page*limit
} else if sort == "date-desc" { } else if sort == "date-desc" {
numSplits, err := transaction.SelectInt("SELECT count(*) FROM splits")
if err != nil {
transaction.Rollback()
return nil, err
}
sqlsort = " ORDER BY transactions.Date DESC" sqlsort = " ORDER BY transactions.Date DESC"
balanceLimitOffset = fmt.Sprintf(" LIMIT %d OFFSET ?", numSplits)
balanceLimitOffsetArg = (page + 1)*limit
} }
var sqloffset string var sqloffset string
@ -553,11 +568,6 @@ func GetAccountTransactions(user *User, accountid int64, sort string, page uint6
sqloffset = fmt.Sprintf(" OFFSET %d", page*limit) sqloffset = fmt.Sprintf(" OFFSET %d", page*limit)
} }
transaction, err := DB.Begin()
if err != nil {
return nil, err
}
account, err := GetAccountTx(transaction, accountid, user.UserId) account, err := GetAccountTx(transaction, accountid, user.UserId)
if err != nil { if err != nil {
transaction.Rollback() transaction.Rollback()
@ -611,8 +621,8 @@ func GetAccountTransactions(user *User, accountid int64, sort string, page uint6
// Sum all the splits for all transaction splits for this account that // Sum all the splits for all transaction splits for this account that
// occurred before the page we're returning // occurred before the page we're returning
var amounts []string var amounts []string
sql = "SELECT splits.Amount FROM splits WHERE splits.AccountId=? AND splits.TransactionId IN (SELECT DISTINCT transactions.TransactionId FROM transactions INNER JOIN splits ON transactions.TransactionId = splits.TransactionId WHERE transactions.UserId=? AND splits.AccountId=?" + sqlsort + " LIMIT ?)" sql = "SELECT splits.Amount FROM splits WHERE splits.AccountId=? AND splits.TransactionId IN (SELECT DISTINCT transactions.TransactionId FROM transactions INNER JOIN splits ON transactions.TransactionId = splits.TransactionId WHERE transactions.UserId=? AND splits.AccountId=?" + sqlsort + balanceLimitOffset + ")"
_, err = transaction.Select(&amounts, sql, accountid, user.UserId, accountid, page*limit) _, err = transaction.Select(&amounts, sql, accountid, user.UserId, accountid, balanceLimitOffsetArg)
if err != nil { if err != nil {
transaction.Rollback() transaction.Rollback()
return nil, err return nil, err