modify balance modification transaction

This commit is contained in:
MaysWind
2025-08-10 17:00:08 +08:00
parent 55bf8b9e30
commit f3d240442b
6 changed files with 25 additions and 7 deletions
+10 -2
View File
@@ -809,7 +809,7 @@ func (a *TransactionsApi) TransactionCreateHandler(c *core.WebContext) (any, *er
return nil, errs.ErrTransactionTypeInvalid return nil, errs.ErrTransactionTypeInvalid
} }
if transactionCreateReq.Type == models.TRANSACTION_TYPE_MODIFY_BALANCE && transactionCreateReq.CategoryId > 0 { if transactionCreateReq.Type == models.TRANSACTION_TYPE_MODIFY_BALANCE && transactionCreateReq.CategoryId != 0 {
log.Warnf(c, "[transactions.TransactionCreateHandler] balance modification transaction cannot set category id") log.Warnf(c, "[transactions.TransactionCreateHandler] balance modification transaction cannot set category id")
return nil, errs.ErrBalanceModificationTransactionCannotSetCategory return nil, errs.ErrBalanceModificationTransactionCannotSetCategory
} }
@@ -957,6 +957,14 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.WebContext) (any, *er
return nil, errs.ErrTransactionTypeInvalid return nil, errs.ErrTransactionTypeInvalid
} }
if transaction.Type == models.TRANSACTION_DB_TYPE_MODIFY_BALANCE && transactionModifyReq.CategoryId != 0 {
log.Warnf(c, "[transactions.TransactionModifyHandler] balance modification transaction cannot set category id")
return nil, errs.ErrBalanceModificationTransactionCannotSetCategory
} else if transaction.Type != models.TRANSACTION_DB_TYPE_MODIFY_BALANCE && transactionModifyReq.CategoryId == 0 {
log.Warnf(c, "[transactions.TransactionModifyHandler] non-balance modification transaction must set category id")
return nil, errs.ErrIncompleteOrIncorrectSubmission
}
allTransactionTagIds, err := a.transactionTags.GetAllTagIdsOfTransactions(c, uid, []int64{transaction.TransactionId}) allTransactionTagIds, err := a.transactionTags.GetAllTagIdsOfTransactions(c, uid, []int64{transaction.TransactionId})
if err != nil { if err != nil {
@@ -1498,7 +1506,7 @@ func (a *TransactionsApi) TransactionImportHandler(c *core.WebContext) (any, *er
return nil, errs.ErrTransactionTypeInvalid return nil, errs.ErrTransactionTypeInvalid
} }
if transactionCreateReq.Type == models.TRANSACTION_TYPE_MODIFY_BALANCE && transactionCreateReq.CategoryId > 0 { if transactionCreateReq.Type == models.TRANSACTION_TYPE_MODIFY_BALANCE && transactionCreateReq.CategoryId != 0 {
log.Warnf(c, "[transactions.TransactionImportHandler] balance modification transaction \"index:%d\" cannot set category id", i) log.Warnf(c, "[transactions.TransactionImportHandler] balance modification transaction \"index:%d\" cannot set category id", i)
return nil, errs.ErrBalanceModificationTransactionCannotSetCategory return nil, errs.ErrBalanceModificationTransactionCannotSetCategory
} }
+1 -1
View File
@@ -1002,7 +1002,7 @@ func (s *TransactionService) ModifyTransaction(c core.Context, transaction *mode
return errs.ErrBalanceModificationTransactionCannotChangeAccountId return errs.ErrBalanceModificationTransactionCannotChangeAccountId
} }
if transaction.RelatedAccountAmount != oldTransaction.RelatedAccountAmount { if transaction.Amount != oldTransaction.Amount && transaction.RelatedAccountAmount != oldTransaction.RelatedAccountAmount {
sourceAccount.UpdatedUnixTime = time.Now().Unix() sourceAccount.UpdatedUnixTime = time.Now().Unix()
updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)+(%d)", oldTransaction.RelatedAccountAmount, transaction.RelatedAccountAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount) updatedRows, err := sess.ID(sourceAccount.AccountId).SetExpr("balance", fmt.Sprintf("balance-(%d)+(%d)", oldTransaction.RelatedAccountAmount, transaction.RelatedAccountAmount)).Cols("updated_unix_time").Where("uid=? AND deleted=?", sourceAccount.Uid, false).Update(sourceAccount)
+7 -1
View File
@@ -246,9 +246,15 @@ export class Transaction implements TransactionInfoResponse {
} }
public toModifyRequest(actualTime?: number): TransactionModifyRequest { public toModifyRequest(actualTime?: number): TransactionModifyRequest {
let categoryId = this.getCategoryId();
if (this.type === TransactionType.ModifyBalance) {
categoryId = '0';
}
return { return {
id: this.id, id: this.id,
categoryId: this.getCategoryId(), categoryId: categoryId,
time: actualTime ? actualTime : this.time, time: actualTime ? actualTime : this.time,
utcOffset: this.utcOffset, utcOffset: this.utcOffset,
sourceAccountId: this.sourceAccountId, sourceAccountId: this.sourceAccountId,
+5 -1
View File
@@ -1050,7 +1050,11 @@ export const useTransactionsStore = defineStore('transactions', () => {
if (transaction.type !== TransactionType.Expense && if (transaction.type !== TransactionType.Expense &&
transaction.type !== TransactionType.Income && transaction.type !== TransactionType.Income &&
transaction.type !== TransactionType.Transfer) { transaction.type !== TransactionType.Transfer &&
transaction.type !== TransactionType.ModifyBalance) {
reject({ message: 'An error occurred' });
return;
} else if (!isEdit && transaction.type === TransactionType.ModifyBalance) {
reject({ message: 'An error occurred' }); reject({ message: 'An error occurred' });
return; return;
} }
@@ -480,7 +480,7 @@
</v-btn> </v-btn>
</v-btn-group> </v-btn-group>
<v-btn color="warning" variant="tonal" :disabled="loading || submitting" <v-btn color="warning" variant="tonal" :disabled="loading || submitting"
v-if="mode === TransactionEditPageMode.View && originalTransactionEditable && transaction.type !== TransactionType.ModifyBalance" v-if="mode === TransactionEditPageMode.View && originalTransactionEditable"
@click="edit">{{ tt('Edit') }}</v-btn> @click="edit">{{ tt('Edit') }}</v-btn>
<v-btn color="error" variant="tonal" :disabled="loading || submitting" <v-btn color="error" variant="tonal" :disabled="loading || submitting"
v-if="mode === TransactionEditPageMode.View && originalTransactionEditable" @click="remove"> v-if="mode === TransactionEditPageMode.View && originalTransactionEditable" @click="remove">
+1 -1
View File
@@ -299,7 +299,7 @@
@click="duplicate(transaction)"></f7-swipeout-button> @click="duplicate(transaction)"></f7-swipeout-button>
<f7-swipeout-button color="orange" close <f7-swipeout-button color="orange" close
:text="tt('Edit')" :text="tt('Edit')"
v-if="transaction.editable && transaction.type !== TransactionType.ModifyBalance" v-if="transaction.editable"
@click="edit(transaction)"></f7-swipeout-button> @click="edit(transaction)"></f7-swipeout-button>
<f7-swipeout-button color="red" class="padding-left padding-right" <f7-swipeout-button color="red" class="padding-left padding-right"
v-if="transaction.editable" v-if="transaction.editable"