mirror of
				https://github.com/aclindsa/moneygo.git
				synced 2025-11-03 18:13:27 -05:00 
			
		
		
		
	Report account balances correctly for both date sorts
This commit is contained in:
		@@ -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();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user