use the daylight saving time zone as default time zone rather than the current standard time zone during the DST
This commit is contained in:
@@ -9,7 +9,13 @@ import { AccountCategory, AccountType } from '@/core/account.ts';
|
||||
import type { LocalizedAccountCategory } from '@/core/account.ts';
|
||||
import { Account } from '@/models/account.ts';
|
||||
|
||||
import { getCurrentUnixTime } from '@/lib/datetime.ts';
|
||||
import { isDefined } from '@/lib/common.ts';
|
||||
import {
|
||||
getTimezoneOffsetMinutes,
|
||||
getSameDateTimeWithCurrentTimezone,
|
||||
parseDateTimeFromUnixTimeWithBrowserTimezone,
|
||||
getCurrentUnixTime
|
||||
} from '@/lib/datetime.ts';
|
||||
|
||||
export interface DayAndDisplayName {
|
||||
readonly day: number;
|
||||
@@ -25,7 +31,7 @@ export function useAccountEditPageBase() {
|
||||
const clientSessionId = ref<string>('');
|
||||
const loading = ref<boolean>(false);
|
||||
const submitting = ref<boolean>(false);
|
||||
const account = ref<Account>(Account.createNewAccount(userStore.currentUserDefaultCurrency, getCurrentUnixTime()));
|
||||
const account = ref<Account>(Account.createNewAccount(userStore.currentUserDefaultCurrency, getCurrentUnixTimeForNewAccount()));
|
||||
const subAccounts = ref<Account[]>([]);
|
||||
|
||||
const title = computed<string>(() => {
|
||||
@@ -89,6 +95,18 @@ export function useAccountEditPageBase() {
|
||||
|
||||
const isAccountSupportCreditCardStatementDate = computed<boolean>(() => account.value && account.value.category === AccountCategory.CreditCard.type);
|
||||
|
||||
function getCurrentUnixTimeForNewAccount(): number {
|
||||
return getSameDateTimeWithCurrentTimezone(parseDateTimeFromUnixTimeWithBrowserTimezone(getCurrentUnixTime())).getUnixTime();
|
||||
}
|
||||
|
||||
function getDefaultTimezoneOffsetMinutes(account: Account): number {
|
||||
if (!account.balanceTime) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return getTimezoneOffsetMinutes(account.balanceTime);
|
||||
}
|
||||
|
||||
function getAccountCreditCardStatementDate(statementDate?: number): string | null {
|
||||
for (const item of allAvailableMonthDays.value) {
|
||||
if (item.day === statementDate) {
|
||||
@@ -99,6 +117,23 @@ export function useAccountEditPageBase() {
|
||||
return null;
|
||||
}
|
||||
|
||||
function updateAccountBalanceTime(account: Account, balanceTime: number): void {
|
||||
if (!isDefined(account.balanceTime)) {
|
||||
account.balanceTime = balanceTime;
|
||||
return;
|
||||
}
|
||||
|
||||
const oldUtcOffset = getTimezoneOffsetMinutes(account.balanceTime);
|
||||
const newUtcOffset = getTimezoneOffsetMinutes(balanceTime);
|
||||
|
||||
if (oldUtcOffset === newUtcOffset) {
|
||||
account.balanceTime = balanceTime;
|
||||
return;
|
||||
}
|
||||
|
||||
account.balanceTime = balanceTime - (newUtcOffset - oldUtcOffset) * 60;
|
||||
}
|
||||
|
||||
function getInputEmptyProblemMessage(account: Account, isSubAccount: boolean): string | null {
|
||||
if (!isSubAccount && !account.category) {
|
||||
return 'Account category cannot be blank';
|
||||
@@ -122,7 +157,7 @@ export function useAccountEditPageBase() {
|
||||
return false;
|
||||
}
|
||||
|
||||
const subAccount = account.value.createNewSubAccount(userStore.currentUserDefaultCurrency, getCurrentUnixTime());
|
||||
const subAccount = account.value.createNewSubAccount(userStore.currentUserDefaultCurrency, getCurrentUnixTimeForNewAccount());
|
||||
subAccounts.value.push(subAccount);
|
||||
return true;
|
||||
}
|
||||
@@ -133,7 +168,7 @@ export function useAccountEditPageBase() {
|
||||
|
||||
if (newAccount.subAccounts && newAccount.subAccounts.length > 0) {
|
||||
for (const oldSubAccount of newAccount.subAccounts) {
|
||||
const subAccount: Account = account.value.createNewSubAccount(userStore.currentUserDefaultCurrency, getCurrentUnixTime());
|
||||
const subAccount: Account = account.value.createNewSubAccount(userStore.currentUserDefaultCurrency, getCurrentUnixTimeForNewAccount());
|
||||
subAccount.fillFrom(oldSubAccount);
|
||||
|
||||
subAccounts.value.push(subAccount);
|
||||
@@ -163,7 +198,10 @@ export function useAccountEditPageBase() {
|
||||
allAvailableMonthDays,
|
||||
isAccountSupportCreditCardStatementDate,
|
||||
// functions
|
||||
getCurrentUnixTimeForNewAccount,
|
||||
getDefaultTimezoneOffsetMinutes,
|
||||
getAccountCreditCardStatementDate,
|
||||
updateAccountBalanceTime,
|
||||
isNewAccount,
|
||||
addSubAccount,
|
||||
setAccount
|
||||
|
||||
@@ -2,7 +2,6 @@ import { ref, computed } from 'vue';
|
||||
|
||||
import { useI18n } from '@/locales/helpers.ts';
|
||||
|
||||
import { useSettingsStore } from '@/stores/setting.ts';
|
||||
import { useUserStore } from '@/stores/user.ts';
|
||||
import { useAccountsStore } from '@/stores/account.ts';
|
||||
import { useTransactionCategoriesStore } from '@/stores/transactionCategory.ts';
|
||||
@@ -25,7 +24,8 @@ import { replaceAll } from '@/lib/common.ts';
|
||||
import {
|
||||
getUtcOffsetByUtcOffsetMinutes,
|
||||
getTimezoneOffsetMinutes,
|
||||
parseDateTimeFromUnixTime
|
||||
parseDateTimeFromUnixTime,
|
||||
parseDateTimeFromUnixTimeWithTimezoneOffset
|
||||
} from '@/lib/datetime.ts';
|
||||
|
||||
export function useReconciliationStatementPageBase() {
|
||||
@@ -33,15 +33,14 @@ export function useReconciliationStatementPageBase() {
|
||||
tt,
|
||||
getAllAccountBalanceTrendChartTypes,
|
||||
getAllStatisticsDateAggregationTypesWithShortName,
|
||||
formatUnixTimeToLongDateTime,
|
||||
formatUnixTimeToLongDate,
|
||||
formatUnixTimeToShortTime,
|
||||
formatUnixTimeToGregorianDefaultDateTime,
|
||||
formatDateTimeToLongDateTime,
|
||||
formatDateTimeToLongDate,
|
||||
formatDateTimeToShortTime,
|
||||
formatDateTimeToGregorianDefaultDateTime,
|
||||
formatAmountToWesternArabicNumeralsWithoutDigitGrouping,
|
||||
formatAmountToLocalizedNumeralsWithCurrency
|
||||
} = useI18n();
|
||||
|
||||
const settingsStore = useSettingsStore();
|
||||
const userStore = useUserStore();
|
||||
const accountsStore = useAccountsStore();
|
||||
const transactionCategoriesStore = useTransactionCategoriesStore();
|
||||
@@ -53,7 +52,6 @@ export function useReconciliationStatementPageBase() {
|
||||
|
||||
const firstDayOfWeek = computed<WeekDayValue>(() => userStore.currentUserFirstDayOfWeek);
|
||||
const fiscalYearStart = computed<number>(() => userStore.currentUserFiscalYearStart);
|
||||
const currentTimezoneOffsetMinutes = computed<number>(() => getTimezoneOffsetMinutes(settingsStore.appSettings.timeZone));
|
||||
const defaultCurrency = computed<string>(() => userStore.currentUserDefaultCurrency);
|
||||
|
||||
const allChartTypes = computed<TypeAndDisplayName[]>(() => getAllAccountBalanceTrendChartTypes());
|
||||
@@ -79,11 +77,13 @@ export function useReconciliationStatementPageBase() {
|
||||
const allCategoriesMap = computed<Record<string, TransactionCategory>>(() => transactionCategoriesStore.allTransactionCategoriesMap);
|
||||
|
||||
const displayStartDateTime = computed<string>(() => {
|
||||
return formatUnixTimeToLongDateTime(startTime.value);
|
||||
const dateTime = parseDateTimeFromUnixTime(startTime.value);
|
||||
return formatDateTimeToLongDateTime(dateTime);
|
||||
});
|
||||
|
||||
const displayEndDateTime = computed<string>(() => {
|
||||
return formatUnixTimeToLongDateTime(endTime.value);
|
||||
const dateTime = parseDateTimeFromUnixTime(endTime.value);
|
||||
return formatDateTimeToLongDateTime(dateTime);
|
||||
});
|
||||
|
||||
const displayTotalInflows = computed<string>(() => {
|
||||
@@ -160,15 +160,22 @@ export function useReconciliationStatementPageBase() {
|
||||
}
|
||||
|
||||
function getDisplayDateTime(transaction: TransactionReconciliationStatementResponseItemWithInfo): string {
|
||||
return formatUnixTimeToLongDateTime(transaction.time, transaction.utcOffset, currentTimezoneOffsetMinutes.value);
|
||||
const dateTime = parseDateTimeFromUnixTimeWithTimezoneOffset(transaction.time, transaction.utcOffset);
|
||||
return formatDateTimeToLongDateTime(dateTime);
|
||||
}
|
||||
|
||||
function getDisplayDate(transaction: TransactionReconciliationStatementResponseItemWithInfo): string {
|
||||
return formatUnixTimeToLongDate(transaction.time, transaction.utcOffset, currentTimezoneOffsetMinutes.value);
|
||||
const dateTime = parseDateTimeFromUnixTimeWithTimezoneOffset(transaction.time, transaction.utcOffset);
|
||||
return formatDateTimeToLongDate(dateTime);
|
||||
}
|
||||
|
||||
function getDisplayTime(transaction: TransactionReconciliationStatementResponseItemWithInfo): string {
|
||||
return formatUnixTimeToShortTime(transaction.time, transaction.utcOffset, currentTimezoneOffsetMinutes.value);
|
||||
const dateTime = parseDateTimeFromUnixTimeWithTimezoneOffset(transaction.time, transaction.utcOffset);
|
||||
return formatDateTimeToShortTime(dateTime);
|
||||
}
|
||||
|
||||
function isSameAsDefaultTimezoneOffsetMinutes(transaction: TransactionReconciliationStatementResponseItemWithInfo): boolean {
|
||||
return transaction.utcOffset === getTimezoneOffsetMinutes(transaction.time);
|
||||
}
|
||||
|
||||
function getDisplayTimezone(transaction: TransactionReconciliationStatementResponseItemWithInfo): string {
|
||||
@@ -227,7 +234,7 @@ export function useReconciliationStatementPageBase() {
|
||||
|
||||
const transactions = reconciliationStatements.value?.transactions ?? [];
|
||||
const rows = transactions.map(transaction => {
|
||||
const transactionTime = parseDateTimeFromUnixTime(transaction.time, transaction.utcOffset, currentTimezoneOffsetMinutes.value).getUnixTime();
|
||||
const transactionTime = parseDateTimeFromUnixTimeWithTimezoneOffset(transaction.time, transaction.utcOffset);
|
||||
const type = getDisplayTransactionType(transaction);
|
||||
let categoryName = transaction.categoryName;
|
||||
let displayAmount = formatAmountToWesternArabicNumeralsWithoutDigitGrouping(transaction.sourceAmount);
|
||||
@@ -260,7 +267,7 @@ export function useReconciliationStatementPageBase() {
|
||||
}
|
||||
|
||||
return [
|
||||
formatUnixTimeToGregorianDefaultDateTime(transactionTime),
|
||||
formatDateTimeToGregorianDefaultDateTime(transactionTime),
|
||||
type,
|
||||
categoryName,
|
||||
displayAmount,
|
||||
@@ -282,7 +289,6 @@ export function useReconciliationStatementPageBase() {
|
||||
// computed states
|
||||
firstDayOfWeek,
|
||||
fiscalYearStart,
|
||||
currentTimezoneOffsetMinutes,
|
||||
defaultCurrency,
|
||||
allChartTypes,
|
||||
allDateAggregationTypes,
|
||||
@@ -303,6 +309,7 @@ export function useReconciliationStatementPageBase() {
|
||||
getDisplayDateTime,
|
||||
getDisplayDate,
|
||||
getDisplayTime,
|
||||
isSameAsDefaultTimezoneOffsetMinutes,
|
||||
getDisplayTimezone,
|
||||
getDisplaySourceAmount,
|
||||
getDisplayDestinationAmount,
|
||||
|
||||
Reference in New Issue
Block a user