mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-18 00:34:28 +08:00
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{
|
transaction := &models.Transaction{
|
||||||
Uid: uid,
|
Uid: uid,
|
||||||
Type: transactionDbType,
|
Type: transactionDbType,
|
||||||
CategoryId: transactionCreateReq.CategoryId,
|
CategoryId: transactionCreateReq.CategoryId,
|
||||||
TransactionTime: utils.GetMinTransactionTimeFromUnixTime(transactionCreateReq.Time),
|
TransactionTime: utils.GetMinTransactionTimeFromUnixTime(transactionCreateReq.Time),
|
||||||
AccountId: transactionCreateReq.SourceAccountId,
|
TimezoneUtcOffset: transactionCreateReq.UtcOffset,
|
||||||
Amount: transactionCreateReq.SourceAmount,
|
AccountId: transactionCreateReq.SourceAccountId,
|
||||||
Comment: transactionCreateReq.Comment,
|
Amount: transactionCreateReq.SourceAmount,
|
||||||
|
Comment: transactionCreateReq.Comment,
|
||||||
}
|
}
|
||||||
|
|
||||||
if transactionCreateReq.Type == models.TRANSACTION_TYPE_TRANSFER {
|
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"`
|
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"`
|
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"`
|
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"`
|
Amount int64 `xorm:"NOT NULL"`
|
||||||
RelatedId int64 `xorm:"NOT NULL"`
|
RelatedId int64 `xorm:"NOT NULL"`
|
||||||
RelatedAccountId int64 `xorm:"NOT NULL"`
|
RelatedAccountId int64 `xorm:"NOT NULL"`
|
||||||
@@ -119,6 +120,7 @@ type TransactionInfoResponse struct {
|
|||||||
Type TransactionType `json:"type"`
|
Type TransactionType `json:"type"`
|
||||||
CategoryId int64 `json:"categoryId,string"`
|
CategoryId int64 `json:"categoryId,string"`
|
||||||
Time int64 `json:"time"`
|
Time int64 `json:"time"`
|
||||||
|
UtcOffset int16 `json:"utcOffset"`
|
||||||
SourceAccountId int64 `json:"sourceAccountId,string"`
|
SourceAccountId int64 `json:"sourceAccountId,string"`
|
||||||
DestinationAccountId int64 `json:"destinationAccountId,string,omitempty"`
|
DestinationAccountId int64 `json:"destinationAccountId,string,omitempty"`
|
||||||
SourceAmount int64 `json:"sourceAmount"`
|
SourceAmount int64 `json:"sourceAmount"`
|
||||||
@@ -194,6 +196,7 @@ func (t *Transaction) ToTransactionInfoResponse(tagIds []int64, editable bool) *
|
|||||||
Type: transactionType,
|
Type: transactionType,
|
||||||
CategoryId: t.CategoryId,
|
CategoryId: t.CategoryId,
|
||||||
Time: utils.GetUnixTimeFromTransactionTime(t.TransactionTime),
|
Time: utils.GetUnixTimeFromTransactionTime(t.TransactionTime),
|
||||||
|
UtcOffset: t.TimezoneUtcOffset,
|
||||||
SourceAccountId: sourceAccountId,
|
SourceAccountId: sourceAccountId,
|
||||||
DestinationAccountId: destinationAccountId,
|
DestinationAccountId: destinationAccountId,
|
||||||
SourceAmount: sourceAmount,
|
SourceAmount: sourceAmount,
|
||||||
|
|||||||
@@ -1001,6 +1001,7 @@ func (s *TransactionService) GetRelatedTransferTransaction(originalTransaction *
|
|||||||
Type: relatedType,
|
Type: relatedType,
|
||||||
CategoryId: originalTransaction.CategoryId,
|
CategoryId: originalTransaction.CategoryId,
|
||||||
TransactionTime: relatedTransactionTime,
|
TransactionTime: relatedTransactionTime,
|
||||||
|
TimezoneUtcOffset: originalTransaction.TimezoneUtcOffset,
|
||||||
AccountId: originalTransaction.RelatedAccountId,
|
AccountId: originalTransaction.RelatedAccountId,
|
||||||
Amount: originalTransaction.RelatedAccountAmount,
|
Amount: originalTransaction.RelatedAccountAmount,
|
||||||
RelatedId: originalTransaction.TransactionId,
|
RelatedId: originalTransaction.TransactionId,
|
||||||
|
|||||||
@@ -320,7 +320,8 @@
|
|||||||
<span>{{ transaction.comment }}</span>
|
<span>{{ transaction.comment }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div slot="footer" class="transaction-footer">
|
<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">·</span>
|
||||||
<span v-if="transaction.sourceAccount">{{ transaction.sourceAccount.name }}</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>
|
<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');
|
return this.$store.getters.currentUserDefaultCurrency || this.$t('default.currency');
|
||||||
},
|
},
|
||||||
|
currentTimezoneOffsetMinutes() {
|
||||||
|
return this.$utilities.getTimezoneOffsetMinutes();
|
||||||
|
},
|
||||||
firstDayOfWeek() {
|
firstDayOfWeek() {
|
||||||
if (this.$utilities.isNumber(this.$store.getters.currentUserFirstDayOfWeek)) {
|
if (this.$utilities.isNumber(this.$store.getters.currentUserFirstDayOfWeek)) {
|
||||||
return this.$store.getters.currentUserFirstDayOfWeek;
|
return this.$store.getters.currentUserFirstDayOfWeek;
|
||||||
@@ -864,6 +868,31 @@ export default {
|
|||||||
color: 'transparent'
|
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) {
|
dateRangeName(dateRangeType, allDateRanges, defaultName) {
|
||||||
if (dateRangeType === allDateRanges.All.type) {
|
if (dateRangeType === allDateRanges.All.type) {
|
||||||
return defaultName;
|
return defaultName;
|
||||||
|
|||||||
Reference in New Issue
Block a user