mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-19 17:24:26 +08:00
support exporting data when checking pending import data
This commit is contained in:
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Gregorian",
|
"Gregorian": "Gregorian",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Gregorian",
|
"Gregorian": "Gregorian",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Gregoriano",
|
"Gregorian": "Gregoriano",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Grégorien",
|
"Gregorian": "Grégorien",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Gregorian",
|
"Gregorian": "Gregorian",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Gregorian",
|
"Gregorian": "Gregorian",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "ಗ್ರೆಗೋರಿಯನ್",
|
"Gregorian": "ಗ್ರೆಗೋರಿಯನ್",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Gregorian",
|
"Gregorian": "Gregorian",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Gregorian",
|
"Gregorian": "Gregorian",
|
||||||
|
|||||||
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Gregorian",
|
"Gregorian": "Gregorian",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Gregorian",
|
"Gregorian": "Gregorian",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Gregorijanski",
|
"Gregorian": "Gregorijanski",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "கிரிகோரியன்",
|
"Gregorian": "கிரிகோரியன்",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "เกรกอเรียน",
|
"Gregorian": "เกรกอเรียน",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_mutabakat_ekstreleri",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_mutabakat_ekstreleri",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_ice_aktarim_eslemesi",
|
"defaultImportDataMappingFileName": "ezBookkeeping_ice_aktarim_eslemesi",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_isleme_betigi",
|
"defaultImportHandlingScript": "ezBookkeeping_isleme_betigi",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_ice_aktarim_degistirme_kurali"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_ice_aktarim_degistirme_kurali",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Miladi",
|
"Gregorian": "Miladi",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Gregorian",
|
"Gregorian": "Gregorian",
|
||||||
|
|||||||
+2
-1
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_reconciliation_statements",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
"defaultImportDataMappingFileName": "ezBookkeeping_import_data_mapping",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
"defaultImportHandlingScript": "ezBookkeeping_handling_script",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_import_replace_rule",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_import_check_result"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "Gregorian",
|
"Gregorian": "Gregorian",
|
||||||
|
|||||||
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_对账单",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_对账单",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_导入数据映射文件",
|
"defaultImportDataMappingFileName": "ezBookkeeping_导入数据映射文件",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_导入处理脚本",
|
"defaultImportHandlingScript": "ezBookkeeping_导入处理脚本",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_导入替换规则文件"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_导入替换规则文件",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_导入检查结果"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "公历",
|
"Gregorian": "公历",
|
||||||
|
|||||||
@@ -149,7 +149,8 @@
|
|||||||
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_對帳單",
|
"exportReconciliationStatementsFileName": "ezBookkeeping_{nickname}_對帳單",
|
||||||
"defaultImportDataMappingFileName": "ezBookkeeping_匯入資料對應檔案",
|
"defaultImportDataMappingFileName": "ezBookkeeping_匯入資料對應檔案",
|
||||||
"defaultImportHandlingScript": "ezBookkeeping_匯入處理腳本",
|
"defaultImportHandlingScript": "ezBookkeeping_匯入處理腳本",
|
||||||
"defaultImportReplaceRuleFileName": "ezBookkeeping_匯入替換規則檔案"
|
"defaultImportReplaceRuleFileName": "ezBookkeeping_匯入替換規則檔案",
|
||||||
|
"defaultImportCheckResultFileName": "ezBookkeeping_匯入檢查結果"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"Gregorian": "公曆",
|
"Gregorian": "公曆",
|
||||||
|
|||||||
@@ -419,6 +419,8 @@ import { type NameValue, type NameNumeralValue, itemAndIndex, reversed, keys } f
|
|||||||
import { type NumeralSystem, AmountFilterType } from '@/core/numeral.ts';
|
import { type NumeralSystem, AmountFilterType } from '@/core/numeral.ts';
|
||||||
import { CategoryType } from '@/core/category.ts';
|
import { CategoryType } from '@/core/category.ts';
|
||||||
import { TransactionType } from '@/core/transaction.ts';
|
import { TransactionType } from '@/core/transaction.ts';
|
||||||
|
import { KnownFileType } from '@/core/file.ts';
|
||||||
|
import { ImportTransactionColumnType } from '@/core/import_transaction.ts';
|
||||||
|
|
||||||
import { Account, type CategorizedAccountWithDisplayBalance } from '@/models/account.ts';
|
import { Account, type CategorizedAccountWithDisplayBalance } from '@/models/account.ts';
|
||||||
import type { TransactionCategory } from '@/models/transaction_category.ts';
|
import type { TransactionCategory } from '@/models/transaction_category.ts';
|
||||||
@@ -428,6 +430,7 @@ import { ImportTransaction } from '@/models/imported_transaction.ts';
|
|||||||
import {
|
import {
|
||||||
isString,
|
isString,
|
||||||
isNumber,
|
isNumber,
|
||||||
|
replaceAll,
|
||||||
objectFieldToArrayItem
|
objectFieldToArrayItem
|
||||||
} from '@/lib/common.ts';
|
} from '@/lib/common.ts';
|
||||||
import {
|
import {
|
||||||
@@ -437,15 +440,14 @@ import {
|
|||||||
parseDateTimeFromUnixTimeWithTimezoneOffset
|
parseDateTimeFromUnixTimeWithTimezoneOffset
|
||||||
} from '@/lib/datetime.ts';
|
} from '@/lib/datetime.ts';
|
||||||
import { formatCoordinate } from '@/lib/coordinate.ts';
|
import { formatCoordinate } from '@/lib/coordinate.ts';
|
||||||
import {
|
import { getAccountMapByName } from '@/lib/account.ts';
|
||||||
getAccountMapByName
|
|
||||||
} from '@/lib/account.ts';
|
|
||||||
import {
|
import {
|
||||||
transactionTypeToCategoryType,
|
transactionTypeToCategoryType,
|
||||||
getSecondaryTransactionMapByName,
|
getSecondaryTransactionMapByName,
|
||||||
getTransactionPrimaryCategoryName,
|
getTransactionPrimaryCategoryName,
|
||||||
getTransactionSecondaryCategoryName
|
getTransactionSecondaryCategoryName
|
||||||
} from '@/lib/category.ts';
|
} from '@/lib/category.ts';
|
||||||
|
import { startDownloadFile } from '@/lib/ui/common.ts';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
mdiCheck,
|
mdiCheck,
|
||||||
@@ -461,7 +463,9 @@ import {
|
|||||||
mdiShapePlusOutline,
|
mdiShapePlusOutline,
|
||||||
mdiPencilBoxMultipleOutline,
|
mdiPencilBoxMultipleOutline,
|
||||||
mdiNumericPositive1,
|
mdiNumericPositive1,
|
||||||
mdiNumericNegative1
|
mdiNumericNegative1,
|
||||||
|
mdiComma,
|
||||||
|
mdiKeyboardTab
|
||||||
} from '@mdi/js';
|
} from '@mdi/js';
|
||||||
|
|
||||||
type SnackBarType = InstanceType<typeof SnackBar>;
|
type SnackBarType = InstanceType<typeof SnackBar>;
|
||||||
@@ -504,6 +508,8 @@ const {
|
|||||||
tt,
|
tt,
|
||||||
getCurrentNumeralSystemType,
|
getCurrentNumeralSystemType,
|
||||||
formatDateTimeToLongDateTime,
|
formatDateTimeToLongDateTime,
|
||||||
|
formatDateTimeToGregorianDefaultDateTime,
|
||||||
|
formatAmountToWesternArabicNumeralsWithoutDigitGrouping,
|
||||||
formatAmountToLocalizedNumeralsWithCurrency,
|
formatAmountToLocalizedNumeralsWithCurrency,
|
||||||
getCategorizedAccountsWithDisplayBalance
|
getCategorizedAccountsWithDisplayBalance
|
||||||
} = useI18n();
|
} = useI18n();
|
||||||
@@ -937,6 +943,19 @@ const toolMenus = computed<ImportTransactionCheckDataMenu[]>(() => [
|
|||||||
title: tt('Batch Convert Selected Amounts to Negative Values'),
|
title: tt('Batch Convert Selected Amounts to Negative Values'),
|
||||||
disabled: isEditing.value || selectedImportTransactionCount.value < 1,
|
disabled: isEditing.value || selectedImportTransactionCount.value < 1,
|
||||||
onClick: () => convertTransactionAmountSign(-1)
|
onClick: () => convertTransactionAmountSign(-1)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prependIcon: mdiComma,
|
||||||
|
title: tt('Export to CSV (Comma-separated values) File'),
|
||||||
|
disabled: isEditing.value || selectedImportTransactionCount.value < 1,
|
||||||
|
divider: true,
|
||||||
|
onClick: () => exportData(KnownFileType.CSV)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prependIcon: mdiKeyboardTab,
|
||||||
|
title: tt('Export to TSV (Tab-separated values) File'),
|
||||||
|
disabled: isEditing.value || selectedImportTransactionCount.value < 1,
|
||||||
|
onClick: () => exportData(KnownFileType.TSV)
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -1320,6 +1339,20 @@ function getDisplayTimezone(transaction: ImportTransaction): string {
|
|||||||
return `UTC${getUtcOffsetByUtcOffsetMinutes(transaction.utcOffset)}`;
|
return `UTC${getUtcOffsetByUtcOffsetMinutes(transaction.utcOffset)}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getDisplayTransactionType(transaction: ImportTransaction): string {
|
||||||
|
if (transaction.type === TransactionType.ModifyBalance) {
|
||||||
|
return tt('Modify Balance');
|
||||||
|
} else if (transaction.type === TransactionType.Income) {
|
||||||
|
return tt('Income');
|
||||||
|
} else if (transaction.type === TransactionType.Expense) {
|
||||||
|
return tt('Expense');
|
||||||
|
} else if (transaction.type === TransactionType.Transfer) {
|
||||||
|
return tt('Transfer');
|
||||||
|
} else {
|
||||||
|
return tt('Unknown');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getDisplayCurrency(value: number, currencyCode: string): string {
|
function getDisplayCurrency(value: number, currencyCode: string): string {
|
||||||
return formatAmountToLocalizedNumeralsWithCurrency(value, currencyCode);
|
return formatAmountToLocalizedNumeralsWithCurrency(value, currencyCode);
|
||||||
}
|
}
|
||||||
@@ -2079,6 +2112,94 @@ function changeCustomDateFilter(minTime: number, maxTime: number): void {
|
|||||||
showCustomDateRangeDialog.value = false;
|
showCustomDateRangeDialog.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function exportData(fileType: KnownFileType): void {
|
||||||
|
if (!props.importTransactions || props.importTransactions.length < 1 || selectedImportTransactionCount.value < 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let separator = ',';
|
||||||
|
|
||||||
|
if (fileType === KnownFileType.TSV) {
|
||||||
|
separator = '\t';
|
||||||
|
}
|
||||||
|
|
||||||
|
const header = [
|
||||||
|
tt(ImportTransactionColumnType.TransactionTime.name),
|
||||||
|
tt(ImportTransactionColumnType.TransactionTimezone.name),
|
||||||
|
tt(ImportTransactionColumnType.TransactionType.name),
|
||||||
|
tt(ImportTransactionColumnType.Category.name),
|
||||||
|
tt(ImportTransactionColumnType.AccountName.name),
|
||||||
|
tt(ImportTransactionColumnType.AccountCurrency.name),
|
||||||
|
tt(ImportTransactionColumnType.Amount.name),
|
||||||
|
tt(ImportTransactionColumnType.RelatedAccountName.name),
|
||||||
|
tt(ImportTransactionColumnType.RelatedAccountCurrency.name),
|
||||||
|
tt(ImportTransactionColumnType.RelatedAmount.name),
|
||||||
|
tt(ImportTransactionColumnType.GeographicLocation.name),
|
||||||
|
tt(ImportTransactionColumnType.Tags.name),
|
||||||
|
tt(ImportTransactionColumnType.Description.name)
|
||||||
|
].join(separator) + '\n';
|
||||||
|
|
||||||
|
const transactions = props.importTransactions ?? [];
|
||||||
|
const rows = transactions.filter(transaction => transaction.selected).map(transaction => {
|
||||||
|
const transactionTime = parseDateTimeFromUnixTimeWithTimezoneOffset(transaction.time, transaction.utcOffset);
|
||||||
|
const type = getDisplayTransactionType(transaction);
|
||||||
|
const accountName = transaction.sourceAccountId && transaction.sourceAccountId !== '0' && allAccountsMap.value[transaction.sourceAccountId] ? (allAccountsMap.value[transaction.sourceAccountId]?.name ?? transaction.originalSourceAccountName) : transaction.originalSourceAccountName;
|
||||||
|
const amountCurrency = transaction.sourceAccountId && transaction.sourceAccountId !== '0' && allAccountsMap.value[transaction.sourceAccountId] ? (allAccountsMap.value[transaction.sourceAccountId]?.currency ?? transaction.originalSourceAccountCurrency) : transaction.originalSourceAccountCurrency;
|
||||||
|
const amount = formatAmountToWesternArabicNumeralsWithoutDigitGrouping(transaction.sourceAmount);
|
||||||
|
const geographicLocation = transaction.geoLocation ? `${transaction.geoLocation.longitude} ${transaction.geoLocation.latitude}` : '';
|
||||||
|
let categoryName = transaction.categoryId && transaction.categoryId !== '0' && allCategoriesMap.value[transaction.categoryId] ? (allCategoriesMap.value[transaction.categoryId]?.name ?? transaction.originalCategoryName) : transaction.originalCategoryName;
|
||||||
|
let relatedAccountName: string | undefined = undefined;
|
||||||
|
let relatedAccountCurrency: string | undefined = undefined;
|
||||||
|
let relatedAmount: string | undefined = undefined;
|
||||||
|
|
||||||
|
if (transaction.type === TransactionType.ModifyBalance) {
|
||||||
|
categoryName = '';
|
||||||
|
} else if (transaction.type === TransactionType.Transfer) {
|
||||||
|
relatedAccountName = transaction.destinationAccountId && transaction.destinationAccountId !== '0' && allAccountsMap.value[transaction.destinationAccountId] ? (allAccountsMap.value[transaction.destinationAccountId]?.name ?? transaction.originalDestinationAccountName) : transaction.originalDestinationAccountName;
|
||||||
|
relatedAccountCurrency = transaction.destinationAccountId && transaction.destinationAccountId !== '0' && allAccountsMap.value[transaction.destinationAccountId] ? (allAccountsMap.value[transaction.destinationAccountId]?.currency ?? transaction.originalDestinationAccountCurrency) : transaction.originalDestinationAccountCurrency;
|
||||||
|
relatedAmount = formatAmountToWesternArabicNumeralsWithoutDigitGrouping(transaction.destinationAmount);
|
||||||
|
}
|
||||||
|
|
||||||
|
const tagNames: string[] = [];
|
||||||
|
|
||||||
|
if (transaction.tagIds && transaction.tagIds.length > 0) {
|
||||||
|
for (const [tagId, index] of itemAndIndex(transaction.tagIds)) {
|
||||||
|
let tagName = '';
|
||||||
|
|
||||||
|
if (tagId && tagId !== '0' && allTagsMap.value[tagId]) {
|
||||||
|
tagName = allTagsMap.value[tagId]!.name;
|
||||||
|
} else if (transaction.originalTagNames && transaction.originalTagNames[index]) {
|
||||||
|
tagName = transaction.originalTagNames[index] as string;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tagName) {
|
||||||
|
tagName = replaceAll(tagName, separator, ' ');
|
||||||
|
tagName = replaceAll(tagName, ';', ' ');
|
||||||
|
tagNames.push(tagName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
formatDateTimeToGregorianDefaultDateTime(transactionTime),
|
||||||
|
getUtcOffsetByUtcOffsetMinutes(transaction.utcOffset),
|
||||||
|
type,
|
||||||
|
replaceAll(categoryName, separator, ' '),
|
||||||
|
replaceAll(accountName, separator, ' '),
|
||||||
|
amountCurrency,
|
||||||
|
amount,
|
||||||
|
replaceAll(relatedAccountName ?? '', separator, ' '),
|
||||||
|
relatedAccountCurrency ?? '',
|
||||||
|
relatedAmount ?? '',
|
||||||
|
geographicLocation,
|
||||||
|
tagNames.join(';'),
|
||||||
|
replaceAll(transaction.comment || '', separator, ' ')
|
||||||
|
].join(separator);
|
||||||
|
});
|
||||||
|
|
||||||
|
startDownloadFile(fileType.formatFileName(tt('dataExport.defaultImportCheckResultFileName')), fileType.createBlob(header + rows.join('\n')));
|
||||||
|
}
|
||||||
|
|
||||||
function onShowDateRangeError(message: string): void {
|
function onShowDateRangeError(message: string): void {
|
||||||
snackbar.value?.showError(message);
|
snackbar.value?.showError(message);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user