transaction overview supports multi currencies

This commit is contained in:
MaysWind
2021-01-14 01:03:06 +08:00
parent 1a221c1dfc
commit 5a95ef07df
5 changed files with 163 additions and 42 deletions
+10 -10
View File
@@ -923,36 +923,36 @@ func (s *TransactionService) GetRelatedTransferTransaction(originalTransaction *
return relatedTransaction
}
// GetTotalIncomeAndExpenseByDateRange returns the total income and expense amount by specific date range
func (s *TransactionService) GetTotalIncomeAndExpenseByDateRange(uid int64, startUnixTime int64, endUnixTime int64) (int64, int64, error) {
// GetAccountsTotalIncomeAndExpense returns the every accounts total income and expense amount by specific date range
func (s *TransactionService) GetAccountsTotalIncomeAndExpense(uid int64, startUnixTime int64, endUnixTime int64) (map[int64]int64, map[int64]int64, error) {
if uid <= 0 {
return 0, 0, errs.ErrUserIdInvalid
return nil, nil, errs.ErrUserIdInvalid
}
startTransactionTime := utils.GetMinTransactionTimeFromUnixTime(startUnixTime)
endTransactionTime := utils.GetMaxTransactionTimeFromUnixTime(endUnixTime)
var transactionTotalAmounts []*models.Transaction
err := s.UserDataDB(uid).Select("uid, type, SUM(amount) as amount").Where("uid=? AND deleted=? AND (type=? OR type=?) AND transaction_time>=? AND transaction_time<=?", uid, false, models.TRANSACTION_DB_TYPE_INCOME, models.TRANSACTION_DB_TYPE_EXPENSE, startTransactionTime, endTransactionTime).GroupBy("type").Find(&transactionTotalAmounts)
err := s.UserDataDB(uid).Select("uid, type, account_id, SUM(amount) as amount").Where("uid=? AND deleted=? AND (type=? OR type=?) AND transaction_time>=? AND transaction_time<=?", uid, false, models.TRANSACTION_DB_TYPE_INCOME, models.TRANSACTION_DB_TYPE_EXPENSE, startTransactionTime, endTransactionTime).GroupBy("type, account_id").Find(&transactionTotalAmounts)
if err != nil {
return 0, 0, err
return nil, nil, err
}
var incomeAmount int64
var expenseAmount int64
incomeAmounts := make(map[int64]int64)
expenseAmounts := make(map[int64]int64)
for i := 0; i < len(transactionTotalAmounts); i++ {
transactionTotalAmount := transactionTotalAmounts[i]
if transactionTotalAmount.Type == models.TRANSACTION_DB_TYPE_INCOME {
incomeAmount = transactionTotalAmount.Amount
incomeAmounts[transactionTotalAmount.AccountId] = transactionTotalAmount.Amount
} else if transactionTotalAmount.Type == models.TRANSACTION_DB_TYPE_EXPENSE {
expenseAmount = transactionTotalAmount.Amount
expenseAmounts[transactionTotalAmount.AccountId] = transactionTotalAmount.Amount
}
}
return incomeAmount, expenseAmount, nil
return incomeAmounts, expenseAmounts, nil
}
func (s *TransactionService) isAccountIdValid(transaction *models.Transaction) error {