From f33bd413a11213b48f3ef2e627aa0bfc90bd2144 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer <126261667+JohannMaierhofer@users.noreply.github.com> Date: Tue, 21 Jan 2025 08:54:27 +0100 Subject: [PATCH] Kontensaldo in Buchungsliste (#590) * Kontensaldo in Buchungsliste * Fix Anfangsbestand --------- Co-authored-by: Johann Maierhofer --- .../gui/action/BuchungDeleteAction.java | 7 ++- .../gui/action/SplitBuchungDeleteAction.java | 2 +- .../JVerein/gui/control/BuchungsControl.java | 7 ++- .../JVerein/gui/menu/BuchungMenu.java | 2 +- .../gui/parts/BuchungListTablePart.java | 20 ++++++++ src/de/jost_net/JVerein/rmi/Konto.java | 2 + src/de/jost_net/JVerein/server/KontoImpl.java | 51 ++++++++++++++++++- 7 files changed, 85 insertions(+), 6 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/action/BuchungDeleteAction.java b/src/de/jost_net/JVerein/gui/action/BuchungDeleteAction.java index 7411922ef..52c16425a 100644 --- a/src/de/jost_net/JVerein/gui/action/BuchungDeleteAction.java +++ b/src/de/jost_net/JVerein/gui/action/BuchungDeleteAction.java @@ -19,6 +19,7 @@ import java.rmi.RemoteException; import de.jost_net.JVerein.Messaging.BuchungMessage; +import de.jost_net.JVerein.gui.control.BuchungsControl; import de.jost_net.JVerein.io.SplitbuchungsContainer; import de.jost_net.JVerein.rmi.Buchung; import de.jost_net.JVerein.rmi.Jahresabschluss; @@ -38,9 +39,12 @@ public class BuchungDeleteAction implements Action { private boolean splitbuchung; - public BuchungDeleteAction(boolean splitbuchung) + private BuchungsControl control; + + public BuchungDeleteAction(BuchungsControl control, boolean splitbuchung) { this.splitbuchung = splitbuchung; + this.control = control; } @Override @@ -149,6 +153,7 @@ else if (context instanceof Buchung[]) bu.getSpendenbescheinigung().delete(); bu.delete(); count++; + control.getBuchungsList(); } else if (splitbuchung) { diff --git a/src/de/jost_net/JVerein/gui/action/SplitBuchungDeleteAction.java b/src/de/jost_net/JVerein/gui/action/SplitBuchungDeleteAction.java index 3cfd945ba..27ca62dae 100644 --- a/src/de/jost_net/JVerein/gui/action/SplitBuchungDeleteAction.java +++ b/src/de/jost_net/JVerein/gui/action/SplitBuchungDeleteAction.java @@ -73,7 +73,7 @@ public void handleAction(Object context) throws ApplicationException } else { - BuchungDeleteAction action = new BuchungDeleteAction(true); + BuchungDeleteAction action = new BuchungDeleteAction(control, true); action.handleAction(context); } control.refreshSplitbuchungen(); diff --git a/src/de/jost_net/JVerein/gui/control/BuchungsControl.java b/src/de/jost_net/JVerein/gui/control/BuchungsControl.java index 90e67d059..5c1259ba4 100644 --- a/src/de/jost_net/JVerein/gui/control/BuchungsControl.java +++ b/src/de/jost_net/JVerein/gui/control/BuchungsControl.java @@ -127,7 +127,7 @@ public class BuchungsControl extends AbstractControl private de.willuhn.jameica.system.Settings settings; - private TablePart buchungsList; + private BuchungListTablePart buchungsList; /* Split-Buchnungen */ private TablePart splitbuchungsList; @@ -1109,7 +1109,7 @@ private Long getSelectedBuchungsKlasseId() throws ApplicationException } } - public Part getBuchungsList() throws RemoteException + public BuchungListTablePart getBuchungsList() throws RemoteException { // Werte speichern Date dv = (Date) getVondatum().getValue(); @@ -1259,9 +1259,11 @@ public String format(Object value) buchungsList.addFeature(new FeatureSummary()); Application.getMessagingFactory() .registerMessageConsumer(new BuchungMessageConsumer()); + buchungsList.updateSaldo((Konto) getSuchKonto().getValue()); } else { + buchungsList.updateSaldo((Konto) getSuchKonto().getValue()); buchungsList.removeAll(); for (Buchung bu : query.get()) @@ -2260,4 +2262,5 @@ private void checkDate() throws ApplicationException throw new ApplicationException("Von Datum ist nach Bis Datum!"); } } + } diff --git a/src/de/jost_net/JVerein/gui/menu/BuchungMenu.java b/src/de/jost_net/JVerein/gui/menu/BuchungMenu.java index f2c552bb7..74ffdf085 100644 --- a/src/de/jost_net/JVerein/gui/menu/BuchungMenu.java +++ b/src/de/jost_net/JVerein/gui/menu/BuchungMenu.java @@ -66,7 +66,7 @@ public BuchungMenu(BuchungsControl control) "edit-copy.png")); addItem(new AufloesenItem("Auflösen", new SplitbuchungBulkAufloesenAction(), "unlocked.png")); - addItem(new BuchungItem("Löschen", new BuchungDeleteAction(false), + addItem(new BuchungItem("Löschen", new BuchungDeleteAction(control, false), "user-trash-full.png")); addItem(ContextMenuItem.SEPARATOR); if (geldkonto) diff --git a/src/de/jost_net/JVerein/gui/parts/BuchungListTablePart.java b/src/de/jost_net/JVerein/gui/parts/BuchungListTablePart.java index fde69d8df..02313fd18 100644 --- a/src/de/jost_net/JVerein/gui/parts/BuchungListTablePart.java +++ b/src/de/jost_net/JVerein/gui/parts/BuchungListTablePart.java @@ -22,6 +22,7 @@ import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.rmi.Buchung; +import de.jost_net.JVerein.rmi.Konto; import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.parts.TablePart; import de.willuhn.jameica.gui.parts.table.Feature; @@ -31,6 +32,8 @@ public class BuchungListTablePart extends TablePart { + private Double saldo = null; + public BuchungListTablePart(Action action) { super(action); @@ -67,6 +70,12 @@ protected Context createFeatureEventContext(Feature.Event e, Object data) summary += " / " + "Gesamtbetrag:" + " " + Einstellungen.DECIMALFORMAT.format(sumBetrag) + " " + Einstellungen.CURRENCY; + if (saldo != null) + { + summary += " / " + "Kontosaldo:" + " " + + Einstellungen.DECIMALFORMAT.format(saldo) + " " + + Einstellungen.CURRENCY; + } } catch (RemoteException re) { @@ -77,4 +86,15 @@ protected Context createFeatureEventContext(Feature.Event e, Object data) return ctx; } + public void updateSaldo(Konto konto) throws RemoteException + { + if (konto != null) + { + saldo = konto.getSaldo(); + } + else + { + saldo = null; + } + } } diff --git a/src/de/jost_net/JVerein/rmi/Konto.java b/src/de/jost_net/JVerein/rmi/Konto.java index 0f4840504..c7ff17383 100644 --- a/src/de/jost_net/JVerein/rmi/Konto.java +++ b/src/de/jost_net/JVerein/rmi/Konto.java @@ -106,6 +106,8 @@ public interface Konto extends DBObject public void setAfaMode(Integer afamode) throws RemoteException; + public Double getSaldo() throws RemoteException; + public DBIterator getKontenEinesJahres(Geschaeftsjahr gj) throws RemoteException; diff --git a/src/de/jost_net/JVerein/server/KontoImpl.java b/src/de/jost_net/JVerein/server/KontoImpl.java index 8a72bee84..cba9f23ae 100644 --- a/src/de/jost_net/JVerein/server/KontoImpl.java +++ b/src/de/jost_net/JVerein/server/KontoImpl.java @@ -17,17 +17,22 @@ package de.jost_net.JVerein.server; import java.rmi.RemoteException; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.Date; import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.keys.AfaMode; import de.jost_net.JVerein.keys.Kontoart; +import de.jost_net.JVerein.rmi.Anfangsbestand; import de.jost_net.JVerein.rmi.Buchungsart; import de.jost_net.JVerein.rmi.Buchungsklasse; import de.jost_net.JVerein.rmi.Konto; import de.jost_net.JVerein.util.Geschaeftsjahr; import de.willuhn.datasource.db.AbstractDBObject; import de.willuhn.datasource.rmi.DBIterator; +import de.willuhn.datasource.rmi.DBService; +import de.willuhn.datasource.rmi.ResultSetExtractor; import de.willuhn.logging.Logger; import de.willuhn.util.ApplicationException; @@ -474,7 +479,51 @@ public void setAfaMode(Integer afamode) throws RemoteException { setAttribute("afamode", afamode); } - + + @Override + public Double getSaldo() throws RemoteException + { + ResultSetExtractor rsd = new ResultSetExtractor() + { + @Override + public Object extract(ResultSet rs) throws SQLException + { + if (!rs.next()) + { + return Double.valueOf(0); + } + return Double.valueOf(rs.getDouble(1)); + } + }; + Double saldo = 0.0; + Date datum = null; + // Suchen ob Anfangsstand im Suchbereich enthalten ist + DBService service = Einstellungen.getDBService(); + DBIterator anf = service.createList(Anfangsbestand.class); + anf.addFilter("konto = ? ", new Object[] { getID() }); + anf.setOrder("ORDER BY datum desc"); + if (anf != null && anf.hasNext()) + { + Anfangsbestand anfang = anf.next(); + saldo = anfang.getBetrag(); + datum = anfang.getDatum(); + } + if (datum != null) + { + String sql = "SELECT sum(buchung.betrag) FROM buchung" + + " WHERE buchung.konto = ?" + " AND buchung.datum >= ?"; + saldo += (Double) service.execute(sql, new Object[] { getID(), datum }, + rsd); + } + else + { + String sql = "SELECT sum(buchung.betrag) FROM buchung" + + " WHERE buchung.konto = ?"; + saldo += (Double) service.execute(sql, new Object[] { getID() }, rsd); + } + return saldo; + } + @Override public Object getAttribute(String fieldName) throws RemoteException {