From 9fde36dca17e0c0bf1368cc9f81cb81a588344ee Mon Sep 17 00:00:00 2001 From: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com> Date: Tue, 5 Sep 2023 09:54:04 -0700 Subject: [PATCH] Fix ofx/qfx import options (#1649) * Fix ofx/qfx import options * Release notes --- .../components/modals/ImportTransactions.js | 84 ++++++++++++------- upcoming-release-notes/1649.md | 6 ++ 2 files changed, 59 insertions(+), 31 deletions(-) create mode 100644 upcoming-release-notes/1649.md diff --git a/packages/desktop-client/src/components/modals/ImportTransactions.js b/packages/desktop-client/src/components/modals/ImportTransactions.js index 7e7fce675..93728cf77 100644 --- a/packages/desktop-client/src/components/modals/ImportTransactions.js +++ b/packages/desktop-client/src/components/modals/ImportTransactions.js @@ -655,15 +655,13 @@ export default function ImportTransactions({ modalProps, options }) { useEffect(() => { const fileType = getFileType(options.filename); - - parse( - options.filename, - fileType === 'csv' - ? { delimiter: csvDelimiter, hasHeaderRow } - : fileType === 'ofx' - ? { fallbackMissingPayeeToMemo } - : null, + const parseOptions = getParseOptions( + fileType, + { csvDelimiter, hasHeaderRow }, + { fallbackMissingPayeeToMemo }, ); + + parse(options.filename, parseOptions); }, [parseTransactions, options.filename]); function onSplitMode() { @@ -707,15 +705,13 @@ export default function ImportTransactions({ modalProps, options }) { }); const fileType = getFileType(res[0]); - - parse( - res[0], - fileType === 'csv' - ? { delimiter: csvDelimiter } - : fileType === 'ofx' - ? { fallbackMissingPayeeToMemo } - : null, + const parseOptions = getParseOptions( + fileType, + { csvDelimiter, hasHeaderRow }, + { fallbackMissingPayeeToMemo }, ); + + parse(res[0], parseOptions); } function onUpdateFields(field, name) { @@ -731,10 +727,9 @@ export default function ImportTransactions({ modalProps, options }) { for (let trans of transactions) { trans = fieldMappings ? applyFieldMappings(trans, fieldMappings) : trans; - let date = - filetype === 'qfx' || filetype === 'ofx' - ? trans.date - : parseDate(trans.date, parseDateFormat); + let date = isOfxFile(filetype) + ? trans.date + : parseDate(trans.date, parseDateFormat); if (date == null) { errorMessage = `Unable to parse date ${ trans.date || '(empty)' @@ -768,12 +763,12 @@ export default function ImportTransactions({ modalProps, options }) { return; } - if (filetype !== 'ofx' && filetype !== 'qfx') { + if (!isOfxFile(filetype)) { let key = `parse-date-${accountId}-${filetype}`; savePrefs({ [key]: parseDateFormat }); } - if (filetype === 'ofx') { + if (isOfxFile(filetype)) { savePrefs({ [`ofx-fallback-missing-payee-${accountId}`]: fallbackMissingPayeeToMemo, }); @@ -906,15 +901,18 @@ export default function ImportTransactions({ modalProps, options }) { </View> )} - {filetype === 'ofx' && ( + {isOfxFile(filetype) && ( <CheckboxOption id="form_fallback_missing_payee" checked={fallbackMissingPayeeToMemo} onChange={() => { setFallbackMissingPayeeToMemo(state => !state); - parse(filename, { - fallbackMissingPayeeToMemo: !fallbackMissingPayeeToMemo, - }); + parse( + filename, + getParseOptions('ofx', { + fallbackMissingPayeeToMemo: !fallbackMissingPayeeToMemo, + }), + ); }} > Use Memo as a fallback for empty Payees @@ -964,7 +962,13 @@ export default function ImportTransactions({ modalProps, options }) { value={csvDelimiter} onChange={value => { setCsvDelimiter(value); - parse(filename, { delimiter: value, hasHeaderRow }); + parse( + filename, + getParseOptions('csv', { + delimiter: value, + hasHeaderRow, + }), + ); }} style={{ width: 50 }} /> @@ -974,10 +978,13 @@ export default function ImportTransactions({ modalProps, options }) { checked={hasHeaderRow} onChange={() => { setHasHeaderRow(!hasHeaderRow); - parse(filename, { - delimiter: csvDelimiter, - hasHeaderRow: !hasHeaderRow, - }); + parse( + filename, + getParseOptions('csv', { + delimiter: csvDelimiter, + hasHeaderRow: !hasHeaderRow, + }), + ); }} > File has header row @@ -1051,3 +1058,18 @@ export default function ImportTransactions({ modalProps, options }) { </Modal> ); } + +function getParseOptions(fileType, csvOptions, ofxOptions) { + if (fileType === 'csv') { + const { csvDelimiter, hasHeaderRow } = csvOptions; + return { csvDelimiter, hasHeaderRow }; + } else if (isOfxFile(fileType)) { + const { fallbackMissingPayeeToMemo } = ofxOptions; + return { fallbackMissingPayeeToMemo }; + } + return {}; +} + +function isOfxFile(fileType) { + return fileType === 'ofx' || fileType === 'qfx'; +} diff --git a/upcoming-release-notes/1649.md b/upcoming-release-notes/1649.md new file mode 100644 index 000000000..494bacd12 --- /dev/null +++ b/upcoming-release-notes/1649.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [joel-jeremy] +--- + +Fix qfx import issues reported in v23.9.0. -- GitLab