mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-17 16:24:25 +08:00
sub account cannot set statement date
This commit is contained in:
+25
-25
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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")
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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ệ",
|
||||||
|
|||||||
@@ -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": "交易类型无效",
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user