mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-16 07:57:33 +08:00
trend analysis supports data from all dates
This commit is contained in:
@@ -385,16 +385,23 @@ func (t *TransactionAmountsRequest) GetTransactionAmountsRequestItems() ([]*Tran
|
||||
|
||||
// GetNumericYearMonthRange returns numeric start year, start month, end year and end month
|
||||
func (t *YearMonthRangeRequest) GetNumericYearMonthRange() (int32, int32, int32, int32, error) {
|
||||
startYear, startMonth, err := utils.ParseNumericYearMonth(t.StartYearMonth)
|
||||
var startYear, startMonth, endYear, endMonth int32
|
||||
var err error
|
||||
|
||||
if err != nil {
|
||||
return 0, 0, 0, 0, err
|
||||
if t.StartYearMonth != "" {
|
||||
startYear, startMonth, err = utils.ParseNumericYearMonth(t.StartYearMonth)
|
||||
|
||||
if err != nil {
|
||||
return 0, 0, 0, 0, err
|
||||
}
|
||||
}
|
||||
|
||||
endYear, endMonth, err := utils.ParseNumericYearMonth(t.EndYearMonth)
|
||||
if t.EndYearMonth != "" {
|
||||
endYear, endMonth, err = utils.ParseNumericYearMonth(t.EndYearMonth)
|
||||
|
||||
if err != nil {
|
||||
return 0, 0, 0, 0, err
|
||||
if err != nil {
|
||||
return 0, 0, 0, 0, err
|
||||
}
|
||||
}
|
||||
|
||||
return startYear, startMonth, endYear, endMonth, nil
|
||||
|
||||
@@ -1207,19 +1207,26 @@ func (s *TransactionService) GetAccountsAndCategoriesMonthlyIncomeAndExpense(c *
|
||||
}
|
||||
|
||||
clientLocation := time.FixedZone("Client Timezone", int(utcOffset)*60)
|
||||
startTransactionTime, _, err := utils.GetTransactionTimeRangeByYearMonth(startYear, startMonth)
|
||||
var startTransactionTime, endTransactionTime int64
|
||||
var err error
|
||||
|
||||
if err != nil {
|
||||
return nil, errs.ErrSystemError
|
||||
if startYear > 0 && startMonth > 0 {
|
||||
startTransactionTime, _, err = utils.GetTransactionTimeRangeByYearMonth(startYear, startMonth)
|
||||
|
||||
if err != nil {
|
||||
return nil, errs.ErrSystemError
|
||||
}
|
||||
}
|
||||
|
||||
_, endTransactionTime, err := utils.GetTransactionTimeRangeByYearMonth(endYear, endMonth)
|
||||
if endYear > 0 && endMonth > 0 {
|
||||
_, endTransactionTime, err = utils.GetTransactionTimeRangeByYearMonth(endYear, endMonth)
|
||||
|
||||
if err != nil {
|
||||
return nil, errs.ErrSystemError
|
||||
if err != nil {
|
||||
return nil, errs.ErrSystemError
|
||||
}
|
||||
}
|
||||
|
||||
condition := "uid=? AND deleted=? AND (type=? OR type=?) AND transaction_time>=? AND transaction_time<=?"
|
||||
condition := "uid=? AND deleted=? AND (type=? OR type=?)"
|
||||
conditionParams := make([]any, 0, 4)
|
||||
conditionParams = append(conditionParams, uid)
|
||||
conditionParams = append(conditionParams, false)
|
||||
@@ -1230,15 +1237,24 @@ func (s *TransactionService) GetAccountsAndCategoriesMonthlyIncomeAndExpense(c *
|
||||
maxTransactionTime := endTransactionTime
|
||||
var allTransactions []*models.Transaction
|
||||
|
||||
for maxTransactionTime > 0 {
|
||||
for maxTransactionTime >= 0 {
|
||||
var transactions []*models.Transaction
|
||||
|
||||
finalCondition := condition
|
||||
finalConditionParams := make([]any, 0, 6)
|
||||
finalConditionParams = append(finalConditionParams, conditionParams...)
|
||||
finalConditionParams = append(finalConditionParams, minTransactionTime)
|
||||
finalConditionParams = append(finalConditionParams, maxTransactionTime)
|
||||
|
||||
err := s.UserDataDB(uid).NewSession(c).Select("category_id, account_id, transaction_time, timezone_utc_offset, amount").Where(condition, finalConditionParams...).Limit(pageCountForLoadTransactionAmounts, 0).OrderBy("transaction_time desc").Find(&transactions)
|
||||
if minTransactionTime > 0 {
|
||||
finalCondition = finalCondition + " AND transaction_time>=?"
|
||||
finalConditionParams = append(finalConditionParams, minTransactionTime)
|
||||
}
|
||||
|
||||
if maxTransactionTime > 0 {
|
||||
finalCondition = finalCondition + " AND transaction_time<=?"
|
||||
finalConditionParams = append(finalConditionParams, maxTransactionTime)
|
||||
}
|
||||
|
||||
err := s.UserDataDB(uid).NewSession(c).Select("category_id, account_id, transaction_time, timezone_utc_offset, amount").Where(finalCondition, finalConditionParams...).Limit(pageCountForLoadTransactionAmounts, 0).OrderBy("transaction_time desc").Find(&transactions)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -1247,7 +1263,7 @@ func (s *TransactionService) GetAccountsAndCategoriesMonthlyIncomeAndExpense(c *
|
||||
allTransactions = append(allTransactions, transactions...)
|
||||
|
||||
if len(transactions) < pageCountForLoadTransactionAmounts {
|
||||
maxTransactionTime = 0
|
||||
maxTransactionTime = -1
|
||||
break
|
||||
}
|
||||
|
||||
@@ -1269,7 +1285,7 @@ func (s *TransactionService) GetAccountsAndCategoriesMonthlyIncomeAndExpense(c *
|
||||
|
||||
yearMonth := utils.FormatUnixTimeToNumericYearMonth(utils.GetUnixTimeFromTransactionTime(transaction.TransactionTime), timeZone)
|
||||
|
||||
if yearMonth < startYearMonth || yearMonth > endYearMonth {
|
||||
if (startYearMonth > 0 && yearMonth < startYearMonth) || (endYearMonth > 0 && yearMonth > endYearMonth) {
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
+12
-2
@@ -296,8 +296,18 @@ export default {
|
||||
|
||||
return axios.get(`v1/transactions/statistics.json?use_transaction_timezone=${useTransactionTimezone}` + (queryParams.length ? '&' + queryParams.join('&') : ''));
|
||||
},
|
||||
getTransactionStatisticsTrends: ({ startTime, endTime, useTransactionTimezone, rangeType }) => {
|
||||
return axios.get(`v1/transactions/statistics/trends.json?start_time=${startTime}&end_time=${endTime}&use_transaction_timezone=${useTransactionTimezone}&range_type=${rangeType}`);
|
||||
getTransactionStatisticsTrends: ({ startYearMonth, endYearMonth, useTransactionTimezone }) => {
|
||||
const queryParams = [];
|
||||
|
||||
if (startYearMonth) {
|
||||
queryParams.push(`start_year_month=${startYearMonth}`);
|
||||
}
|
||||
|
||||
if (endYearMonth) {
|
||||
queryParams.push(`end_year_month=${endYearMonth}`);
|
||||
}
|
||||
|
||||
return axios.get(`v1/transactions/statistics/trends.json?use_transaction_timezone=${useTransactionTimezone}` + (queryParams.length ? '&' + queryParams.join('&') : ''));
|
||||
},
|
||||
getTransactionAmounts: ({ useTransactionTimezone, today, thisWeek, thisMonth, thisYear, lastMonth, monthBeforeLastMonth, monthBeforeLast2Months, monthBeforeLast3Months, monthBeforeLast4Months, monthBeforeLast5Months, monthBeforeLast6Months, monthBeforeLast7Months, monthBeforeLast8Months, monthBeforeLast9Months, monthBeforeLast10Months }) => {
|
||||
const queryParams = [];
|
||||
|
||||
Reference in New Issue
Block a user