Skip to content

Commit

Permalink
Transaction export refactored. Cursor based iteration over transactions
Browse files Browse the repository at this point in the history
  • Loading branch information
AngelicosPhosphoros authored and AngelicosPhosphoros committed Jan 23, 2018
1 parent 76c74cb commit 13f243b
Showing 1 changed file with 84 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,27 @@
package org.gnucash.android.export.csv;

import android.database.sqlite.SQLiteDatabase;
import android.database.Cursor;
import com.crashlytics.android.Crashlytics;

import org.gnucash.android.export.ExportParams;
import org.gnucash.android.export.Exporter;
import org.gnucash.android.model.Account;
import org.gnucash.android.model.Commodity;
import org.gnucash.android.model.Money;
import org.gnucash.android.model.Split;
import org.gnucash.android.model.Transaction;
import org.gnucash.android.model.TransactionType;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

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

private char mCsvSeparator;

private DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");

private Comparator<Split> splitComparator = new Comparator<Split>() {
@Override
public int compare(Split o1, Split o2) {
if(o1.getType() == TransactionType.DEBIT
&& o2.getType() == TransactionType.CREDIT)
return -1;
if (o1.getType() == TransactionType.CREDIT
&& o2.getType() == TransactionType.DEBIT)
return 1;
return 0;
}
};

/**
* Construct a new exporter with export parameters
* @param params Parameters for the export
Expand Down Expand Up @@ -95,6 +117,57 @@ public List<String> generateExport() throws ExporterException {
return exportedFiles;
}

private void write_split(final Transaction transaction, final Split split, final CsvWriter writer) throws IOException
{
String separator = mCsvSeparator + "";
Account account = mAccountsDbAdapter.getRecord(split.getAccountUID());

// Date
Date date = new Date(transaction.getTimeMillis());
writer.write(dateFormat.format(date) + separator);
// Account name
writer.write(account.getName() + separator);
// TODO:Number is not defined yet?
writer.write( separator);
// Description
writer.write(transaction.getDescription() + separator);
// Notes of transaction
writer.write(transaction.getNote() + separator);
// Memo
writer.write(
(split.getMemo()==null?
"":split.getMemo()) + separator);
// TODO:Category is not defined yet?
writer.write(separator);
// Type
writer.write(split.getType().name() + separator);
// TODO:Action is not defined yet?
writer.write(separator);
// Reconcile
writer.write(split.getReconcileState() + separator);

// Changes
Money change = split.getFormattedQuantity().withCurrency(transaction.getCommodity());
Money zero = Money.getZeroInstance().withCurrency(transaction.getCommodity());
// To currency; From currency; To; From
if (change.isNegative()) {
writer.write(zero.toPlainString() + separator);
writer.write(change.abs().toPlainString() + separator);
writer.write(Money.getZeroInstance().toPlainString() + separator);
writer.write(split.getFormattedQuantity().abs().toPlainString() + separator);
}
else {
writer.write(change.abs().toPlainString() + separator);
writer.write(zero.toPlainString() + separator);
writer.write(split.getFormattedQuantity().abs().toPlainString() + separator);
writer.write(Money.getZeroInstance().toPlainString() + separator);
}

// TODO: What is price?
writer.write(separator);
writer.write(separator);
}

public void generateExport(final CsvWriter writer) throws ExporterException {
try {
String separator = mCsvSeparator + "";
Expand Down Expand Up @@ -122,9 +195,14 @@ public void generateExport(final CsvWriter writer) throws ExporterException {
writer.write(names.get(i) + separator);
}
writer.write("\n");
for(int i = 0; i < transactions.size(); i++) {
Transaction transaction = transactions.get(i);


Cursor cursor = mTransactionsDbAdapter.fetchAllRecords();
while (cursor.moveToNext())
{
Transaction transaction = mTransactionsDbAdapter.buildModelInstance(cursor);
List<Split> splits = transaction.getSplits();
Collections.sort(splits,splitComparator);
for (int j = 0; j < splits.size()/2; j++) {
Split split = splits.get(j);
Split pair = null;
Expand All @@ -134,38 +212,12 @@ public void generateExport(final CsvWriter writer) throws ExporterException {
}
}

Account account = mAccountsDbAdapter.getRecord(split.getAccountUID());
Account account_pair = null;
write_split(transaction, split, writer);
writer.write("\n");
if (pair != null) {
account_pair = mAccountsDbAdapter.getRecord(pair.getAccountUID());
write_split(transaction, pair, writer);
writer.write("\n");
}

Date date = new Date(transaction.getTimeMillis());
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
writer.write(df.format(date) + separator);

writer.write(account.getName() + separator);

//Number
writer.write(separator);

writer.write(transaction.getDescription() + separator);
writer.write(transaction.getNote() + separator);
writer.write((split.getMemo()==null?"":split.getMemo()) + separator);
writer.write((account_pair.getName()==null?"":account_pair.getName()) + separator);
writer.write((split.getType().name()) + separator);

//Action
writer.write(separator);

writer.write(split.getReconcileState() + separator);

writer.write(split.getFormattedQuantity().toPlainString() + separator);
writer.write(separator);
writer.write(split.getFormattedQuantity().toPlainString() + separator);
writer.write(separator);
writer.write(separator);
writer.write("\n");
}
}

Expand Down

0 comments on commit 13f243b

Please sign in to comment.