show timezone in transaction list page if the timezone of transaction does not equal with client current timezone
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user