From 7257336d7e8fa43d6e014b4700733c241f119364 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Tue, 17 Dec 2024 12:50:55 +0100 Subject: [PATCH] Fix Splitbuchungen editieren --- .../JVerein/gui/control/BuchungsControl.java | 39 ++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/control/BuchungsControl.java b/src/de/jost_net/JVerein/gui/control/BuchungsControl.java index 2c36c4bfc..23c036921 100644 --- a/src/de/jost_net/JVerein/gui/control/BuchungsControl.java +++ b/src/de/jost_net/JVerein/gui/control/BuchungsControl.java @@ -290,27 +290,42 @@ public ArrayList getDependentBuchungen() throws RemoteException { return dependent_buchungen; } - + boolean isSteuerBuchung = false; // Falls noch nichts erzeugt wurde, neue Liste erzeugen und DependencyId setzen! dependent_buchungen = new ArrayList(); - if (getBuchung().getDependencyId() == -1) { + if (getBuchung().getDependencyId() == -1) + { Buchung new_dependent_buchung = (Buchung) Einstellungen.getDBService() - .createObject(Buchung.class, null); + .createObject(Buchung.class, null); getBuchung().setDependencyId(SplitbuchungsContainer.getNewDependencyId()); new_dependent_buchung.setDependencyId(getBuchung().getDependencyId()); dependent_buchungen.add(new_dependent_buchung); } // Falls DependencyId vorhanden ist, alle anderen Elemente mit gleicher Id raussuchen - else { + // Ein Container wird nicht für die Steuerbuchungen generiert, sonst werden zugehörige + // Buchungen gelöscht + else + { int pos_b = SplitbuchungsContainer.get().indexOf(getBuchung()); - for (Buchung b_tmp : SplitbuchungsContainer.get()) { + Double buchungBetrag = Math.abs(getBuchung().getBetrag()); + for (Buchung b_tmp : SplitbuchungsContainer.get()) + { if (b_tmp.getDependencyId() == getBuchung().getDependencyId() && - SplitbuchungsContainer.get().indexOf(b_tmp) != pos_b) { + SplitbuchungsContainer.get().indexOf(b_tmp) != pos_b) + { + if (Math.abs(b_tmp.getBetrag()) > buchungBetrag) + { + // Das ist eine Steuerbuchung + isSteuerBuchung = true; + dependent_buchungen = new ArrayList(); + break; + } dependent_buchungen.add(b_tmp); } } } - if (dependent_buchungen.size() == 0) { + if (dependent_buchungen.size() == 0 && !isSteuerBuchung) + { throw new RemoteException("Buchungen mit Id " + getBuchung().getDependencyId() + " konnten nicht gefunden werden!"); } return dependent_buchungen; @@ -967,7 +982,9 @@ private void handleStore() throws ApplicationException { b.plausi(); Buchungsart b_art = b.getBuchungsart(); - if (b_art.getSteuersatz() > 0) { + // Keine Steuer Buchungen erzeugen beim Speichern einer Haupt- bzw. Gegenbuchung + if (b.getSplitTyp() == SplitbuchungTyp.SPLIT && b_art.getSteuersatz() > 0) + { Buchung b_steuer = getDependentBuchungen().get(0); fillBuchung(b_steuer); @@ -996,10 +1013,12 @@ private void handleStore() throws ApplicationException SplitbuchungsContainer.add(b); SplitbuchungsContainer.add(b_steuer); } - else { + else + { // Falls vorher abhängige Buchungen erzeugt wurden, nun dies aber durch ändern der Buchungsart o.ä. aufgehoben wird, // alle abhängigen Buchungen löschen und Abhängigkeit resetten - if (b.getDependencyId() != -1) { + if (b.getDependencyId() != -1 && getDependentBuchungen().size() > 0) + { for (Buchung b_tmp : getDependentBuchungen()) { b_tmp.setDependencyId(-1); b_tmp.setDelete(true);