Package de.willuhn.jameica.hbci.gui.chart

Source Code of de.willuhn.jameica.hbci.gui.chart.ChartDataSaldoVerlauf

/**********************************************************************
* $Source: /cvsroot/hibiscus/hibiscus/src/de/willuhn/jameica/hbci/gui/chart/ChartDataSaldoVerlauf.java,v $
* $Revision: 1.21 $
* $Date: 2012/04/05 21:27:41 $
* $Author: willuhn $
* $Locker:  $
* $State: Exp $
*
* Copyright (c) by willuhn.webdesign
* All rights reserved
*
**********************************************************************/

package de.willuhn.jameica.hbci.gui.chart;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import de.willuhn.datasource.rmi.DBIterator;
import de.willuhn.jameica.hbci.rmi.Konto;
import de.willuhn.jameica.hbci.server.KontoUtil;
import de.willuhn.jameica.hbci.server.UmsatzUtil;
import de.willuhn.jameica.hbci.server.Value;
import de.willuhn.jameica.hbci.util.SaldoFinder;
import de.willuhn.jameica.util.DateUtil;

/**
* Implementierung eines Datensatzes fuer die Darstellung des Saldenverlaufs.
*/
public class ChartDataSaldoVerlauf extends AbstractChartDataSaldo
{
  private Konto konto      = null;
  private Date start       = null;
  private List<Value> data = null;
 
  /**
   * ct.
   * @param k das Konto, fuer das das Diagramm gemalt werden soll.
   * @param start Start-Datum.
   */
  public ChartDataSaldoVerlauf(Konto k, Date start)
  {
    this.konto = k;
    this.start = start;
  }

  /**
   * @see de.willuhn.jameica.hbci.gui.chart.ChartData#getData()
   */
  public List getData() throws RemoteException
  {
    if (this.data != null)
      return this.data;
   
    // Wir holen uns erstmal alle Umsaetze im Zeitraum
    DBIterator list = UmsatzUtil.getUmsaetze();
    if (this.konto != null)
      list.addFilter("konto_id = " + this.konto.getID());

    list.addFilter("datum >= ?", new Object[]{new java.sql.Date(start.getTime())});
   
    // Jetzt kommt die Homogenisierung ;)
    // Wir brauchen genau einen Messwert pro Tag. Das ist wichtig,
    // damit auch unterschiedliche Konten in einem Chart ueberlagernd
    // angezeigt werden koennen. Nehmen wir jetzt einfach die Umsaetze
    // aus der DB, haben wir womoeglich nicht fuer jeden Tag einen
    // Messwert, weil nicht genuegend Umsaetze vorhanden sind. Effekt:
    // In Konto A haben wir 10 Umsaetze, in Konto B aber 20. Wir haben
    // fuer Konto B also Messpunkte, zu denen in Konto A kein korrelierender
    // Wert existiert. Sowas kann man sauber nicht zeichnen. Daher iterieren
    // wir jetzt tageweise ueber die angegebene Zeitspanne. Fuer jeden Tag
    // schauen wir, ob wir einen Umsatz haben. Liegt keiner vor, nehmen
    // wir den letzten Umsatz, der vor diesem Tag liegt, da der dort
    // angegebene Saldo ja zum gesuchten Tag noch gilt.

    // BUGZILLA 1036
    double startSaldo = 0.0d;
    if (this.konto != null)
      startSaldo = this.konto.getNumUmsaetze() > 0 ? KontoUtil.getAnfangsSaldo(this.konto,start) : this.konto.getSaldo();
   
    SaldoFinder finder = new SaldoFinder(list,startSaldo);
    this.data = new ArrayList<Value>();
   
    Calendar cal = Calendar.getInstance();
    cal.setTime(start);
    Date end = DateUtil.endOfDay(new Date());
   
    while (!start.after(end))
    {
      Value s = new Value(start,finder.get(start));
      this.data.add(s);
     
      // Und weiter zum naechsten Tag
      cal.add(Calendar.DAY_OF_MONTH,1);
      start = cal.getTime();
    }
    return this.data;
  }

  /**
   * @see de.willuhn.jameica.hbci.gui.chart.ChartData#getLabel()
   */
  public String getLabel() throws RemoteException
  {
    if (this.konto != null)
      return this.konto.getBezeichnung();
    return i18n.tr("Alle Konten");
  }
}


/*********************************************************************
* $Log: ChartDataSaldoVerlauf.java,v $
* Revision 1.21  2012/04/05 21:27:41  willuhn
* @B BUGZILLA 1219
*
* Revision 1.20  2011/10/27 17:09:29  willuhn
* @C Saldo-Bean in neue separate (und generischere) Klasse "Value" ausgelagert.
* @N Saldo-Finder erweitert, damit der jetzt auch mit Value-Objekten arbeiten kann
*
* Revision 1.19  2011-05-03 08:03:17  willuhn
* @C BUGZILLA 1036
*
* Revision 1.18  2011-05-02 14:43:41  willuhn
* @B BUGZILLA 1036
*
* Revision 1.17  2011-01-20 17:13:21  willuhn
* @C HBCIProperties#startOfDay und HBCIProperties#endOfDay nach Jameica in DateUtil verschoben
*
* Revision 1.16  2010-11-24 16:27:17  willuhn
* @R Eclipse BIRT komplett rausgeworden. Diese unsaegliche Monster ;)
* @N Stattdessen verwenden wir jetzt SWTChart (http://www.swtchart.org). Das ist statt den 6MB von BIRT sagenhafte 250k gross
*
* Revision 1.15  2010-09-01 15:28:57  willuhn
* @B Der letzte Tag wurde nicht beruecksichtigt - siehe Mail von Felix vom 01.09.
*
* Revision 1.14  2010-08-12 17:12:32  willuhn
* @N Saldo-Chart komplett ueberarbeitet (Daten wurden vorher mehrmals geladen, Summen-Funktion, Anzeige mehrerer Konten, Durchschnitt ueber mehrere Konten, Bugfixing, echte "Homogenisierung" der Salden via SaldoFinder)
**********************************************************************/
TOP

Related Classes of de.willuhn.jameica.hbci.gui.chart.ChartDataSaldoVerlauf

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.