Package org.projectforge.fibu

Source Code of org.projectforge.fibu.AbstractRechnungsStatistik

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition 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; version 3 of the License.
//
// This community edition 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 http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.fibu;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;

import org.projectforge.calendar.DayHolder;
import org.projectforge.statistics.IntAggregatedValues;

public class AbstractRechnungsStatistik<T extends AbstractRechnungDO< ? >> implements Serializable
{
  private static final long serialVersionUID = 3695426728243488756L;

  protected BigDecimal bruttoSum;

  protected BigDecimal nettoSum;

  protected BigDecimal gezahltSum;

  protected BigDecimal offenSum;

  protected BigDecimal ueberfaelligSum;

  protected BigDecimal skontoSum;

  protected long zahlungsZielSum;

  protected IntAggregatedValues tatsaechlichesZahlungsZiel = new IntAggregatedValues();

  protected int counterBezahlt;

  protected int counter;

  public AbstractRechnungsStatistik()
  {
    bruttoSum = nettoSum = gezahltSum = offenSum = ueberfaelligSum = skontoSum = BigDecimal.ZERO;
    counter = counterBezahlt = 0;
  }

  public void add(final T rechnung)
  {
    final BigDecimal netto = rechnung.getNetSum();
    final BigDecimal brutto = rechnung.getGrossSum();
    final BigDecimal gezahlt = rechnung.getZahlBetrag();
    this.nettoSum = add(nettoSum, netto);
    this.bruttoSum = add(bruttoSum, brutto);
    if (gezahlt != null) {
      gezahltSum = add(gezahltSum, gezahlt);
      if (gezahlt.compareTo(brutto) < 0) {
        skontoSum = add(skontoSum, brutto.subtract(gezahlt));
      }
    } else {
      offenSum = add(offenSum, brutto);
      if (rechnung.isUeberfaellig() == true) {
        ueberfaelligSum = add(ueberfaelligSum, brutto);
      }
    }
    final DayHolder datum = new DayHolder(rechnung.getDatum());
    final DayHolder faelligDatum = new DayHolder(rechnung.getFaelligkeit());
    zahlungsZielSum += datum.daysBetween(faelligDatum);
    if (rechnung.getBezahlDatum() != null) {
      final DayHolder bezahlDatum = new DayHolder(rechnung.getBezahlDatum());
      tatsaechlichesZahlungsZiel.add(datum.daysBetween(bezahlDatum), brutto.intValue());
      counterBezahlt++;
    }
    counter++;
  }

  public int getZahlungszielAverage()
  {
    if (counter == 0) {
      return 0;
    }
    return (int) (zahlungsZielSum / counter);
  }

  public int getTatsaechlichesZahlungzielAverage()
  {
    return tatsaechlichesZahlungsZiel.getWeightedAverage();
  }

  public BigDecimal getBrutto()
  {
    return bruttoSum;
  }

  public BigDecimal getNetto()
  {
    return nettoSum;
  }

  public BigDecimal getGezahlt()
  {
    return gezahltSum;
  }

  public BigDecimal getOffen()
  {
    return offenSum;
  }

  public BigDecimal getUeberfaellig()
  {
    return ueberfaelligSum;
  }

  public int getCounter()
  {
    return counter;
  }

  public int getCounterBezahlt()
  {
    return counterBezahlt;
  }

  /**
   * Fehlbeträge, die der Kunde weniger überwiesen hat und die akzeptiert wurden, d. h. die Rechnung gilt als bezahlt.
   */
  public BigDecimal getSkonto()
  {
    return skontoSum;
  }

  private BigDecimal add(BigDecimal sum, final BigDecimal amount)
  {
    if (amount == null) {
      return sum;
    }
    if (sum == null) {
      sum = BigDecimal.ZERO;
    }
    sum = sum.add(amount);
    sum.setScale(2, RoundingMode.HALF_UP);
    return sum;
  }
}
TOP

Related Classes of org.projectforge.fibu.AbstractRechnungsStatistik

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.