diff --git a/pkg/errs/transaction.go b/pkg/errs/transaction.go index 4fa7d92a..c39333b0 100644 --- a/pkg/errs/transaction.go +++ b/pkg/errs/transaction.go @@ -13,4 +13,7 @@ var ( ErrBalanceModificationTransactionCannotSetCategory = NewNormalError(NORMAL_SUBCATEGORY_TRANSACTION, 7, http.StatusBadRequest, "balance modification transaction cannot set category") ErrBalanceModificationTransactionCannotChangeAccountId = NewNormalError(NORMAL_SUBCATEGORY_TRANSACTION, 8, http.StatusBadRequest, "balance modification transaction cannot change account id") ErrBalanceModificationTransactionCannotAddWhenNotEmpty = NewNormalError(NORMAL_SUBCATEGORY_TRANSACTION, 9, http.StatusBadRequest, "balance modification transaction cannot add when other transaction exists") + ErrCannotAddTransactionToHiddenAccount = NewNormalError(NORMAL_SUBCATEGORY_TRANSACTION, 10, http.StatusBadRequest, "cannot add transaction to hidden account") + ErrCannotModifyTransactionInHiddenAccount = NewNormalError(NORMAL_SUBCATEGORY_TRANSACTION, 11, http.StatusBadRequest, "cannot modify transaction of hidden account") + ErrCannotDeleteTransactionInHiddenAccount = NewNormalError(NORMAL_SUBCATEGORY_TRANSACTION, 12, http.StatusBadRequest, "cannot delete transaction in hidden account") ) diff --git a/pkg/services/transactions.go b/pkg/services/transactions.go index f7ee693e..be32847e 100644 --- a/pkg/services/transactions.go +++ b/pkg/services/transactions.go @@ -159,6 +159,8 @@ func (s *TransactionService) CreateTransaction(transaction *models.Transaction) return err } else if !has { return errs.ErrSourceAccountNotFound + } else if sourceAccount.Hidden { + return errs.ErrCannotAddTransactionToHiddenAccount } if transaction.DestinationAccountId == transaction.SourceAccountId { @@ -170,6 +172,8 @@ func (s *TransactionService) CreateTransaction(transaction *models.Transaction) return err } else if !has { return errs.ErrDestinationAccountNotFound + } else if destinationAccount.Hidden { + return errs.ErrCannotAddTransactionToHiddenAccount } } @@ -336,28 +340,27 @@ func (s *TransactionService) ModifyTransaction(transaction *models.Transaction) // Get and verify source and destination account (if necessary) sourceAccount := &models.Account{} destinationAccount := &models.Account{} + has, err = sess.ID(transaction.SourceAccountId).Where("uid=? AND deleted=?", transaction.Uid, false).Get(sourceAccount) - if transaction.SourceAccountId != oldTransaction.SourceAccountId || transaction.SourceAmount != oldTransaction.SourceAmount { - has, err := sess.ID(transaction.SourceAccountId).Where("uid=? AND deleted=?", transaction.Uid, false).Get(sourceAccount) + if err != nil { + return err + } else if !has { + return errs.ErrSourceAccountNotFound + } else if sourceAccount.Hidden { + return errs.ErrCannotModifyTransactionInHiddenAccount + } + + if transaction.DestinationAccountId == transaction.SourceAccountId { + destinationAccount = sourceAccount + } else { + has, err = sess.ID(transaction.DestinationAccountId).Where("uid=? AND deleted=?", transaction.Uid, false).Get(destinationAccount) if err != nil { return err } else if !has { - return errs.ErrSourceAccountNotFound - } - } - - if transaction.DestinationAccountId != oldTransaction.DestinationAccountId || transaction.DestinationAmount != oldTransaction.DestinationAmount { - if transaction.DestinationAccountId == transaction.SourceAccountId { - destinationAccount = sourceAccount - } else { - has, err := sess.ID(transaction.DestinationAccountId).Where("uid=? AND deleted=?", transaction.Uid, false).Get(destinationAccount) - - if err != nil { - return err - } else if !has { - return errs.ErrDestinationAccountNotFound - } + return errs.ErrDestinationAccountNotFound + } else if destinationAccount.Hidden { + return errs.ErrCannotModifyTransactionInHiddenAccount } } @@ -545,6 +548,8 @@ func (s *TransactionService) DeleteTransaction(uid int64, transactionId int64) e return err } else if !has { return errs.ErrSourceAccountNotFound + } else if sourceAccount.Hidden { + return errs.ErrCannotDeleteTransactionInHiddenAccount } if oldTransaction.DestinationAccountId == oldTransaction.SourceAccountId { @@ -556,6 +561,8 @@ func (s *TransactionService) DeleteTransaction(uid int64, transactionId int64) e return err } else if !has { return errs.ErrDestinationAccountNotFound + } else if destinationAccount.Hidden { + return errs.ErrCannotDeleteTransactionInHiddenAccount } } diff --git a/src/locales/en.js b/src/locales/en.js index 0e99f15a..1adad589 100644 --- a/src/locales/en.js +++ b/src/locales/en.js @@ -315,6 +315,9 @@ export default { 'balance modification transaction cannot set category': 'You cannot set category for balance modification transaction', 'balance modification transaction cannot change account id': 'You cannot change account ID for balance modification transaction', 'balance modification transaction cannot add when other transaction exists': 'You cannot add balance modification transaction when other transaction already exists in this account', + 'cannot add transaction to hidden account': 'You cannot add transaction to an hidden account', + 'cannot modify transaction of hidden account': 'You cannot modify transaction of an hidden account', + 'cannot delete transaction in hidden account': 'You cannot delete transaction in an hidden account', 'transaction category id is invalid': 'Transaction category ID is invalid', 'transaction category not found': 'Transaction category is not found', 'transaction category type is invalid': 'Transaction category type is invalid', diff --git a/src/locales/zh_Hans.js b/src/locales/zh_Hans.js index 90b5d915..3cd18206 100644 --- a/src/locales/zh_Hans.js +++ b/src/locales/zh_Hans.js @@ -315,6 +315,9 @@ export default { 'balance modification transaction cannot set category': '您无法对修改余额的交易设置分类', 'balance modification transaction cannot change account id': '您无法对修改余额的交易修改账户ID', 'balance modification transaction cannot add when other transaction exists': '您不能在该账户已经存在其他交易时添加余额修改交易', + 'cannot add transaction to hidden account': '您不能在隐藏账户中添加交易', + 'cannot modify transaction of hidden account': '您不能修改隐藏账户中的交易', + 'cannot delete transaction in hidden account': '您不能删除隐藏账户中的交易', 'transaction category id is invalid': '交易分类ID无效', 'transaction category not found': '交易分类不存在', 'transaction category type is invalid': '交易分类类型无效',