mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-21 10:14:26 +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
|
// GetNumericYearMonthRange returns numeric start year, start month, end year and end month
|
||||||
func (t *YearMonthRangeRequest) GetNumericYearMonthRange() (int32, int32, int32, int32, error) {
|
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 {
|
if t.StartYearMonth != "" {
|
||||||
return 0, 0, 0, 0, err
|
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 {
|
if err != nil {
|
||||||
return 0, 0, 0, 0, err
|
return 0, 0, 0, 0, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return startYear, startMonth, endYear, endMonth, nil
|
return startYear, startMonth, endYear, endMonth, nil
|
||||||
|
|||||||
@@ -1207,19 +1207,26 @@ func (s *TransactionService) GetAccountsAndCategoriesMonthlyIncomeAndExpense(c *
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientLocation := time.FixedZone("Client Timezone", int(utcOffset)*60)
|
clientLocation := time.FixedZone("Client Timezone", int(utcOffset)*60)
|
||||||
startTransactionTime, _, err := utils.GetTransactionTimeRangeByYearMonth(startYear, startMonth)
|
var startTransactionTime, endTransactionTime int64
|
||||||
|
var err error
|
||||||
|
|
||||||
if err != nil {
|
if startYear > 0 && startMonth > 0 {
|
||||||
return nil, errs.ErrSystemError
|
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 {
|
if err != nil {
|
||||||
return nil, errs.ErrSystemError
|
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 := make([]any, 0, 4)
|
||||||
conditionParams = append(conditionParams, uid)
|
conditionParams = append(conditionParams, uid)
|
||||||
conditionParams = append(conditionParams, false)
|
conditionParams = append(conditionParams, false)
|
||||||
@@ -1230,15 +1237,24 @@ func (s *TransactionService) GetAccountsAndCategoriesMonthlyIncomeAndExpense(c *
|
|||||||
maxTransactionTime := endTransactionTime
|
maxTransactionTime := endTransactionTime
|
||||||
var allTransactions []*models.Transaction
|
var allTransactions []*models.Transaction
|
||||||
|
|
||||||
for maxTransactionTime > 0 {
|
for maxTransactionTime >= 0 {
|
||||||
var transactions []*models.Transaction
|
var transactions []*models.Transaction
|
||||||
|
|
||||||
|
finalCondition := condition
|
||||||
finalConditionParams := make([]any, 0, 6)
|
finalConditionParams := make([]any, 0, 6)
|
||||||
finalConditionParams = append(finalConditionParams, conditionParams...)
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -1247,7 +1263,7 @@ func (s *TransactionService) GetAccountsAndCategoriesMonthlyIncomeAndExpense(c *
|
|||||||
allTransactions = append(allTransactions, transactions...)
|
allTransactions = append(allTransactions, transactions...)
|
||||||
|
|
||||||
if len(transactions) < pageCountForLoadTransactionAmounts {
|
if len(transactions) < pageCountForLoadTransactionAmounts {
|
||||||
maxTransactionTime = 0
|
maxTransactionTime = -1
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1269,7 +1285,7 @@ func (s *TransactionService) GetAccountsAndCategoriesMonthlyIncomeAndExpense(c *
|
|||||||
|
|
||||||
yearMonth := utils.FormatUnixTimeToNumericYearMonth(utils.GetUnixTimeFromTransactionTime(transaction.TransactionTime), timeZone)
|
yearMonth := utils.FormatUnixTimeToNumericYearMonth(utils.GetUnixTimeFromTransactionTime(transaction.TransactionTime), timeZone)
|
||||||
|
|
||||||
if yearMonth < startYearMonth || yearMonth > endYearMonth {
|
if (startYearMonth > 0 && yearMonth < startYearMonth) || (endYearMonth > 0 && yearMonth > endYearMonth) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+12
-2
@@ -296,8 +296,18 @@ export default {
|
|||||||
|
|
||||||
return axios.get(`v1/transactions/statistics.json?use_transaction_timezone=${useTransactionTimezone}` + (queryParams.length ? '&' + queryParams.join('&') : ''));
|
return axios.get(`v1/transactions/statistics.json?use_transaction_timezone=${useTransactionTimezone}` + (queryParams.length ? '&' + queryParams.join('&') : ''));
|
||||||
},
|
},
|
||||||
getTransactionStatisticsTrends: ({ startTime, endTime, useTransactionTimezone, rangeType }) => {
|
getTransactionStatisticsTrends: ({ startYearMonth, endYearMonth, useTransactionTimezone }) => {
|
||||||
return axios.get(`v1/transactions/statistics/trends.json?start_time=${startTime}&end_time=${endTime}&use_transaction_timezone=${useTransactionTimezone}&range_type=${rangeType}`);
|
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 }) => {
|
getTransactionAmounts: ({ useTransactionTimezone, today, thisWeek, thisMonth, thisYear, lastMonth, monthBeforeLastMonth, monthBeforeLast2Months, monthBeforeLast3Months, monthBeforeLast4Months, monthBeforeLast5Months, monthBeforeLast6Months, monthBeforeLast7Months, monthBeforeLast8Months, monthBeforeLast9Months, monthBeforeLast10Months }) => {
|
||||||
const queryParams = [];
|
const queryParams = [];
|
||||||
|
|||||||
Reference in New Issue
Block a user