diff --git a/src/lib/i18n.js b/src/lib/i18n.js index 322010d2..d3e7b756 100644 --- a/src/lib/i18n.js +++ b/src/lib/i18n.js @@ -1023,6 +1023,7 @@ export function i18nFunctions(i18nGlobal) { getDisplayCurrency: (value, currencyCode, options) => getDisplayCurrency(value, currencyCode, options, i18nGlobal.t), joinMultiText: (textArray) => joinMultiText(textArray, i18nGlobal.t), setLanguage: (locale, force) => setLanguage(i18nGlobal, locale, force), + setTimeZone: (timezone) => setTimeZone(timezone), initLocale: (lastUserLanguage, timezone) => initLocale(i18nGlobal, lastUserLanguage, timezone) }; } diff --git a/src/stores/transaction.js b/src/stores/transaction.js index a3024c8d..bfe31d2a 100644 --- a/src/stores/transaction.js +++ b/src/stores/transaction.js @@ -1,5 +1,6 @@ import { defineStore } from 'pinia'; +import { useSettingsStore } from './setting.js'; import { useAccountsStore } from './account.js'; import { useTransactionCategoriesStore } from './transactionCategory.js'; import { useOverviewStore } from './overview.js'; @@ -26,13 +27,13 @@ const emptyTransactionResult = { transactionsNextTimeId: 0 }; -function loadTransactionList(state, exchangeRatesStore, { transactions, reload, autoExpand, defaultCurrency }) { +function loadTransactionList(state, settingsStore, exchangeRatesStore, { transactions, reload, autoExpand, defaultCurrency }) { if (reload) { state.transactions = []; } if (transactions.items && transactions.items.length) { - const currentUtcOffset = getTimezoneOffsetMinutes(); + const currentUtcOffset = getTimezoneOffsetMinutes(settingsStore.appSettings.timeZone); let currentMonthListIndex = -1; let currentMonthList = null; @@ -86,8 +87,8 @@ function loadTransactionList(state, exchangeRatesStore, { transactions, reload, } } -function updateTransactionInTransactionList(state, exchangeRatesStore, { transaction, defaultCurrency }) { - const currentUtcOffset = getTimezoneOffsetMinutes(); +function updateTransactionInTransactionList(state, settingsStore, exchangeRatesStore, { transaction, defaultCurrency }) { + const currentUtcOffset = getTimezoneOffsetMinutes(settingsStore.appSettings.timeZone); const transactionTime = parseDateFromUnixTime(transaction.time, transaction.utcOffset, currentUtcOffset); const transactionYear = getYear(transactionTime); const transactionMonth = getMonth(transactionTime); @@ -378,6 +379,7 @@ export const useTransactionsStore = defineStore('transactions', { }, loadTransactions({ reload, autoExpand, defaultCurrency }) { const self = this; + const settingsStore = useSettingsStore(); const exchangeRatesStore = useExchangeRatesStore(); let actualMaxTime = self.transactionsNextTimeId; @@ -389,18 +391,18 @@ export const useTransactionsStore = defineStore('transactions', { return new Promise((resolve, reject) => { services.getTransactions({ - maxTime: actualMaxTime, - minTime: self.transactionsFilter.minTime * 1000, - type: self.transactionsFilter.type, - categoryId: self.transactionsFilter.categoryId, - accountId: self.transactionsFilter.accountId, - keyword: self.transactionsFilter.keyword + maxTime: actualMaxTime, + minTime: self.transactionsFilter.minTime * 1000, + type: self.transactionsFilter.type, + categoryId: self.transactionsFilter.categoryId, + accountId: self.transactionsFilter.accountId, + keyword: self.transactionsFilter.keyword }).then(response => { const data = response.data; if (!data || !data.success || !data.result) { if (reload) { - loadTransactionList(self, exchangeRatesStore, { + loadTransactionList(self, settingsStore, exchangeRatesStore, { transactions: emptyTransactionResult, reload: reload, autoExpand: autoExpand, @@ -416,7 +418,7 @@ export const useTransactionsStore = defineStore('transactions', { return; } - loadTransactionList(self, exchangeRatesStore, { + loadTransactionList(self, settingsStore, exchangeRatesStore, { transactions: data.result, reload: reload, autoExpand: autoExpand, @@ -434,7 +436,7 @@ export const useTransactionsStore = defineStore('transactions', { logger.error('failed to load transaction list', error); if (reload) { - loadTransactionList(self, exchangeRatesStore, { + loadTransactionList(self, settingsStore, exchangeRatesStore, { transactions: emptyTransactionResult, reload: reload, autoExpand: autoExpand, @@ -484,6 +486,7 @@ export const useTransactionsStore = defineStore('transactions', { }, saveTransaction({ transaction, defaultCurrency }) { const self = this; + const settingsStore = useSettingsStore(); const exchangeRatesStore = useExchangeRatesStore(); return new Promise((resolve, reject) => { @@ -512,7 +515,7 @@ export const useTransactionsStore = defineStore('transactions', { self.updateTransactionListInvalidState(true); } } else { - updateTransactionInTransactionList(self, exchangeRatesStore, { + updateTransactionInTransactionList(self, settingsStore, exchangeRatesStore, { transaction: data.result, defaultCurrency: defaultCurrency }); diff --git a/src/views/desktop/app/settings/AppBasicSettingTab.vue b/src/views/desktop/app/settings/AppBasicSettingTab.vue index 7c66ff88..2392faca 100644 --- a/src/views/desktop/app/settings/AppBasicSettingTab.vue +++ b/src/views/desktop/app/settings/AppBasicSettingTab.vue @@ -167,6 +167,9 @@ import { mapStores } from 'pinia'; import { useRootStore } from '@/stores/index.js'; import { useSettingsStore } from '@/stores/setting.js'; import { useUserStore } from '@/stores/user.js'; +import { useTransactionsStore } from '@/stores/transaction.js'; +import { useOverviewStore } from '@/stores/overview.js'; +import { useStatisticsStore } from '@/stores/statistics.js'; import { useExchangeRatesStore } from '@/stores/exchangeRates.js'; import currencyConstants from '@/consts/currency.js'; @@ -174,7 +177,7 @@ import { getSystemTheme } from '@/lib/ui.js'; export default { computed: { - ...mapStores(useRootStore, useSettingsStore, useUserStore, useExchangeRatesStore), + ...mapStores(useRootStore, useSettingsStore, useUserStore, useTransactionsStore, useOverviewStore, useStatisticsStore, useExchangeRatesStore), enableDisableOptions() { return this.$locale.getEnableDisableOptions(); }, @@ -206,6 +209,10 @@ export default { }, set: function (value) { this.settingsStore.setTimeZone(value); + this.$locale.setTimeZone(value); + this.transactionsStore.updateTransactionListInvalidState(true); + this.overviewStore.updateTransactionOverviewInvalidState(true); + this.statisticsStore.updateTransactionStatisticsInvalidState(true); } }, isAutoUpdateExchangeRatesData: { diff --git a/src/views/mobile/SettingsPage.vue b/src/views/mobile/SettingsPage.vue index be84cc08..df5982b9 100644 --- a/src/views/mobile/SettingsPage.vue +++ b/src/views/mobile/SettingsPage.vue @@ -90,6 +90,9 @@ import { mapStores } from 'pinia'; import { useRootStore } from '@/stores/index.js'; import { useSettingsStore } from '@/stores/setting.js'; import { useUserStore } from '@/stores/user.js'; +import { useTransactionsStore } from '@/stores/transaction.js'; +import { useOverviewStore } from '@/stores/overview.js'; +import { useStatisticsStore } from '@/stores/statistics.js'; import { useExchangeRatesStore } from '@/stores/exchangeRates.js'; import currencyConstants from '@/consts/currency.js'; @@ -108,7 +111,7 @@ export default { }; }, computed: { - ...mapStores(useRootStore, useSettingsStore, useUserStore, useExchangeRatesStore), + ...mapStores(useRootStore, useSettingsStore, useUserStore, useTransactionsStore, useOverviewStore, useStatisticsStore, useExchangeRatesStore), version() { return 'v' + this.$version; }, @@ -141,6 +144,10 @@ export default { }, set: function (value) { this.settingsStore.setTimeZone(value); + this.$locale.setTimeZone(value); + this.transactionsStore.updateTransactionListInvalidState(true); + this.overviewStore.updateTransactionOverviewInvalidState(true); + this.statisticsStore.updateTransactionStatisticsInvalidState(true); } }, exchangeRatesLastUpdateDate() { diff --git a/src/views/mobile/transactions/ListPage.vue b/src/views/mobile/transactions/ListPage.vue index 28f556d9..a8eb8f88 100644 --- a/src/views/mobile/transactions/ListPage.vue +++ b/src/views/mobile/transactions/ListPage.vue @@ -480,7 +480,7 @@ export default { return true; }, currentTimezoneOffsetMinutes() { - return getTimezoneOffsetMinutes(); + return getTimezoneOffsetMinutes(this.settingsStore.appSettings.timeZone); }, firstDayOfWeek() { return this.userStore.currentUserFirstDayOfWeek; @@ -671,7 +671,7 @@ export default { changeDateFilter(dateType) { if (dateType === this.allDateRanges.Custom.type) { // Custom if (!this.query.minTime || !this.query.maxTime) { - this.query.maxTime = getActualUnixTimeForStore(getCurrentUnixTime(), getTimezoneOffsetMinutes(), getBrowserTimezoneOffsetMinutes()); + this.query.maxTime = getActualUnixTimeForStore(getCurrentUnixTime(), this.currentTimezoneOffsetMinutes, getBrowserTimezoneOffsetMinutes()); this.query.minTime = getSpecifiedDayFirstUnixTime(this.query.maxTime); }