From d2185909c37c26026f2621125adf40e3bfe832fc Mon Sep 17 00:00:00 2001 From: Jed Fox Date: Tue, 2 May 2023 17:48:01 -0400 Subject: [PATCH] Add support for credit card OFX files (#987) --- .../loot-core/src/mocks/files/credit-card.ofx | 11 +++++++ .../__snapshots__/parse-file.test.ts.snap | 29 +++++++++++++++++++ .../src/server/accounts/parse-file.test.ts | 12 ++++++++ .../src/server/accounts/parse-file.ts | 5 +++- upcoming-release-notes/987.md | 6 ++++ 5 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 packages/loot-core/src/mocks/files/credit-card.ofx create mode 100644 upcoming-release-notes/987.md diff --git a/packages/loot-core/src/mocks/files/credit-card.ofx b/packages/loot-core/src/mocks/files/credit-card.ofx new file mode 100644 index 0000000000..60a820b5b9 --- /dev/null +++ b/packages/loot-core/src/mocks/files/credit-card.ofx @@ -0,0 +1,11 @@ +OFXHEADER:100 +DATA:OFXSGML +VERSION:102 +SECURITY:NONE +ENCODING:USASCII +CHARSET:1252 +COMPRESSION:NONE +OLDFILEUID:NONE +NEWFILEUID:NONE + +0INFO20230407120000[0:GMT]ENGApple Card1234500INFOUSD7dc6a2fd-2124-457a-a1420230301120000[0:GMT]20230331120000[0:GMT]DEBIT20230330120000[0:GMT]-6.0057f91dca-0460-4692-be90-84165b7002LOUISIANA STATE MUSEUM751 PLACE JOHN PAUL NEW ORLEANS 70116-3205LA USA-9654.0120230331120000[0:GMT]1173.0220230331120000[0:GMT] diff --git a/packages/loot-core/src/server/accounts/__snapshots__/parse-file.test.ts.snap b/packages/loot-core/src/server/accounts/__snapshots__/parse-file.test.ts.snap index 5ada01f60d..308b06b943 100644 --- a/packages/loot-core/src/server/accounts/__snapshots__/parse-file.test.ts.snap +++ b/packages/loot-core/src/server/accounts/__snapshots__/parse-file.test.ts.snap @@ -29,6 +29,35 @@ Array [ ] `; +exports[`File import ofx import works (credit card) 1`] = ` +Array [ + Object { + "acct": "one", + "amount": -600, + "category": null, + "cleared": 1, + "date": 20230330, + "description": "id2", + "error": null, + "financial_id": "57f91dca-0460-4692-be90-84165b7002", + "id": "id3", + "imported_description": "LOUISIANA STATE MUSEUM751 PLACE JOHN PAUL NEW ORLEANS 70116-3205LA USA", + "isChild": 0, + "isParent": 0, + "location": null, + "notes": null, + "parent_id": null, + "pending": 0, + "schedule": null, + "sort_order": 123456789, + "starting_balance_flag": 0, + "tombstone": 0, + "transferred_id": null, + "type": null, + }, +] +`; + exports[`File import ofx import works 1`] = ` Array [ Object { diff --git a/packages/loot-core/src/server/accounts/parse-file.test.ts b/packages/loot-core/src/server/accounts/parse-file.test.ts index a44754a165..b420762138 100644 --- a/packages/loot-core/src/server/accounts/parse-file.test.ts +++ b/packages/loot-core/src/server/accounts/parse-file.test.ts @@ -81,6 +81,18 @@ describe('File import', () => { expect(await getTransactions('one')).toMatchSnapshot(); }, 45000); + test('ofx import works (credit card)', async () => { + prefs.loadPrefs(); + await db.insertAccount({ id: 'one', name: 'one' }); + + let { errors } = await importFileWithRealTime( + 'one', + __dirname + '/../../mocks/files/credit-card.ofx', + ); + expect(errors.length).toBe(0); + expect(await getTransactions('one')).toMatchSnapshot(); + }, 45000); + test('qfx import works', async () => { prefs.loadPrefs(); await db.insertAccount({ id: 'one', name: 'one' }); diff --git a/packages/loot-core/src/server/accounts/parse-file.ts b/packages/loot-core/src/server/accounts/parse-file.ts index 87500ccec5..9d037d40f8 100644 --- a/packages/loot-core/src/server/accounts/parse-file.ts +++ b/packages/loot-core/src/server/accounts/parse-file.ts @@ -215,7 +215,10 @@ async function parseOfxJavascript(filepath) { } // .STMTTRN may be a list or a single object. const transactions = [ - data.body.OFX.BANKMSGSRSV1.STMTTRNRS.STMTRS.BANKTRANLIST.STMTTRN, + ( + data.body.OFX.BANKMSGSRSV1?.STMTTRNRS.STMTRS || + data.body.OFX.CREDITCARDMSGSRSV1?.CCSTMTTRNRS.CCSTMTRS + ).BANKTRANLIST.STMTTRN, ].flat(); return { errors, diff --git a/upcoming-release-notes/987.md b/upcoming-release-notes/987.md new file mode 100644 index 0000000000..d262331d44 --- /dev/null +++ b/upcoming-release-notes/987.md @@ -0,0 +1,6 @@ +--- +category: Enhancements +authors: [j-f1] +--- + +Add support for credit card OFX files