From 4ec59bd0bd49b20ebdc34135d83c53e2baa75f34 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Wed, 28 Apr 2021 23:37:02 +0800 Subject: [PATCH] support hiding transaction amount --- pkg/api/transactions.go | 3 +++ pkg/models/transaction.go | 5 +++++ pkg/services/transactions.go | 4 ++++ src/lib/services.js | 6 ++++-- src/locales/en.js | 2 ++ src/locales/zh_Hans.js | 2 ++ src/views/mobile/transactions/Edit.vue | 26 ++++++++++++++++++++++++-- src/views/mobile/transactions/List.vue | 11 +++++++++-- 8 files changed, 53 insertions(+), 6 deletions(-) diff --git a/pkg/api/transactions.go b/pkg/api/transactions.go index 30612a46..f09de747 100644 --- a/pkg/api/transactions.go +++ b/pkg/api/transactions.go @@ -693,6 +693,7 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.Context) (interface{} TimezoneUtcOffset: transactionModifyReq.UtcOffset, AccountId: transactionModifyReq.SourceAccountId, Amount: transactionModifyReq.SourceAmount, + HideAmount: transactionModifyReq.HideAmount, Comment: transactionModifyReq.Comment, } @@ -708,6 +709,7 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.Context) (interface{} newTransaction.Amount == transaction.Amount && (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.HideAmount == transaction.HideAmount && newTransaction.Comment == transaction.Comment && utils.Int64SliceEquals(tagIds, transactionTagIds) { return nil, errs.ErrNothingWillBeUpdated @@ -992,6 +994,7 @@ func (a *TransactionsApi) createNewTransactionModel(uid int64, transactionCreate TimezoneUtcOffset: transactionCreateReq.UtcOffset, AccountId: transactionCreateReq.SourceAccountId, Amount: transactionCreateReq.SourceAmount, + HideAmount: transactionCreateReq.HideAmount, Comment: transactionCreateReq.Comment, } diff --git a/pkg/models/transaction.go b/pkg/models/transaction.go index a6ff91f3..933b0e01 100644 --- a/pkg/models/transaction.go +++ b/pkg/models/transaction.go @@ -46,6 +46,7 @@ type Transaction struct { RelatedId int64 `xorm:"NOT NULL"` RelatedAccountId int64 `xorm:"NOT NULL"` RelatedAccountAmount int64 `xorm:"NOT NULL"` + HideAmount bool `xorm:"NOT NULL"` Comment string `xorm:"VARCHAR(255) NOT NULL"` CreatedUnixTime int64 UpdatedUnixTime int64 @@ -62,6 +63,7 @@ type TransactionCreateRequest struct { DestinationAccountId int64 `json:"destinationAccountId,string" binding:"min=0"` SourceAmount int64 `json:"sourceAmount" binding:"min=-99999999999,max=99999999999"` DestinationAmount int64 `json:"destinationAmount" binding:"min=-99999999999,max=99999999999"` + HideAmount bool `json:"hideAmount"` TagIds []string `json:"tagIds"` Comment string `json:"comment" binding:"max=255"` } @@ -76,6 +78,7 @@ type TransactionModifyRequest struct { DestinationAccountId int64 `json:"destinationAccountId,string" binding:"min=0"` SourceAmount int64 `json:"sourceAmount" binding:"min=-99999999999,max=99999999999"` DestinationAmount int64 `json:"destinationAmount" binding:"min=-99999999999,max=99999999999"` + HideAmount bool `json:"hideAmount"` TagIds []string `json:"tagIds"` Comment string `json:"comment" binding:"max=255"` } @@ -181,6 +184,7 @@ type TransactionInfoResponse struct { DestinationAccount *AccountInfoResponse `json:"destinationAccount,omitempty"` SourceAmount int64 `json:"sourceAmount"` DestinationAmount int64 `json:"destinationAmount,omitempty"` + HideAmount bool `json:"hideAmount"` TagIds []string `json:"tagIds"` Tags []*TransactionTagInfoResponse `json:"tags,omitempty"` Comment string `json:"comment"` @@ -304,6 +308,7 @@ func (t *Transaction) ToTransactionInfoResponse(tagIds []int64, editable bool) * DestinationAccountId: destinationAccountId, SourceAmount: sourceAmount, DestinationAmount: destinationAmount, + HideAmount: t.HideAmount, TagIds: utils.Int64ArrayToStringArray(tagIds), Comment: t.Comment, Editable: editable, diff --git a/pkg/services/transactions.go b/pkg/services/transactions.go index 3ca9943b..2dfec169 100644 --- a/pkg/services/transactions.go +++ b/pkg/services/transactions.go @@ -512,6 +512,10 @@ func (s *TransactionService) ModifyTransaction(transaction *models.Transaction, } } + if transaction.HideAmount != oldTransaction.HideAmount { + updateCols = append(updateCols, "hide_amount") + } + if transaction.Comment != oldTransaction.Comment { updateCols = append(updateCols, "comment") } diff --git a/src/lib/services.js b/src/lib/services.js index 0c2dc9bf..12f873b2 100644 --- a/src/lib/services.js +++ b/src/lib/services.js @@ -258,7 +258,7 @@ export default { getTransaction: ({ id }) => { return axios.get(`v1/transactions/get.json?id=${id}&trim_account=true&trim_category=true&trim_tag=true`); }, - addTransaction: ({ type, categoryId, time, sourceAccountId, destinationAccountId, sourceAmount, destinationAmount, tagIds, comment, utcOffset }) => { + addTransaction: ({ type, categoryId, time, sourceAccountId, destinationAccountId, sourceAmount, destinationAmount, hideAmount, tagIds, comment, utcOffset }) => { return axios.post('v1/transactions/add.json', { type, categoryId, @@ -267,12 +267,13 @@ export default { destinationAccountId, sourceAmount, destinationAmount, + hideAmount, tagIds, comment, utcOffset }); }, - modifyTransaction: ({ id, type, categoryId, time, sourceAccountId, destinationAccountId, sourceAmount, destinationAmount, tagIds, comment, utcOffset }) => { + modifyTransaction: ({ id, type, categoryId, time, sourceAccountId, destinationAccountId, sourceAmount, destinationAmount, hideAmount, tagIds, comment, utcOffset }) => { return axios.post('v1/transactions/modify.json', { id, type, @@ -282,6 +283,7 @@ export default { destinationAccountId, sourceAmount, destinationAmount, + hideAmount, tagIds, comment, utcOffset diff --git a/src/locales/en.js b/src/locales/en.js index 63d60cb3..f8c16807 100644 --- a/src/locales/en.js +++ b/src/locales/en.js @@ -787,6 +787,8 @@ export default { 'Income Amount': 'Income Amount', 'Transfer Out Amount': 'Transfer Out Amount', 'Transfer In Amount': 'Transfer In Amount', + 'Show Amount': 'Show Amount', + 'Hide Amount': 'Hide Amount', 'Category': 'Category', 'Account': 'Account', 'Source Account': 'Source Account', diff --git a/src/locales/zh_Hans.js b/src/locales/zh_Hans.js index db94d0f0..40a9ece2 100644 --- a/src/locales/zh_Hans.js +++ b/src/locales/zh_Hans.js @@ -787,6 +787,8 @@ export default { 'Income Amount': '收入金额', 'Transfer Out Amount': '转出金额', 'Transfer In Amount': '转入金额', + 'Show Amount': '显示金额', + 'Hide Amount': '隐藏金额', 'Category': '分类', 'Account': '账户', 'Source Account': '来源账户', diff --git a/src/views/mobile/transactions/Edit.vue b/src/views/mobile/transactions/Edit.vue index e269ef54..d9504b19 100644 --- a/src/views/mobile/transactions/Edit.vue +++ b/src/views/mobile/transactions/Edit.vue @@ -4,6 +4,7 @@ + @@ -47,7 +48,7 @@ :class="{ 'color-theme-teal': transaction.type === $constants.transaction.allTransactionTypes.Expense, 'color-theme-red': transaction.type === $constants.transaction.allTransactionTypes.Income }" :style="{ fontSize: sourceAmountFontSize + 'px' }" :header="$t(sourceAmountName)" - :title="transaction.sourceAmount | currency" + :title="transaction.sourceAmount | finalAmount(transaction.hideAmount) | currency" @click="showSourceAmountSheet = true" > @@ -254,6 +255,16 @@ + + + {{ $t('Show Amount') }} + {{ $t('Hide Amount') }} + + + {{ $t('Cancel') }} + + + {{ $t(saveButtonTitle) }} @@ -294,6 +305,7 @@ export default { destinationAccountId: '', sourceAmount: 0, destinationAmount: 0, + hideAmount: false, tagIds: [], comment: '' }, @@ -301,6 +313,7 @@ export default { loadingError: null, submitting: false, showAccountBalance: self.$settings.isShowAccountBalance(), + showMoreActionSheet: false, showSourceAmountSheet: false, showDestinationAmountSheet: false, showCategorySheet: false, @@ -659,6 +672,7 @@ export default { self.transaction.destinationAmount = transaction.destinationAmount; } + self.transaction.hideAmount = transaction.hideAmount; self.transaction.tagIds = transaction.tagIds || []; self.transaction.comment = transaction.comment; } @@ -697,6 +711,7 @@ export default { sourceAmount: self.transaction.sourceAmount, destinationAccountId: '0', destinationAmount: 0, + hideAmount: self.transaction.hideAmount, tagIds: self.transaction.tagIds, comment: self.transaction.comment, utcOffset: self.transaction.utcOffset @@ -802,6 +817,13 @@ export default { } }, filters: { + finalAmount(amount, hideAmount) { + if (hideAmount) { + return '***'; + } + + return amount; + }, primaryCategoryName(categoryId, allCategories) { for (let i = 0; i < allCategories.length; i++) { for (let j = 0; j < allCategories[i].subCategories.length; j++) { diff --git a/src/views/mobile/transactions/List.vue b/src/views/mobile/transactions/List.vue index 415cf707..dddfc02a 100644 --- a/src/views/mobile/transactions/List.vue +++ b/src/views/mobile/transactions/List.vue @@ -329,8 +329,8 @@
- {{ transaction.sourceAmount | currency(transaction.sourceAccount.currency) }} - {{ transaction.destinationAmount | currency(transaction.destinationAccount.currency) }} + {{ transaction.sourceAmount | finalAmount(transaction.hideAmount) | currency(transaction.sourceAccount.currency) }} + {{ transaction.destinationAmount | finalAmount(transaction.hideAmount) | currency(transaction.destinationAccount.currency) }}