### Eclipse Workspace Patch 1.0 #P jverein diff --git src/de/jost_net/JVerein/gui/control/BuchungsklasseSaldoControl.java src/de/jost_net/JVerein/gui/control/BuchungsklasseSaldoControl.java index a628f0b..97348ca 100644 --- src/de/jost_net/JVerein/gui/control/BuchungsklasseSaldoControl.java +++ src/de/jost_net/JVerein/gui/control/BuchungsklasseSaldoControl.java @@ -29,6 +29,7 @@ import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.gui.parts.BuchungsklasseSaldoList; import de.jost_net.JVerein.io.BuchungsklasseSaldoZeile; +import de.jost_net.JVerein.io.BuchungsklassesaldoCSV; import de.jost_net.JVerein.io.BuchungsklassesaldoPDF; import de.jost_net.JVerein.util.Dateiname; import de.jost_net.JVerein.util.JVDateFormatTTMMJJJJ; @@ -55,6 +56,8 @@ private DateInput datumbis; private Settings settings = null; + final static String AuswertungPDF = "PDF"; + final static String AuswertungCSV = "CSV"; public BuchungsklasseSaldoControl(AbstractView view) { @@ -112,9 +115,23 @@ @Override public void handleAction(Object context) throws ApplicationException { - starteAuswertung(); + starteAuswertung(AuswertungPDF); } }, null, true, "pdf.png"); // "true" defines this button as the default + // button + return b; + } + + public Button getStartAuswertungCSVButton() + { + Button b = new Button("CSV", new Action() + { + @Override + public void handleAction(Object context) throws ApplicationException + { + starteAuswertung(AuswertungCSV); + } + }, null, true, "csv.jpg"); // "true" defines this button as the default // button return b; } @@ -167,7 +184,8 @@ return saldoList.getSaldoList(); } - private void starteAuswertung() throws ApplicationException + //THL pdf cvs umschalter + private void starteAuswertung(String type) throws ApplicationException { try { @@ -185,7 +203,7 @@ fd.setFilterPath(path); } fd.setFileName(new Dateiname("buchungsklassensaldo", "", Einstellungen - .getEinstellung().getDateinamenmuster(), "PDF").get()); + .getEinstellung().getDateinamenmuster(), type).get()); final String s = fd.open(); @@ -196,8 +214,9 @@ final File file = new File(s); settings.setAttribute("lastdir", file.getParent()); - auswertungSaldoPDF(zeile, file, (Date) getDatumvon().getValue(), - (Date) getDatumbis().getValue()); + + auswertungSaldo(zeile, file, (Date) getDatumvon().getValue(), + (Date) getDatumbis().getValue(), type); } catch (RemoteException e) { @@ -206,9 +225,9 @@ } } - private void auswertungSaldoPDF( + private void auswertungSaldo( final ArrayList zeile, final File file, - final Date datumvon, final Date datumbis) + final Date datumvon, final Date datumbis, final String type) { BackgroundTask t = new BackgroundTask() { @@ -217,7 +236,11 @@ { try { - new BuchungsklassesaldoPDF(zeile, file, datumvon, datumbis); + // mit Java 1.7 k�nnte man hier eine Swich Anweisung nehmen. + if (type.equals(AuswertungCSV)) + new BuchungsklassesaldoCSV(zeile, file, datumvon, datumbis); + else if (type.equals(AuswertungPDF)) + new BuchungsklassesaldoPDF(zeile, file, datumvon, datumbis); GUI.getCurrentView().reload(); } catch (ApplicationException ae) @@ -241,4 +264,6 @@ }; Application.getController().start(t); } + + } diff --git src/de/jost_net/JVerein/gui/view/BuchungsklasseSaldoView.java src/de/jost_net/JVerein/gui/view/BuchungsklasseSaldoView.java index 8b01833..4c11f02 100644 --- src/de/jost_net/JVerein/gui/view/BuchungsklasseSaldoView.java +++ src/de/jost_net/JVerein/gui/view/BuchungsklasseSaldoView.java @@ -59,6 +59,7 @@ ButtonArea buttons2 = new ButtonArea(); buttons2.addButton("Hilfe", new DokumentationAction(), DokumentationUtil.JAHRESSALDO, false, "help-browser.png"); + buttons2.addButton(control.getStartAuswertungCSVButton()); buttons2.addButton(control.getStartAuswertungButton()); buttons2.paint(this.getParent()); } diff --git src/de/jost_net/JVerein/io/BuchungsklassesaldoCSV.java src/de/jost_net/JVerein/io/BuchungsklassesaldoCSV.java new file mode 100644 index 0000000..d6ce0d4 --- /dev/null +++ src/de/jost_net/JVerein/io/BuchungsklassesaldoCSV.java @@ -0,0 +1,163 @@ +/********************************************************************** + * Copyright (c) by Thomas Laubrock + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See + * the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, + * see . + * + * heiner@jverein.de + * www.jverein.de + **********************************************************************/ +package de.jost_net.JVerein.io; + +import java.io.File; +import java.io.FileWriter; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.supercsv.cellprocessor.ConvertNullTo; +import org.supercsv.cellprocessor.constraint.NotNull; +import org.supercsv.cellprocessor.FmtNumber; +import org.supercsv.cellprocessor.ift.CellProcessor; +import org.supercsv.io.CsvMapWriter; +import org.supercsv.io.ICsvMapWriter; +import org.supercsv.prefs.CsvPreference; + +import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.util.JVDateFormatTTMMJJJJ; +import de.willuhn.jameica.gui.GUI; +import de.willuhn.logging.Logger; +import de.willuhn.util.ApplicationException; + + + +public class BuchungsklassesaldoCSV +{ + + private static CellProcessor[] getProcessors() { + + final CellProcessor[] processors = new CellProcessor[] { + new NotNull(), // BuchungsArt/Klasse, Summe + //new Optional(new FmtNumber(Einstellungen.DECIMALFORMAT)), // Einnahmen + new ConvertNullTo("",new FmtNumber(Einstellungen.DECIMALFORMAT)), // Einnahmen + new ConvertNullTo("",new FmtNumber(Einstellungen.DECIMALFORMAT)), // Ausgaben + new ConvertNullTo("",new FmtNumber(Einstellungen.DECIMALFORMAT)) // Umbuchung + }; + + return processors; + } + + public BuchungsklassesaldoCSV(ArrayList zeile, + final File file, Date datumvon, Date datumbis) + throws ApplicationException { + ICsvMapWriter writer = null; + try { + writer = new CsvMapWriter(new FileWriter(file), + CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE); + final CellProcessor[] processors = getProcessors(); + Map csvzeile = new HashMap(); + + String[] header = { "Buchungsart", "Einnahmen", "Ausgaben", + "Umbuchung" }; + writer.writeHeader(header); + + String subtitle = new JVDateFormatTTMMJJJJ().format(datumvon) + + " - " + new JVDateFormatTTMMJJJJ().format(datumbis); + csvzeile.put(header[0], subtitle); + writer.write(csvzeile, header, processors); + + + for (BuchungsklasseSaldoZeile bkz : zeile) { + csvzeile = new HashMap(); + switch (bkz.getStatus()) { + case BuchungsklasseSaldoZeile.HEADER: { + csvzeile.put(header[0], (String) bkz + .getAttribute("buchungsklassenbezeichnung")); + break; + } + case BuchungsklasseSaldoZeile.DETAIL: { + csvzeile.put(header[0], + (String) bkz.getAttribute("buchungsartbezeichnung")); + csvzeile.put(header[1], + (Double) bkz.getAttribute("einnahmen")); + csvzeile.put(header[2], + (Double) bkz.getAttribute("ausgaben")); + csvzeile.put(header[3], + (Double) bkz.getAttribute("umbuchungen")); + break; + } + case BuchungsklasseSaldoZeile.SALDOFOOTER: { + csvzeile.put(header[0], (String) bkz + .getAttribute("buchungsklassenbezeichnung")); + csvzeile.put(header[1], + (Double) bkz.getAttribute("einnahmen")); + csvzeile.put(header[2], + (Double) bkz.getAttribute("ausgaben")); + csvzeile.put(header[3], + (Double) bkz.getAttribute("umbuchungen")); + break; + } + case BuchungsklasseSaldoZeile.GESAMTSALDOFOOTER: { + csvzeile.put(header[0], (String) bkz + .getAttribute("buchungsklassenbezeichnung")); + csvzeile.put(header[1], + (Double) bkz.getAttribute("einnahmen")); + csvzeile.put(header[2], + (Double) bkz.getAttribute("ausgaben")); + csvzeile.put(header[3], + (Double) bkz.getAttribute("umbuchungen")); + break; + } + case BuchungsklasseSaldoZeile.GESAMTGEWINNVERLUST: + case BuchungsklasseSaldoZeile.SALDOGEWINNVERLUST: { + csvzeile.put(header[0], (String) bkz + .getAttribute("buchungsklassenbezeichnung")); + csvzeile.put(header[1], + (Double) bkz.getAttribute("einnahmen")); + break; + } + case BuchungsklasseSaldoZeile.NICHTZUGEORDNETEBUCHUNGEN: { + csvzeile.put(header[0], (String) bkz + .getAttribute("buchungsklassenbezeichnung")); + csvzeile.put(header[1], + (Integer) bkz.getAttribute("anzahlbuchungen")); + break; + } + default: + { + csvzeile.put(header[0], "leer - warum auch immer"); + } + + } + + writer.write(csvzeile, header, processors); + } + GUI.getStatusBar().setSuccessText("Auswertung fertig."); + writer.close(); + + FileViewer.show(file); + } catch (Exception e) { + Logger.error("error while creating report", e); + throw new ApplicationException("Fehler", e); + } finally { + if (writer != null) { + try { + writer.close(); + } catch (Exception e) { + Logger.error("error while creating report", e); + throw new ApplicationException("Fehler", e); + } + } + } + + } + +}