sub account cannot set statement date

This commit is contained in:
MaysWind
2024-12-11 23:53:01 +08:00
parent 8f543d7a84
commit 563e328ce3
9 changed files with 33 additions and 48 deletions
+25 -25
View File
@@ -159,6 +159,11 @@ func (a *AccountsApi) AccountCreateHandler(c *core.WebContext) (any, *errs.Error
return nil, errs.ErrAccountCategoryInvalid return nil, errs.ErrAccountCategoryInvalid
} }
if accountCreateReq.Category != models.ACCOUNT_CATEGORY_CREDIT_CARD && accountCreateReq.CreditCardStatementDate != 0 {
log.Warnf(c, "[accounts.AccountCreateHandler] cannot set statement date with category \"%d\"", accountCreateReq.Category)
return nil, errs.ErrCannotSetStatementDateForNonCreditCard
}
if accountCreateReq.Type == models.ACCOUNT_TYPE_SINGLE_ACCOUNT { if accountCreateReq.Type == models.ACCOUNT_TYPE_SINGLE_ACCOUNT {
if len(accountCreateReq.SubAccounts) > 0 { if len(accountCreateReq.SubAccounts) > 0 {
log.Warnf(c, "[accounts.AccountCreateHandler] account cannot have any sub-accounts") log.Warnf(c, "[accounts.AccountCreateHandler] account cannot have any sub-accounts")
@@ -174,11 +179,6 @@ func (a *AccountsApi) AccountCreateHandler(c *core.WebContext) (any, *errs.Error
log.Warnf(c, "[accounts.AccountCreateHandler] account balance time is not set") log.Warnf(c, "[accounts.AccountCreateHandler] account balance time is not set")
return nil, errs.ErrAccountBalanceTimeNotSet return nil, errs.ErrAccountBalanceTimeNotSet
} }
if accountCreateReq.Category != models.ACCOUNT_CATEGORY_CREDIT_CARD && accountCreateReq.CreditCardStatementDate != 0 {
log.Warnf(c, "[accounts.AccountCreateHandler] cannot set statement date with category \"%d\"", accountCreateReq.Category)
return nil, errs.ErrCannotSetStatementDateForNonCreditCard
}
} else if accountCreateReq.Type == models.ACCOUNT_TYPE_MULTI_SUB_ACCOUNTS { } else if accountCreateReq.Type == models.ACCOUNT_TYPE_MULTI_SUB_ACCOUNTS {
if len(accountCreateReq.SubAccounts) < 1 { if len(accountCreateReq.SubAccounts) < 1 {
log.Warnf(c, "[accounts.AccountCreateHandler] account does not have any sub-accounts") log.Warnf(c, "[accounts.AccountCreateHandler] account does not have any sub-accounts")
@@ -218,9 +218,9 @@ func (a *AccountsApi) AccountCreateHandler(c *core.WebContext) (any, *errs.Error
return nil, errs.ErrAccountBalanceTimeNotSet return nil, errs.ErrAccountBalanceTimeNotSet
} }
if subAccount.Category != models.ACCOUNT_CATEGORY_CREDIT_CARD && subAccount.CreditCardStatementDate != 0 { if subAccount.CreditCardStatementDate != 0 {
log.Warnf(c, "[accounts.AccountCreateHandler] sub-account#%d cannot set statement date with category \"%d\"", i, subAccount.Category) log.Warnf(c, "[accounts.AccountCreateHandler] sub-account#%d cannot set statement date", i)
return nil, errs.ErrCannotSetStatementDateForNonCreditCard return nil, errs.ErrCannotSetStatementDateForSubAccount
} }
} }
} else { } else {
@@ -236,7 +236,7 @@ func (a *AccountsApi) AccountCreateHandler(c *core.WebContext) (any, *errs.Error
return nil, errs.Or(err, errs.ErrOperationFailed) return nil, errs.Or(err, errs.ErrOperationFailed)
} }
mainAccount := a.createNewAccountModel(uid, &accountCreateReq, maxOrderId+1) mainAccount := a.createNewAccountModel(uid, &accountCreateReq, false, maxOrderId+1)
childrenAccounts, childrenAccountBalanceTimes := a.createSubAccountModels(uid, &accountCreateReq) childrenAccounts, childrenAccountBalanceTimes := a.createSubAccountModels(uid, &accountCreateReq)
if a.CurrentConfig().EnableDuplicateSubmissionsCheck && accountCreateReq.ClientSessionId != "" { if a.CurrentConfig().EnableDuplicateSubmissionsCheck && accountCreateReq.ClientSessionId != "" {
@@ -332,18 +332,18 @@ func (a *AccountsApi) AccountModifyHandler(c *core.WebContext) (any, *errs.Error
return nil, errs.ErrCannotAddOrDeleteSubAccountsWhenModify return nil, errs.ErrCannotAddOrDeleteSubAccountsWhenModify
} }
if mainAccount.Type == models.ACCOUNT_TYPE_SINGLE_ACCOUNT { if accountModifyReq.Category != models.ACCOUNT_CATEGORY_CREDIT_CARD && accountModifyReq.CreditCardStatementDate != 0 {
if accountModifyReq.Category != models.ACCOUNT_CATEGORY_CREDIT_CARD && accountModifyReq.CreditCardStatementDate != 0 { log.Warnf(c, "[accounts.AccountModifyHandler] cannot set statement date with category \"%d\"", accountModifyReq.Category)
log.Warnf(c, "[accounts.AccountModifyHandler] cannot set statement date with category \"%d\"", accountModifyReq.Category) return nil, errs.ErrCannotSetStatementDateForNonCreditCard
return nil, errs.ErrCannotSetStatementDateForNonCreditCard }
}
} else if mainAccount.Type == models.ACCOUNT_TYPE_MULTI_SUB_ACCOUNTS { if mainAccount.Type == models.ACCOUNT_TYPE_MULTI_SUB_ACCOUNTS {
for i := 0; i < len(accountModifyReq.SubAccounts); i++ { for i := 0; i < len(accountModifyReq.SubAccounts); i++ {
subAccount := accountModifyReq.SubAccounts[i] subAccount := accountModifyReq.SubAccounts[i]
if subAccount.Category != models.ACCOUNT_CATEGORY_CREDIT_CARD && subAccount.CreditCardStatementDate != 0 { if subAccount.CreditCardStatementDate != 0 {
log.Warnf(c, "[accounts.AccountModifyHandler] sub-account#%d cannot set statement date with category \"%d\"", i, subAccount.Category) log.Warnf(c, "[accounts.AccountModifyHandler] sub-account#%d cannot set statement date", i)
return nil, errs.ErrCannotSetStatementDateForNonCreditCard return nil, errs.ErrCannotSetStatementDateForSubAccount
} }
} }
} }
@@ -351,7 +351,7 @@ func (a *AccountsApi) AccountModifyHandler(c *core.WebContext) (any, *errs.Error
anythingUpdate := false anythingUpdate := false
var toUpdateAccounts []*models.Account var toUpdateAccounts []*models.Account
toUpdateAccount := a.getToUpdateAccount(uid, &accountModifyReq, mainAccount) toUpdateAccount := a.getToUpdateAccount(uid, &accountModifyReq, mainAccount, false)
if toUpdateAccount != nil { if toUpdateAccount != nil {
anythingUpdate = true anythingUpdate = true
@@ -365,7 +365,7 @@ func (a *AccountsApi) AccountModifyHandler(c *core.WebContext) (any, *errs.Error
return nil, errs.ErrAccountNotFound return nil, errs.ErrAccountNotFound
} }
toUpdateSubAccount := a.getToUpdateAccount(uid, subAccountReq, accountMap[subAccountReq.Id]) toUpdateSubAccount := a.getToUpdateAccount(uid, subAccountReq, accountMap[subAccountReq.Id], true)
if toUpdateSubAccount != nil { if toUpdateSubAccount != nil {
anythingUpdate = true anythingUpdate = true
@@ -505,10 +505,10 @@ func (a *AccountsApi) AccountDeleteHandler(c *core.WebContext) (any, *errs.Error
return true, nil return true, nil
} }
func (a *AccountsApi) createNewAccountModel(uid int64, accountCreateReq *models.AccountCreateRequest, order int32) *models.Account { func (a *AccountsApi) createNewAccountModel(uid int64, accountCreateReq *models.AccountCreateRequest, isSubAccount bool, order int32) *models.Account {
accountExtend := &models.AccountExtend{} accountExtend := &models.AccountExtend{}
if accountCreateReq.Category == models.ACCOUNT_CATEGORY_CREDIT_CARD { if !isSubAccount && accountCreateReq.Category == models.ACCOUNT_CATEGORY_CREDIT_CARD {
accountExtend.CreditCardStatementDate = &accountCreateReq.CreditCardStatementDate accountExtend.CreditCardStatementDate = &accountCreateReq.CreditCardStatementDate
} }
@@ -536,17 +536,17 @@ func (a *AccountsApi) createSubAccountModels(uid int64, accountCreateReq *models
childrenAccountBalanceTimes := make([]int64, len(accountCreateReq.SubAccounts)) childrenAccountBalanceTimes := make([]int64, len(accountCreateReq.SubAccounts))
for i := int32(0); i < int32(len(accountCreateReq.SubAccounts)); i++ { for i := int32(0); i < int32(len(accountCreateReq.SubAccounts)); i++ {
childrenAccounts[i] = a.createNewAccountModel(uid, accountCreateReq.SubAccounts[i], i+1) childrenAccounts[i] = a.createNewAccountModel(uid, accountCreateReq.SubAccounts[i], true, i+1)
childrenAccountBalanceTimes[i] = accountCreateReq.SubAccounts[i].BalanceTime childrenAccountBalanceTimes[i] = accountCreateReq.SubAccounts[i].BalanceTime
} }
return childrenAccounts, childrenAccountBalanceTimes return childrenAccounts, childrenAccountBalanceTimes
} }
func (a *AccountsApi) getToUpdateAccount(uid int64, accountModifyReq *models.AccountModifyRequest, oldAccount *models.Account) *models.Account { func (a *AccountsApi) getToUpdateAccount(uid int64, accountModifyReq *models.AccountModifyRequest, oldAccount *models.Account, isSubAccount bool) *models.Account {
newAccountExtend := &models.AccountExtend{} newAccountExtend := &models.AccountExtend{}
if accountModifyReq.Category == models.ACCOUNT_CATEGORY_CREDIT_CARD { if !isSubAccount && accountModifyReq.Category == models.ACCOUNT_CATEGORY_CREDIT_CARD {
newAccountExtend.CreditCardStatementDate = &accountModifyReq.CreditCardStatementDate newAccountExtend.CreditCardStatementDate = &accountModifyReq.CreditCardStatementDate
} }
+1
View File
@@ -21,4 +21,5 @@ var (
ErrAccountCategoryInvalid = NewNormalError(NormalSubcategoryAccount, 14, http.StatusBadRequest, "account category is invalid") ErrAccountCategoryInvalid = NewNormalError(NormalSubcategoryAccount, 14, http.StatusBadRequest, "account category is invalid")
ErrAccountBalanceTimeNotSet = NewNormalError(NormalSubcategoryAccount, 15, http.StatusBadRequest, "account balance time is not set") ErrAccountBalanceTimeNotSet = NewNormalError(NormalSubcategoryAccount, 15, http.StatusBadRequest, "account balance time is not set")
ErrCannotSetStatementDateForNonCreditCard = NewNormalError(NormalSubcategoryAccount, 16, http.StatusBadRequest, "cannot set statement date for non credit card account") ErrCannotSetStatementDateForNonCreditCard = NewNormalError(NormalSubcategoryAccount, 16, http.StatusBadRequest, "cannot set statement date for non credit card account")
ErrCannotSetStatementDateForSubAccount = NewNormalError(NormalSubcategoryAccount, 17, http.StatusBadRequest, "cannot set statement date for sub account")
) )
+1 -1
View File
@@ -168,7 +168,7 @@ type AccountInfoResponse struct {
func (a *Account) ToAccountInfoResponse() *AccountInfoResponse { func (a *Account) ToAccountInfoResponse() *AccountInfoResponse {
var creditCardStatementDate *int var creditCardStatementDate *int
if a.Category == ACCOUNT_CATEGORY_CREDIT_CARD { if a.ParentAccountId == LevelOneAccountParentId && a.Category == ACCOUNT_CATEGORY_CREDIT_CARD {
if a.Extend != nil { if a.Extend != nil {
creditCardStatementDate = a.Extend.CreditCardStatementDate creditCardStatementDate = a.Extend.CreditCardStatementDate
} else { } else {
+1
View File
@@ -1062,6 +1062,7 @@
"account category is invalid": "Account category is invalid", "account category is invalid": "Account category is invalid",
"account balance time is not set": "Account balance time is not set", "account balance time is not set": "Account balance time is not set",
"cannot set statement date for non credit card account": "Cannot set statement date for non credit card account", "cannot set statement date for non credit card account": "Cannot set statement date for non credit card account",
"cannot set statement date for sub account": "Cannot set statement date for sub-account",
"transaction id is invalid": "Transaction ID is invalid", "transaction id is invalid": "Transaction ID is invalid",
"transaction not found": "Transaction is not found", "transaction not found": "Transaction is not found",
"transaction type is invalid": "Transaction type is invalid", "transaction type is invalid": "Transaction type is invalid",
+1
View File
@@ -1062,6 +1062,7 @@
"account category is invalid": "Danh mục tài khoản không hợp lệ", "account category is invalid": "Danh mục tài khoản không hợp lệ",
"account balance time is not set": "Thời gian số dư tài khoản chưa được đặt", "account balance time is not set": "Thời gian số dư tài khoản chưa được đặt",
"cannot set statement date for non credit card account": "Cannot set statement date for non credit card account", "cannot set statement date for non credit card account": "Cannot set statement date for non credit card account",
"cannot set statement date for sub account": "Cannot set statement date for sub-account",
"transaction id is invalid": "ID giao dịch không hợp lệ", "transaction id is invalid": "ID giao dịch không hợp lệ",
"transaction not found": "Không tìm thấy giao dịch", "transaction not found": "Không tìm thấy giao dịch",
"transaction type is invalid": "Loại giao dịch không hợp lệ", "transaction type is invalid": "Loại giao dịch không hợp lệ",
+1
View File
@@ -1062,6 +1062,7 @@
"account category is invalid": "账户分类无效", "account category is invalid": "账户分类无效",
"account balance time is not set": "账户余额时间没有设置", "account balance time is not set": "账户余额时间没有设置",
"cannot set statement date for non credit card account": "非信用卡账户不能设置账单日期", "cannot set statement date for non credit card account": "非信用卡账户不能设置账单日期",
"cannot set statement date for sub account": "子账户不能设置账单日期",
"transaction id is invalid": "交易ID无效", "transaction id is invalid": "交易ID无效",
"transaction not found": "交易不存在", "transaction not found": "交易不存在",
"transaction type is invalid": "交易类型无效", "transaction type is invalid": "交易类型无效",
-5
View File
@@ -285,7 +285,6 @@ export const useAccountsStore = defineStore('accounts', {
balance: 0, balance: 0,
balanceTime: now, balanceTime: now,
comment: '', comment: '',
creditCardStatementDate: parentAccount.creditCardStatementDate,
visible: true visible: true
}; };
}, },
@@ -762,10 +761,6 @@ export const useAccountsStore = defineStore('accounts', {
comment: subAccount.comment comment: subAccount.comment
}; };
if (account.category === accountConstants.creditCardCategoryType) {
submitAccount.creditCardStatementDate = subAccount.creditCardStatementDate;
}
if (isEdit) { if (isEdit) {
submitAccount.id = subAccount.id; submitAccount.id = subAccount.id;
submitAccount.hidden = !subAccount.visible; submitAccount.hidden = !subAccount.visible;
@@ -108,7 +108,7 @@
:disabled="loading || submitting" :disabled="loading || submitting"
v-model="selectedAccount.color" /> v-model="selectedAccount.color" />
</v-col> </v-col>
<v-col cols="12" :md="isAccountSupportCreditCardStatementDate() ? 6 : 12" v-if="account.type === allAccountTypes.SingleAccount || currentAccountIndex >= 0"> <v-col cols="12" :md="currentAccountIndex < 0 && isAccountSupportCreditCardStatementDate() ? 6 : 12" v-if="account.type === allAccountTypes.SingleAccount || currentAccountIndex >= 0">
<v-autocomplete <v-autocomplete
item-title="displayName" item-title="displayName"
item-value="currencyCode" item-value="currencyCode"
@@ -126,7 +126,7 @@
</template> </template>
</v-autocomplete> </v-autocomplete>
</v-col> </v-col>
<v-col cols="12" :md="account.type === allAccountTypes.SingleAccount || currentAccountIndex >= 0 ? 6 : 12" v-if="isAccountSupportCreditCardStatementDate()"> <v-col cols="12" :md="account.type === allAccountTypes.SingleAccount || currentAccountIndex >= 0 ? 6 : 12" v-if="currentAccountIndex < 0 && isAccountSupportCreditCardStatementDate()">
<v-autocomplete <v-autocomplete
item-title="displayName" item-title="displayName"
item-value="day" item-value="day"
@@ -137,7 +137,7 @@
:placeholder="$t('Statement Date')" :placeholder="$t('Statement Date')"
:items="allAvailableMonthDays" :items="allAvailableMonthDays"
:no-data-text="$t('No results')" :no-data-text="$t('No results')"
v-model="selectedAccount.creditCardStatementDate" v-model="account.creditCardStatementDate"
></v-autocomplete> ></v-autocomplete>
</v-col> </v-col>
<v-col cols="12" :md="!editAccountId && selectedAccount.balance ? 6 : 12" <v-col cols="12" :md="!editAccountId && selectedAccount.balance ? 6 : 12"
-14
View File
@@ -415,20 +415,6 @@
</select> </select>
</f7-list-item> </f7-list-item>
<f7-list-item
class="list-item-with-header-and-title list-item-no-item-after"
:header="$t('Statement Date')"
:title="getAccountCreditCardStatementDate(subAccount.creditCardStatementDate)"
smart-select :smart-select-params="{ openIn: 'popup', popupPush: true, closeOnSelect: true, scrollToSelectedItem: true, searchbar: true, searchbarPlaceholder: $t('Statement Date'), searchbarDisableText: $t('Cancel'), appendSearchbarNotFound: $t('No results'), pageTitle: $t('Statement Date'), popupCloseLinkText: $t('Done') }"
v-if="isAccountSupportCreditCardStatementDate()"
>
<select v-model="subAccount.creditCardStatementDate">
<option :value="monthDay.day"
:key="monthDay.day"
v-for="monthDay in allAvailableMonthDays">{{ monthDay.displayName }}</option>
</select>
</f7-list-item>
<f7-list-item <f7-list-item
link="#" no-chevron link="#" no-chevron
class="list-item-with-header-and-title" class="list-item-with-header-and-title"