mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-21 02:04:26 +08:00
support modify transaction
This commit is contained in:
@@ -17,5 +17,4 @@ var (
|
|||||||
ErrCannotAddTransactionToHiddenAccount = NewNormalError(NormalSubcategoryTransaction, 10, http.StatusBadRequest, "cannot add transaction to hidden account")
|
ErrCannotAddTransactionToHiddenAccount = NewNormalError(NormalSubcategoryTransaction, 10, http.StatusBadRequest, "cannot add transaction to hidden account")
|
||||||
ErrCannotModifyTransactionInHiddenAccount = NewNormalError(NormalSubcategoryTransaction, 11, http.StatusBadRequest, "cannot modify transaction of hidden account")
|
ErrCannotModifyTransactionInHiddenAccount = NewNormalError(NormalSubcategoryTransaction, 11, http.StatusBadRequest, "cannot modify transaction of hidden account")
|
||||||
ErrCannotDeleteTransactionInHiddenAccount = NewNormalError(NormalSubcategoryTransaction, 12, http.StatusBadRequest, "cannot delete transaction in hidden account")
|
ErrCannotDeleteTransactionInHiddenAccount = NewNormalError(NormalSubcategoryTransaction, 12, http.StatusBadRequest, "cannot delete transaction in hidden account")
|
||||||
ErrCannotModifyTransactionType = NewNormalError(NormalSubcategoryTransaction, 13, http.StatusBadRequest, "cannot modify transaction type")
|
|
||||||
)
|
)
|
||||||
|
|||||||
+123
-46
@@ -338,10 +338,7 @@ func (s *TransactionService) ModifyTransaction(transaction *models.Transaction,
|
|||||||
return errs.ErrTransactionNotFound
|
return errs.ErrTransactionNotFound
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cannot change transaction type
|
transaction.Type = oldTransaction.Type
|
||||||
if transaction.Type != oldTransaction.Type {
|
|
||||||
return errs.ErrCannotModifyTransactionType
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check whether account id is valid
|
// Check whether account id is valid
|
||||||
err = s.isAccountIdValid(transaction)
|
err = s.isAccountIdValid(transaction)
|
||||||
@@ -472,11 +469,11 @@ func (s *TransactionService) ModifyTransaction(transaction *models.Transaction,
|
|||||||
|
|
||||||
// Update account table
|
// Update account table
|
||||||
if oldTransaction.Type == models.TRANSACTION_TYPE_MODIFY_BALANCE {
|
if oldTransaction.Type == models.TRANSACTION_TYPE_MODIFY_BALANCE {
|
||||||
if transaction.SourceAccountId != oldTransaction.SourceAccountId {
|
if transaction.DestinationAccountId != oldTransaction.DestinationAccountId {
|
||||||
return errs.ErrBalanceModificationTransactionCannotChangeAccountId
|
return errs.ErrBalanceModificationTransactionCannotChangeAccountId
|
||||||
}
|
}
|
||||||
|
|
||||||
if transaction.SourceAmount != oldTransaction.SourceAmount {
|
if transaction.DestinationAmount != oldTransaction.DestinationAmount {
|
||||||
destinationAccount.UpdatedUnixTime = time.Now().Unix()
|
destinationAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
updatedRows, err := sess.ID(destinationAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)+(%d)", oldTransaction.DestinationAmount, transaction.DestinationAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", destinationAccount.Uid, false).Update(destinationAccount)
|
updatedRows, err := sess.ID(destinationAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)+(%d)", oldTransaction.DestinationAmount, transaction.DestinationAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", destinationAccount.Uid, false).Update(destinationAccount)
|
||||||
|
|
||||||
@@ -487,48 +484,128 @@ func (s *TransactionService) ModifyTransaction(transaction *models.Transaction,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if oldTransaction.Type == models.TRANSACTION_TYPE_INCOME {
|
} else if oldTransaction.Type == models.TRANSACTION_TYPE_INCOME {
|
||||||
if transaction.SourceAccountId != oldTransaction.SourceAccountId && transaction.DestinationAmount != oldTransaction.DestinationAmount {
|
var oldAccountNewAmount int64 = 0
|
||||||
// TODO: implement
|
var newAccountNewAmount int64 = 0
|
||||||
return errs.ErrNotImplemented
|
|
||||||
} else if transaction.SourceAccountId != oldTransaction.SourceAccountId && transaction.DestinationAmount == oldTransaction.DestinationAmount {
|
if transaction.DestinationAccountId == oldTransaction.DestinationAccountId {
|
||||||
// TODO: implement
|
oldAccountNewAmount = transaction.DestinationAmount
|
||||||
return errs.ErrNotImplemented
|
} else if transaction.DestinationAccountId != oldTransaction.DestinationAccountId {
|
||||||
} else if transaction.SourceAccountId == oldTransaction.SourceAccountId && transaction.DestinationAmount != oldTransaction.DestinationAmount {
|
newAccountNewAmount = transaction.DestinationAmount
|
||||||
// TODO: implement
|
|
||||||
return errs.ErrNotImplemented
|
|
||||||
}
|
|
||||||
} else if oldTransaction.Type == models.TRANSACTION_TYPE_EXPENSE {
|
|
||||||
if transaction.SourceAccountId != oldTransaction.SourceAccountId && transaction.DestinationAmount != oldTransaction.DestinationAmount {
|
|
||||||
// TODO: implement
|
|
||||||
return errs.ErrNotImplemented
|
|
||||||
} else if transaction.SourceAccountId != oldTransaction.SourceAccountId && transaction.DestinationAmount == oldTransaction.DestinationAmount {
|
|
||||||
// TODO: implement
|
|
||||||
return errs.ErrNotImplemented
|
|
||||||
} else if transaction.SourceAccountId == oldTransaction.SourceAccountId && transaction.DestinationAmount != oldTransaction.DestinationAmount {
|
|
||||||
// TODO: implement
|
|
||||||
return errs.ErrNotImplemented
|
|
||||||
}
|
|
||||||
} else if oldTransaction.Type == models.TRANSACTION_TYPE_TRANSFER {
|
|
||||||
if transaction.SourceAccountId != oldTransaction.SourceAccountId && transaction.SourceAmount != oldTransaction.SourceAmount {
|
|
||||||
// TODO: implement
|
|
||||||
return errs.ErrNotImplemented
|
|
||||||
} else if transaction.SourceAccountId != oldTransaction.SourceAccountId && transaction.SourceAmount == oldTransaction.SourceAmount {
|
|
||||||
// TODO: implement
|
|
||||||
return errs.ErrNotImplemented
|
|
||||||
} else if transaction.SourceAccountId == oldTransaction.SourceAccountId && transaction.SourceAmount != oldTransaction.SourceAmount {
|
|
||||||
// TODO: implement
|
|
||||||
return errs.ErrNotImplemented
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if transaction.DestinationAccountId != oldTransaction.DestinationAccountId && transaction.DestinationAmount != oldTransaction.DestinationAmount {
|
if oldAccountNewAmount != oldTransaction.DestinationAmount {
|
||||||
// TODO: implement
|
oldDestinationAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
return errs.ErrNotImplemented
|
updatedRows, err := sess.ID(oldDestinationAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)+(%d)", oldTransaction.DestinationAmount, oldAccountNewAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", oldDestinationAccount.Uid, false).Update(oldDestinationAccount)
|
||||||
} else if transaction.DestinationAccountId != oldTransaction.DestinationAccountId && transaction.DestinationAmount == oldTransaction.DestinationAmount {
|
|
||||||
// TODO: implement
|
if err != nil {
|
||||||
return errs.ErrNotImplemented
|
return err
|
||||||
} else if transaction.DestinationAccountId == oldTransaction.DestinationAccountId && transaction.DestinationAmount != oldTransaction.DestinationAmount {
|
} else if updatedRows < 1 {
|
||||||
// TODO: implement
|
return errs.ErrDatabaseOperationFailed
|
||||||
return errs.ErrNotImplemented
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if newAccountNewAmount != 0 {
|
||||||
|
destinationAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedRows, err := sess.ID(destinationAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)", newAccountNewAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", destinationAccount.Uid, false).Update(destinationAccount)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
} else if updatedRows < 1 {
|
||||||
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if oldTransaction.Type == models.TRANSACTION_TYPE_EXPENSE {
|
||||||
|
var oldAccountNewAmount int64 = 0
|
||||||
|
var newAccountNewAmount int64 = 0
|
||||||
|
|
||||||
|
if transaction.DestinationAccountId == oldTransaction.DestinationAccountId {
|
||||||
|
oldAccountNewAmount = transaction.DestinationAmount
|
||||||
|
} else if transaction.DestinationAccountId != oldTransaction.DestinationAccountId {
|
||||||
|
newAccountNewAmount = transaction.DestinationAmount
|
||||||
|
}
|
||||||
|
|
||||||
|
if oldAccountNewAmount != oldTransaction.DestinationAmount {
|
||||||
|
oldDestinationAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedRows, err := sess.ID(oldDestinationAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)-(%d)", oldTransaction.DestinationAmount, oldAccountNewAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", oldDestinationAccount.Uid, false).Update(oldDestinationAccount)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
} else if updatedRows < 1 {
|
||||||
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if newAccountNewAmount != 0 {
|
||||||
|
destinationAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedRows, err := sess.ID(destinationAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)", newAccountNewAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", destinationAccount.Uid, false).Update(destinationAccount)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
} else if updatedRows < 1 {
|
||||||
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if oldTransaction.Type == models.TRANSACTION_TYPE_TRANSFER {
|
||||||
|
var oldSourceAccountNewAmount int64 = 0
|
||||||
|
var newSourceAccountNewAmount int64 = 0
|
||||||
|
|
||||||
|
if transaction.SourceAccountId == oldTransaction.SourceAccountId {
|
||||||
|
oldSourceAccountNewAmount = transaction.SourceAmount
|
||||||
|
} else if transaction.SourceAccountId != oldTransaction.SourceAccountId {
|
||||||
|
newSourceAccountNewAmount = transaction.SourceAmount
|
||||||
|
}
|
||||||
|
|
||||||
|
if oldSourceAccountNewAmount != oldTransaction.SourceAmount {
|
||||||
|
oldSourceAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedRows, err := sess.ID(oldSourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)-(%d)", oldTransaction.SourceAmount, oldSourceAccountNewAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", oldSourceAccount.Uid, false).Update(oldSourceAccount)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
} else if updatedRows < 1 {
|
||||||
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if newSourceAccountNewAmount != 0 {
|
||||||
|
sourceAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)", newSourceAccountNewAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
} else if updatedRows < 1 {
|
||||||
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var oldDestinationAccountNewAmount int64 = 0
|
||||||
|
var newDestinationAccountNewAmount int64 = 0
|
||||||
|
|
||||||
|
if transaction.DestinationAccountId == oldTransaction.DestinationAccountId {
|
||||||
|
oldDestinationAccountNewAmount = transaction.DestinationAmount
|
||||||
|
} else if transaction.DestinationAccountId != oldTransaction.DestinationAccountId {
|
||||||
|
newDestinationAccountNewAmount = transaction.DestinationAmount
|
||||||
|
}
|
||||||
|
|
||||||
|
if oldDestinationAccountNewAmount != oldTransaction.DestinationAmount {
|
||||||
|
oldDestinationAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedRows, err := sess.ID(oldDestinationAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)+(%d)", oldTransaction.DestinationAmount, oldDestinationAccountNewAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", oldDestinationAccount.Uid, false).Update(oldDestinationAccount)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
} else if updatedRows < 1 {
|
||||||
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if newDestinationAccountNewAmount != 0 {
|
||||||
|
destinationAccount.UpdatedUnixTime = time.Now().Unix()
|
||||||
|
updatedRows, err := sess.ID(destinationAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance+(%d)", newDestinationAccountNewAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", destinationAccount.Uid, false).Update(destinationAccount)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
} else if updatedRows < 1 {
|
||||||
|
return errs.ErrDatabaseOperationFailed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -320,7 +320,6 @@ export default {
|
|||||||
'cannot add transaction to hidden account': 'You cannot add transaction to an hidden 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 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',
|
'cannot delete transaction in hidden account': 'You cannot delete transaction in an hidden account',
|
||||||
'cannot modify transaction type': 'You cannot modify transaction type',
|
|
||||||
'transaction category id is invalid': 'Transaction category ID is invalid',
|
'transaction category id is invalid': 'Transaction category ID is invalid',
|
||||||
'transaction category not found': 'Transaction category is not found',
|
'transaction category not found': 'Transaction category is not found',
|
||||||
'transaction category type is invalid': 'Transaction category type is invalid',
|
'transaction category type is invalid': 'Transaction category type is invalid',
|
||||||
|
|||||||
@@ -320,7 +320,6 @@ export default {
|
|||||||
'cannot add transaction to hidden account': '您不能在隐藏账户中添加交易',
|
'cannot add transaction to hidden account': '您不能在隐藏账户中添加交易',
|
||||||
'cannot modify transaction of hidden account': '您不能修改隐藏账户中的交易',
|
'cannot modify transaction of hidden account': '您不能修改隐藏账户中的交易',
|
||||||
'cannot delete transaction in hidden account': '您不能删除隐藏账户中的交易',
|
'cannot delete transaction in hidden account': '您不能删除隐藏账户中的交易',
|
||||||
'cannot modify transaction type': '您不能修改交易类型',
|
|
||||||
'transaction category id is invalid': '交易分类ID无效',
|
'transaction category id is invalid': '交易分类ID无效',
|
||||||
'transaction category not found': '交易分类不存在',
|
'transaction category not found': '交易分类不存在',
|
||||||
'transaction category type is invalid': '交易分类类型无效',
|
'transaction category type is invalid': '交易分类类型无效',
|
||||||
|
|||||||
Reference in New Issue
Block a user