From 659845a39b4860726aeba9d002fc9783c8b521f6 Mon Sep 17 00:00:00 2001 From: bobobo1618 Date: Wed, 30 Aug 2023 23:23:04 +0200 Subject: [PATCH 1/4] Create neon_csv.js --- ImportApps/neon_csv.js | 59 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 ImportApps/neon_csv.js diff --git a/ImportApps/neon_csv.js b/ImportApps/neon_csv.js new file mode 100644 index 00000000..a8ecf7a9 --- /dev/null +++ b/ImportApps/neon_csv.js @@ -0,0 +1,59 @@ +// @id = ch.banana.app.import_neon_csv +// @api = 1.0 +// @pubdate = 2023-08-30 +// @publisher = bobobo1618 +// @description = Import Neon CSV +// @doctype = * +// @docproperties = +// @task = import.transactions +// @outputformat = transactions.simple +// @inputdatasource = openfiledialog +// @inputencoding = utf8 +// @inputfilefilter = Text files (*.txt *.csv);;All files (*.*) + +/* CSV file example: +"Date";"Amount";"Original amount";"Original currency";"Exchange rate";"Description";"Subject";"Category";"Tags";"Wise";"Spaces" +"2022-12-30";"-5.00";"";"";"";"App";;"shopping";"";"no";"no" +"2022-03-03";"2000.00";"";"";"";"Other Account";;"income";"";"no";"no" +"2022-02-26";"-538.28";"-579.33";"USD";"1.07626";"American Stuff";;"shopping";"";"no";"no" +*/ + +function csvToBanana(csvObj) { + var banana = {}; + banana['Date'] = csvObj['Date']; + banana['Description'] = `${csvObj['Description']} ${csvObj['Subject']}`; + + if (Number(csvObj['Amount']) > 0) { + banana['Income'] = Math.abs(csvObj['Amount']); + banana['Expenses'] = ''; + } else { + banana['Income'] = ''; + banana['Expenses'] = Math.abs(csvObj['Amount']); + } + + banana['AmountCurrency'] = csvObj['Original amount']; + banana['ExchangeCurrency'] = csvObj['Original currency'] || 'CHF'; + banana['ExchangeRate'] = csvObj['Exchange rate']; + + return banana; +} + +// Parse the data and return the data to be imported as a tab separated file. +function exec(inText) { + + // Convert a csv file to an array of array. + // Parameters are: text to convert, values separator, delimiter for text values + var csvFile = Banana.Converter.csvToArray(inText, ';', '"'); + var headers = csvFile[0]; + csvFile.splice(0, 1); + Banana.console.log(`Found headers: ${headers}`); + + var arrayOfObjects = Banana.Converter.arrayToObject(headers, csvFile, true); + var bananaObjects = arrayOfObjects.map(csvToBanana); + + var tsvFile = Banana.Converter.objectArrayToCsv(['Date', 'Description', 'Income', 'Expenses', 'AmountCurrency','ExchangeCurrency','ExchangeRate'], bananaObjects, '\t'); + + // Return the converted tsv file + return tsvFile; + +} From f1a2ca85b213bf94cdd7b82fc0dbd76f02ff697f Mon Sep 17 00:00:00 2001 From: bobobo1618 Date: Thu, 31 Aug 2023 18:08:08 +0200 Subject: [PATCH 2/4] Update neon_csv.js From aaa9bb89fc6bbc5928bbf3d42d6464f3b03db648 Mon Sep 17 00:00:00 2001 From: bobobo1618 Date: Thu, 31 Aug 2023 19:20:41 +0200 Subject: [PATCH 3/4] Update neon_csv.js --- ImportApps/neon_csv.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/ImportApps/neon_csv.js b/ImportApps/neon_csv.js index a8ecf7a9..5182ec06 100644 --- a/ImportApps/neon_csv.js +++ b/ImportApps/neon_csv.js @@ -22,14 +22,18 @@ function csvToBanana(csvObj) { var banana = {}; banana['Date'] = csvObj['Date']; banana['Description'] = `${csvObj['Description']} ${csvObj['Subject']}`; + + var amount = csvObj['Original amount'] ? csvObj['Original amount'] : csvObj['Amount']; - if (Number(csvObj['Amount']) > 0) { - banana['Income'] = Math.abs(csvObj['Amount']); + if (Number(amount) > 0) { + banana['Income'] = amount; banana['Expenses'] = ''; } else { banana['Income'] = ''; - banana['Expenses'] = Math.abs(csvObj['Amount']); + banana['Expenses'] = amount; } + + banana['Amount'] = csvObj['Amount']; banana['AmountCurrency'] = csvObj['Original amount']; banana['ExchangeCurrency'] = csvObj['Original currency'] || 'CHF'; @@ -51,7 +55,16 @@ function exec(inText) { var arrayOfObjects = Banana.Converter.arrayToObject(headers, csvFile, true); var bananaObjects = arrayOfObjects.map(csvToBanana); - var tsvFile = Banana.Converter.objectArrayToCsv(['Date', 'Description', 'Income', 'Expenses', 'AmountCurrency','ExchangeCurrency','ExchangeRate'], bananaObjects, '\t'); + var tsvFile = Banana.Converter.objectArrayToCsv([ + 'Date', + 'Description', + 'Income', + 'Expenses', + 'Amount', + 'AmountCurrency', + 'ExchangeCurrency', + 'ExchangeRate', + ], bananaObjects, '\t'); // Return the converted tsv file return tsvFile; From 97233a0d8c75b2935768a63bfbb7631f156b32bf Mon Sep 17 00:00:00 2001 From: bobobo1618 Date: Mon, 4 Sep 2023 13:14:29 +0200 Subject: [PATCH 4/4] Move neon importer --- .../ch.banana.switzerland.import.neon-free.js} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename ImportApps/{neon_csv.js => neon_free_statement_csv/ch.banana.switzerland.import.neon-free.js} (97%) diff --git a/ImportApps/neon_csv.js b/ImportApps/neon_free_statement_csv/ch.banana.switzerland.import.neon-free.js similarity index 97% rename from ImportApps/neon_csv.js rename to ImportApps/neon_free_statement_csv/ch.banana.switzerland.import.neon-free.js index 5182ec06..7adb8f8b 100644 --- a/ImportApps/neon_csv.js +++ b/ImportApps/neon_free_statement_csv/ch.banana.switzerland.import.neon-free.js @@ -1,4 +1,4 @@ -// @id = ch.banana.app.import_neon_csv +// @id = ch.banana.switzerland.import.neon-free // @api = 1.0 // @pubdate = 2023-08-30 // @publisher = bobobo1618