1717package org .gnucash .android .export .csv ;
1818
1919import android .database .sqlite .SQLiteDatabase ;
20+ import android .database .Cursor ;
2021import com .crashlytics .android .Crashlytics ;
2122
2223import org .gnucash .android .export .ExportParams ;
2324import org .gnucash .android .export .Exporter ;
2425import org .gnucash .android .model .Account ;
26+ import org .gnucash .android .model .Commodity ;
27+ import org .gnucash .android .model .Money ;
2528import org .gnucash .android .model .Split ;
2629import org .gnucash .android .model .Transaction ;
30+ import org .gnucash .android .model .TransactionType ;
31+
2732import java .io .BufferedOutputStream ;
2833import java .io .FileOutputStream ;
2934import java .io .IOException ;
3035import java .io .OutputStreamWriter ;
3136import java .text .DateFormat ;
3237import java .text .SimpleDateFormat ;
3338import java .util .ArrayList ;
39+ import java .util .Collections ;
40+ import java .util .Comparator ;
3441import java .util .Date ;
3542import 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