support changing tags order when editing transaction
This commit is contained in:
@@ -320,8 +320,6 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.Context) (interface{}
|
||||
}
|
||||
|
||||
transactionTagIds := allTransactionTagIds[transaction.TransactionId]
|
||||
addTransactionTagIds := utils.Int64SliceMinus(tagIds, transactionTagIds)
|
||||
removeTransactionTagIds := utils.Int64SliceMinus(transactionTagIds, tagIds)
|
||||
|
||||
newTransaction := &models.Transaction{
|
||||
TransactionId: transaction.TransactionId,
|
||||
@@ -345,11 +343,18 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.Context) (interface{}
|
||||
(transaction.Type != models.TRANSACTION_DB_TYPE_TRANSFER_OUT || newTransaction.RelatedAccountId == transaction.RelatedAccountId) &&
|
||||
(transaction.Type != models.TRANSACTION_DB_TYPE_TRANSFER_OUT || newTransaction.RelatedAccountAmount == transaction.RelatedAccountAmount) &&
|
||||
newTransaction.Comment == transaction.Comment &&
|
||||
len(addTransactionTagIds) < 1 &&
|
||||
len(removeTransactionTagIds) < 1 {
|
||||
utils.Int64SliceEquals(tagIds, transactionTagIds) {
|
||||
return nil, errs.ErrNothingWillBeUpdated
|
||||
}
|
||||
|
||||
var addTransactionTagIds []int64
|
||||
var removeTransactionTagIds []int64
|
||||
|
||||
if !utils.Int64SliceEquals(tagIds, transactionTagIds) {
|
||||
removeTransactionTagIds = transactionTagIds
|
||||
addTransactionTagIds = tagIds
|
||||
}
|
||||
|
||||
err = a.transactions.ModifyTransaction(newTransaction, addTransactionTagIds, removeTransactionTagIds)
|
||||
|
||||
if err != nil {
|
||||
|
||||
@@ -1,5 +1,24 @@
|
||||
package utils
|
||||
|
||||
// Int64SliceEquals returns whether specific two int64 arrays equal
|
||||
func Int64SliceEquals(s1, s2 []int64) bool {
|
||||
if (s1 == nil) != (s2 == nil) {
|
||||
return false
|
||||
}
|
||||
|
||||
if len(s1) != len(s2) {
|
||||
return false
|
||||
}
|
||||
|
||||
for i := 0; i < len(s1); i++ {
|
||||
if s1[i] != s2[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
// Int64SliceMinus returns a int64 array which contains items in s1 but not in s2
|
||||
func Int64SliceMinus(s1, s2 []int64) []int64 {
|
||||
if s1 == nil {
|
||||
|
||||
Reference in New Issue
Block a user