///////////////////////////////////////////////////////////////////////////// // // 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.common.NumberHelper; public class AuftragsStatistik implements Serializable { private static final long serialVersionUID = -5486964211679100585L; protected BigDecimal nettoSum; protected BigDecimal akquiseSum; protected BigDecimal beauftragtSum; protected BigDecimal fakturiertSum; protected BigDecimal zuFakturierenSum; protected int counter; protected int counterAkquise; protected int counterBeauftragt; protected int counterZuFakturieren; protected int counterFakturiert; public AuftragsStatistik() { nettoSum = akquiseSum = beauftragtSum = fakturiertSum = zuFakturierenSum = BigDecimal.ZERO; counter = counterBeauftragt = counterZuFakturieren = counterFakturiert = 0; } public void add(final AuftragDO auftrag) { final BigDecimal netto = auftrag.getNettoSumme(); if (auftrag.getAuftragsStatus() != null) { if (auftrag.getAuftragsStatus().isIn(AuftragsStatus.GROB_KALKULATION, AuftragsStatus.IN_ERSTELLUNG, AuftragsStatus.GELEGT) == true) { akquiseSum = add(akquiseSum, netto); counterAkquise++; } else if (auftrag.getAuftragsStatus().isIn(AuftragsStatus.LOI, AuftragsStatus.BEAUFTRAGT, AuftragsStatus.ESKALATION) == true) { beauftragtSum = add(beauftragtSum, auftrag.getBeauftragtNettoSumme()); counterBeauftragt++; } else if (auftrag.getAuftragsStatus().isIn(AuftragsStatus.ABGESCHLOSSEN) == true && auftrag.isVollstaendigFakturiert() == false) { zuFakturierenSum = add(zuFakturierenSum, auftrag.getZuFakturierenSum()); counterZuFakturieren++; } } final BigDecimal invoiced = auftrag.getFakturiertSum(); if (NumberHelper.isNotZero(invoiced) == true) { fakturiertSum = add(fakturiertSum, invoiced); counterFakturiert++; } else if (auftrag.isVollstaendigFakturiert() == true) { counterFakturiert++; } counter++; nettoSum = add(nettoSum, netto); } public BigDecimal getNettoSum() { return nettoSum; } public BigDecimal getAkquiseSum() { return akquiseSum; } public BigDecimal getBeauftragtSum() { return beauftragtSum; } public BigDecimal getFakturiertSum() { return fakturiertSum; } public BigDecimal getZuFakturierenSum() { return zuFakturierenSum; } public int getCounter() { return counter; } public int getCounterAkquise() { return counterAkquise; } public int getCounterBeauftragt() { return counterBeauftragt; } public int getCounterFakturiert() { return counterFakturiert; } public int getCounterZuFakturieren() { return counterZuFakturieren; } 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; } }