/*
* This file is part of jHaushalt.
* jHaushalt 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 2 of the License, or
* (at your option) any later version.
* jHaushalt 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 jHaushalt; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* (C)opyright 2002-2010 Dr. Lars H. Hahn
*/
package haushalt.auswertung;
import haushalt.auswertung.bloecke.LeererBlock;
import haushalt.auswertung.bloecke.TabellenBlock;
import haushalt.auswertung.bloecke.TextBlock;
import haushalt.daten.Datenbasis;
import haushalt.daten.EinzelKategorie;
import haushalt.daten.Euro;
import haushalt.daten.zeitraum.AbstractZeitraum;
import haushalt.daten.zeitraum.Jahr;
import haushalt.gui.Haushalt;
import haushalt.gui.TextResource;
import haushalt.gui.generischerdialog.AbstractGDPane;
import haushalt.gui.generischerdialog.EinOderAlleRegisterGDP;
import haushalt.gui.generischerdialog.MehrereKategorienGDP;
import haushalt.gui.generischerdialog.ProzentGDP;
import haushalt.gui.generischerdialog.ZeitraumGDP;
import java.awt.Font;
/**
* @author Dr. Lars H. Hahn
* @version 2.5.3/2008.03.19
*/
/*
* 2008.03.19 BugFix: Breite erste Spalte jetzt Integer
* 2007.06.26 Internationalisierung
* 2007.02.21 Erweiterung: Festlegen der Breite der ersten Spalte
* 2006.06.11 BugFix: Nur die ausgewählten Kategorien werden
* berechnet
* 2004.08.22 Erste Version
*/
public class BARelativerVergleich extends AbstractBlockAuswertung {
public static final String UEBERSCHRIFT = TextResource.get().getString("headline_relative_comparison");
private static final long serialVersionUID = 1L;
private static final TextResource RES = TextResource.get();
public BARelativerVergleich(final Haushalt haushalt, final Datenbasis db, final String name) {
super(haushalt, db, name);
final AbstractGDPane[] panes = new AbstractGDPane[5];
panes[0] = new ZeitraumGDP(RES.getString("first_period") + ":", new Jahr(2006));
panes[1] = new ZeitraumGDP(RES.getString("second_period") + ":", new Jahr(2007));
panes[2] = new EinOderAlleRegisterGDP(RES.getString("register") + ":", db, null);
panes[3] = new MehrereKategorienGDP(RES.getString("categories") + ":", db);
panes[4] = new ProzentGDP(RES.getString("width_first_column") + ":");
erzeugeEigenschaften(haushalt.getFrame(), UEBERSCHRIFT, panes);
}
@Override
protected String berechneAuswertung(final Object[] werte) {
final AbstractZeitraum zeitraum1 = (AbstractZeitraum) werte[0];
final AbstractZeitraum zeitraum2 = (AbstractZeitraum) werte[1];
final String register = (String) werte[2];
final double faktor1 = 30.0D / zeitraum1.getAnzahlTage();
final double faktor2 = 30.0D / zeitraum2.getAnzahlTage();
final EinzelKategorie[] kategorien = (EinzelKategorie[]) werte[3];
final double prozentErsteSpalte = ((Integer) werte[4]).doubleValue();
final int anzKat = kategorien.length;
final boolean unterkategorienVerwenden = ((MehrereKategorienGDP) this.getPanes()[3]).getUnterkategorienVerwenden();
final Euro[] summen1 = getDb().getKategorieSalden(kategorien, zeitraum1, register, unterkategorienVerwenden);
final Euro[] summen2 = getDb().getKategorieSalden(kategorien, zeitraum2, register, unterkategorienVerwenden);
setTabelle(new String[anzKat + 2][4]);
setTabelleContent(0, 0, RES.getString("category"));
setTabelleContent(0, 1, "" + zeitraum1);
setTabelleContent(0, 2, "" + zeitraum2);
setTabelleContent(0, 3, RES.getString("difference"));
setTabelleContent(anzKat + 1, 0, RES.getString("total"));
final Euro summe1 = new Euro();
final Euro summe2 = new Euro();
for (int i = 0; i < anzKat; i++) {
final Euro relWert1 = summen1[i].mal(faktor1);
final Euro relWert2 = summen2[i].mal(faktor2);
setTabelleContent(i + 1, 0, "" + kategorien[i]);
setTabelleContent(i + 1, 1, "" + relWert1);
setTabelleContent(i + 1, 2, "" + relWert2);
setTabelleContent(i + 1, 3, "" + relWert1.sub(relWert2));
summe1.sum(relWert1);
summe2.sum(relWert2);
}
setTabelleContent(anzKat + 1, 1, "" + summe1);
setTabelleContent(anzKat + 1, 2, "" + summe2);
setTabelleContent(anzKat + 1, 3, "" + summe1.sub(summe2));
// Vorhandene Blöcke löschen und neu berechnete einfügen
String titel = RES.getString("relative_comparison")
+ " ("
+ getTabelle()[0][1]
+ " "
+ RES.getString("and")
+ " "
+ getTabelle()[0][2];
if (register == null) {
titel += ")";
} else {
titel += ", " + register + ")";
}
loescheBloecke();
final TextBlock block1 = new TextBlock(titel);
block1.setFont(new Font(this.getHaushalt().getFontname(), Font.BOLD, this.getHaushalt().getFontgroesse() + 6));
addDokumentenBlock(block1);
addDokumentenBlock(new LeererBlock(1));
final TabellenBlock block2 = new TabellenBlock(getTabelle());
block2.setFont(new Font(this.getHaushalt().getFontname(), Font.PLAIN, this.getHaushalt().getFontgroesse()));
final TabellenBlock.Ausrichtung[] attribute = {
TabellenBlock.Ausrichtung.LINKS, TabellenBlock.Ausrichtung.RECHTS, TabellenBlock.Ausrichtung.RECHTS,
TabellenBlock.Ausrichtung.RECHTS};
block2.setAusrichtung(attribute);
if (prozentErsteSpalte > 0.0D) {
final double rest = (100.0D - prozentErsteSpalte) / 3.0D;
final double[] relTabs = {0.0D, prozentErsteSpalte, prozentErsteSpalte + rest, prozentErsteSpalte + rest * 2.0D,};
block2.setRelTabs(relTabs);
}
addDokumentenBlock(block2);
addDokumentenBlock(new LeererBlock(1));
final TextBlock block3 = new TextBlock(RES.getString("calculated_amounts"));
block3.setFont(new Font(this.getHaushalt().getFontname(), Font.PLAIN, this.getHaushalt().getFontgroesse() - 2));
addDokumentenBlock(block3);
return titel;
}
}