Package name.abuchen.portfolio.datatransfer

Source Code of name.abuchen.portfolio.datatransfer.AktienfreundeNetExporter

package name.abuchen.portfolio.datatransfer;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.Charset;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import name.abuchen.portfolio.model.Account;
import name.abuchen.portfolio.model.AccountTransaction;
import name.abuchen.portfolio.model.Client;
import name.abuchen.portfolio.model.Portfolio;
import name.abuchen.portfolio.model.PortfolioTransaction;
import name.abuchen.portfolio.model.Transaction;
import name.abuchen.portfolio.model.Values;

import org.apache.commons.csv.CSVPrinter;

public class AktienfreundeNetExporter
{

    /**
     * Export all transactions in 'aktienfreunde.net' Format
     */
    public void exportAllTransactions(File file, Client client) throws IOException
    {
        // collect transactions
        List<Transaction> transactions = new ArrayList<Transaction>();

        for (Account a : client.getAccounts())
            transactions.addAll(a.getTransactions());
        for (Portfolio p : client.getPortfolios())
            transactions.addAll(p.getTransactions());

        Transaction.sortByDate(transactions);

        DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy"); //$NON-NLS-1$

        // write to file
        Writer writer = new OutputStreamWriter(new FileOutputStream(file), Charset.forName("UTF-8")); //$NON-NLS-1$

        try
        {
            CSVPrinter printer = new CSVPrinter(writer);
            printer.setStrategy(CSVExporter.STRATEGY);

            writeHeader(printer);

            // only buy/sell/dividend transactions
            for (Transaction t : transactions)
            {
                if (t instanceof AccountTransaction)
                {
                    AccountTransaction ta = (AccountTransaction) t;

                    if (ta.getSecurity() != null
                                    && (ta.getType() == AccountTransaction.Type.INTEREST || ta.getType() == AccountTransaction.Type.DIVIDENDS))
                        writeDividend(printer, ta, dateFormat);

                }
                else if (t instanceof PortfolioTransaction)
                {
                    PortfolioTransaction tp = (PortfolioTransaction) t;

                    switch (tp.getType())
                    {
                        case BUY:
                        case DELIVERY_INBOUND:
                            writeBuySell(printer, tp, "Kauf", dateFormat); //$NON-NLS-1$
                            break;
                        case SELL:
                        case DELIVERY_OUTBOUND:
                            writeBuySell(printer, tp, "Verkauf", dateFormat); //$NON-NLS-1$
                            break;
                        default:
                            // ignore all other transactions
                    }

                }
            }
        }
        finally
        {
            writer.close();
        }
    }

    @SuppressWarnings("nls")
    private void writeDividend(CSVPrinter printer, AccountTransaction transaction, DateFormat dateFormat)
    {
        printer.print(dateFormat.format(transaction.getDate()));
        printer.print(CSVExporter.escapeNull(transaction.getSecurity().getIsin()));
        printer.print(CSVExporter.escapeNull(transaction.getSecurity().getName()));
        printer.print("Aktie");
        printer.print("Dividende");
        printer.print(Values.Amount.format(transaction.getAmount()));
        printer.print("1");
        printer.print("");
        printer.print("");
        printer.println();
    }

    @SuppressWarnings("nls")
    private void writeBuySell(CSVPrinter printer, PortfolioTransaction transaction, String type, DateFormat dateFormat)
    {
        printer.print(dateFormat.format(transaction.getDate()));
        printer.print(CSVExporter.escapeNull(transaction.getSecurity().getIsin()));
        printer.print(CSVExporter.escapeNull(transaction.getSecurity().getName()));
        printer.print("Aktie");
        printer.print(type);
        printer.print(Values.Amount.format(transaction.getActualPurchasePrice()));
        printer.print(Values.Share.format(transaction.getShares()));
        printer.print(Values.Amount.format(transaction.getFees()));
        printer.print(Values.Amount.format(transaction.getTaxes()));
        printer.println();
    }

    @SuppressWarnings("nls")
    private void writeHeader(CSVPrinter printer)
    {
        printer.print("Datum");
        printer.print("ISIN");
        printer.print("Name");
        printer.print("Typ");
        printer.print("Transaktion");
        printer.print("Preis");
        printer.print("Anzahl");
        printer.print("Kommission");
        printer.print("Steuern");
        printer.println();
    }
}
TOP

Related Classes of name.abuchen.portfolio.datatransfer.AktienfreundeNetExporter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.