diff --git a/src/stores/transaction.ts b/src/stores/transaction.ts index 0e6b5804..4fb36a23 100644 --- a/src/stores/transaction.ts +++ b/src/stores/transaction.ts @@ -474,12 +474,12 @@ export const useTransactionsStore = defineStore('transactions', () => { } } - function isTransactionDraftModified(transaction?: Transaction, initCategoryId?: string, initAccountId?: string, initTagIds?: string): boolean { + function isTransactionDraftModified(transaction?: Transaction, initAmount?: number, initCategoryId?: string, initAccountId?: string, initTagIds?: string): boolean { if (!transaction) { return false; } - if (transaction.sourceAmount !== 0) { + if (transaction.sourceAmount !== 0 && transaction.sourceAmount !== initAmount) { return true; } @@ -538,14 +538,14 @@ export const useTransactionsStore = defineStore('transactions', () => { return false; } - function saveTransactionDraft(transaction?: Transaction, initCategoryId?: string, initAccountId?: string, initTagIds?: string): void { + function saveTransactionDraft(transaction?: Transaction, initAmount?: number, initCategoryId?: string, initAccountId?: string, initTagIds?: string): void { if (settingsStore.appSettings.autoSaveTransactionDraft !== 'enabled' && settingsStore.appSettings.autoSaveTransactionDraft !== 'confirmation') { clearTransactionDraft(); return; } if (transaction) { - if (!isTransactionDraftModified(transaction, initCategoryId, initAccountId, initTagIds)) { + if (!isTransactionDraftModified(transaction, initAmount, initCategoryId, initAccountId, initTagIds)) { clearTransactionDraft(); return; } diff --git a/src/views/desktop/accounts/list/dialogs/ReconciliationStatementDialog.vue b/src/views/desktop/accounts/list/dialogs/ReconciliationStatementDialog.vue index 182e28a6..d3d3842d 100644 --- a/src/views/desktop/accounts/list/dialogs/ReconciliationStatementDialog.vue +++ b/src/views/desktop/accounts/list/dialogs/ReconciliationStatementDialog.vue @@ -467,7 +467,8 @@ function updateClosingBalance(): void { amount: newTransactionAmount, accountId: accountId.value, setAmount: true, - setTransactionTime: setTransactionTime + setTransactionTime: setTransactionTime, + noTransactionDraft: true }).then(result => { if (result && result.message) { snackbar.value?.showMessage(result.message); diff --git a/src/views/desktop/transactions/list/dialogs/EditDialog.vue b/src/views/desktop/transactions/list/dialogs/EditDialog.vue index c5c4660e..27e9e9cf 100644 --- a/src/views/desktop/transactions/list/dialogs/EditDialog.vue +++ b/src/views/desktop/transactions/list/dialogs/EditDialog.vue @@ -541,6 +541,7 @@ export interface TransactionEditOptions extends SetTransactionOptions { time?: number; setAmount?: boolean; setTransactionTime?: boolean; + noTransactionDraft?: boolean; } interface TransactionEditResponse { @@ -624,10 +625,12 @@ const pictureInput = useTemplateRef('pictureInput'); const showState = ref(false); const activeTab = ref('basicInfo'); const originalTransactionEditable = ref(false); +const noTransactionDraft = ref(false); const geoMenuState = ref(false); const tagSearchContent = ref(''); const removingPictureId = ref(''); +const initAmount = ref(undefined); const initCategoryId = ref(undefined); const initAccountId = ref(undefined); const initTagIds = ref(undefined); @@ -666,7 +669,7 @@ const isAllFilteredTagHidden = computed(() => { const isTransactionModified = computed(() => { if (mode.value === TransactionEditPageMode.Add) { - return transactionsStore.isTransactionDraftModified(transaction.value, initCategoryId.value, initAccountId.value, initTagIds.value); + return transactionsStore.isTransactionDraftModified(transaction.value, initAmount.value, initCategoryId.value, initAccountId.value, initTagIds.value); } else if (mode.value === TransactionEditPageMode.Edit) { return true; } else { @@ -709,6 +712,11 @@ function open(options: TransactionEditOptions): Promise { - transactionsStore.saveTransactionDraft(transaction.value, initCategoryId.value, initAccountId.value, initTagIds.value); + transactionsStore.saveTransactionDraft(transaction.value, initAmount.value, initCategoryId.value, initAccountId.value, initTagIds.value); doClose(); }).catch(() => { transactionsStore.clearTransactionDraft(); @@ -1043,7 +1051,7 @@ function cancel(): void { doClose(); } } else if (settingsStore.appSettings.autoSaveTransactionDraft === 'enabled') { - transactionsStore.saveTransactionDraft(transaction.value, initCategoryId.value, initAccountId.value, initTagIds.value); + transactionsStore.saveTransactionDraft(transaction.value, initAmount.value, initCategoryId.value, initAccountId.value, initTagIds.value); doClose(); } else { doClose(); diff --git a/src/views/mobile/accounts/ReconciliationStatementPage.vue b/src/views/mobile/accounts/ReconciliationStatementPage.vue index 6095da11..6151b878 100644 --- a/src/views/mobile/accounts/ReconciliationStatementPage.vue +++ b/src/views/mobile/accounts/ReconciliationStatementPage.vue @@ -540,11 +540,20 @@ function updateClosingBalance(balance?: number): void { newTransactionAmount = -newTransactionAmount; } + const params: string[] = []; + if (setTransactionTime) { - props.f7router.navigate(`/transaction/add?time=${newTransactionTime}&type=${newTransactionType}&amount=${newTransactionAmount}&accountId=${accountId.value}&withAmount=true&withTime=true`); - } else { - props.f7router.navigate(`/transaction/add?type=${newTransactionType}&amount=${newTransactionAmount}&accountId=${accountId.value}&withAmount=true`); + params.push(`time=${newTransactionTime}`); + params.push('withTime=true'); } + + params.push(`type=${newTransactionType}`); + params.push(`amount=${newTransactionAmount}`); + params.push(`withAmount=true`); + params.push(`accountId=${accountId.value}`); + params.push(`noTransactionDraft=true`); + + props.f7router.navigate(`/transaction/add?${params.join('&')}`); } function removeTransaction(transaction: TransactionReconciliationStatementResponseItem | null, confirm: boolean): void { diff --git a/src/views/mobile/transactions/EditPage.vue b/src/views/mobile/transactions/EditPage.vue index f4e35a54..4a2ff7d3 100644 --- a/src/views/mobile/transactions/EditPage.vue +++ b/src/views/mobile/transactions/EditPage.vue @@ -912,7 +912,7 @@ function init(): void { if (fromTransaction) { addByTemplateId.value = fromTransaction.id; } - } else if ((settingsStore.appSettings.autoSaveTransactionDraft === 'enabled' || settingsStore.appSettings.autoSaveTransactionDraft === 'confirmation') && transactionsStore.transactionDraft) { + } else if (query['noTransactionDraft'] !== 'true' && (settingsStore.appSettings.autoSaveTransactionDraft === 'enabled' || settingsStore.appSettings.autoSaveTransactionDraft === 'confirmation') && transactionsStore.transactionDraft) { fromTransaction = Transaction.ofDraft(transactionsStore.transactionDraft); } } else if (pageTypeAndMode.type === TransactionEditPageType.Template && responses[4] instanceof TransactionTemplate) { @@ -1020,7 +1020,7 @@ function save(): void { showToast('You have saved this transaction'); } - if (mode.value === TransactionEditPageMode.Add && !addByTemplateId.value && !duplicateFromId.value) { + if (mode.value === TransactionEditPageMode.Add && query['noTransactionDraft'] !== 'true' && !addByTemplateId.value && !duplicateFromId.value) { transactionsStore.clearTransactionDraft(); } @@ -1230,14 +1230,16 @@ function onPageAfterIn(): void { } function onPageBeforeOut(): void { - if (submitted.value || pageTypeAndMode?.type !== TransactionEditPageType.Transaction || mode.value !== TransactionEditPageMode.Add || addByTemplateId.value || duplicateFromId.value) { + if (submitted.value || pageTypeAndMode?.type !== TransactionEditPageType.Transaction || mode.value !== TransactionEditPageMode.Add || query['noTransactionDraft'] === 'true' || addByTemplateId.value || duplicateFromId.value) { return; } + const initAmount: number | undefined = query['withAmount'] && query['withAmount'] === 'true' && query['amount'] ? parseInt(query['amount']) : undefined; + if (settingsStore.appSettings.autoSaveTransactionDraft === 'confirmation') { - if (transactionsStore.isTransactionDraftModified(transaction.value, query['categoryId'], query['accountId'], query['tagIds'])) { + if (transactionsStore.isTransactionDraftModified(transaction.value, initAmount, query['categoryId'], query['accountId'], query['tagIds'])) { showConfirm('Do you want to save this transaction draft?', () => { - transactionsStore.saveTransactionDraft(transaction.value, query['categoryId'], query['accountId'], query['tagIds']); + transactionsStore.saveTransactionDraft(transaction.value, initAmount, query['categoryId'], query['accountId'], query['tagIds']); }, () => { transactionsStore.clearTransactionDraft(); }); @@ -1245,7 +1247,7 @@ function onPageBeforeOut(): void { transactionsStore.clearTransactionDraft(); } } else if (settingsStore.appSettings.autoSaveTransactionDraft === 'enabled') { - transactionsStore.saveTransactionDraft(transaction.value, query['categoryId'], query['accountId'], query['tagIds']); + transactionsStore.saveTransactionDraft(transaction.value, initAmount, query['categoryId'], query['accountId'], query['tagIds']); } }