GnuCash-Pocket / gnucash-android

GnuCash Pocket – a mobile companion app for Gnucash desktop application (https://github.com/Gnucash/gnucash). Developed independently of GnuCash.
Apache License 2.0
84 stars 17 forks source link

Exporting to CSV writes a 0 byte file, 'There are no transactions available to export' message #190

Open Apteryks opened 1 week ago

Apteryks commented 1 week ago

Steps to reproduce the behaviour

With my GnuCash file loaded:

  1. Select 'Export...' from the burger menu
  2. Select SINCE date or All time (doesn't matter)
  3. Export 'Save As...', with 'Comma-separated values'
  4. Touch Export button

Expected behaviour

Creates a .csv file with transactions in.

Actual behaviour

Prints a There are no transactions available to export message and writes a 0 byte (empty) file.

Software specifications

Apteryks commented 1 week ago

Using adb and logcat to grab the logs off the device, I could see:

10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter: Error while exporting transactions to CSV
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter: java.lang.ArithmeticException: Division by zero
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter:   at java.math.BigDecimal.divide(BigDecimal.java:1024)
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter:   at org.gnucash.android.model.Money.div(Money.kt:360)
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter:   at org.gnucash.android.export.csv.CsvTransactionsExporter.writeSplitsToCsv(CsvTransactionsExporter.kt:98)
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter:   at org.gnucash.android.export.csv.CsvTransactionsExporter.generateExport(CsvTransactionsExporter.kt:121)
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter:   at org.gnucash.android.export.csv.CsvTransactionsExporter.generateExport(CsvTransactionsExporter.kt:52)
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter:   at org.gnucash.android.export.ExportAsyncTask.doInBackground(ExportAsyncTask.java:138)
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter:   at org.gnucash.android.export.ExportAsyncTask.doInBackground(ExportAsyncTask.java:90)
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter:   at android.os.AsyncTask$2.call(AsyncTask.java:304)
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter:   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter:   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter:   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter:   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
10-08 15:34:40.943 10031 13387 E CsvTransactionsExporter:   at java.lang.Thread.run(Thread.java:762)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask: Error exporting: Failed to generate export GnuCash transactions CSV - Division by zero
10-08 15:34:40.948 10031 13387 E ExportAsyncTask: org.gnucash.android.export.Exporter$ExporterException: Failed to generate export GnuCash transactions CSV - Division by zero
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at org.gnucash.android.export.csv.CsvTransactionsExporter.generateExport(CsvTransactionsExporter.kt:127)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at org.gnucash.android.export.csv.CsvTransactionsExporter.generateExport(CsvTransactionsExporter.kt:52)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at org.gnucash.android.export.ExportAsyncTask.doInBackground(ExportAsyncTask.java:138)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at org.gnucash.android.export.ExportAsyncTask.doInBackground(ExportAsyncTask.java:90)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at android.os.AsyncTask$2.call(AsyncTask.java:304)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at java.lang.Thread.run(Thread.java:762)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask: Caused by: java.lang.ArithmeticException: Division by zero
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at java.math.BigDecimal.divide(BigDecimal.java:1024)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at org.gnucash.android.model.Money.div(Money.kt:360)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at org.gnucash.android.export.csv.CsvTransactionsExporter.writeSplitsToCsv(CsvTransactionsExporter.kt:98)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   at org.gnucash.android.export.csv.CsvTransactionsExporter.generateExport(CsvTransactionsExporter.kt:121)
10-08 15:34:40.948 10031 13387 E ExportAsyncTask:   ... 9 more
Apteryks commented 1 week ago

Seems to be the same underlying problem as reported in https://github.com/GnuCash-Pocket/gnucash-android/issues/98

Apteryks commented 1 week ago

So the line failing is this one: https://github.com/GnuCash-Pocket/gnucash-android/blob/0d42424e31fa34754fe104140fe9dce8466fb283/app/src/main/java/org/gnucash/android/export/csv/CsvTransactionsExporter.kt#L98

writer.writeEndToken(split.quantity!!.div(split.value!!).formattedStringWithoutSymbol())

where I assume split.value!! is zero for some reason.

BaumiCoder commented 1 day ago

The error appears also for the Quicken Interchange Format (qif).