From e60c633e56701d6e755b7d9d1a06d792636be64b Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sun, 9 Feb 2025 21:11:55 +0800 Subject: [PATCH] duplicate transaction with time / geographic location (#36) --- src/locales/de.json | 3 ++ src/locales/en.json | 3 ++ src/locales/es.json | 3 ++ src/locales/ru.json | 3 ++ src/locales/vi.json | 3 ++ src/locales/zh_Hans.json | 3 ++ .../transactions/list/dialogs/EditDialog.vue | 41 +++++++++++++++---- src/views/mobile/transactions/EditPage.vue | 28 +++++++++++-- 8 files changed, 75 insertions(+), 12 deletions(-) diff --git a/src/locales/de.json b/src/locales/de.json index af59ef40..d13109c1 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -1521,6 +1521,9 @@ "Swap Account": "Konto tauschen", "Swap Amount": "Betrag tauschen", "Swap Account and Amount": "Konto und Betrag tauschen", + "Duplicate (With Time)": "Duplicate (With Time)", + "Duplicate (With Geographic Location)": "Duplicate (With Geographic Location)", + "Duplicate (With Time and Geographic Location)": "Duplicate (With Time and Geographic Location)", "Category": "Kategorie", "Multiple Categories": "Mehrere Kategorien", "Account": "Konto", diff --git a/src/locales/en.json b/src/locales/en.json index 15ebbadf..568661d4 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1521,6 +1521,9 @@ "Swap Account": "Swap Account", "Swap Amount": "Swap Amount", "Swap Account and Amount": "Swap Account and Amount", + "Duplicate (With Time)": "Duplicate (With Time)", + "Duplicate (With Geographic Location)": "Duplicate (With Geographic Location)", + "Duplicate (With Time and Geographic Location)": "Duplicate (With Time and Geographic Location)", "Category": "Category", "Multiple Categories": "Multiple Categories", "Account": "Account", diff --git a/src/locales/es.json b/src/locales/es.json index 40da4136..eabba553 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -1521,6 +1521,9 @@ "Swap Account": "Intercambiar cuenta", "Swap Amount": "Intercambiar importe", "Swap Account and Amount": "Intercambiar Cuenta e Importe", + "Duplicate (With Time)": "Duplicate (With Time)", + "Duplicate (With Geographic Location)": "Duplicate (With Geographic Location)", + "Duplicate (With Time and Geographic Location)": "Duplicate (With Time and Geographic Location)", "Category": "Categoría", "Multiple Categories": "Múltiples categorías", "Account": "Cuenta", diff --git a/src/locales/ru.json b/src/locales/ru.json index f99af0bc..c35ab45d 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -1521,6 +1521,9 @@ "Swap Account": "Поменять счет", "Swap Amount": "Поменять сумму", "Swap Account and Amount": "Поменять счет и сумму", + "Duplicate (With Time)": "Duplicate (With Time)", + "Duplicate (With Geographic Location)": "Duplicate (With Geographic Location)", + "Duplicate (With Time and Geographic Location)": "Duplicate (With Time and Geographic Location)", "Category": "Категория", "Multiple Categories": "Несколько категорий", "Account": "Счет", diff --git a/src/locales/vi.json b/src/locales/vi.json index 3ceaad43..66f1e274 100644 --- a/src/locales/vi.json +++ b/src/locales/vi.json @@ -1521,6 +1521,9 @@ "Swap Account": "Hoán đổi tài khoản", "Swap Amount": "Hoán đổi số tiền", "Swap Account and Amount": "Hoán đổi tài khoản và số tiền", + "Duplicate (With Time)": "Duplicate (With Time)", + "Duplicate (With Geographic Location)": "Duplicate (With Geographic Location)", + "Duplicate (With Time and Geographic Location)": "Duplicate (With Time and Geographic Location)", "Category": "Danh mục", "Multiple Categories": "Nhiều danh mục", "Account": "Tài khoản", diff --git a/src/locales/zh_Hans.json b/src/locales/zh_Hans.json index 8623b745..7edcb171 100644 --- a/src/locales/zh_Hans.json +++ b/src/locales/zh_Hans.json @@ -1521,6 +1521,9 @@ "Swap Account": "交换账户", "Swap Amount": "交换金额", "Swap Account and Amount": "交换账户和金额", + "Duplicate (With Time)": "复制 (含时间)", + "Duplicate (With Geographic Location)": "复制 (含地理位置)", + "Duplicate (With Time and Geographic Location)": "复制 (含时间和地理位置)", "Category": "分类", "Multiple Categories": "多个分类", "Account": "账户", diff --git a/src/views/desktop/transactions/list/dialogs/EditDialog.vue b/src/views/desktop/transactions/list/dialogs/EditDialog.vue index a07816d7..858713b7 100644 --- a/src/views/desktop/transactions/list/dialogs/EditDialog.vue +++ b/src/views/desktop/transactions/list/dialogs/EditDialog.vue @@ -382,9 +382,26 @@ {{ tt(saveButtonTitle) }} - {{ tt('Duplicate') }} + + {{ tt('Duplicate') }} + + + + + + + + + + + {{ tt('Edit') }} @@ -461,6 +478,7 @@ import { mdiEyeOutline, mdiSwapHorizontal, mdiPound, + mdiMenuDown, mdiImagePlusOutline, mdiTrashCanOutline, mdiFullscreen @@ -863,7 +881,7 @@ function save(): void { } } -function duplicate(): void { +function duplicate(withTime?: boolean, withGeoLocation?: boolean): void { if (props.type !== TransactionEditPageType.Transaction || mode.value !== TransactionEditPageMode.View) { return; } @@ -872,10 +890,17 @@ function duplicate(): void { duplicateFromId.value = transaction.value.id; activeTab.value = 'basicInfo'; transaction.value.id = ''; - transaction.value.time = getCurrentUnixTime(); - transaction.value.timeZone = settingsStore.appSettings.timeZone; - transaction.value.utcOffset = getTimezoneOffsetMinutes(transaction.value.timeZone); - transaction.value.removeGeoLocation(); + + if (!withTime) { + transaction.value.time = getCurrentUnixTime(); + transaction.value.timeZone = settingsStore.appSettings.timeZone; + transaction.value.utcOffset = getTimezoneOffsetMinutes(transaction.value.timeZone); + } + + if (!withGeoLocation) { + transaction.value.removeGeoLocation(); + } + transaction.value.clearPictures(); mode.value = TransactionEditPageMode.Add; } diff --git a/src/views/mobile/transactions/EditPage.vue b/src/views/mobile/transactions/EditPage.vue index c632d377..538343b3 100644 --- a/src/views/mobile/transactions/EditPage.vue +++ b/src/views/mobile/transactions/EditPage.vue @@ -4,7 +4,7 @@ - + @@ -403,18 +403,24 @@ - + {{ tt('Swap Account') }} {{ tt('Swap Amount') }} {{ tt('Swap Account and Amount') }} - + {{ tt('Show Amount') }} {{ tt('Hide Amount') }} {{ tt('Add Picture') }} + + {{ tt('Duplicate') }} + {{ tt('Duplicate (With Time)') }} + {{ tt('Duplicate (With Geographic Location)') }} + {{ tt('Duplicate (With Time and Geographic Location)') }} + {{ tt('Cancel') }} @@ -863,7 +869,17 @@ function init(): void { pageTypeAndMode.type === TransactionEditPageType.Transaction && (mode.value === TransactionEditPageMode.Edit || mode.value === TransactionEditPageMode.View) ); - if (pageTypeAndMode.type === TransactionEditPageType.Template && query['id'] && responses[4] instanceof TransactionTemplate) { + if (pageTypeAndMode.type === TransactionEditPageType.Transaction && query['id'] && responses[4] instanceof Transaction) { + if (fromTransaction && query['withTime'] && query['withTime'] === 'true') { + transaction.value.time = fromTransaction.time; + transaction.value.timeZone = fromTransaction.timeZone; + transaction.value.utcOffset = fromTransaction.utcOffset; + } + + if (fromTransaction && query['withGeoLocation'] && query['withGeoLocation'] === 'true') { + transaction.value.setGeoLocation(fromTransaction.geoLocation); + } + } else if (pageTypeAndMode.type === TransactionEditPageType.Template && query['id'] && responses[4] instanceof TransactionTemplate) { const template = responses[4]; transaction.value.id = template.id; @@ -1117,6 +1133,10 @@ function viewOrRemovePicture(pictureInfo: TransactionPictureInfoBasicResponse): }); } +function duplicate(withTime?: boolean, withGeoLocation?: boolean): void { + props.f7router.navigate(`/transaction/add?id=${transaction.value.id}&type=${transaction.value.type}&withTime=${withTime ?? false}&withGeoLocation=${withGeoLocation ?? false}`); +} + function onPageAfterIn(): void { routeBackOnError(props.f7router, loadingError);