show timezone in transaction list page if the timezone of transaction does not equal with client current timezone

This commit is contained in:
MaysWind
2021-03-13 21:17:37 +08:00
parent ac27a6f7f9
commit 149f29f8a5
4 changed files with 42 additions and 8 deletions
+8 -7
View File
@@ -603,13 +603,14 @@ func (a *TransactionsApi) createNewTransactionModel(uid int64, transactionCreate
}
transaction := &models.Transaction{
Uid: uid,
Type: transactionDbType,
CategoryId: transactionCreateReq.CategoryId,
TransactionTime: utils.GetMinTransactionTimeFromUnixTime(transactionCreateReq.Time),
AccountId: transactionCreateReq.SourceAccountId,
Amount: transactionCreateReq.SourceAmount,
Comment: transactionCreateReq.Comment,
Uid: uid,
Type: transactionDbType,
CategoryId: transactionCreateReq.CategoryId,
TransactionTime: utils.GetMinTransactionTimeFromUnixTime(transactionCreateReq.Time),
TimezoneUtcOffset: transactionCreateReq.UtcOffset,
AccountId: transactionCreateReq.SourceAccountId,
Amount: transactionCreateReq.SourceAmount,
Comment: transactionCreateReq.Comment,
}
if transactionCreateReq.Type == models.TRANSACTION_TYPE_TRANSFER {
+3
View File
@@ -34,6 +34,7 @@ type Transaction struct {
CategoryId int64 `xorm:"INDEX(IDX_transaction_uid_deleted_category_id_time) NOT NULL"`
AccountId int64 `xorm:"INDEX(IDX_transaction_uid_deleted_account_id_time) NOT NULL"`
TransactionTime int64 `xorm:"UNIQUE(UQE_transaction_uid_time) INDEX(IDX_transaction_uid_deleted_time) INDEX(IDX_transaction_uid_deleted_type_time) INDEX(IDX_transaction_uid_deleted_category_id_time) INDEX(IDX_transaction_uid_deleted_account_id_time) NOT NULL"`
TimezoneUtcOffset int16 `xorm:"NOT NULL"`
Amount int64 `xorm:"NOT NULL"`
RelatedId int64 `xorm:"NOT NULL"`
RelatedAccountId int64 `xorm:"NOT NULL"`
@@ -119,6 +120,7 @@ type TransactionInfoResponse struct {
Type TransactionType `json:"type"`
CategoryId int64 `json:"categoryId,string"`
Time int64 `json:"time"`
UtcOffset int16 `json:"utcOffset"`
SourceAccountId int64 `json:"sourceAccountId,string"`
DestinationAccountId int64 `json:"destinationAccountId,string,omitempty"`
SourceAmount int64 `json:"sourceAmount"`
@@ -194,6 +196,7 @@ func (t *Transaction) ToTransactionInfoResponse(tagIds []int64, editable bool) *
Type: transactionType,
CategoryId: t.CategoryId,
Time: utils.GetUnixTimeFromTransactionTime(t.TransactionTime),
UtcOffset: t.TimezoneUtcOffset,
SourceAccountId: sourceAccountId,
DestinationAccountId: destinationAccountId,
SourceAmount: sourceAmount,
+1
View File
@@ -1001,6 +1001,7 @@ func (s *TransactionService) GetRelatedTransferTransaction(originalTransaction *
Type: relatedType,
CategoryId: originalTransaction.CategoryId,
TransactionTime: relatedTransactionTime,
TimezoneUtcOffset: originalTransaction.TimezoneUtcOffset,
AccountId: originalTransaction.RelatedAccountId,
Amount: originalTransaction.RelatedAccountAmount,
RelatedId: originalTransaction.TransactionId,
+30 -1
View File
@@ -320,7 +320,8 @@
<span>{{ transaction.comment }}</span>
</div>
<div slot="footer" class="transaction-footer">
<span>{{ transaction.time | moment($t('format.hourMinute.long')) }}</span>
<span>{{ transaction.time | applyTimezoneOffset(transaction.utcOffset, currentTimezoneOffsetMinutes) | moment($t('format.hourMinute.long')) }}</span>
<span v-if="transaction.utcOffset !== currentTimezoneOffsetMinutes">{{ transaction.utcOffset | utcOffset }}</span>
<span v-if="transaction.sourceAccount">·</span>
<span v-if="transaction.sourceAccount">{{ transaction.sourceAccount.name }}</span>
<span v-if="transaction.sourceAccount && transaction.type === $constants.transaction.allTransactionTypes.Transfer && transaction.destinationAccount && transaction.sourceAccount.id !== transaction.destinationAccount.id"></span>
@@ -529,6 +530,9 @@ export default {
return this.$store.getters.currentUserDefaultCurrency || this.$t('default.currency');
},
currentTimezoneOffsetMinutes() {
return this.$utilities.getTimezoneOffsetMinutes();
},
firstDayOfWeek() {
if (this.$utilities.isNumber(this.$store.getters.currentUserFirstDayOfWeek)) {
return this.$store.getters.currentUserFirstDayOfWeek;
@@ -864,6 +868,31 @@ export default {
color: 'transparent'
}
},
applyTimezoneOffset(unixTime, utcOffsetMinutes, currentTimezoneOffsetMinutes) {
return unixTime + (utcOffsetMinutes - currentTimezoneOffsetMinutes) * 60;
},
utcOffset(utcOffsetMinutes) {
let offsetHours = parseInt(Math.abs(utcOffsetMinutes) / 60);
let offsetMinutes = Math.abs(utcOffsetMinutes) - offsetHours * 60;
if (offsetHours < 10) {
offsetHours = '0' + offsetHours;
}
if (offsetMinutes < 10) {
offsetMinutes = '0' + offsetMinutes;
}
let utcOffset = '';
if (utcOffsetMinutes > 0) {
utcOffset = `+${offsetHours}:${offsetMinutes}`;
} else if (utcOffsetMinutes < 0) {
utcOffset = `-${offsetHours}:${offsetMinutes}`;
}
return `(UTC${utcOffset})`;
},
dateRangeName(dateRangeType, allDateRanges, defaultName) {
if (dateRangeType === allDateRanges.All.type) {
return defaultName;