Skip to content

Commit 13f243b

Browse files
AngelicosPhosphorosAngelicosPhosphoros
authored andcommitted
Transaction export refactored. Cursor based iteration over transactions
1 parent 76c74cb commit 13f243b

1 file changed

Lines changed: 84 additions & 32 deletions

File tree

app/src/main/java/org/gnucash/android/export/csv/CsvTransactionsExporter.java

Lines changed: 84 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,27 @@
1717
package org.gnucash.android.export.csv;
1818

1919
import android.database.sqlite.SQLiteDatabase;
20+
import android.database.Cursor;
2021
import com.crashlytics.android.Crashlytics;
2122

2223
import org.gnucash.android.export.ExportParams;
2324
import org.gnucash.android.export.Exporter;
2425
import org.gnucash.android.model.Account;
26+
import org.gnucash.android.model.Commodity;
27+
import org.gnucash.android.model.Money;
2528
import org.gnucash.android.model.Split;
2629
import org.gnucash.android.model.Transaction;
30+
import org.gnucash.android.model.TransactionType;
31+
2732
import java.io.BufferedOutputStream;
2833
import java.io.FileOutputStream;
2934
import java.io.IOException;
3035
import java.io.OutputStreamWriter;
3136
import java.text.DateFormat;
3237
import java.text.SimpleDateFormat;
3338
import java.util.ArrayList;
39+
import java.util.Collections;
40+
import java.util.Comparator;
3441
import java.util.Date;
3542
import java.util.List;
3643

@@ -43,6 +50,21 @@ public class CsvTransactionsExporter extends Exporter{
4350

4451
private char mCsvSeparator;
4552

53+
private DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
54+
55+
private Comparator<Split> splitComparator = new Comparator<Split>() {
56+
@Override
57+
public int compare(Split o1, Split o2) {
58+
if(o1.getType() == TransactionType.DEBIT
59+
&& o2.getType() == TransactionType.CREDIT)
60+
return -1;
61+
if (o1.getType() == TransactionType.CREDIT
62+
&& o2.getType() == TransactionType.DEBIT)
63+
return 1;
64+
return 0;
65+
}
66+
};
67+
4668
/**
4769
* Construct a new exporter with export parameters
4870
* @param params Parameters for the export
@@ -95,6 +117,57 @@ public List<String> generateExport() throws ExporterException {
95117
return exportedFiles;
96118
}
97119

120+
private void write_split(final Transaction transaction, final Split split, final CsvWriter writer) throws IOException
121+
{
122+
String separator = mCsvSeparator + "";
123+
Account account = mAccountsDbAdapter.getRecord(split.getAccountUID());
124+
125+
// Date
126+
Date date = new Date(transaction.getTimeMillis());
127+
writer.write(dateFormat.format(date) + separator);
128+
// Account name
129+
writer.write(account.getName() + separator);
130+
// TODO:Number is not defined yet?
131+
writer.write( separator);
132+
// Description
133+
writer.write(transaction.getDescription() + separator);
134+
// Notes of transaction
135+
writer.write(transaction.getNote() + separator);
136+
// Memo
137+
writer.write(
138+
(split.getMemo()==null?
139+
"":split.getMemo()) + separator);
140+
// TODO:Category is not defined yet?
141+
writer.write(separator);
142+
// Type
143+
writer.write(split.getType().name() + separator);
144+
// TODO:Action is not defined yet?
145+
writer.write(separator);
146+
// Reconcile
147+
writer.write(split.getReconcileState() + separator);
148+
149+
// Changes
150+
Money change = split.getFormattedQuantity().withCurrency(transaction.getCommodity());
151+
Money zero = Money.getZeroInstance().withCurrency(transaction.getCommodity());
152+
// To currency; From currency; To; From
153+
if (change.isNegative()) {
154+
writer.write(zero.toPlainString() + separator);
155+
writer.write(change.abs().toPlainString() + separator);
156+
writer.write(Money.getZeroInstance().toPlainString() + separator);
157+
writer.write(split.getFormattedQuantity().abs().toPlainString() + separator);
158+
}
159+
else {
160+
writer.write(change.abs().toPlainString() + separator);
161+
writer.write(zero.toPlainString() + separator);
162+
writer.write(split.getFormattedQuantity().abs().toPlainString() + separator);
163+
writer.write(Money.getZeroInstance().toPlainString() + separator);
164+
}
165+
166+
// TODO: What is price?
167+
writer.write(separator);
168+
writer.write(separator);
169+
}
170+
98171
public void generateExport(final CsvWriter writer) throws ExporterException {
99172
try {
100173
String separator = mCsvSeparator + "";
@@ -122,9 +195,14 @@ public void generateExport(final CsvWriter writer) throws ExporterException {
122195
writer.write(names.get(i) + separator);
123196
}
124197
writer.write("\n");
125-
for(int i = 0; i < transactions.size(); i++) {
126-
Transaction transaction = transactions.get(i);
198+
199+
200+
Cursor cursor = mTransactionsDbAdapter.fetchAllRecords();
201+
while (cursor.moveToNext())
202+
{
203+
Transaction transaction = mTransactionsDbAdapter.buildModelInstance(cursor);
127204
List<Split> splits = transaction.getSplits();
205+
Collections.sort(splits,splitComparator);
128206
for (int j = 0; j < splits.size()/2; j++) {
129207
Split split = splits.get(j);
130208
Split pair = null;
@@ -134,38 +212,12 @@ public void generateExport(final CsvWriter writer) throws ExporterException {
134212
}
135213
}
136214

137-
Account account = mAccountsDbAdapter.getRecord(split.getAccountUID());
138-
Account account_pair = null;
215+
write_split(transaction, split, writer);
216+
writer.write("\n");
139217
if (pair != null) {
140-
account_pair = mAccountsDbAdapter.getRecord(pair.getAccountUID());
218+
write_split(transaction, pair, writer);
219+
writer.write("\n");
141220
}
142-
143-
Date date = new Date(transaction.getTimeMillis());
144-
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
145-
writer.write(df.format(date) + separator);
146-
147-
writer.write(account.getName() + separator);
148-
149-
//Number
150-
writer.write(separator);
151-
152-
writer.write(transaction.getDescription() + separator);
153-
writer.write(transaction.getNote() + separator);
154-
writer.write((split.getMemo()==null?"":split.getMemo()) + separator);
155-
writer.write((account_pair.getName()==null?"":account_pair.getName()) + separator);
156-
writer.write((split.getType().name()) + separator);
157-
158-
//Action
159-
writer.write(separator);
160-
161-
writer.write(split.getReconcileState() + separator);
162-
163-
writer.write(split.getFormattedQuantity().toPlainString() + separator);
164-
writer.write(separator);
165-
writer.write(split.getFormattedQuantity().toPlainString() + separator);
166-
writer.write(separator);
167-
writer.write(separator);
168-
writer.write("\n");
169221
}
170222
}
171223

0 commit comments

Comments
 (0)