package belegworkflow; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; import java.util.List; public abstract class Dokument { protected String belegnummer; protected LocalDate datum; protected String kundenReferenz; protected List positionen; protected BigDecimal summeNetto; protected BigDecimal summeSteuer; protected BigDecimal summeBrutto; protected boolean festgeschrieben; public Dokument(String belegnummer, LocalDate datum, String kundenReferenz, List positionen) { this.belegnummer = belegnummer; this.datum = datum; this.kundenReferenz = kundenReferenz; this.positionen = positionen; this.festgeschrieben = false; berechnesSummen(); } // Berechnet Netto-, Steuer- und Bruttosumme (F-03, F-09, GR-06) protected void berechnesSummen() { summeNetto = BigDecimal.ZERO; summeSteuer = BigDecimal.ZERO; for (Dokumentposition pos : positionen) { summeNetto = summeNetto.add(pos.getPositionssummeNetto()); BigDecimal steuer = pos.getPositionssummeNetto() .multiply(pos.getSteuersatz()) .setScale(2, RoundingMode.HALF_UP); summeSteuer = summeSteuer.add(steuer); } summeNetto = summeNetto.setScale(2, RoundingMode.HALF_UP); summeSteuer = summeSteuer.setScale(2, RoundingMode.HALF_UP); summeBrutto = summeNetto.add(summeSteuer).setScale(2, RoundingMode.HALF_UP); } public String getBelegnummer() { return belegnummer; } public LocalDate getDatum() { return datum; } public String getKundenReferenz() { return kundenReferenz; } public List getPositionen() { return positionen; } public BigDecimal getSummeNetto() { return summeNetto; } public BigDecimal getSummeSteuer() { return summeSteuer; } public BigDecimal getSummeBrutto() { return summeBrutto; } public boolean isFestgeschrieben() { return festgeschrieben; } public void festschreiben() { this.festgeschrieben = true; } public String getSummenAnzeige() { return String.format("Netto: %.2f EUR | MwSt: %.2f EUR | Brutto: %.2f EUR", summeNetto, summeSteuer, summeBrutto); } }