From 3981f2b696d1a59982a140250b7494279234beb9 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Sat, 11 Jan 2025 14:14:06 +0100 Subject: [PATCH 01/38] Update Mittelverwendung --- .../JVerein/gui/control/KontoControl.java | 67 +++- .../gui/parts/MittelverwendungList.java | 342 +++++++----------- .../jost_net/JVerein/gui/view/KontoView.java | 5 + .../jost_net/JVerein/keys/Anlagenzweck.java | 67 ++++ src/de/jost_net/JVerein/keys/Kontoart.java | 12 +- src/de/jost_net/JVerein/rmi/Konto.java | 4 + .../server/DDLTool/Updates/Update0456.java | 38 ++ src/de/jost_net/JVerein/server/KontoImpl.java | 22 ++ 8 files changed, 325 insertions(+), 232 deletions(-) create mode 100644 src/de/jost_net/JVerein/keys/Anlagenzweck.java create mode 100644 src/de/jost_net/JVerein/server/DDLTool/Updates/Update0456.java diff --git a/src/de/jost_net/JVerein/gui/control/KontoControl.java b/src/de/jost_net/JVerein/gui/control/KontoControl.java index 819ece9b3..bbb5425ee 100644 --- a/src/de/jost_net/JVerein/gui/control/KontoControl.java +++ b/src/de/jost_net/JVerein/gui/control/KontoControl.java @@ -40,6 +40,7 @@ import de.jost_net.JVerein.keys.Kontoart; import de.jost_net.JVerein.keys.StatusBuchungsart; import de.jost_net.JVerein.keys.AfaMode; +import de.jost_net.JVerein.keys.Anlagenzweck; import de.jost_net.JVerein.keys.ArtBuchungsart; import de.jost_net.JVerein.rmi.Buchung; import de.jost_net.JVerein.rmi.Buchungsart; @@ -94,37 +95,39 @@ public class KontoControl extends AbstractControl private SelectInput hibiscusid; private Konto konto; - + private SelectInput buchungsart; - + private SelectInput kontoart; - + private int unterdrueckunglaenge = 0; - + private AbstractInput anlagenart; - + private SelectInput anlagenklasse; - + private AbstractInput afaart; - + private DecimalInput betrag; - + private IntegerNullInput nutzungsdauer; - + private TextAreaInput kommentar; - + private DateInput anschaffung; - + private DecimalInput afastart; - + private DecimalInput afadauer; - + private DecimalInput afarestwert; - + private SelectInput afamode; - + + private SelectInput anlagenzweck; + Button autobutton; - + Button afabutton; @@ -278,6 +281,10 @@ public void handleStore() { k.setAfaMode(Integer.valueOf(((AfaMode) getAfaMode().getValue()).getKey())); } + if (anlagenzweck != null) + { + k.setAnlagenzweck((Anlagenzweck) getAnlagenzweck().getValue()); + } DBService service = Einstellungen.getDBService(); String sql = "SELECT DISTINCT konto.id from konto " + "WHERE (kontoart = ?) "; @@ -893,6 +900,24 @@ public void handleEvent (Event e) { } return afamode; } + + public SelectInput getAnlagenzweck() throws RemoteException + { + if (anlagenzweck != null) + { + return anlagenzweck; + } + Anlagenzweck zweck = getKonto().getAnlagenzweck(); + ArrayList values = new ArrayList( + Arrays.asList(Anlagenzweck.values())); + anlagenzweck = new SelectInput(values, zweck); + if (getKontoArt().getValue() != Kontoart.ANLAGE) + { + anlagenzweck.setValue(Anlagenzweck.NUTZUNGSGEBUNDEN); + anlagenzweck.disable(); + } + return anlagenzweck; + } public String getBuchungartSortOrder() { @@ -994,6 +1019,11 @@ public void refreshGui() getAfaMode().setValue(new AfaMode(AfaMode.AUTO)); getAfaMode().setMandatory(true); getAfaMode().setEnabled(true); + if (anlagenzweck != null) + { + anlagenzweck.enable(); + anlagenzweck.setValue(getKonto().getAnlagenzweck()); + } } else { @@ -1025,6 +1055,11 @@ public void refreshGui() getAfaMode().setMandatory(false); getAfaMode().setValue(null); getAfaMode().disable(); + if (anlagenzweck != null) + { + anlagenzweck.setValue(Anlagenzweck.NUTZUNGSGEBUNDEN); + anlagenzweck.disable(); + } } } catch (RemoteException e) diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java index 7a228296e..bf77f3c51 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java @@ -21,12 +21,12 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; import org.eclipse.swt.widgets.Composite; import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.io.MittelverwendungZeile; +import de.jost_net.JVerein.keys.Anlagenzweck; import de.jost_net.JVerein.keys.ArtBuchungsart; import de.jost_net.JVerein.keys.Kontoart; import de.willuhn.datasource.rmi.DBService; @@ -107,26 +107,6 @@ public ArrayList getInfo() throws RemoteException String bezeichnung = ""; Integer pos = 1; - ResultSetExtractor rsbk = new ResultSetExtractor() - { - @Override - public HashMap extract(ResultSet rs) throws SQLException - { - HashMap map = new HashMap<>(); - while (rs.next()) - { - map.put(Integer.valueOf(rs.getInt(1)), rs.getString(3)); - } - return map; - } - }; - - // Ids der Buchunsklassen - sql = "SELECT buchungsklasse.* FROM buchungsklasse" + " ORDER BY nummer"; - @SuppressWarnings("unchecked") - HashMap bkMap = (HashMap) service - .execute(sql, new Object[] {}, rsbk); - ResultSetExtractor rsd = new ResultSetExtractor() { @Override @@ -140,186 +120,126 @@ public Object extract(ResultSet rs) throws SQLException } }; - bezeichnung = "Vorhandene Mittel zum Ende des letzten GJ"; + // Schritt 1: Berechnung des Verwendungsrückstand(+)/-überhang(-) + // am Ende des letzten GJ + // Vorhandene Geldmittel zum Ende des letzten GJ sind zu verwenden sql = "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + " WHERE anfangsbestand.datum = ?" + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? "; - Double pos1 = (Double) service.execute(sql, + Double vorhandeneMittel = (Double) service.execute(sql, new Object[] { datumvon, Kontoart.GELD.getKey() }, rsd); - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, pos1, - null); - bezeichnung = "Nicht der zeitnahen Mittelverwendung unterliegende Mittel zum Ende des letzten GJ"; + // Vorhandene zweckfremde Anlagen sind zu verwenden sql = "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + " WHERE anfangsbestand.datum = ?" - + " AND anfangsbestand.konto = konto.id " - + " AND (konto.kontoart = ? OR konto.kontoart = ? OR konto.kontoart = ?)"; - Double pos2 = (Double) service.execute(sql, - new Object[] { datumvon, Kontoart.RUECKLAGE.getKey(), - Kontoart.VERMOEGEN.getKey(), - Kontoart.SONSTIGE_RUECKLAGEN.getKey() }, + + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? " + + " AND konto.zweck = ?"; + vorhandeneMittel += (Double) service.execute(sql, new Object[] { datumvon, + Kontoart.ANLAGE.getKey(), Anlagenzweck.ZWECKFREMD_EINGESETZT.getKey() }, rsd); - addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, null, - pos2); - bezeichnung = " Verwendungsüberhang/Rückstand Ende des letzten GJ"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, pos1, - -pos2); + // Nicht der zeitnahen Mittelverwendung unterliegende Mittel (Rücklagen) + // zum Ende des letzten GJ können abgezogen werden + sql = "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + + " WHERE anfangsbestand.datum = ?" + + " AND anfangsbestand.konto = konto.id" + " AND konto.kontoart >= ?" + + " AND konto.kontoart <= ?"; + vorhandeneMittel -= (Double) service.execute(sql, + new Object[] { datumvon, Kontoart.RUECKLAGE_ZWECK_GEBUNDEN.getKey(), + Kontoart.RUECKLAGE_SONSTIG.getKey() }, + rsd); - Double zufuehrung = 0d; - Double verwendung = 0d; - // Mittel Zufluss und Abfluss für alle Buchungsklassen - for (Integer bkId : bkMap.keySet()) - { - // Mittel Zufluss - // Summe der Buchungen bei Einnahmen - sql = getSummenBuchungSql(); - Double zuf = (Double) service.execute(sql, new Object[] { datumvon, - datumbis, Kontoart.GELD.getKey(), bkId, ArtBuchungsart.EINNAHME }, - rsd); - // Summe der positiven Buchungen bei Umbuchung - sql = getSummenUmbuchungSql() + " AND buchung.betrag < 0"; - Double um = (Double) service.execute(sql, - new Object[] { datumvon, datumbis, - Kontoart.VERBINDLICHKEITEN.getKey(), Kontoart.ANLAGE.getKey(), - bkId, ArtBuchungsart.UMBUCHUNG }, - rsd); - zuf -= um; - zufuehrung += zuf; - - // Mittel Abfluss - // Summe der Buchungen bei Ausgaben - sql = getSummenBuchungSql(); - Double verw = (Double) service.execute(sql, new Object[] { datumvon, - datumbis, Kontoart.GELD.getKey(), bkId, ArtBuchungsart.AUSGABE }, - rsd); - // Summe der negativen Buchungen bei Umbuchung - sql = getSummenUmbuchungSql() + " AND buchung.betrag > 0"; - Double um2 = (Double) service.execute(sql, - new Object[] { datumvon, datumbis, - Kontoart.VERBINDLICHKEITEN.getKey(), Kontoart.ANLAGE.getKey(), - bkId, ArtBuchungsart.UMBUCHUNG }, - rsd); - verw -= um2; - verwendung += verw; - - if (zuf != 0d || verw != 0d - || !Einstellungen.getEinstellung().getUnterdrueckungOhneBuchung()) - { - bezeichnung = "Mittel Zufluss aus " + bkMap.get(bkId); - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - zuf, null); - bezeichnung = "Verwendete Mittel aus " + bkMap.get(bkId); - addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, - null, verw); - bezeichnung = " Überschuss/Verlust aus " + bkMap.get(bkId); - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, zuf, - verw); - } - } + bezeichnung = "Verwendungsrückstand(+)/-überhang(-) am Ende des letzten GJ"; + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + vorhandeneMittel, null); + + // Schritt 2: Mittel Zufluss + // Summe aller Zuflüsse bei Geldkonten und Anlagen (=Sachspenden) + sql = getSummenKontenSql(); + Double zufuehrung = (Double) service.execute(sql, + new Object[] { datumvon, datumbis, Kontoart.GELD.getKey(), + Kontoart.ANLAGE.getKey(), ArtBuchungsart.EINNAHME }, + rsd); + // Summe Zuflüsse durch Umbuchung + // Auszahlung aus Verbindlichkeiten z.B. Darlehen, + // Rückbuchung von zweckgebundenen Anlagen + sql = getSummenUmbuchungSql() + " AND buchung.betrag < 0"; + zufuehrung -= (Double) service.execute(sql, + new Object[] { datumvon, datumbis, Kontoart.VERBINDLICHKEITEN.getKey(), + Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), + ArtBuchungsart.UMBUCHUNG }, + rsd); - // Summen über alle Sphären - bezeichnung = "Mittel Zufluss aus allen Sphären"; + bezeichnung = "Insgesamt im GJ zugeflossene Mittel"; addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - zufuehrung, 0d); - bezeichnung = "Verwendete Mittel aus allen Sphären"; - addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, 0d, - verwendung); - bezeichnung = " Überschuss/Verlust aus allen Sphären"; + zufuehrung, null); + bezeichnung = " Zu verwendende Mittel im GJ und nächstem GJ"; addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - zufuehrung, verwendung); - - // Rücklagen nach § 62 Abs. 1 AO - sql = getSummenRuecklagenSql(); - Double zuRuecklagen = (Double) service.execute(sql, new Object[] { datumvon, - datumbis, Kontoart.RUECKLAGE.getKey(), ArtBuchungsart.EINNAHME }, rsd); - - sql = getSummenRuecklagenSql(); - Double entRuecklagen = (Double) service.execute(sql, - new Object[] { datumvon, datumbis, Kontoart.RUECKLAGE.getKey(), + zufuehrung, vorhandeneMittel); + + // Schritt 3: Mittel Abfluss + // Summe aller Abflüsse bei Geldkonten + sql = getSummenKontoSql(); + Double verwendung = (Double) service.execute(sql, new Object[] { datumvon, + datumbis, Kontoart.GELD.getKey(), ArtBuchungsart.AUSGABE }, rsd); + // Summe aller Abflüsse bei nicht nutzungsgebundenen Anlagen + sql = getSummenKontoZweckSql(); + verwendung += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey(), + Anlagenzweck.ZWECKFREMD_EINGESETZT.getKey(), ArtBuchungsart.AUSGABE }, rsd); - - if (zuRuecklagen != 0d || entRuecklagen != 0d - || !Einstellungen.getEinstellung().getUnterdrueckungOhneBuchung()) - { - bezeichnung = "Zuführung zu Rücklagen nach § 62 Abs. 1 AO"; - addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, null, - zuRuecklagen); - bezeichnung = "Entnahme aus Rücklagen nach § 62 Abs. 1 AO"; - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - entRuecklagen, null); - bezeichnung = " Summe der Buchungen zu Rücklagen nach § 62 Abs. 1 AO"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - entRuecklagen, zuRuecklagen); - } - - // Vermögen nach § 62 Abs. 3 und 4 AO - sql = getSummenRuecklagenSql(); - Double zuVermoegen = (Double) service.execute(sql, new Object[] { datumvon, - datumbis, Kontoart.VERMOEGEN.getKey(), ArtBuchungsart.EINNAHME }, rsd); - - sql = getSummenRuecklagenSql(); - Double entVermoegen = (Double) service.execute(sql, new Object[] { datumvon, - datumbis, Kontoart.VERMOEGEN.getKey(), ArtBuchungsart.AUSGABE }, rsd); - - if (zuVermoegen != 0d || entVermoegen != 0d - || !Einstellungen.getEinstellung().getUnterdrueckungOhneBuchung()) - { - bezeichnung = "Zuführung zum Vermögen nach § 62 Abs. 3 und 4 AO"; - addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, null, - zuVermoegen); - bezeichnung = "Entnahme aus Vermögen nach § 62 Abs. 3 und 4 AO"; - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - entVermoegen, null); - bezeichnung = " Summe der Buchungen zum Vermögen nach § 62 Abs. 3 und 4 AO"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - entVermoegen, zuVermoegen); - } - - // Sonstige Rücklagen - sql = getSummenRuecklagenSql(); - Double zuSonstig = (Double) service.execute(sql, - new Object[] { datumvon, datumbis, - Kontoart.SONSTIGE_RUECKLAGEN.getKey(), ArtBuchungsart.EINNAHME }, + // Summe der Abflüsse bei Umbuchung + // Tilgung Verbindlichkeiten z.B. Darlehen, + // Erwerb zweckgebundener Anlagen + sql = getSummenUmbuchungSql() + " AND buchung.betrag > 0"; + verwendung -= (Double) service.execute(sql, + new Object[] { datumvon, datumbis, Kontoart.VERBINDLICHKEITEN.getKey(), + Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), + ArtBuchungsart.UMBUCHUNG }, rsd); - sql = getSummenRuecklagenSql(); - Double entSonstig = (Double) service.execute(sql, - new Object[] { datumvon, datumbis, - Kontoart.SONSTIGE_RUECKLAGEN.getKey(), ArtBuchungsart.AUSGABE }, - rsd); + bezeichnung = "Im GJ verwendete Mittel"; + addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, null, + verwendung); - if (zuSonstig != 0d || entSonstig != 0d - || !Einstellungen.getEinstellung().getUnterdrueckungOhneBuchung()) + // Rücklagen + Double summeZuRuecklagen = 0.0; + Double summeEntRuecklagen = 0.0; + sql = getSummenRuecklagenSql(); + for (int i = Kontoart.RUECKLAGE_ZWECK_GEBUNDEN + .getKey(); i <= Kontoart.RUECKLAGE_SONSTIG.getKey(); i++) { - bezeichnung = "Zuführung zu sonstigen Rücklagen"; - addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, null, - zuSonstig); - bezeichnung = "Entnahme aus sonstigen Rücklagen"; - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - entSonstig, null); - bezeichnung = " Summe der Buchungen aus sonstigen Rücklagen"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - entSonstig, zuSonstig); + Double zuRuecklagen = (Double) service.execute(sql, + new Object[] { datumvon, datumbis, i, ArtBuchungsart.EINNAHME }, rsd); + summeZuRuecklagen += zuRuecklagen; + if (Math.abs(zuRuecklagen) > 0.005 + || !Einstellungen.getEinstellung().getUnterdrueckungOhneBuchung()) + { + bezeichnung = "Zuführung " + Kontoart.getByKey(i).getText(); + addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, + null, -zuRuecklagen); + } + Double entRuecklagen = (Double) service.execute(sql, + new Object[] { datumvon, datumbis, i, ArtBuchungsart.AUSGABE }, rsd); + summeEntRuecklagen += entRuecklagen; + if (Math.abs(entRuecklagen) > 0.005 + || !Einstellungen.getEinstellung().getUnterdrueckungOhneBuchung()) + { + bezeichnung = "Entnahme " + Kontoart.getByKey(i).getText(); + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + -entRuecklagen, null); + } } - bezeichnung = "Vorhandene Mittel zum Ende des aktuellen GJ"; - Double einnahmen = pos1 + zufuehrung + verwendung; - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - einnahmen, null); - bezeichnung = "Nicht der zeitnahen Mittelverwendung unterliegende Mittel zum Ende aktuellen GJ"; - Double ausgaben = pos2 + zuRuecklagen + entRuecklagen + zuVermoegen - + entVermoegen + zuSonstig + entSonstig; - addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, null, - ausgaben); - bezeichnung = " Verwendungsüberhang/Rückstand zum Ende des aktuellen GJ"; + bezeichnung = " Verwendungsrückstand(+)/-überhang(-) zum Ende des GJ"; addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - einnahmen, -ausgaben); + zufuehrung + vorhandeneMittel + verwendung - summeZuRuecklagen, + -summeEntRuecklagen); // Leerzeile am Ende wegen Scrollbar - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, - null, null, null, null)); + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, null, + null, null, null)); return zeilen; } @@ -345,54 +265,50 @@ public synchronized void paint(Composite parent) throws RemoteException super.paint(parent); } - private String getSummenBuchungSql() throws RemoteException + private String getSummenKontoSql() throws RemoteException { - String sql = ""; - if (!Einstellungen.getEinstellung().getBuchungsklasseInBuchung()) - { - sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" - + " WHERE datum >= ? AND datum <= ?" - + " AND buchung.konto = konto.id" + " AND konto.kontoart = ?" - + " AND buchung.buchungsart = buchungsart.id" - + " AND buchungsart.buchungsklasse = ? " + "AND buchungsart.art = ?"; - } - else - { - sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" - + " WHERE datum >= ? AND datum <= ?" - + " AND buchung.konto = konto.id" + " AND konto.kontoart = ?" - + " AND buchung.buchungsart = buchungsart.id" - + " AND buchung.buchungsklasse = ? " + "AND buchungsart.art = ?"; - } + String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + + " AND konto.kontoart = ?" + + " AND buchung.buchungsart = buchungsart.id" + + " AND buchungsart.art = ?"; + return sql; + } + + private String getSummenKontenSql() throws RemoteException + { + String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + + " AND (konto.kontoart = ? OR konto.kontoart = ?)" + + " AND buchung.buchungsart = buchungsart.id" + + " AND buchungsart.art = ?"; + return sql; + } + + private String getSummenKontoZweckSql() throws RemoteException + { + String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + + " AND konto.kontoart = ? AND konto.zweck = ?" + + " AND buchung.buchungsart = buchungsart.id" + + " AND buchungsart.art = ?"; return sql; } private String getSummenUmbuchungSql() throws RemoteException { - String sql = ""; - if (!Einstellungen.getEinstellung().getBuchungsklasseInBuchung()) - { - sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" - + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" - + " AND (konto.kontoart = ? OR konto.kontoart = ?)" - + " AND buchung.buchungsart = buchungsart.id" - + " AND buchungsart.buchungsklasse = ?" + " AND buchungsart.art = ?"; - } - else - { - sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" - + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" - + " AND (konto.kontoart = ? OR konto.kontoart = ?)" - + " AND buchung.buchungsart = buchungsart.id" - + " AND buchung.buchungsklasse = ?" + " AND buchungsart.art = ?"; - } + String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + + " AND (konto.kontoart = ? OR (konto.kontoart = ? AND konto.zweck = ?))" + + " AND buchung.buchungsart = buchungsart.id" + + " AND buchungsart.art = ?"; return sql; } private String getSummenRuecklagenSql() { return "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" - + " WHERE datum >= ? AND datum <= ? " + "AND buchung.konto = konto.id" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + " AND konto.kontoart = ?" + " AND buchung.buchungsart = buchungsart.id" + " AND buchungsart.art = ?"; diff --git a/src/de/jost_net/JVerein/gui/view/KontoView.java b/src/de/jost_net/JVerein/gui/view/KontoView.java index 8b761abe2..0596417fb 100644 --- a/src/de/jost_net/JVerein/gui/view/KontoView.java +++ b/src/de/jost_net/JVerein/gui/view/KontoView.java @@ -16,6 +16,7 @@ **********************************************************************/ package de.jost_net.JVerein.gui.view; +import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.gui.action.DokumentationAction; import de.jost_net.JVerein.gui.control.KontoControl; import de.willuhn.jameica.gui.AbstractView; @@ -60,6 +61,10 @@ public void bind() throws Exception left1.addLabelPair("AfA Buchungsart", control.getAfaart()); left1.addLabelPair("Anlagenwert", control.getBetrag()); left1.addLabelPair("Anschaffungsdatum", control.getAnschaffung()); + if (Einstellungen.getEinstellung().getMittelverwendung()) + { + left1.addLabelPair("Anlagenzweck", control.getAnlagenzweck()); + } ButtonArea anlagenbuttons = new ButtonArea(); anlagenbuttons.addButton(control.getAutobutton()); left1.addButtonArea(anlagenbuttons); diff --git a/src/de/jost_net/JVerein/keys/Anlagenzweck.java b/src/de/jost_net/JVerein/keys/Anlagenzweck.java new file mode 100644 index 000000000..ba866bfbd --- /dev/null +++ b/src/de/jost_net/JVerein/keys/Anlagenzweck.java @@ -0,0 +1,67 @@ +/********************************************************************** + * Copyright (c) by Heiner Jostkleigrewe + * This program 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, either version 3 of the + * License, or (at your option) any later version. + * + * This program 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 . + * + * heiner@jverein.de + * www.jverein.de + **********************************************************************/ +package de.jost_net.JVerein.keys; + +public enum Anlagenzweck +{ + // Verwendungszweck der Anlage + + NUTZUNGSGEBUNDEN(1, "Nutzungsgebunde Anlage"), // Anlage im Ideellen + // Bereich oder Zweckbetrieb + ZWECKFREMD_EINGESETZT(2, "Zweckfremde Anlage"); // Anlage in der + // Vermögensverwaltung oder im + // wirtschaftlichen + // Geschäftsbetrieb + + private final String text; + + private final int key; + + Anlagenzweck(int key, String text) + { + this.key = key; + this.text = text; + } + + public int getKey() + { + return key; + } + + public String getText() + { + return text; + } + + public static Anlagenzweck getByKey(int key) + { + for (Anlagenzweck art : Anlagenzweck.values()) + { + if (art.getKey() == key) + { + return art; + } + } + return null; + } + + @Override + public String toString() + { + return getText(); + } +} diff --git a/src/de/jost_net/JVerein/keys/Kontoart.java b/src/de/jost_net/JVerein/keys/Kontoart.java index 1e69928af..3bc0cd078 100644 --- a/src/de/jost_net/JVerein/keys/Kontoart.java +++ b/src/de/jost_net/JVerein/keys/Kontoart.java @@ -26,9 +26,15 @@ public enum Kontoart ANLAGE(2, "Anlagenkonto"), VERBINDLICHKEITEN(3, "Verbindlichkeitskonto"), LIMIT(100, "-- Limit --"), - RUECKLAGE(101, "Rücklagenkonto nach § 62 Abs. 1 AO"), - VERMOEGEN(102, "Vermögenskonto nach § 62 Abs. 3 und 4 AO"), - SONSTIGE_RUECKLAGEN(103, "Konto für sonstige Rücklagen"); + RUECKLAGE_ZWECK_GEBUNDEN(101, "Zweckgebundene Rücklagen nach § 62 Abs. 1 Nr. 1 AO"), + RUECKLAGE_BETRIEBSMITTEL(102, "Betriebsmittel Rücklagen nach § 62 Abs. 1 Nr. 1 AO"), + RUECKLAGE_INVESTITION(103, "Investitionsrücklage nach § 62 Abs. 1 Nr. 1 AO"), + RUECKLAGE_INSTANDHALTUNG(104, "Instandhaltungsrücklage nach § 62 Abs. 1 Nr. 1AO"), + RUECKLAGE_WIEDERBESCHAFFUNG(105, "Rücklage zur Wiederbeschaffung nach § 62 Abs. 1 Nr. 2 AO"), + RUECKLAGE_FREI(106, "Freie Rücklage nach § 62 Abs. 1 Nr. 3 AO"), + RUECKLAGE_ERWERB(107, "Rücklage nach § 62 Abs. 1 Nr. 4 AO"), + VERMOEGEN(108, "Vermögen nach § 62 Abs. 3 und 4 AO"), + RUECKLAGE_SONSTIG(109, "Sonstige Rücklagen"); private final String text; diff --git a/src/de/jost_net/JVerein/rmi/Konto.java b/src/de/jost_net/JVerein/rmi/Konto.java index 0f4840504..6d403f498 100644 --- a/src/de/jost_net/JVerein/rmi/Konto.java +++ b/src/de/jost_net/JVerein/rmi/Konto.java @@ -19,6 +19,7 @@ import java.rmi.RemoteException; import java.util.Date; +import de.jost_net.JVerein.keys.Anlagenzweck; import de.jost_net.JVerein.keys.Kontoart; import de.jost_net.JVerein.util.Geschaeftsjahr; import de.willuhn.datasource.rmi.DBIterator; @@ -112,4 +113,7 @@ public DBIterator getKontenEinesJahres(Geschaeftsjahr gj) public DBIterator getKontenVonBis(Date von, Date bis) throws RemoteException; + public Anlagenzweck getAnlagenzweck() throws RemoteException; + + public void setAnlagenzweck(Anlagenzweck zweck) throws RemoteException; } diff --git a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0456.java b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0456.java new file mode 100644 index 000000000..cf1fa131d --- /dev/null +++ b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0456.java @@ -0,0 +1,38 @@ +/********************************************************************** + * This program 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, either version 3 of the + * License, or (at your option) any later version. + * + * This program 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 . + * + **********************************************************************/ +package de.jost_net.JVerein.server.DDLTool.Updates; + +import java.sql.Connection; + +import de.jost_net.JVerein.server.DDLTool.AbstractDDLUpdate; +import de.jost_net.JVerein.server.DDLTool.Column; +import de.willuhn.util.ApplicationException; +import de.willuhn.util.ProgressMonitor; + +public class Update0456 extends AbstractDDLUpdate +{ + public Update0456(String driver, ProgressMonitor monitor, Connection conn) + { + super(driver, monitor, conn); + } + + @Override + public void run() throws ApplicationException + { + { + execute(addColumn("konto", new Column("zweck", + COLTYPE.INTEGER, 0, "1", false, false))); + } + } +} diff --git a/src/de/jost_net/JVerein/server/KontoImpl.java b/src/de/jost_net/JVerein/server/KontoImpl.java index 8a72bee84..727145b50 100644 --- a/src/de/jost_net/JVerein/server/KontoImpl.java +++ b/src/de/jost_net/JVerein/server/KontoImpl.java @@ -21,6 +21,7 @@ import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.keys.AfaMode; +import de.jost_net.JVerein.keys.Anlagenzweck; import de.jost_net.JVerein.keys.Kontoart; import de.jost_net.JVerein.rmi.Buchungsart; import de.jost_net.JVerein.rmi.Buchungsklasse; @@ -482,4 +483,25 @@ public Object getAttribute(String fieldName) throws RemoteException return getBuchungsart(); return super.getAttribute(fieldName); } + + @Override + public Anlagenzweck getAnlagenzweck() throws RemoteException + { + Integer tmp = (Integer) super.getAttribute("zweck"); + if (tmp == null) + { + return Anlagenzweck.NUTZUNGSGEBUNDEN; + } + else + { + return Anlagenzweck.getByKey((int) super.getAttribute("zweck")); + } + } + + @Override + public void setAnlagenzweck(Anlagenzweck zweck) + throws RemoteException + { + setAttribute("zweck", zweck.getKey()); + } } From b665a9d9fc87dd01dc5fcef2572e90d9c908b88c Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Sat, 11 Jan 2025 15:07:33 +0100 Subject: [PATCH 02/38] Update Kontoart.java --- src/de/jost_net/JVerein/keys/Kontoart.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/jost_net/JVerein/keys/Kontoart.java b/src/de/jost_net/JVerein/keys/Kontoart.java index 3bc0cd078..0afb520e5 100644 --- a/src/de/jost_net/JVerein/keys/Kontoart.java +++ b/src/de/jost_net/JVerein/keys/Kontoart.java @@ -30,7 +30,7 @@ public enum Kontoart RUECKLAGE_BETRIEBSMITTEL(102, "Betriebsmittel Rücklagen nach § 62 Abs. 1 Nr. 1 AO"), RUECKLAGE_INVESTITION(103, "Investitionsrücklage nach § 62 Abs. 1 Nr. 1 AO"), RUECKLAGE_INSTANDHALTUNG(104, "Instandhaltungsrücklage nach § 62 Abs. 1 Nr. 1AO"), - RUECKLAGE_WIEDERBESCHAFFUNG(105, "Rücklage zur Wiederbeschaffung nach § 62 Abs. 1 Nr. 2 AO"), + RUECKLAGE_WIEDERBESCHAFFUNG(105, "Wiederbeschaffungsrücklage nach § 62 Abs. 1 Nr. 2 AO"), RUECKLAGE_FREI(106, "Freie Rücklage nach § 62 Abs. 1 Nr. 3 AO"), RUECKLAGE_ERWERB(107, "Rücklage nach § 62 Abs. 1 Nr. 4 AO"), VERMOEGEN(108, "Vermögen nach § 62 Abs. 3 und 4 AO"), From 5eb8dd42ce1f1bf392cf87a647877a65fc3f2967 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Sat, 11 Jan 2025 16:53:37 +0100 Subject: [PATCH 03/38] Update Kontoart.java --- src/de/jost_net/JVerein/keys/Kontoart.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/de/jost_net/JVerein/keys/Kontoart.java b/src/de/jost_net/JVerein/keys/Kontoart.java index 0afb520e5..df2d2eff1 100644 --- a/src/de/jost_net/JVerein/keys/Kontoart.java +++ b/src/de/jost_net/JVerein/keys/Kontoart.java @@ -26,15 +26,15 @@ public enum Kontoart ANLAGE(2, "Anlagenkonto"), VERBINDLICHKEITEN(3, "Verbindlichkeitskonto"), LIMIT(100, "-- Limit --"), - RUECKLAGE_ZWECK_GEBUNDEN(101, "Zweckgebundene Rücklagen nach § 62 Abs. 1 Nr. 1 AO"), - RUECKLAGE_BETRIEBSMITTEL(102, "Betriebsmittel Rücklagen nach § 62 Abs. 1 Nr. 1 AO"), + RUECKLAGE_ZWECK_GEBUNDEN(101, "Zweckgebundene Rücklage nach § 62 Abs. 1 Nr. 1 AO"), + RUECKLAGE_BETRIEBSMITTEL(102, "Betriebsmittelrücklage nach § 62 Abs. 1 Nr. 1 AO"), RUECKLAGE_INVESTITION(103, "Investitionsrücklage nach § 62 Abs. 1 Nr. 1 AO"), RUECKLAGE_INSTANDHALTUNG(104, "Instandhaltungsrücklage nach § 62 Abs. 1 Nr. 1AO"), RUECKLAGE_WIEDERBESCHAFFUNG(105, "Wiederbeschaffungsrücklage nach § 62 Abs. 1 Nr. 2 AO"), RUECKLAGE_FREI(106, "Freie Rücklage nach § 62 Abs. 1 Nr. 3 AO"), RUECKLAGE_ERWERB(107, "Rücklage nach § 62 Abs. 1 Nr. 4 AO"), VERMOEGEN(108, "Vermögen nach § 62 Abs. 3 und 4 AO"), - RUECKLAGE_SONSTIG(109, "Sonstige Rücklagen"); + RUECKLAGE_SONSTIG(109, "Sonstige Rücklage"); private final String text; From da0de363b110459af8f5fb1a84128795fe6920c1 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Sat, 11 Jan 2025 17:07:20 +0100 Subject: [PATCH 04/38] Update PDF/CSV Report Titel --- src/de/jost_net/JVerein/io/MittelverwendungExportCSV.java | 2 +- src/de/jost_net/JVerein/io/MittelverwendungExportPDF.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/de/jost_net/JVerein/io/MittelverwendungExportCSV.java b/src/de/jost_net/JVerein/io/MittelverwendungExportCSV.java index a11fcdbd9..106fe8190 100644 --- a/src/de/jost_net/JVerein/io/MittelverwendungExportCSV.java +++ b/src/de/jost_net/JVerein/io/MittelverwendungExportCSV.java @@ -66,7 +66,7 @@ public MittelverwendungExportCSV(ArrayList zeile, String[] header = {"Nr", "Bezeichnung", "Betrag", "Summe"}; writer.writeHeader(header); - String title = "Mittelverwendung"; + String title = "Mittelverwendungsrechnung"; csvzeile.put(header[1], title); writer.write(csvzeile, header, processors); csvzeile = new HashMap<>(); diff --git a/src/de/jost_net/JVerein/io/MittelverwendungExportPDF.java b/src/de/jost_net/JVerein/io/MittelverwendungExportPDF.java index 9fb3b8f7f..d4c5e8835 100644 --- a/src/de/jost_net/JVerein/io/MittelverwendungExportPDF.java +++ b/src/de/jost_net/JVerein/io/MittelverwendungExportPDF.java @@ -46,7 +46,7 @@ public MittelverwendungExportPDF(ArrayList zeile, FileOutputStream fos = new FileOutputStream(file); String subtitle = "Geschäftsjahr: " + new JVDateFormatTTMMJJJJ().format(datumvon) + " - " + new JVDateFormatTTMMJJJJ().format(datumbis); - Reporter reporter = new Reporter(fos, "Mittelverwendung", subtitle, + Reporter reporter = new Reporter(fos, "Mittelverwendungsrechnung", subtitle, zeile.size()); makeHeader(reporter); From 389d6b36bec9633f7c5803f2ac6ae7a6a016d2ff Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Tue, 14 Jan 2025 20:10:27 +0100 Subject: [PATCH 05/38] Zwischenstand --- .../JVerein/gui/control/KontoControl.java | 35 +- .../gui/control/MittelverwendungControl.java | 56 ++- .../gui/parts/MittelverwendungList.java | 413 ++++++++++++++++-- .../jost_net/JVerein/gui/view/KontoView.java | 2 +- .../gui/view/MittelverwendungListeView.java | 36 +- .../JVerein/io/MittelverwendungExportCSV.java | 43 +- .../JVerein/io/MittelverwendungExportPDF.java | 68 ++- .../JVerein/io/MittelverwendungZeile.java | 11 +- 8 files changed, 574 insertions(+), 90 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/control/KontoControl.java b/src/de/jost_net/JVerein/gui/control/KontoControl.java index bbb5425ee..5de3733e3 100644 --- a/src/de/jost_net/JVerein/gui/control/KontoControl.java +++ b/src/de/jost_net/JVerein/gui/control/KontoControl.java @@ -104,7 +104,7 @@ public class KontoControl extends AbstractControl private AbstractInput anlagenart; - private SelectInput anlagenklasse; + private SelectInput buchungsklasse; private AbstractInput afaart; @@ -632,37 +632,35 @@ private Long getSelectedAnlagenartId() throws ApplicationException } } - public Input getAnlagenklasse() throws RemoteException + public Input getBuchungsklasse() throws RemoteException { - if (anlagenklasse != null) + if (buchungsklasse != null) { - return anlagenklasse; + return buchungsklasse; } DBIterator list = Einstellungen.getDBService() .createList(Buchungsklasse.class); list.setOrder(getBuchungartSortOrder()); - anlagenklasse = new SelectInput(list != null ? PseudoIterator.asList(list) : null, + buchungsklasse = new SelectInput(list != null ? PseudoIterator.asList(list) : null, getKonto().getAnlagenklasse()); - anlagenklasse.setAttribute(getBuchungartAttribute()); - anlagenklasse.setPleaseChoose("Bitte auswählen"); + buchungsklasse.setAttribute(getBuchungartAttribute()); + buchungsklasse.setPleaseChoose("Bitte auswählen"); if (getKontoArt().getValue() == Kontoart.ANLAGE) { - anlagenklasse.setMandatory(true); + buchungsklasse.setMandatory(true); } else { - anlagenklasse.setMandatory(false); - anlagenklasse.setValue(null); - anlagenklasse.disable(); + buchungsklasse.setMandatory(false); } - return anlagenklasse; + return buchungsklasse; } private Long getSelectedAnlagenklasseId() throws ApplicationException { try { - Buchungsklasse buchungsKlasse = (Buchungsklasse) getAnlagenklasse().getValue(); + Buchungsklasse buchungsKlasse = (Buchungsklasse) getBuchungsklasse().getValue(); if (null == buchungsKlasse) return null; Long id = Long.valueOf(buchungsKlasse.getID()); @@ -984,8 +982,8 @@ public void handleEvent(Event event) Buchungsart ba = (Buchungsart) getAnlagenart().getValue(); if (ba != null) { - if (getAnlagenklasse().getValue() == null) - getAnlagenklasse().setValue(ba.getBuchungsklasse()); + if (getBuchungsklasse().getValue() == null) + getBuchungsklasse().setValue(ba.getBuchungsklasse()); } } catch (Exception e) @@ -1001,8 +999,7 @@ public void refreshGui() { if (getKontoArt().getValue() == Kontoart.ANLAGE) { - getAnlagenklasse().enable(); - getAnlagenklasse().setMandatory(true); + getBuchungsklasse().setMandatory(true); getAnlagenart().enable(); getAnlagenart().setMandatory(true); getAfaart().enable(); @@ -1027,9 +1024,7 @@ public void refreshGui() } else { - getAnlagenklasse().setMandatory(false); - getAnlagenklasse().setValue(null); - getAnlagenklasse().disable(); + getBuchungsklasse().setMandatory(false); getAnlagenart().setMandatory(false); getAnlagenart().setValue(null); getAnlagenart().disable(); diff --git a/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java b/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java index 2ff931708..cd366cf8a 100644 --- a/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java +++ b/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java @@ -45,12 +45,20 @@ public class MittelverwendungControl extends SaldoControl { - private MittelverwendungList saldoList; + private MittelverwendungList[] saldoList = new MittelverwendungList[ANZAHL_TABS]; final static String ExportPDF = "PDF"; final static String ExportCSV = "CSV"; + public final static int FLOW_REPORT = 0; + + public final static int SALDO_REPORT = 1; + + public final static int ANZAHL_TABS = 2; + + private int selectedTab = 0; + public MittelverwendungControl(AbstractView view) { super(view); @@ -90,6 +98,18 @@ public void handleStore() } public Part getSaldoList() throws ApplicationException + { + for (int i = 0; i < ANZAHL_TABS; i++) + { + if (i != selectedTab) + { + getSaldoList(i); + } + } + return getSaldoList(selectedTab); + } + + public Part getSaldoList(int tab) throws ApplicationException { try { @@ -101,23 +121,23 @@ public Part getSaldoList() throws ApplicationException new JVDateFormatTTMMJJJJ().format(getDatumbis().getDate())); } - if (saldoList == null) + if (saldoList[tab] == null) { - saldoList = new MittelverwendungList(null, - datumvon.getDate(), datumbis.getDate()); + saldoList[tab] = new MittelverwendungList(null, datumvon.getDate(), + datumbis.getDate(), tab); } else { settings.setAttribute("von", new JVDateFormatTTMMJJJJ().format(getDatumvon().getDate())); - saldoList.setDatumvon(datumvon.getDate()); - saldoList.setDatumbis(datumbis.getDate()); - ArrayList zeile = saldoList.getInfo(); - saldoList.removeAll(); + saldoList[tab].setDatumvon(datumvon.getDate()); + saldoList[tab].setDatumbis(datumbis.getDate()); + ArrayList zeile = saldoList[tab].getInfo(); + saldoList[tab].removeAll(); for (MittelverwendungZeile sz : zeile) { - saldoList.addItem(sz); + saldoList[tab].addItem(sz); } } } @@ -126,14 +146,15 @@ public Part getSaldoList() throws ApplicationException throw new ApplicationException( String.format("Fehler aufgetreten %s", e.getMessage())); } - return saldoList.getSaldoList(); + return saldoList[tab].getSaldoList(); } private void starteExport(String type) throws ApplicationException { try { - ArrayList zeilen = saldoList.getInfo(); + ArrayList zeilen = saldoList[selectedTab] + .getInfo(); FileDialog fd = new FileDialog(GUI.getShell(), SWT.SAVE); fd.setText("Ausgabedatei wählen."); @@ -160,7 +181,7 @@ private void starteExport(String type) throws ApplicationException settings.setAttribute("lastdir", file.getParent()); exportSaldo(zeilen, file, getDatumvon().getDate(), - getDatumbis().getDate(), type); + getDatumbis().getDate(), type, selectedTab); } catch (RemoteException e) { @@ -171,7 +192,7 @@ private void starteExport(String type) throws ApplicationException private void exportSaldo(final ArrayList zeile, final File file, final Date datumvon, final Date datumbis, - final String type) + final String type, final int tab) { BackgroundTask t = new BackgroundTask() { @@ -181,9 +202,9 @@ public void run(ProgressMonitor monitor) throws ApplicationException try { if (type.equals(ExportCSV)) - new MittelverwendungExportCSV(zeile, file, datumvon, datumbis); + new MittelverwendungExportCSV(zeile, file, datumvon, datumbis, tab); else if (type.equals(ExportPDF)) - new MittelverwendungExportPDF(zeile, file, datumvon, datumbis); + new MittelverwendungExportPDF(zeile, file, datumvon, datumbis, tab); GUI.getCurrentView().reload(); } catch (ApplicationException ae) @@ -208,4 +229,9 @@ public boolean isInterrupted() Application.getController().start(t); } + public void setSelectedTab(int tab) + { + selectedTab = tab; + } + } diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java index bf77f3c51..ed2281baf 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java @@ -21,10 +21,12 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import org.eclipse.swt.widgets.Composite; import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.gui.control.MittelverwendungControl; import de.jost_net.JVerein.io.MittelverwendungZeile; import de.jost_net.JVerein.keys.Anlagenzweck; import de.jost_net.JVerein.keys.ArtBuchungsart; @@ -48,11 +50,19 @@ public class MittelverwendungList extends TablePart private Date datumbis = null; - public MittelverwendungList(Action action, Date datumvon, Date datumbis) + private int tab = 0; + + private static double LIMIT = 0.005; + + private static String NULL = " "; + + public MittelverwendungList(Action action, Date datumvon, Date datumbis, + int tab) { super(action); this.datumvon = datumvon; this.datumbis = datumbis; + this.tab = tab; } public Part getSaldoList() throws ApplicationException @@ -80,6 +90,7 @@ protected void orderBy(int index) saldoList.addColumn("Summe", "summe", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, Column.ALIGN_LEFT); + saldoList.addColumn("Kommentar", "kommentar"); saldoList.setRememberColWidths(true); saldoList.removeFeature(FeatureSummary.class); } @@ -99,7 +110,61 @@ protected void orderBy(int index) return saldoList; } + 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)); + } + }; + + ResultSetExtractor rsmap = new ResultSetExtractor() + { + @Override + public Object extract(ResultSet rs) throws SQLException + { + HashMap map = new HashMap<>(); + while (rs.next()) + { + map.put(rs.getLong(1), rs.getString(2)); + } + return map; + } + }; + + ResultSetExtractor rsmapa = new ResultSetExtractor() + { + @Override + public Object extract(ResultSet rs) throws SQLException + { + HashMap map = new HashMap<>(); + while (rs.next()) + { + map.put(rs.getLong(1), + new String[] { rs.getString(2), rs.getString(3) }); + } + return map; + } + }; + public ArrayList getInfo() throws RemoteException + { + switch (tab) + { + case MittelverwendungControl.FLOW_REPORT: + return getFlowReport(); + case MittelverwendungControl.SALDO_REPORT: + return getSaldoReport(); + } + return new ArrayList(); + } + + public ArrayList getFlowReport() throws RemoteException { DBService service = Einstellungen.getDBService(); String sql; @@ -107,19 +172,6 @@ public ArrayList getInfo() throws RemoteException String bezeichnung = ""; Integer pos = 1; - 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)); - } - }; - // Schritt 1: Berechnung des Verwendungsrückstand(+)/-überhang(-) // am Ende des letzten GJ // Vorhandene Geldmittel zum Ende des letzten GJ sind zu verwenden @@ -151,7 +203,7 @@ public Object extract(ResultSet rs) throws SQLException bezeichnung = "Verwendungsrückstand(+)/-überhang(-) am Ende des letzten GJ"; addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - vorhandeneMittel, null); + vorhandeneMittel, null, NULL); // Schritt 2: Mittel Zufluss // Summe aller Zuflüsse bei Geldkonten und Anlagen (=Sachspenden) @@ -172,10 +224,10 @@ public Object extract(ResultSet rs) throws SQLException bezeichnung = "Insgesamt im GJ zugeflossene Mittel"; addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - zufuehrung, null); + zufuehrung, null, NULL); bezeichnung = " Zu verwendende Mittel im GJ und nächstem GJ"; addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - zufuehrung, vorhandeneMittel); + zufuehrung, vorhandeneMittel, NULL); // Schritt 3: Mittel Abfluss // Summe aller Abflüsse bei Geldkonten @@ -201,7 +253,7 @@ public Object extract(ResultSet rs) throws SQLException bezeichnung = "Im GJ verwendete Mittel"; addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, null, - verwendung); + verwendung, NULL); // Rücklagen Double summeZuRuecklagen = 0.0; @@ -213,33 +265,291 @@ public Object extract(ResultSet rs) throws SQLException Double zuRuecklagen = (Double) service.execute(sql, new Object[] { datumvon, datumbis, i, ArtBuchungsart.EINNAHME }, rsd); summeZuRuecklagen += zuRuecklagen; - if (Math.abs(zuRuecklagen) > 0.005 + if (Math.abs(zuRuecklagen) > LIMIT || !Einstellungen.getEinstellung().getUnterdrueckungOhneBuchung()) { bezeichnung = "Zuführung " + Kontoart.getByKey(i).getText(); addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, - null, -zuRuecklagen); + null, -zuRuecklagen, NULL); } Double entRuecklagen = (Double) service.execute(sql, new Object[] { datumvon, datumbis, i, ArtBuchungsart.AUSGABE }, rsd); summeEntRuecklagen += entRuecklagen; - if (Math.abs(entRuecklagen) > 0.005 + if (Math.abs(entRuecklagen) > LIMIT || !Einstellungen.getEinstellung().getUnterdrueckungOhneBuchung()) { bezeichnung = "Entnahme " + Kontoart.getByKey(i).getText(); addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - -entRuecklagen, null); + -entRuecklagen, null, NULL); } } bezeichnung = " Verwendungsrückstand(+)/-überhang(-) zum Ende des GJ"; addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, zufuehrung + vorhandeneMittel + verwendung - summeZuRuecklagen, - -summeEntRuecklagen); + -summeEntRuecklagen, NULL); // Leerzeile am Ende wegen Scrollbar zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, null, - null, null, null)); + null, null, null, NULL)); + return zeilen; + } + + public ArrayList getSaldoReport() + throws RemoteException + { + DBService service = Einstellungen.getDBService(); + String sql; + ArrayList zeilen = new ArrayList<>(); + Integer pos = 1; + Double summeVermoegen = 0.0; + String bezeichnung = ""; + // Anlagevermögen + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, + "Anlagenvermögen", null, null, NULL)); + if (Einstellungen.getEinstellung().getSummenAnlagenkonto()) + { + sql = getAnfangsbestandKontoartSql(); + Double anlagenStand = (Double) service.execute(sql, + new Object[] { datumvon, Kontoart.ANLAGE.getKey(), datumvon }, rsd); + sql = getSummenBetragKontoartSql(); + anlagenStand += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey() }, rsd); + bezeichnung = " Summe Anlagenkonten"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, + anlagenStand, 0.0, NULL); + summeVermoegen += anlagenStand; + } + else + { + sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; + @SuppressWarnings("unchecked") + HashMap map0 = (HashMap) service + .execute(sql, new Object[] { Kontoart.ANLAGE.getKey() }, rsmapa); + for (Long kontoId : map0.keySet()) + { + sql = getAnfangsbestandKontoSql(); + Double kontoStand = (Double) service.execute(sql, + new Object[] { datumvon, kontoId, datumvon }, rsd); + sql = getSummenBetragKontoSql(); + kontoStand += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, kontoId }, rsd); + if (Math.abs(kontoStand) > LIMIT) + { + String kommentar = map0.get(kontoId)[1]; + if (kommentar != null && !kommentar.isEmpty()) + { + kommentar = kommentar.split("\n")[0]; + } + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, + map0.get(kontoId)[0], kontoStand, null, kommentar); + summeVermoegen += kontoStand; + } + } + bezeichnung = " Summe Anlagenkonten"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, + summeVermoegen, 0.0, NULL); + } + + // Geldkonten + Double summeGeld = 0.0; + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, + "Geldvermögen", null, null, NULL)); + sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; + @SuppressWarnings("unchecked") + HashMap map1 = (HashMap) service + .execute(sql, new Object[] { Kontoart.GELD.getKey() }, rsmapa); + for (Long kontoId : map1.keySet()) + { + sql = getAnfangsbestandKontoSql(); + Double kontoStand = (Double) service.execute(sql, + new Object[] { datumvon, kontoId, datumvon }, rsd); + sql = getSummenBetragKontoSql(); + kontoStand += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, kontoId }, rsd); + if (Math.abs(kontoStand) > LIMIT) + { + String kommentar = map1.get(kontoId)[1]; + if (kommentar != null && !kommentar.isEmpty()) + { + kommentar = kommentar.split("\n")[0]; + } + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, + map1.get(kontoId)[0], kontoStand, null, kommentar); + summeGeld += kontoStand; + } + } + bezeichnung = " Summe Geldkonten"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, summeGeld, + 0.0, NULL); + summeVermoegen += summeGeld; + + // Verbindlichkeitskonten + Double summeSchulden = 0.0; + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, + "Darlehen, Kredite etc.", null, null, NULL)); + sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; + @SuppressWarnings("unchecked") + HashMap map2 = (HashMap) service.execute( + sql, new Object[] { Kontoart.VERBINDLICHKEITEN.getKey() }, rsmapa); + for (Long kontoId : map2.keySet()) + { + sql = getAnfangsbestandKontoSql(); + Double kontoStand = (Double) service.execute(sql, + new Object[] { datumvon, kontoId, datumvon }, rsd); + sql = getSummenBetragKontoSql(); + kontoStand += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, kontoId }, rsd); + if (Math.abs(kontoStand) > LIMIT) + { + String kommentar = map2.get(kontoId)[1]; + if (kommentar != null && !kommentar.isEmpty()) + { + kommentar = kommentar.split("\n")[0]; + } + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, + map2.get(kontoId)[0], kontoStand, null, kommentar); + summeSchulden += kontoStand; + } + } + bezeichnung = " Summe Darlehen, Kredite etc."; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, + summeSchulden, 0.0, NULL); + summeVermoegen += summeSchulden; + bezeichnung = " Gesamtvermögen"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, + summeVermoegen, 0.0, NULL); + // Leerzeile + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.LEERZEILE, null, + null, null, null, NULL)); + + // Mittelverwendung + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, + "Mittelverwendung", null, null, NULL)); + // Nutzungsgebundenes Anlagevermögen + sql = getAnfangsbestandKontoartZweckSql(); + Double anlagenStand = (Double) service.execute(sql, new Object[] { datumvon, + Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), datumvon }, + rsd); + sql = getSummenBetragKontoartZweckSql(); + anlagenStand += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey(), + Anlagenzweck.NUTZUNGSGEBUNDEN.getKey() }, + rsd); + bezeichnung = " Nutzungsgebundenes Anlagenvermögen"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, + -anlagenStand, NULL); + summeVermoegen -= anlagenStand; + // Verbindlichkeitskonten + bezeichnung = " Summe Darlehen, Kredite etc."; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, + -summeSchulden, NULL); + summeVermoegen -= summeSchulden; + // Rücklagen, Vermögen nicht zugeordnet + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, + "Nicht zugeordnete Rücklagen", null, null, NULL)); + Double summeRuecklagen = 0.0; + sql = "SELECT id, bezeichnung, kommentar FROM konto" + + " WHERE konto.kontoart >= ?" + " AND konto.kontoart <= ?" + + " AND konto.anlagenklasse IS NULL"; + @SuppressWarnings("unchecked") + HashMap map3 = (HashMap) service + .execute(sql, new Object[] { Kontoart.RUECKLAGE_ZWECK_GEBUNDEN.getKey(), + Kontoart.RUECKLAGE_SONSTIG.getKey() }, rsmapa); + for (Long kontoId : map3.keySet()) + { + sql = getAnfangsbestandKontoSql(); + Double ruecklagen = (Double) service.execute(sql, + new Object[] { datumvon, kontoId, datumvon }, rsd); + sql = getSummenBetragKontoSql(); + ruecklagen += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, kontoId }, rsd); + if (Math.abs(ruecklagen) > LIMIT) + { + String kommentar = map3.get(kontoId)[1]; + if (kommentar != null && !kommentar.isEmpty()) + { + kommentar = kommentar.split("\n")[0]; + } + addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, + map3.get(kontoId)[0], null, -ruecklagen, kommentar); + summeRuecklagen += ruecklagen; + } + } + if (Math.abs(summeRuecklagen) > LIMIT) + { + bezeichnung = " Summe nicht zugeordneter Rücklagen"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, + -summeRuecklagen, NULL); + summeVermoegen -= summeRuecklagen; + } + else + { + zeilen.remove(zeilen.size() - 1); + } + + // Rücklagen, Vermögen den Buchungsklassen zugeordnet + sql = "SELECT buchungsklasse.id, buchungsklasse.bezeichnung FROM buchungsklasse" + + " ORDER BY nummer"; + @SuppressWarnings("unchecked") + HashMap buchungsklassen = (HashMap) service + .execute(sql, new Object[] {}, rsmap); + for (Long buchungsklasseId : buchungsklassen.keySet()) + { + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, + pos++, buchungsklassen.get(buchungsklasseId), null, null, NULL)); + summeRuecklagen = 0.0; + sql = "SELECT id, bezeichnung, kommentar FROM konto" + + " WHERE konto.kontoart >= ?" + " AND konto.kontoart <= ?" + + " AND konto.anlagenklasse = ?"; + @SuppressWarnings("unchecked") + HashMap map4 = (HashMap) service + .execute(sql, + new Object[] { Kontoart.RUECKLAGE_ZWECK_GEBUNDEN.getKey(), + Kontoart.RUECKLAGE_SONSTIG.getKey(), buchungsklasseId }, + rsmapa); + for (Long kontoId : map4.keySet()) + { + sql = getAnfangsbestandKontoSql(); + Double ruecklagen = (Double) service.execute(sql, + new Object[] { datumvon, kontoId, datumvon }, rsd); + sql = getSummenBetragKontoSql(); + ruecklagen += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, kontoId }, rsd); + if (Math.abs(ruecklagen) > LIMIT) + { + String kommentar = map4.get(kontoId)[1]; + if (kommentar != null && !kommentar.isEmpty()) + { + kommentar = kommentar.split("\n")[0]; + } + addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, + map4.get(kontoId)[0], null, -ruecklagen, kommentar); + summeRuecklagen += ruecklagen; + } + } + if (Math.abs(summeRuecklagen) > LIMIT) + { + bezeichnung = " Summe Rücklagen/Vermögen " + + buchungsklassen.get(buchungsklasseId); + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, + -summeRuecklagen, NULL); + summeVermoegen -= summeRuecklagen; + } + else + { + zeilen.remove(zeilen.size() - 1); + } + } + // Leerzeile + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.LEERZEILE, null, + null, null, null, NULL)); + bezeichnung = "Verwendungsrückstand(+)/-überhang(-) zum Ende des GJ"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, + summeVermoegen, NULL); + // Leerzeile undefined - nicht drucken in PDF und CSV + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, null, + null, null, null, NULL)); return zeilen; } @@ -314,23 +624,68 @@ private String getSummenRuecklagenSql() + " AND buchungsart.art = ?"; } + private String getAnfangsbestandKontoartSql() throws RemoteException + { + return "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + + " WHERE anfangsbestand.datum = ?" + + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? " + + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)"; + } + + private String getAnfangsbestandKontoartZweckSql() throws RemoteException + { + return "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + + " WHERE anfangsbestand.datum = ?" + + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? " + + " AND konto.zweck = ?" + + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)"; + } + + private String getSummenBetragKontoartSql() throws RemoteException + { + return "SELECT sum(buchung.betrag) FROM buchung, konto" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + + " AND konto.kontoart = ?"; + } + + private String getSummenBetragKontoartZweckSql() throws RemoteException + { + return "SELECT sum(buchung.betrag) FROM buchung, konto" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + + " AND konto.kontoart = ?" + " AND konto.zweck = ?"; + } + + private String getAnfangsbestandKontoSql() throws RemoteException + { + return "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + + " WHERE anfangsbestand.datum = ?" + " AND anfangsbestand.konto = ?" + + " AND anfangsbestand.konto = konto.id " + + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)"; + } + + private String getSummenBetragKontoSql() throws RemoteException + { + return "SELECT sum(buchung.betrag) FROM buchung" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = ?"; + } + private void addZeile(ArrayList zeilen, int status, - Integer position, String bezeichnung, Double einnahme, Double ausgabe) - throws RemoteException + Integer position, String bezeichnung, Double einnahme, Double ausgabe, + String kommentar) throws RemoteException { switch (status) { case MittelverwendungZeile.EINNAHME: zeilen.add(new MittelverwendungZeile(status, position, bezeichnung, - einnahme, null)); + einnahme, null, kommentar)); break; case MittelverwendungZeile.AUSGABE: zeilen.add(new MittelverwendungZeile(status, position, bezeichnung, - ausgabe, null)); + ausgabe, null, kommentar)); break; case MittelverwendungZeile.SUMME: zeilen.add(new MittelverwendungZeile(status, position, bezeichnung, - null, einnahme + ausgabe)); + null, einnahme + ausgabe, kommentar)); break; } } diff --git a/src/de/jost_net/JVerein/gui/view/KontoView.java b/src/de/jost_net/JVerein/gui/view/KontoView.java index 0596417fb..823355a1d 100644 --- a/src/de/jost_net/JVerein/gui/view/KontoView.java +++ b/src/de/jost_net/JVerein/gui/view/KontoView.java @@ -50,13 +50,13 @@ public void bind() throws Exception SimpleContainer right = new SimpleContainer(cl.getComposite()); right.addLabelPair("Hibiscus-Konto", control.getHibiscusId()); right.addLabelPair("GB-Buchungsart", control.getBuchungsart()); + right.addLabelPair("Buchungsklasse", control.getBuchungsklasse()); right.addLabelPair("Kommentar", control.getKommentar()); LabelGroup group1 = new LabelGroup(getParent(), "Anlagenkonto Daten"); ColumnLayout cl1 = new ColumnLayout(group1.getComposite(), 2); SimpleContainer left1 = new SimpleContainer(cl1.getComposite()); - left1.addLabelPair("Anlagen Buchungsklasse", control.getAnlagenklasse()); left1.addLabelPair("Anlagen Buchungsart", control.getAnlagenart()); left1.addLabelPair("AfA Buchungsart", control.getAfaart()); left1.addLabelPair("Anlagenwert", control.getBetrag()); diff --git a/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java b/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java index e1d345b01..e64e9fa4c 100644 --- a/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java +++ b/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java @@ -16,6 +16,13 @@ **********************************************************************/ package de.jost_net.JVerein.gui.view; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.TabFolder; +import org.eclipse.swt.widgets.TabItem; + import de.jost_net.JVerein.gui.action.DokumentationAction; import de.jost_net.JVerein.gui.control.MittelverwendungControl; import de.jost_net.JVerein.gui.parts.QuickAccessPart; @@ -23,7 +30,7 @@ import de.willuhn.jameica.gui.AbstractView; import de.willuhn.jameica.gui.GUI; import de.willuhn.jameica.gui.parts.ButtonArea; -import de.willuhn.jameica.gui.util.LabelGroup; +import de.willuhn.jameica.gui.util.TabGroup; public class MittelverwendungListeView extends AbstractView { @@ -40,8 +47,31 @@ public void bind() throws Exception QuickAccessPart qpart = new QuickAccessPart(control, false); qpart.paint(this.getParent()); - LabelGroup group = new LabelGroup(getParent(), "Liste", true); - group.addPart(control.getSaldoList()); + final TabFolder folder = new TabFolder(getParent(), SWT.NONE); + folder.setLayoutData(new GridData(GridData.FILL_BOTH)); + folder.addSelectionListener(new SelectionAdapter() + { + + @Override + public void widgetSelected(SelectionEvent evt) + { + TabItem item = folder.getSelection()[0]; + if (item.getText().startsWith("Mittelverwendungsreport (Zufluss")) + { + control.setSelectedTab(MittelverwendungControl.FLOW_REPORT); + } + else if (item.getText().startsWith("Mittelverwendungsreport (Saldo")) + { + control.setSelectedTab(MittelverwendungControl.SALDO_REPORT); + } + } + }); + + // Die verschiedenen Tabs + TabGroup mittelverwendungFlow = new TabGroup(folder, "Mittelverwendungsreport (Zufluss basiert)", true, 1); + mittelverwendungFlow.addPart(control.getSaldoList(MittelverwendungControl.FLOW_REPORT)); + TabGroup mittelverwendungSaldo = new TabGroup(folder, "Mittelverwendungsreport (Saldo basiert)", true, 1); + mittelverwendungSaldo.addPart(control.getSaldoList(MittelverwendungControl.SALDO_REPORT)); ButtonArea buttons = new ButtonArea(); buttons.addButton("Hilfe", new DokumentationAction(), diff --git a/src/de/jost_net/JVerein/io/MittelverwendungExportCSV.java b/src/de/jost_net/JVerein/io/MittelverwendungExportCSV.java index 106fe8190..720ba08c4 100644 --- a/src/de/jost_net/JVerein/io/MittelverwendungExportCSV.java +++ b/src/de/jost_net/JVerein/io/MittelverwendungExportCSV.java @@ -31,6 +31,7 @@ import org.supercsv.prefs.CsvPreference; import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.gui.control.MittelverwendungControl; import de.jost_net.JVerein.util.JVDateFormatTTMMJJJJ; import de.willuhn.jameica.gui.GUI; import de.willuhn.logging.Logger; @@ -47,13 +48,14 @@ private static CellProcessor[] getProcessors() new ConvertNullTo(""), // Bezeichnung new ConvertNullTo("", new FmtNumber(Einstellungen.DECIMALFORMAT)), // Betrag new ConvertNullTo("", new FmtNumber(Einstellungen.DECIMALFORMAT)), // Summe + new ConvertNullTo(""), // Kommentar }; return processors; } public MittelverwendungExportCSV(ArrayList zeile, - final File file, Date datumvon, Date datumbis) throws ApplicationException + final File file, Date datumvon, Date datumbis, int tab) throws ApplicationException { ICsvMapWriter writer = null; try @@ -63,10 +65,19 @@ public MittelverwendungExportCSV(ArrayList zeile, final CellProcessor[] processors = getProcessors(); Map csvzeile = new HashMap<>(); - String[] header = {"Nr", "Bezeichnung", "Betrag", "Summe"}; + String[] header = {"Nr", "Bezeichnung", "Betrag", "Summe", "Kommentar"}; writer.writeHeader(header); - String title = "Mittelverwendungsrechnung"; + String title = ""; + switch (tab) + { + case MittelverwendungControl.FLOW_REPORT: + title = "Mittelverwendungsrechnung (Zufluss basiert)"; + break; + case MittelverwendungControl.SALDO_REPORT: + title = "Mittelverwendungsrechnung (Saldo basiert)"; + break; + } csvzeile.put(header[1], title); writer.write(csvzeile, header, processors); csvzeile = new HashMap<>(); @@ -88,27 +99,43 @@ public MittelverwendungExportCSV(ArrayList zeile, case MittelverwendungZeile.AUSGABE: { String position = ""; - if ((Integer) mvz.getAttribute("position") != null); + Integer pos = (Integer) mvz.getAttribute("position"); + if (pos != null) { - position = ((Integer) mvz.getAttribute("position")).toString(); + position = pos.toString(); } csvzeile.put(header[0], position); csvzeile.put(header[1], (String) mvz.getAttribute("bezeichnung")); csvzeile.put(header[2],(Double) mvz.getAttribute("betrag")); csvzeile.put(header[3], (Double) mvz.getAttribute("summe")); + csvzeile.put(header[4], (String) mvz.getAttribute("kommentar")); break; } case MittelverwendungZeile.SUMME: { String position = ""; - if ((Integer) mvz.getAttribute("position") != null); + Integer pos = (Integer) mvz.getAttribute("position"); + if (pos != null) { - position = ((Integer) mvz.getAttribute("position")).toString(); + position = pos.toString(); } csvzeile.put(header[0], position); csvzeile.put(header[1], (String) mvz.getAttribute("bezeichnung")); - csvzeile.put(header[2],(Double) mvz.getAttribute("betrag")); + csvzeile.put(header[2], (Double) mvz.getAttribute("betrag")); csvzeile.put(header[3], (Double) mvz.getAttribute("summe")); + csvzeile.put(header[4], (String) mvz.getAttribute("kommentar")); + break; + } + case MittelverwendungZeile.LEERZEILE: + { + String position = ""; + Integer pos = (Integer) mvz.getAttribute("position"); + if (pos != null) + { + position = pos.toString(); + } + csvzeile.put(header[0], position); + csvzeile.put(header[1], (String) mvz.getAttribute("bezeichnung")); break; } case MittelverwendungZeile.UNDEFINED: diff --git a/src/de/jost_net/JVerein/io/MittelverwendungExportPDF.java b/src/de/jost_net/JVerein/io/MittelverwendungExportPDF.java index d4c5e8835..4bab6ac92 100644 --- a/src/de/jost_net/JVerein/io/MittelverwendungExportPDF.java +++ b/src/de/jost_net/JVerein/io/MittelverwendungExportPDF.java @@ -30,6 +30,7 @@ import com.itextpdf.text.pdf.PdfPCell; import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.gui.control.MittelverwendungControl; import de.jost_net.JVerein.util.JVDateFormatTTMMJJJJ; import de.willuhn.jameica.gui.GUI; import de.willuhn.logging.Logger; @@ -39,14 +40,24 @@ public class MittelverwendungExportPDF { public MittelverwendungExportPDF(ArrayList zeile, - final File file, Date datumvon, Date datumbis) throws ApplicationException + final File file, Date datumvon, Date datumbis, int tab) throws ApplicationException { try { + String title = ""; + switch (tab) + { + case MittelverwendungControl.FLOW_REPORT: + title = "Mittelverwendungsrechnung (Zufluss basiert)"; + break; + case MittelverwendungControl.SALDO_REPORT: + title = "Mittelverwendungsrechnung (Saldo basiert)"; + break; + } FileOutputStream fos = new FileOutputStream(file); String subtitle = "Geschäftsjahr: " + new JVDateFormatTTMMJJJJ().format(datumvon) + " - " + new JVDateFormatTTMMJJJJ().format(datumbis); - Reporter reporter = new Reporter(fos, "Mittelverwendungsrechnung", subtitle, + Reporter reporter = new Reporter(fos, title, subtitle, zeile.size()); makeHeader(reporter); @@ -54,26 +65,53 @@ public MittelverwendungExportPDF(ArrayList zeile, { switch (mvz.getStatus()) { + case MittelverwendungZeile.LEERZEILE: + { + String position = " "; + Integer pos = (Integer) mvz.getAttribute("position"); + if (pos != null) + { + position = pos.toString(); + } + reporter.addColumn(position, Element.ALIGN_LEFT); + reporter.addColumn((String) mvz.getAttribute("bezeichnung"), + Element.ALIGN_LEFT); + reporter.addColumn(" ", Element.ALIGN_LEFT); + reporter.addColumn(" ", Element.ALIGN_LEFT); + reporter.addColumn(" ", Element.ALIGN_LEFT); + break; + } case MittelverwendungZeile.EINNAHME: case MittelverwendungZeile.AUSGABE: { - reporter.addColumn(((Integer) mvz.getAttribute("position")).toString(), - Element.ALIGN_LEFT); + String position = " "; + Integer pos = (Integer) mvz.getAttribute("position"); + if (pos != null) + { + position = pos.toString(); + } + reporter.addColumn(position, Element.ALIGN_LEFT); reporter.addColumn((String) mvz.getAttribute("bezeichnung"), Element.ALIGN_LEFT); reporter.addColumn((Double) mvz.getAttribute("betrag")); reporter.addColumn(" ", Element.ALIGN_LEFT); + reporter.addColumn((String) mvz.getAttribute("kommentar"), + Element.ALIGN_LEFT); break; } case MittelverwendungZeile.SUMME: { - reporter.addColumn( - ((Integer) mvz.getAttribute("position")).toString(), - Element.ALIGN_LEFT); + String position = " "; + Integer pos = (Integer) mvz.getAttribute("position"); + if (pos != null) + { + position = pos.toString(); + } + reporter.addColumn(position, Element.ALIGN_LEFT); PdfPCell cell = null; cell = new PdfPCell(new Phrase(new Chunk( reporter.notNull((String) mvz.getAttribute("bezeichnung")), - Reporter.getFreeSansBold(9)))); + Reporter.getFreeSansBold(8)))); cell.setHorizontalAlignment(Element.ALIGN_RIGHT); reporter.addColumn(cell); reporter.addColumn(" ", Element.ALIGN_LEFT); @@ -81,16 +119,18 @@ public MittelverwendungExportPDF(ArrayList zeile, Double value = (Double) mvz.getAttribute("summe"); if (value >= 0) { - f = Reporter.getFreeSansBold(9, BaseColor.BLACK); + f = Reporter.getFreeSansBold(8, BaseColor.BLACK); } else { - f = Reporter.getFreeSansBold(9, BaseColor.RED); + f = Reporter.getFreeSansBold(8, BaseColor.RED); } cell = new PdfPCell( new Phrase(Einstellungen.DECIMALFORMAT.format(value), f)); cell.setHorizontalAlignment(Element.ALIGN_RIGHT); reporter.addColumn(cell); + reporter.addColumn((String) mvz.getAttribute("kommentar"), + Element.ALIGN_LEFT); break; } } @@ -112,11 +152,13 @@ private void makeHeader(Reporter reporter) throws DocumentException { reporter.addHeaderColumn("Nr", Element.ALIGN_CENTER, 5, BaseColor.LIGHT_GRAY); - reporter.addHeaderColumn("Mittel", Element.ALIGN_CENTER, 65, + reporter.addHeaderColumn("Mittel", Element.ALIGN_CENTER, 49, + BaseColor.LIGHT_GRAY); + reporter.addHeaderColumn("Betrag", Element.ALIGN_CENTER, 13, BaseColor.LIGHT_GRAY); - reporter.addHeaderColumn("Betrag", Element.ALIGN_CENTER, 15, + reporter.addHeaderColumn("Summe", Element.ALIGN_CENTER, 13, BaseColor.LIGHT_GRAY); - reporter.addHeaderColumn("Summe", Element.ALIGN_CENTER, 15, + reporter.addHeaderColumn("Kommentar", Element.ALIGN_CENTER, 20, BaseColor.LIGHT_GRAY); reporter.createHeader(); } diff --git a/src/de/jost_net/JVerein/io/MittelverwendungZeile.java b/src/de/jost_net/JVerein/io/MittelverwendungZeile.java index a39c599a5..511449761 100644 --- a/src/de/jost_net/JVerein/io/MittelverwendungZeile.java +++ b/src/de/jost_net/JVerein/io/MittelverwendungZeile.java @@ -33,6 +33,8 @@ public class MittelverwendungZeile implements GenericObject private Double summe = null; + private String kommentar = ""; + public static final int UNDEFINED = 0; public static final int EINNAHME = 1; @@ -41,16 +43,19 @@ public class MittelverwendungZeile implements GenericObject public static final int SUMME = 3; + public static final int LEERZEILE = 4; + private int status = UNDEFINED; public MittelverwendungZeile(int status, Integer position, - String bezeichnung, Double betrag, Double summe) + String bezeichnung, Double betrag, Double summe, String kommentar) { this.position = position; this.status = status; this.bezeichnung = bezeichnung; this.betrag = betrag; this.summe = summe; + this.kommentar = kommentar; } public int getStatus() @@ -77,6 +82,10 @@ else if (arg0.equals("position")) { return position; } + else if (arg0.equals("kommentar")) + { + return kommentar; + } throw new RemoteException( String.format("Ungültige Spaltenbezeichung: %s", arg0)); } From d038c3683d46b0b0a02754a169a0f8577059d954 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Sat, 18 Jan 2025 15:08:28 +0100 Subject: [PATCH 06/38] Update Update0457.java --- .../DDLTool/Updates/{Update0456.java => Update0457.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/de/jost_net/JVerein/server/DDLTool/Updates/{Update0456.java => Update0457.java} (92%) diff --git a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0456.java b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0457.java similarity index 92% rename from src/de/jost_net/JVerein/server/DDLTool/Updates/Update0456.java rename to src/de/jost_net/JVerein/server/DDLTool/Updates/Update0457.java index cf1fa131d..081516fa9 100644 --- a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0456.java +++ b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0457.java @@ -20,9 +20,9 @@ import de.willuhn.util.ApplicationException; import de.willuhn.util.ProgressMonitor; -public class Update0456 extends AbstractDDLUpdate +public class Update0457 extends AbstractDDLUpdate { - public Update0456(String driver, ProgressMonitor monitor, Connection conn) + public Update0457(String driver, ProgressMonitor monitor, Connection conn) { super(driver, monitor, conn); } From bfe11ad9ec280e77c1852b3995d6f2d30b22e309 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Wed, 22 Jan 2025 20:08:46 +0100 Subject: [PATCH 07/38] Update Update0458.java --- .../DDLTool/Updates/{Update0457.java => Update0458.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/de/jost_net/JVerein/server/DDLTool/Updates/{Update0457.java => Update0458.java} (92%) diff --git a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0457.java b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0458.java similarity index 92% rename from src/de/jost_net/JVerein/server/DDLTool/Updates/Update0457.java rename to src/de/jost_net/JVerein/server/DDLTool/Updates/Update0458.java index 081516fa9..c5afb117d 100644 --- a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0457.java +++ b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0458.java @@ -20,9 +20,9 @@ import de.willuhn.util.ApplicationException; import de.willuhn.util.ProgressMonitor; -public class Update0457 extends AbstractDDLUpdate +public class Update0458 extends AbstractDDLUpdate { - public Update0457(String driver, ProgressMonitor monitor, Connection conn) + public Update0458(String driver, ProgressMonitor monitor, Connection conn) { super(driver, monitor, conn); } From 259a73d1ab3ac27a966663fd7a26ac6934465389 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Wed, 22 Jan 2025 20:20:08 +0100 Subject: [PATCH 08/38] Update MittelverwendungList.java --- .../jost_net/JVerein/gui/parts/MittelverwendungList.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java index ed2281baf..ed3645fda 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java @@ -673,6 +673,14 @@ private void addZeile(ArrayList zeilen, int status, Integer position, String bezeichnung, Double einnahme, Double ausgabe, String kommentar) throws RemoteException { + if (einnahme != null && einnahme == -0.0) + { + einnahme = 0.0; + } + if (ausgabe != null && ausgabe == -0.0) + { + ausgabe = 0.0; + } switch (status) { case MittelverwendungZeile.EINNAHME: From 9d81f4b5302ddb791ed7ac64d25f08bf5cdb25bd Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Wed, 22 Jan 2025 20:49:30 +0100 Subject: [PATCH 09/38] Umbenennung Anlagenklasse -> Buchungsklasse --- .../JVerein/gui/control/KontoControl.java | 8 ++--- .../gui/dialogs/AnlagenkontoNeuDialog.java | 32 +++++++++---------- src/de/jost_net/JVerein/rmi/Konto.java | 6 ++-- src/de/jost_net/JVerein/server/KontoImpl.java | 8 ++--- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/control/KontoControl.java b/src/de/jost_net/JVerein/gui/control/KontoControl.java index 5de3733e3..869ffd8b6 100644 --- a/src/de/jost_net/JVerein/gui/control/KontoControl.java +++ b/src/de/jost_net/JVerein/gui/control/KontoControl.java @@ -267,7 +267,7 @@ public void handleStore() k.setHibiscusId(Integer.parseInt(hkto.getID())); } k.setAnlagenartId(getSelectedAnlagenartId()); - k.setAnlagenklasseId(getSelectedAnlagenklasseId()); + k.setBuchungsklasseId(getSelectedBuchungsklasseId()); k.setAfaartId(getSelectedAfaartId()); k.setBetrag((Double) getBetrag().getValue()); k.setNutzungsdauer((Integer) getNutzungsdauer().getValue()); @@ -642,7 +642,7 @@ public Input getBuchungsklasse() throws RemoteException .createList(Buchungsklasse.class); list.setOrder(getBuchungartSortOrder()); buchungsklasse = new SelectInput(list != null ? PseudoIterator.asList(list) : null, - getKonto().getAnlagenklasse()); + getKonto().getBuchungsklasse()); buchungsklasse.setAttribute(getBuchungartAttribute()); buchungsklasse.setPleaseChoose("Bitte auswählen"); if (getKontoArt().getValue() == Kontoart.ANLAGE) @@ -656,7 +656,7 @@ public Input getBuchungsklasse() throws RemoteException return buchungsklasse; } - private Long getSelectedAnlagenklasseId() throws ApplicationException + private Long getSelectedBuchungsklasseId() throws ApplicationException { try { @@ -668,7 +668,7 @@ private Long getSelectedAnlagenklasseId() throws ApplicationException } catch (RemoteException ex) { - final String meldung = "Gewählte Anlagenklasse kann nicht ermittelt werden"; + final String meldung = "Gewählte Buchungsklasse kann nicht ermittelt werden"; Logger.error(meldung, ex); throw new ApplicationException(meldung, ex); } diff --git a/src/de/jost_net/JVerein/gui/dialogs/AnlagenkontoNeuDialog.java b/src/de/jost_net/JVerein/gui/dialogs/AnlagenkontoNeuDialog.java index 41f3ab324..326d7df9c 100644 --- a/src/de/jost_net/JVerein/gui/dialogs/AnlagenkontoNeuDialog.java +++ b/src/de/jost_net/JVerein/gui/dialogs/AnlagenkontoNeuDialog.java @@ -67,7 +67,7 @@ public class AnlagenkontoNeuDialog extends AbstractDialog private AbstractInput anlagenart; - private SelectInput anlagenklasse; + private SelectInput buchungsklasse; private AbstractInput afaart; @@ -99,7 +99,7 @@ protected void paint(Composite parent) throws Exception LabelGroup group = new LabelGroup(parent, ""); group.addLabelPair("Nummer", getNummer()); group.addLabelPair("Bezeichnung", getBezeichnung()); - group.addLabelPair("Anlagen Buchungsklasse", getAnlagenklasse()); + group.addLabelPair("Anlagen Buchungsklasse", getBuchungsklasse()); group.addLabelPair("Anlagen Buchungsart", getAnlagenart()); group.addLabelPair("AfA Buchungsart", getAfaart()); group.addLabelPair("Nutzungsdauer", getNutzungsdauer()); @@ -159,7 +159,7 @@ private void handleStore() throws ApplicationException konto.setKontoArt(Kontoart.ANLAGE); konto.setHibiscusId(-1); konto.setAnlagenartId(getSelectedAnlagenartId()); - konto.setAnlagenklasseId(getSelectedAnlagenklasseId()); + konto.setBuchungsklasseId(getSelectedBuchungsklasseId()); konto.setAfaartId(getSelectedAfaartId()); konto.setAfaRestwert(Einstellungen.getEinstellung().getAfaRestwert()); konto.setAfaMode(AfaMode.AUTO); @@ -230,11 +230,11 @@ private Long getSelectedAnlagenartId() throws ApplicationException } } - public Input getAnlagenklasse() throws RemoteException + public Input getBuchungsklasse() throws RemoteException { - if (anlagenklasse != null) + if (buchungsklasse != null) { - return anlagenklasse; + return buchungsklasse; } DBIterator list = Einstellungen.getDBService() .createList(Buchungsklasse.class); @@ -244,24 +244,24 @@ public Input getAnlagenklasse() throws RemoteException bk = buchung.getBuchungsart().getBuchungsklasse(); if (bk != null) { - anlagenklasse = new SelectInput(list != null ? + buchungsklasse = new SelectInput(list != null ? PseudoIterator.asList(list) : null, bk); } else { - anlagenklasse = new SelectInput(list != null ? + buchungsklasse = new SelectInput(list != null ? PseudoIterator.asList(list) : null, null); } - anlagenklasse.setAttribute(control.getBuchungartAttribute()); - anlagenklasse.setPleaseChoose("Bitte auswählen"); - return anlagenklasse; + buchungsklasse.setAttribute(control.getBuchungartAttribute()); + buchungsklasse.setPleaseChoose("Bitte auswählen"); + return buchungsklasse; } - private Long getSelectedAnlagenklasseId() throws ApplicationException + private Long getSelectedBuchungsklasseId() throws ApplicationException { try { - Buchungsklasse buchungsKlasse = (Buchungsklasse) getAnlagenklasse().getValue(); + Buchungsklasse buchungsKlasse = (Buchungsklasse) getBuchungsklasse().getValue(); if (null == buchungsKlasse) return null; Long id = Long.valueOf(buchungsKlasse.getID()); @@ -269,7 +269,7 @@ private Long getSelectedAnlagenklasseId() throws ApplicationException } catch (RemoteException ex) { - final String meldung = "Gewählte Anlagenklasse kann nicht ermittelt werden"; + final String meldung = "Gewählte Buchungsklasse kann nicht ermittelt werden"; Logger.error(meldung, ex); throw new ApplicationException(meldung, ex); } @@ -365,8 +365,8 @@ public void handleEvent(Event event) Buchungsart ba = (Buchungsart) getAnlagenart().getValue(); if (ba != null) { - if (getAnlagenklasse().getValue() == null) - getAnlagenklasse().setValue(ba.getBuchungsklasse()); + if (getBuchungsklasse().getValue() == null) + getBuchungsklasse().setValue(ba.getBuchungsklasse()); } } catch (Exception e) diff --git a/src/de/jost_net/JVerein/rmi/Konto.java b/src/de/jost_net/JVerein/rmi/Konto.java index 1213c0e7b..a3b21d1d6 100644 --- a/src/de/jost_net/JVerein/rmi/Konto.java +++ b/src/de/jost_net/JVerein/rmi/Konto.java @@ -63,11 +63,11 @@ public interface Konto extends DBObject public void setAnlagenartId(Long anlagensartId) throws RemoteException; - public Buchungsklasse getAnlagenklasse() throws RemoteException; + public Buchungsklasse getBuchungsklasse() throws RemoteException; - public Long getAnlagenklasseId() throws RemoteException; + public Long getBuchungsklasseId() throws RemoteException; - public void setAnlagenklasseId(Long anlagenklasseId) throws RemoteException; + public void setBuchungsklasseId(Long anlagenklasseId) throws RemoteException; public Buchungsart getAfaart() throws RemoteException; diff --git a/src/de/jost_net/JVerein/server/KontoImpl.java b/src/de/jost_net/JVerein/server/KontoImpl.java index 94725af3e..ee79b807c 100644 --- a/src/de/jost_net/JVerein/server/KontoImpl.java +++ b/src/de/jost_net/JVerein/server/KontoImpl.java @@ -124,7 +124,7 @@ private void plausi() throws ApplicationException { throw new ApplicationException("Bitte Afa Buchungsart eingeben"); } - if (getAnlagenklasse() == null) + if (getBuchungsklasse() == null) { throw new ApplicationException("Bitte Anlagen Buchungsklasse eingeben"); } @@ -335,7 +335,7 @@ public void setAnlagenartId(Long anlagenartId) throws RemoteException } @Override - public Buchungsklasse getAnlagenklasse() throws RemoteException + public Buchungsklasse getBuchungsklasse() throws RemoteException { Long l = (Long) super.getAttribute("anlagenklasse"); if (l == null) @@ -348,13 +348,13 @@ public Buchungsklasse getAnlagenklasse() throws RemoteException } @Override - public Long getAnlagenklasseId() throws RemoteException + public Long getBuchungsklasseId() throws RemoteException { return (Long) super.getAttribute("anlagenklasse"); } @Override - public void setAnlagenklasseId(Long anlagenklasseId) throws RemoteException + public void setBuchungsklasseId(Long anlagenklasseId) throws RemoteException { setAttribute("anlagenklasse", anlagenklasseId); } From 7581443ae43c909d807e3db7db6fb028ccb9b618 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Thu, 23 Jan 2025 11:27:10 +0100 Subject: [PATCH 10/38] Umbenennung Verbindlichkeitskonto in "Darlehen, Kredite etc." --- src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java | 6 +++--- src/de/jost_net/JVerein/keys/Kontoart.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java index ed3645fda..563210e51 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java @@ -217,7 +217,7 @@ public ArrayList getFlowReport() throws RemoteException // Rückbuchung von zweckgebundenen Anlagen sql = getSummenUmbuchungSql() + " AND buchung.betrag < 0"; zufuehrung -= (Double) service.execute(sql, - new Object[] { datumvon, datumbis, Kontoart.VERBINDLICHKEITEN.getKey(), + new Object[] { datumvon, datumbis, Kontoart.SCHULDEN.getKey(), Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), ArtBuchungsart.UMBUCHUNG }, rsd); @@ -246,7 +246,7 @@ public ArrayList getFlowReport() throws RemoteException // Erwerb zweckgebundener Anlagen sql = getSummenUmbuchungSql() + " AND buchung.betrag > 0"; verwendung -= (Double) service.execute(sql, - new Object[] { datumvon, datumbis, Kontoart.VERBINDLICHKEITEN.getKey(), + new Object[] { datumvon, datumbis, Kontoart.SCHULDEN.getKey(), Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), ArtBuchungsart.UMBUCHUNG }, rsd); @@ -391,7 +391,7 @@ public ArrayList getSaldoReport() sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; @SuppressWarnings("unchecked") HashMap map2 = (HashMap) service.execute( - sql, new Object[] { Kontoart.VERBINDLICHKEITEN.getKey() }, rsmapa); + sql, new Object[] { Kontoart.SCHULDEN.getKey() }, rsmapa); for (Long kontoId : map2.keySet()) { sql = getAnfangsbestandKontoSql(); diff --git a/src/de/jost_net/JVerein/keys/Kontoart.java b/src/de/jost_net/JVerein/keys/Kontoart.java index 1fb8ff81d..8f69de602 100644 --- a/src/de/jost_net/JVerein/keys/Kontoart.java +++ b/src/de/jost_net/JVerein/keys/Kontoart.java @@ -24,7 +24,7 @@ public enum Kontoart // Ids über dem Limit werden in beiden Salden ignoriert. GELD(1, "Geldkonto"), ANLAGE(2, "Anlagenkonto"), - VERBINDLICHKEITEN(3, "Verbindlichkeitskonto"), + SCHULDEN(3, "Darlehen, Kredite etc."), LIMIT(100, "-- Limit --"), RUECKLAGE_ZWECK_GEBUNDEN(101, "Zweckgebundene Rücklage nach § 62 Abs. 1 Nr. 1 AO"), RUECKLAGE_BETRIEBSMITTEL(102, "Betriebsmittelrücklage nach § 62 Abs. 1 Nr. 1 AO"), From 7c10efea8368ec7062bf0f22064cae424d37ede6 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Fri, 24 Jan 2025 07:55:18 +0100 Subject: [PATCH 11/38] Zwischenstand --- .../gui/control/JahresabschlussControl.java | 94 ++++++++++++++----- .../JVerein/gui/menu/JahresabschlussMenu.java | 4 + .../JVerein/gui/view/JahresabschlussView.java | 2 + .../jost_net/JVerein/rmi/Jahresabschluss.java | 5 + .../server/DDLTool/Updates/Update0462.java | 38 ++++++++ .../JVerein/server/JahresabschlussImpl.java | 13 +++ 6 files changed, 131 insertions(+), 25 deletions(-) create mode 100644 src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java diff --git a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java index a0688a3b2..abda7b8cf 100644 --- a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java +++ b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java @@ -23,6 +23,7 @@ import java.util.Date; import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.gui.action.JahresabschlussDetailAction; import de.jost_net.JVerein.gui.menu.JahresabschlussMenu; import de.jost_net.JVerein.gui.parts.KontensaldoList; import de.jost_net.JVerein.gui.util.AfaUtil; @@ -44,6 +45,7 @@ import de.willuhn.jameica.gui.formatter.DateFormatter; import de.willuhn.jameica.gui.input.CheckboxInput; import de.willuhn.jameica.gui.input.DateInput; +import de.willuhn.jameica.gui.input.DecimalInput; import de.willuhn.jameica.gui.input.TextInput; import de.willuhn.jameica.gui.parts.TablePart; import de.willuhn.jameica.gui.parts.table.FeatureSummary; @@ -73,6 +75,8 @@ public class JahresabschlussControl extends AbstractControl private CheckboxInput afaberechnung; + private DecimalInput verwendungsrueckstand; + public JahresabschlussControl(AbstractView view) { super(view); @@ -143,13 +147,18 @@ public DateInput getBis() throws RemoteException, ParseException return bis; } - public DateInput getDatum() + public DateInput getDatum() throws RemoteException { if (datum != null) { return datum; } - datum = new DateInput(new Date()); + Date date = new Date(); + if (!getJahresabschluss().isNewObject()) + { + date = getJahresabschluss().getDatum(); + } + datum = new DateInput(date); datum.setEnabled(false); return datum; } @@ -161,6 +170,10 @@ public TextInput getName() throws RemoteException return name; } name = new TextInput(getJahresabschluss().getName(), 50); + if (!getJahresabschluss().isNewObject()) + { + name.setEnabled(false); + } return name; } @@ -206,6 +219,27 @@ public Part getJahresabschlussSaldo() throws RemoteException return jahresabschlusssaldoList; } + public DecimalInput getVerwendungsrueckstand() throws RemoteException + { + if (verwendungsrueckstand != null) + { + return verwendungsrueckstand; + } + + if (getJahresabschluss().getVerwendungsrueckstand() == null) + { + verwendungsrueckstand = new DecimalInput(Einstellungen.DECIMALFORMAT); + } + else + { + verwendungsrueckstand = new DecimalInput( + getJahresabschluss().getVerwendungsrueckstand(), + Einstellungen.DECIMALFORMAT); + verwendungsrueckstand.setEnabled(false); + } + return verwendungsrueckstand; + } + /** * This method stores the project using the current values. */ @@ -214,35 +248,44 @@ public void handleStore() try { Jahresabschluss ja = getJahresabschluss(); - ja.setVon((Date) getVon().getValue()); - ja.setBis((Date) getBis().getValue()); - ja.setDatum((Date) getDatum().getValue()); - ja.setName((String) getName().getValue()); - ja.store(); - if ((Boolean) getAnfangsbestaende().getValue()) + if (ja.isNewObject()) { - KontensaldoList jsl = new KontensaldoList(null, - new Geschaeftsjahr(ja.getVon())); - ArrayList zeilen = jsl.getInfo(false); - for (SaldoZeile z : zeilen) + ja.setVon((Date) getVon().getValue()); + ja.setBis((Date) getBis().getValue()); + ja.setDatum((Date) getDatum().getValue()); + ja.setName((String) getName().getValue()); + ja.store(); + if ((Boolean) getAnfangsbestaende().getValue()) { - String ktonr = (String) z.getAttribute("kontonummer"); - if (ktonr.length() > 0) + KontensaldoList jsl = new KontensaldoList(null, + new Geschaeftsjahr(ja.getVon())); + ArrayList zeilen = jsl.getInfo(false); + for (SaldoZeile z : zeilen) { - Double endbestand = (Double) z.getAttribute("endbestand"); - Anfangsbestand anf = (Anfangsbestand) Einstellungen.getDBService() - .createObject(Anfangsbestand.class, null); - Konto konto = (Konto) z.getAttribute("konto"); - anf.setBetrag(endbestand); - anf.setDatum(Datum.addTage(ja.getBis(), 1)); - anf.setKonto(konto); - anf.store(); + String ktonr = (String) z.getAttribute("kontonummer"); + if (ktonr.length() > 0) + { + Double endbestand = (Double) z.getAttribute("endbestand"); + Anfangsbestand anf = (Anfangsbestand) Einstellungen.getDBService() + .createObject(Anfangsbestand.class, null); + Konto konto = (Konto) z.getAttribute("konto"); + anf.setBetrag(endbestand); + anf.setDatum(Datum.addTage(ja.getBis(), 1)); + anf.setKonto(konto); + anf.store(); + } } } + if (afaberechnung != null && (Boolean) getAfaberechnung().getValue()) + { + new AfaUtil(new Geschaeftsjahr(ja.getVon()), ja); + } } - if (afaberechnung != null && (Boolean) getAfaberechnung().getValue()) + else { - new AfaUtil(new Geschaeftsjahr(ja.getVon()), ja); + ja.setVerwendungsrueckstand( + (Double) getVerwendungsrueckstand().getValue()); + ja.store(); } GUI.getStatusBar().setSuccessText("Jahresabschluss gespeichert"); } @@ -272,7 +315,8 @@ public Part getJahresabschlussList() throws RemoteException .createList(Jahresabschluss.class); jahresabschluesse.setOrder("ORDER BY von desc"); - jahresabschlussList = new TablePart(jahresabschluesse, null); + jahresabschlussList = new TablePart(jahresabschluesse, + new JahresabschlussDetailAction()); jahresabschlussList.addColumn("Nr", "id-int"); jahresabschlussList.addColumn("Von", "von", new DateFormatter(new JVDateFormatTTMMJJJJ())); diff --git a/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java b/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java index cb5daa448..884ceea43 100644 --- a/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java +++ b/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java @@ -17,7 +17,9 @@ package de.jost_net.JVerein.gui.menu; import de.jost_net.JVerein.gui.action.JahresabschlussDeleteAction; +import de.jost_net.JVerein.gui.action.JahresabschlussDetailAction; import de.willuhn.jameica.gui.parts.CheckedContextMenuItem; +import de.willuhn.jameica.gui.parts.CheckedSingleContextMenuItem; import de.willuhn.jameica.gui.parts.ContextMenu; /** @@ -31,6 +33,8 @@ public class JahresabschlussMenu extends ContextMenu */ public JahresabschlussMenu() { + addItem(new CheckedSingleContextMenuItem("Bearbeiten", + new JahresabschlussDetailAction(), "text-x-generic.png")); addItem(new CheckedContextMenuItem("Löschen", new JahresabschlussDeleteAction(), "user-trash-full.png")); } diff --git a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java index 98c39bd7d..e3f4c5e4a 100644 --- a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java +++ b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java @@ -51,6 +51,8 @@ public void bind() throws Exception group.addLabelPair("Bis", control.getBis()); group.addLabelPair("Datum", control.getDatum()); group.addLabelPair("Name", control.getName()); + group.addLabelPair("Verwendungsrückstand Vorjahr", + control.getVerwendungsrueckstand()); group.addLabelPair("Anfangsbestände Folgejahr", control.getAnfangsbestaende()); if (Einstellungen.getEinstellung().getAfaInJahresabschluss()) diff --git a/src/de/jost_net/JVerein/rmi/Jahresabschluss.java b/src/de/jost_net/JVerein/rmi/Jahresabschluss.java index 95ded8947..0f5c76fcb 100644 --- a/src/de/jost_net/JVerein/rmi/Jahresabschluss.java +++ b/src/de/jost_net/JVerein/rmi/Jahresabschluss.java @@ -39,4 +39,9 @@ public interface Jahresabschluss extends DBObject public String getName() throws RemoteException; + public void setVerwendungsrueckstand(Double rueckstand) + throws RemoteException; + + public Double getVerwendungsrueckstand() throws RemoteException; + } diff --git a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java new file mode 100644 index 000000000..431859b6a --- /dev/null +++ b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java @@ -0,0 +1,38 @@ +/********************************************************************** + * This program 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, either version 3 of the + * License, or (at your option) any later version. + * + * This program 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 . + * + **********************************************************************/ +package de.jost_net.JVerein.server.DDLTool.Updates; + +import java.sql.Connection; + +import de.jost_net.JVerein.server.DDLTool.AbstractDDLUpdate; +import de.jost_net.JVerein.server.DDLTool.Column; +import de.willuhn.util.ApplicationException; +import de.willuhn.util.ProgressMonitor; + +public class Update0462 extends AbstractDDLUpdate +{ + public Update0462(String driver, ProgressMonitor monitor, Connection conn) + { + super(driver, monitor, conn); + } + + @Override + public void run() throws ApplicationException + { + { + execute(addColumn("jahresabschluss", new Column("verwendungsrueckstand", + COLTYPE.DOUBLE, 10, null, false, false))); + } + } +} diff --git a/src/de/jost_net/JVerein/server/JahresabschlussImpl.java b/src/de/jost_net/JVerein/server/JahresabschlussImpl.java index a739f08a0..9c2ab3f93 100644 --- a/src/de/jost_net/JVerein/server/JahresabschlussImpl.java +++ b/src/de/jost_net/JVerein/server/JahresabschlussImpl.java @@ -188,4 +188,17 @@ public Object getAttribute(String fieldName) throws RemoteException } return super.getAttribute(fieldName); } + + @Override + public Double getVerwendungsrueckstand() throws RemoteException + { + return (Double) getAttribute("verwendungsrueckstand"); + } + + @Override + public void setVerwendungsrueckstand(Double rueckstand) throws RemoteException + { + setAttribute("verwendungsrueckstand", rueckstand); + } + } From 6247158520790bd2bb3e42ae4671e5fdfbc2f19a Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Fri, 24 Jan 2025 10:16:35 +0100 Subject: [PATCH 12/38] Update MittelverwendungList.java --- .../gui/parts/MittelverwendungList.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java index 563210e51..3ee5f2561 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java @@ -20,6 +20,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.HashMap; @@ -50,6 +51,12 @@ public class MittelverwendungList extends TablePart private Date datumbis = null; + private int aktuellesGJ; + + private int letztesGJ; + + private int vorletztesGJ; + private int tab = 0; private static double LIMIT = 0.005; @@ -63,6 +70,11 @@ public MittelverwendungList(Action action, Date datumvon, Date datumbis, this.datumvon = datumvon; this.datumbis = datumbis; this.tab = tab; + Calendar cal = Calendar.getInstance(); + cal.setTime(datumvon); + aktuellesGJ = cal.get(Calendar.YEAR); + letztesGJ = aktuellesGJ - 1; + vorletztesGJ = aktuellesGJ - 2; } public Part getSaldoList() throws ApplicationException @@ -201,7 +213,8 @@ public ArrayList getFlowReport() throws RemoteException Kontoart.RUECKLAGE_SONSTIG.getKey() }, rsd); - bezeichnung = "Verwendungsrückstand(+)/-überhang(-) am Ende des letzten GJ"; + bezeichnung = "Verwendungsrückstand(+)/-überhang(-) am Ende des letzten GJ " + + letztesGJ; addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, vorhandeneMittel, null, NULL); @@ -284,7 +297,8 @@ public ArrayList getFlowReport() throws RemoteException } } - bezeichnung = " Verwendungsrückstand(+)/-überhang(-) zum Ende des GJ"; + bezeichnung = " Verwendungsrückstand(+)/-überhang(-) zum Ende des GJ " + + aktuellesGJ; addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, zufuehrung + vorhandeneMittel + verwendung - summeZuRuecklagen, -summeEntRuecklagen, NULL); From 536924b31b2696f44f8d6f4233bfa6c68f9b9cc4 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Fri, 24 Jan 2025 10:39:29 +0100 Subject: [PATCH 13/38] Kleine Optimierung --- .../gui/control/MittelverwendungControl.java | 43 ++++++------------- .../gui/parts/MittelverwendungList.java | 1 + 2 files changed, 14 insertions(+), 30 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java b/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java index cd366cf8a..71a5435e4 100644 --- a/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java +++ b/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java @@ -111,40 +111,23 @@ public Part getSaldoList() throws ApplicationException public Part getSaldoList(int tab) throws ApplicationException { - try + if (getDatumvon().getDate() != null) { - if (getDatumvon().getDate() != null) - { - settings.setAttribute("von", - new JVDateFormatTTMMJJJJ().format(getDatumvon().getDate())); - settings.setAttribute("bis", - new JVDateFormatTTMMJJJJ().format(getDatumbis().getDate())); - } + settings.setAttribute("von", + new JVDateFormatTTMMJJJJ().format(getDatumvon().getDate())); + settings.setAttribute("bis", + new JVDateFormatTTMMJJJJ().format(getDatumbis().getDate())); + } - if (saldoList[tab] == null) - { - saldoList[tab] = new MittelverwendungList(null, datumvon.getDate(), - datumbis.getDate(), tab); - } - else - { - settings.setAttribute("von", - new JVDateFormatTTMMJJJJ().format(getDatumvon().getDate())); - - saldoList[tab].setDatumvon(datumvon.getDate()); - saldoList[tab].setDatumbis(datumbis.getDate()); - ArrayList zeile = saldoList[tab].getInfo(); - saldoList[tab].removeAll(); - for (MittelverwendungZeile sz : zeile) - { - saldoList[tab].addItem(sz); - } - } + if (saldoList[tab] == null) + { + saldoList[tab] = new MittelverwendungList(null, datumvon.getDate(), + datumbis.getDate(), tab); } - catch (RemoteException e) + else { - throw new ApplicationException( - String.format("Fehler aufgetreten %s", e.getMessage())); + saldoList[tab].setDatumvon(datumvon.getDate()); + saldoList[tab].setDatumbis(datumbis.getDate()); } return saldoList[tab].getSaldoList(); } diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java index 563210e51..a6cca5e6f 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java @@ -92,6 +92,7 @@ protected void orderBy(int index) Column.ALIGN_LEFT); saldoList.addColumn("Kommentar", "kommentar"); saldoList.setRememberColWidths(true); + saldoList.setRememberOrder(true); saldoList.removeFeature(FeatureSummary.class); } else From 955e4cf1806b32046f00b97f89e8eb42412f7b94 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Sat, 25 Jan 2025 14:02:49 +0100 Subject: [PATCH 14/38] zwischenstand --- .../gui/control/JahresabschlussControl.java | 23 +++++++ .../gui/parts/MittelverwendungList.java | 61 ++++++++++++++++++- .../JVerein/gui/view/JahresabschlussView.java | 4 +- .../jost_net/JVerein/rmi/Jahresabschluss.java | 6 +- .../server/DDLTool/Updates/Update0462.java | 6 ++ .../JVerein/server/JahresabschlussImpl.java | 12 ++++ 6 files changed, 107 insertions(+), 5 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java index abda7b8cf..f35a8c7a7 100644 --- a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java +++ b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java @@ -77,6 +77,8 @@ public class JahresabschlussControl extends AbstractControl private DecimalInput verwendungsrueckstand; + private DecimalInput zwanghafteweitergabe; + public JahresabschlussControl(AbstractView view) { super(view); @@ -240,6 +242,27 @@ public DecimalInput getVerwendungsrueckstand() throws RemoteException return verwendungsrueckstand; } + public DecimalInput getZwanghafteWeitergabe() throws RemoteException + { + if (zwanghafteweitergabe != null) + { + return zwanghafteweitergabe; + } + + if (getJahresabschluss().getZwanghafteWeitergabe() == null) + { + zwanghafteweitergabe = new DecimalInput(Einstellungen.DECIMALFORMAT); + } + else + { + zwanghafteweitergabe = new DecimalInput( + getJahresabschluss().getZwanghafteWeitergabe(), + Einstellungen.DECIMALFORMAT); + zwanghafteweitergabe.setEnabled(false); + } + return zwanghafteweitergabe; + } + /** * This method stores the project using the current values. */ diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java index 02bc0f93e..cc3457344 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java @@ -32,6 +32,8 @@ import de.jost_net.JVerein.keys.Anlagenzweck; import de.jost_net.JVerein.keys.ArtBuchungsart; import de.jost_net.JVerein.keys.Kontoart; +import de.jost_net.JVerein.rmi.Jahresabschluss; +import de.willuhn.datasource.rmi.DBIterator; import de.willuhn.datasource.rmi.DBService; import de.willuhn.datasource.rmi.ResultSetExtractor; import de.willuhn.jameica.gui.Action; @@ -57,6 +59,8 @@ public class MittelverwendungList extends TablePart private int vorletztesGJ; + private Date endeLetztesGJ; + private int tab = 0; private static double LIMIT = 0.005; @@ -70,11 +74,18 @@ public MittelverwendungList(Action action, Date datumvon, Date datumbis, this.datumvon = datumvon; this.datumbis = datumbis; this.tab = tab; + updateDatum(); + } + + private void updateDatum() + { Calendar cal = Calendar.getInstance(); cal.setTime(datumvon); aktuellesGJ = cal.get(Calendar.YEAR); letztesGJ = aktuellesGJ - 1; vorletztesGJ = aktuellesGJ - 2; + cal.add(Calendar.DAY_OF_MONTH, -1); + endeLetztesGJ = cal.getTime(); } public Part getSaldoList() throws ApplicationException @@ -219,6 +230,21 @@ public ArrayList getFlowReport() throws RemoteException addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, vorhandeneMittel, null, NULL); + // Der in dem Rückstand enthaltene Rückstand aus dem vorletzten Jahr + Double rueckstandVorVorjahr = null; + DBIterator jahresabschluesse = service + .createList(Jahresabschluss.class); + jahresabschluesse.addFilter("bis = ?", endeLetztesGJ); + if (jahresabschluesse != null && jahresabschluesse.hasNext()) + { + rueckstandVorVorjahr = jahresabschluesse.next() + .getVerwendungsrueckstand(); + } + bezeichnung = " - Darin enthaltener Verwendungsrückstand aus dem vorletzten GJ " + + vorletztesGJ; + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + rueckstandVorVorjahr, null, NULL); + // Schritt 2: Mittel Zufluss // Summe aller Zuflüsse bei Geldkonten und Anlagen (=Sachspenden) sql = getSummenKontenSql(); @@ -236,10 +262,10 @@ public ArrayList getFlowReport() throws RemoteException ArtBuchungsart.UMBUCHUNG }, rsd); - bezeichnung = "Insgesamt im GJ zugeflossene Mittel"; + bezeichnung = "Insgesamt im aktuellen GJ zugeflossene Mittel"; addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, zufuehrung, null, NULL); - bezeichnung = " Zu verwendende Mittel im GJ und nächstem GJ"; + bezeichnung = " Zu verwendende Mittel im aktuellen GJ und nächstem GJ"; addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, zufuehrung, vorhandeneMittel, NULL); @@ -298,12 +324,40 @@ public ArrayList getFlowReport() throws RemoteException } } - bezeichnung = " Verwendungsrückstand(+)/-überhang(-) zum Ende des GJ " + bezeichnung = " Verwendungsrückstand(+)/-überhang(-) zum Ende des aktuellen GJ " + aktuellesGJ; addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, zufuehrung + vorhandeneMittel + verwendung - summeZuRuecklagen, -summeEntRuecklagen, NULL); + // Berechnung der Mittelverwendung + Double ausgaben = summeEntRuecklagen - verwendung; // verwendung ist + // negativ + Double zwanghafteVerwendung = null; + Double rueckstandVorVorjahrNeu = null; // Rest aus Rückstand Vorjahr + // Der Rückstand aus dem vorletzten Jahr muss ganz aufgebraucht werden, + // ansonsten unterliegt der Restbetrag der zwanghaften satzungsgemäßen + // Weitergabe von Mitteln + if (rueckstandVorVorjahr != null && rueckstandVorVorjahr > ausgaben) + { + zwanghafteVerwendung = rueckstandVorVorjahr - ausgaben; + rueckstandVorVorjahrNeu = vorhandeneMittel - rueckstandVorVorjahr; + } + else + { + rueckstandVorVorjahrNeu = Math.max(vorhandeneMittel - ausgaben, 0); + } + bezeichnung = " - Darin enthaltener Verwendungsrückstand aus dem letzten GJ " + + letztesGJ; + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + rueckstandVorVorjahrNeu, null, NULL); + if (zwanghafteVerwendung != null) + { + bezeichnung = " - Darin enthaltene zwanghafte satzungsgemäße Weitergabe von Mitteln"; + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + zwanghafteVerwendung, null, NULL); + } + // Leerzeile am Ende wegen Scrollbar zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, null, null, null, null, NULL)); @@ -571,6 +625,7 @@ public ArrayList getSaldoReport() public void setDatumvon(Date datumvon) { this.datumvon = datumvon; + updateDatum(); } public void setDatumbis(Date datumbis) diff --git a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java index e3f4c5e4a..1d0624785 100644 --- a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java +++ b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java @@ -51,8 +51,10 @@ public void bind() throws Exception group.addLabelPair("Bis", control.getBis()); group.addLabelPair("Datum", control.getDatum()); group.addLabelPair("Name", control.getName()); - group.addLabelPair("Verwendungsrückstand Vorjahr", + group.addLabelPair("Rest Verwendungsrückstand Vorjahr", control.getVerwendungsrueckstand()); + group.addLabelPair("Zwanghafte Weitergabe von Mittel", + control.getZwanghafteWeitergabe()); group.addLabelPair("Anfangsbestände Folgejahr", control.getAnfangsbestaende()); if (Einstellungen.getEinstellung().getAfaInJahresabschluss()) diff --git a/src/de/jost_net/JVerein/rmi/Jahresabschluss.java b/src/de/jost_net/JVerein/rmi/Jahresabschluss.java index 0f5c76fcb..06251fb11 100644 --- a/src/de/jost_net/JVerein/rmi/Jahresabschluss.java +++ b/src/de/jost_net/JVerein/rmi/Jahresabschluss.java @@ -39,9 +39,13 @@ public interface Jahresabschluss extends DBObject public String getName() throws RemoteException; + public Double getVerwendungsrueckstand() throws RemoteException; + public void setVerwendungsrueckstand(Double rueckstand) throws RemoteException; - public Double getVerwendungsrueckstand() throws RemoteException; + public Double getZwanghafteWeitergabe() throws RemoteException; + + public void setZwanghafteWeitergabe(Double weitergabe) throws RemoteException; } diff --git a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java index 431859b6a..fd8cac6ab 100644 --- a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java +++ b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java @@ -30,9 +30,15 @@ public Update0462(String driver, ProgressMonitor monitor, Connection conn) @Override public void run() throws ApplicationException { + { execute(addColumn("jahresabschluss", new Column("verwendungsrueckstand", COLTYPE.DOUBLE, 10, null, false, false))); } + + { + execute(addColumn("jahresabschluss", new Column("zwanghafteweitergabe", + COLTYPE.DOUBLE, 10, null, false, false))); + } } } diff --git a/src/de/jost_net/JVerein/server/JahresabschlussImpl.java b/src/de/jost_net/JVerein/server/JahresabschlussImpl.java index 9c2ab3f93..a4359aab4 100644 --- a/src/de/jost_net/JVerein/server/JahresabschlussImpl.java +++ b/src/de/jost_net/JVerein/server/JahresabschlussImpl.java @@ -201,4 +201,16 @@ public void setVerwendungsrueckstand(Double rueckstand) throws RemoteException setAttribute("verwendungsrueckstand", rueckstand); } + @Override + public Double getZwanghafteWeitergabe() throws RemoteException + { + return (Double) getAttribute("zwanghafteweitergabe"); + } + + @Override + public void setZwanghafteWeitergabe(Double weitergabe) throws RemoteException + { + setAttribute("zwanghafteweitergabe", weitergabe); + } + } From d6dbcf9e8fa06bc6daf76e910b7ee44398d853df Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Sun, 26 Jan 2025 08:33:07 +0100 Subject: [PATCH 15/38] Zwischenstand --- .../gui/control/JahresabschlussControl.java | 44 ++++++++++++-- .../gui/parts/MittelverwendungList.java | 59 +++++++++++++------ .../JVerein/gui/view/JahresabschlussView.java | 16 +++-- 3 files changed, 90 insertions(+), 29 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java index f35a8c7a7..1b233ba0f 100644 --- a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java +++ b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java @@ -26,6 +26,7 @@ import de.jost_net.JVerein.gui.action.JahresabschlussDetailAction; import de.jost_net.JVerein.gui.menu.JahresabschlussMenu; import de.jost_net.JVerein.gui.parts.KontensaldoList; +import de.jost_net.JVerein.gui.parts.MittelverwendungList; import de.jost_net.JVerein.gui.util.AfaUtil; import de.jost_net.JVerein.io.SaldoZeile; import de.jost_net.JVerein.keys.Kontoart; @@ -79,6 +80,10 @@ public class JahresabschlussControl extends AbstractControl private DecimalInput zwanghafteweitergabe; + private boolean isSaveEnabled = false; + + private boolean updateMittelverwendung = false; + public JahresabschlussControl(AbstractView view) { super(view); @@ -87,12 +92,30 @@ public JahresabschlussControl(AbstractView view) } public Jahresabschluss getJahresabschluss() + throws RemoteException, ParseException { if (jahresabschluss != null) { return jahresabschluss; } jahresabschluss = (Jahresabschluss) getCurrentObject(); + updateMittelverwendung = (Einstellungen.getEinstellung() + .getMittelverwendung() + && (jahresabschluss.getVerwendungsrueckstand() == null + || jahresabschluss.getZwanghafteWeitergabe() == null)); + if (jahresabschluss.isNewObject() || updateMittelverwendung) + { + isSaveEnabled = true; + } + if (Einstellungen.getEinstellung().getMittelverwendung()) + { + MittelverwendungList list = new MittelverwendungList(null, + (Date) getVon().getValue(), (Date) getBis().getValue(), 0); + list.getFlowReport(); + jahresabschluss.setVerwendungsrueckstand(list.getRueckstandVorjahrNeu()); + jahresabschluss + .setZwanghafteWeitergabe(list.getZwanghafteWeitergabeNeu()); + } return jahresabschluss; } @@ -149,7 +172,7 @@ public DateInput getBis() throws RemoteException, ParseException return bis; } - public DateInput getDatum() throws RemoteException + public DateInput getDatum() throws RemoteException, ParseException { if (datum != null) { @@ -165,7 +188,7 @@ public DateInput getDatum() throws RemoteException return datum; } - public TextInput getName() throws RemoteException + public TextInput getName() throws RemoteException, ParseException { if (name != null) { @@ -221,7 +244,8 @@ public Part getJahresabschlussSaldo() throws RemoteException return jahresabschlusssaldoList; } - public DecimalInput getVerwendungsrueckstand() throws RemoteException + public DecimalInput getVerwendungsrueckstand() + throws RemoteException, ParseException { if (verwendungsrueckstand != null) { @@ -237,12 +261,13 @@ public DecimalInput getVerwendungsrueckstand() throws RemoteException verwendungsrueckstand = new DecimalInput( getJahresabschluss().getVerwendungsrueckstand(), Einstellungen.DECIMALFORMAT); - verwendungsrueckstand.setEnabled(false); } + verwendungsrueckstand.setEnabled(updateMittelverwendung); return verwendungsrueckstand; } - public DecimalInput getZwanghafteWeitergabe() throws RemoteException + public DecimalInput getZwanghafteWeitergabe() + throws RemoteException, ParseException { if (zwanghafteweitergabe != null) { @@ -258,11 +283,16 @@ public DecimalInput getZwanghafteWeitergabe() throws RemoteException zwanghafteweitergabe = new DecimalInput( getJahresabschluss().getZwanghafteWeitergabe(), Einstellungen.DECIMALFORMAT); - zwanghafteweitergabe.setEnabled(false); } + zwanghafteweitergabe.setEnabled(updateMittelverwendung); return zwanghafteweitergabe; } + public boolean isSaveEnabled() + { + return isSaveEnabled; + } + /** * This method stores the project using the current values. */ @@ -308,6 +338,8 @@ public void handleStore() { ja.setVerwendungsrueckstand( (Double) getVerwendungsrueckstand().getValue()); + ja.setZwanghafteWeitergabe( + (Double) getZwanghafteWeitergabe().getValue()); ja.store(); } GUI.getStatusBar().setSuccessText("Jahresabschluss gespeichert"); diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java index cc3457344..8daf63dd3 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java @@ -61,6 +61,10 @@ public class MittelverwendungList extends TablePart private Date endeLetztesGJ; + private Double zwanghafteWeitergabeNeu; + + private Double rueckstandVorjahrNeu; + private int tab = 0; private static double LIMIT = 0.005; @@ -232,18 +236,24 @@ public ArrayList getFlowReport() throws RemoteException // Der in dem Rückstand enthaltene Rückstand aus dem vorletzten Jahr Double rueckstandVorVorjahr = null; + Double zwanghafteWeitergabeVorjahr = null; DBIterator jahresabschluesse = service .createList(Jahresabschluss.class); jahresabschluesse.addFilter("bis = ?", endeLetztesGJ); if (jahresabschluesse != null && jahresabschluesse.hasNext()) { - rueckstandVorVorjahr = jahresabschluesse.next() - .getVerwendungsrueckstand(); + Jahresabschluss abschluss = jahresabschluesse.next(); + rueckstandVorVorjahr = abschluss.getVerwendungsrueckstand(); + zwanghafteWeitergabeVorjahr = abschluss.getZwanghafteWeitergabe(); } - bezeichnung = " - Darin enthaltener Verwendungsrückstand aus dem vorletzten GJ " + bezeichnung = " - Darin enthaltener Rest des Verwendungsrückstand aus dem vorletzten GJ " + vorletztesGJ; addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, rueckstandVorVorjahr, null, NULL); + bezeichnung = " - Darin enthaltene zwanghafte satzungsgemäße Weitergabe von Mitteln aus dem letzten GJ " + + letztesGJ; + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + zwanghafteWeitergabeVorjahr, null, NULL); // Schritt 2: Mittel Zufluss // Summe aller Zuflüsse bei Geldkonten und Anlagen (=Sachspenden) @@ -331,32 +341,36 @@ public ArrayList getFlowReport() throws RemoteException -summeEntRuecklagen, NULL); // Berechnung der Mittelverwendung - Double ausgaben = summeEntRuecklagen - verwendung; // verwendung ist - // negativ - Double zwanghafteVerwendung = null; - Double rueckstandVorVorjahrNeu = null; // Rest aus Rückstand Vorjahr + rueckstandVorVorjahr = (rueckstandVorVorjahr == null) ? 0.0 + : rueckstandVorVorjahr; + zwanghafteWeitergabeVorjahr = (zwanghafteWeitergabeVorjahr == null) ? 0.0 + : zwanghafteWeitergabeVorjahr; + Double ausgaben = summeEntRuecklagen - verwendung; + Double rueckstandVorjahr = vorhandeneMittel - rueckstandVorVorjahr + - zwanghafteWeitergabeVorjahr; + zwanghafteWeitergabeNeu = 0.0; + rueckstandVorjahrNeu = 0.0; // Rest aus Rückstand Vorjahr // Der Rückstand aus dem vorletzten Jahr muss ganz aufgebraucht werden, // ansonsten unterliegt der Restbetrag der zwanghaften satzungsgemäßen // Weitergabe von Mitteln - if (rueckstandVorVorjahr != null && rueckstandVorVorjahr > ausgaben) + + if (rueckstandVorVorjahr > ausgaben) { - zwanghafteVerwendung = rueckstandVorVorjahr - ausgaben; - rueckstandVorVorjahrNeu = vorhandeneMittel - rueckstandVorVorjahr; + zwanghafteWeitergabeNeu = rueckstandVorVorjahr - ausgaben; + rueckstandVorjahrNeu = rueckstandVorjahr; } else { - rueckstandVorVorjahrNeu = Math.max(vorhandeneMittel - ausgaben, 0); + rueckstandVorjahrNeu = Math + .max(vorhandeneMittel - ausgaben - zwanghafteWeitergabeVorjahr, 0); } bezeichnung = " - Darin enthaltener Verwendungsrückstand aus dem letzten GJ " + letztesGJ; addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - rueckstandVorVorjahrNeu, null, NULL); - if (zwanghafteVerwendung != null) - { - bezeichnung = " - Darin enthaltene zwanghafte satzungsgemäße Weitergabe von Mitteln"; - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - zwanghafteVerwendung, null, NULL); - } + rueckstandVorjahrNeu, null, NULL); + bezeichnung = " - Darin enthaltene zwanghafte satzungsgemäße Weitergabe von Mitteln"; + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + zwanghafteWeitergabeNeu, null, NULL); // Leerzeile am Ende wegen Scrollbar zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, null, @@ -768,4 +782,13 @@ private void addZeile(ArrayList zeilen, int status, } } + public Double getZwanghafteWeitergabeNeu() + { + return zwanghafteWeitergabeNeu; + } + + public Double getRueckstandVorjahrNeu() + { + return rueckstandVorjahrNeu; + } } diff --git a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java index 1d0624785..4e49e155f 100644 --- a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java +++ b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java @@ -22,6 +22,7 @@ import de.willuhn.jameica.gui.AbstractView; import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.GUI; +import de.willuhn.jameica.gui.parts.Button; import de.willuhn.jameica.gui.parts.ButtonArea; import de.willuhn.jameica.gui.parts.InfoPanel; import de.willuhn.jameica.gui.util.LabelGroup; @@ -51,10 +52,13 @@ public void bind() throws Exception group.addLabelPair("Bis", control.getBis()); group.addLabelPair("Datum", control.getDatum()); group.addLabelPair("Name", control.getName()); - group.addLabelPair("Rest Verwendungsrückstand Vorjahr", - control.getVerwendungsrueckstand()); - group.addLabelPair("Zwanghafte Weitergabe von Mittel", - control.getZwanghafteWeitergabe()); + if (Einstellungen.getEinstellung().getMittelverwendung()) + { + group.addLabelPair("Rest Verwendungsrückstand Vorjahr", + control.getVerwendungsrueckstand()); + group.addLabelPair("Zwanghafte satzungsgemäße Weitergabe von Mitteln", + control.getZwanghafteWeitergabe()); + } group.addLabelPair("Anfangsbestände Folgejahr", control.getAnfangsbestaende()); if (Einstellungen.getEinstellung().getAfaInJahresabschluss()) @@ -64,7 +68,7 @@ public void bind() throws Exception ButtonArea buttons = new ButtonArea(); buttons.addButton("Hilfe", new DokumentationAction(), DokumentationUtil.JAHRESABSCHLUSS, false, "question-circle.png"); - buttons.addButton("Speichern", new Action() + Button save = new Button("Speichern", new Action() { @Override @@ -73,6 +77,8 @@ public void handleAction(Object context) control.handleStore(); } }, null, true, "document-save.png"); + save.setEnabled(control.isSaveEnabled()); + buttons.addButton(save); buttons.paint(this.getParent()); } } From 022f396b70213b6d9420c2ec2f927936d7ca69ac Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Sun, 26 Jan 2025 10:11:17 +0100 Subject: [PATCH 16/38] Umbau --- .../gui/control/JahresabschlussControl.java | 6 +- .../gui/control/MittelverwendungControl.java | 73 ++- .../gui/parts/MittelverwendungList.java | 369 +------------ .../gui/parts/MittelverwendungSaldoList.java | 501 ++++++++++++++++++ .../gui/view/MittelverwendungListeView.java | 12 +- 5 files changed, 580 insertions(+), 381 deletions(-) create mode 100644 src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java diff --git a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java index 1b233ba0f..796402110 100644 --- a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java +++ b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java @@ -109,9 +109,9 @@ public Jahresabschluss getJahresabschluss() } if (Einstellungen.getEinstellung().getMittelverwendung()) { - MittelverwendungList list = new MittelverwendungList(null, - (Date) getVon().getValue(), (Date) getBis().getValue(), 0); - list.getFlowReport(); + MittelverwendungList list = new MittelverwendungList( + (Date) getVon().getValue(), (Date) getBis().getValue()); + list.getInfo(); jahresabschluss.setVerwendungsrueckstand(list.getRueckstandVorjahrNeu()); jahresabschluss .setZwanghafteWeitergabe(list.getZwanghafteWeitergabeNeu()); diff --git a/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java b/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java index 71a5435e4..d486b9181 100644 --- a/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java +++ b/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java @@ -26,6 +26,7 @@ import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.gui.parts.MittelverwendungList; +import de.jost_net.JVerein.gui.parts.MittelverwendungSaldoList; import de.jost_net.JVerein.io.MittelverwendungExportCSV; import de.jost_net.JVerein.io.MittelverwendungExportPDF; import de.jost_net.JVerein.io.MittelverwendungZeile; @@ -45,7 +46,9 @@ public class MittelverwendungControl extends SaldoControl { - private MittelverwendungList[] saldoList = new MittelverwendungList[ANZAHL_TABS]; + private MittelverwendungList zuflussList; + + private MittelverwendungSaldoList saldoList; final static String ExportPDF = "PDF"; @@ -55,9 +58,7 @@ public class MittelverwendungControl extends SaldoControl public final static int SALDO_REPORT = 1; - public final static int ANZAHL_TABS = 2; - - private int selectedTab = 0; + private int selectedTab = FLOW_REPORT; public MittelverwendungControl(AbstractView view) { @@ -99,17 +100,41 @@ public void handleStore() public Part getSaldoList() throws ApplicationException { - for (int i = 0; i < ANZAHL_TABS; i++) + if (selectedTab == FLOW_REPORT) { - if (i != selectedTab) - { - getSaldoList(i); - } + getSaldoTable(); + return getFlowTable(); + } + else + { + getFlowTable(); + return getSaldoTable(); + } + } + + public Part getSaldoTable() throws ApplicationException + { + if (getDatumvon().getDate() != null) + { + settings.setAttribute("von", + new JVDateFormatTTMMJJJJ().format(getDatumvon().getDate())); + settings.setAttribute("bis", + new JVDateFormatTTMMJJJJ().format(getDatumbis().getDate())); } - return getSaldoList(selectedTab); + if (saldoList == null) + { + saldoList = new MittelverwendungSaldoList(datumvon.getDate(), + datumbis.getDate()); + } + else + { + saldoList.setDatumvon(datumvon.getDate()); + saldoList.setDatumbis(datumbis.getDate()); + } + return saldoList.getSaldoList(); } - public Part getSaldoList(int tab) throws ApplicationException + public Part getFlowTable() throws ApplicationException { if (getDatumvon().getDate() != null) { @@ -119,25 +144,32 @@ public Part getSaldoList(int tab) throws ApplicationException new JVDateFormatTTMMJJJJ().format(getDatumbis().getDate())); } - if (saldoList[tab] == null) + if (zuflussList == null) { - saldoList[tab] = new MittelverwendungList(null, datumvon.getDate(), - datumbis.getDate(), tab); + zuflussList = new MittelverwendungList(datumvon.getDate(), + datumbis.getDate()); } else { - saldoList[tab].setDatumvon(datumvon.getDate()); - saldoList[tab].setDatumbis(datumbis.getDate()); + zuflussList.setDatumvon(datumvon.getDate()); + zuflussList.setDatumbis(datumbis.getDate()); } - return saldoList[tab].getSaldoList(); + return zuflussList.getFlowList(); } private void starteExport(String type) throws ApplicationException { try { - ArrayList zeilen = saldoList[selectedTab] - .getInfo(); + ArrayList zeilen; + if (selectedTab == FLOW_REPORT) + { + zeilen = zuflussList.getInfo(); + } + else + { + zeilen = saldoList.getInfo(); + } FileDialog fd = new FileDialog(GUI.getShell(), SWT.SAVE); fd.setText("Ausgabedatei wählen."); @@ -163,7 +195,8 @@ private void starteExport(String type) throws ApplicationException final File file = new File(s); settings.setAttribute("lastdir", file.getParent()); - exportSaldo(zeilen, file, getDatumvon().getDate(), + exportSaldo(zeilen, file, + getDatumvon().getDate(), getDatumbis().getDate(), type, selectedTab); } catch (RemoteException e) diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java index 8daf63dd3..94be1e99a 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java @@ -24,10 +24,7 @@ import java.util.Date; import java.util.HashMap; -import org.eclipse.swt.widgets.Composite; - import de.jost_net.JVerein.Einstellungen; -import de.jost_net.JVerein.gui.control.MittelverwendungControl; import de.jost_net.JVerein.io.MittelverwendungZeile; import de.jost_net.JVerein.keys.Anlagenzweck; import de.jost_net.JVerein.keys.ArtBuchungsart; @@ -36,7 +33,6 @@ import de.willuhn.datasource.rmi.DBIterator; import de.willuhn.datasource.rmi.DBService; import de.willuhn.datasource.rmi.ResultSetExtractor; -import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.Part; import de.willuhn.jameica.gui.formatter.CurrencyFormatter; import de.willuhn.jameica.gui.parts.Column; @@ -44,10 +40,10 @@ import de.willuhn.jameica.gui.parts.table.FeatureSummary; import de.willuhn.util.ApplicationException; -public class MittelverwendungList extends TablePart +public class MittelverwendungList { - private TablePart saldoList; + private TablePart flowList; private Date datumvon = null; @@ -65,19 +61,14 @@ public class MittelverwendungList extends TablePart private Double rueckstandVorjahrNeu; - private int tab = 0; - private static double LIMIT = 0.005; private static String NULL = " "; - public MittelverwendungList(Action action, Date datumvon, Date datumbis, - int tab) + public MittelverwendungList(Date datumvon, Date datumbis) { - super(action); this.datumvon = datumvon; this.datumbis = datumbis; - this.tab = tab; updateDatum(); } @@ -92,16 +83,16 @@ private void updateDatum() endeLetztesGJ = cal.getTime(); } - public Part getSaldoList() throws ApplicationException + public Part getFlowList() throws ApplicationException { ArrayList zeilen = null; try { zeilen = getInfo(); - if (saldoList == null) + if (flowList == null) { - saldoList = new TablePart(zeilen, null) + flowList = new TablePart(zeilen, null) { @Override protected void orderBy(int index) @@ -109,25 +100,24 @@ protected void orderBy(int index) return; } }; - saldoList.addColumn("Nr", "position"); - saldoList.addColumn("Mittel", "bezeichnung"); - saldoList.addColumn("Betrag", "betrag", + flowList.addColumn("Nr", "position"); + flowList.addColumn("Mittel", "bezeichnung"); + flowList.addColumn("Betrag", "betrag", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, Column.ALIGN_RIGHT); - saldoList.addColumn("Summe", "summe", + flowList.addColumn("Summe", "summe", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, Column.ALIGN_LEFT); - saldoList.addColumn("Kommentar", "kommentar"); - saldoList.setRememberColWidths(true); - saldoList.setRememberOrder(true); - saldoList.removeFeature(FeatureSummary.class); + flowList.setRememberColWidths(true); + flowList.setRememberOrder(true); + flowList.removeFeature(FeatureSummary.class); } else { - saldoList.removeAll(); + flowList.removeAll(); for (MittelverwendungZeile sz : zeilen) { - saldoList.addItem(sz); + flowList.addItem(sz); } } } @@ -135,7 +125,7 @@ protected void orderBy(int index) { throw new ApplicationException("Fehler aufgetreten" + e.getMessage()); } - return saldoList; + return flowList; } ResultSetExtractor rsd = new ResultSetExtractor() @@ -181,18 +171,6 @@ public Object extract(ResultSet rs) throws SQLException }; public ArrayList getInfo() throws RemoteException - { - switch (tab) - { - case MittelverwendungControl.FLOW_REPORT: - return getFlowReport(); - case MittelverwendungControl.SALDO_REPORT: - return getSaldoReport(); - } - return new ArrayList(); - } - - public ArrayList getFlowReport() throws RemoteException { DBService service = Einstellungen.getDBService(); String sql; @@ -378,264 +356,6 @@ public ArrayList getFlowReport() throws RemoteException return zeilen; } - public ArrayList getSaldoReport() - throws RemoteException - { - DBService service = Einstellungen.getDBService(); - String sql; - ArrayList zeilen = new ArrayList<>(); - Integer pos = 1; - Double summeVermoegen = 0.0; - String bezeichnung = ""; - // Anlagevermögen - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, - "Anlagenvermögen", null, null, NULL)); - if (Einstellungen.getEinstellung().getSummenAnlagenkonto()) - { - sql = getAnfangsbestandKontoartSql(); - Double anlagenStand = (Double) service.execute(sql, - new Object[] { datumvon, Kontoart.ANLAGE.getKey(), datumvon }, rsd); - sql = getSummenBetragKontoartSql(); - anlagenStand += (Double) service.execute(sql, - new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey() }, rsd); - bezeichnung = " Summe Anlagenkonten"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - anlagenStand, 0.0, NULL); - summeVermoegen += anlagenStand; - } - else - { - sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; - @SuppressWarnings("unchecked") - HashMap map0 = (HashMap) service - .execute(sql, new Object[] { Kontoart.ANLAGE.getKey() }, rsmapa); - for (Long kontoId : map0.keySet()) - { - sql = getAnfangsbestandKontoSql(); - Double kontoStand = (Double) service.execute(sql, - new Object[] { datumvon, kontoId, datumvon }, rsd); - sql = getSummenBetragKontoSql(); - kontoStand += (Double) service.execute(sql, - new Object[] { datumvon, datumbis, kontoId }, rsd); - if (Math.abs(kontoStand) > LIMIT) - { - String kommentar = map0.get(kontoId)[1]; - if (kommentar != null && !kommentar.isEmpty()) - { - kommentar = kommentar.split("\n")[0]; - } - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, - map0.get(kontoId)[0], kontoStand, null, kommentar); - summeVermoegen += kontoStand; - } - } - bezeichnung = " Summe Anlagenkonten"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - summeVermoegen, 0.0, NULL); - } - - // Geldkonten - Double summeGeld = 0.0; - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, - "Geldvermögen", null, null, NULL)); - sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; - @SuppressWarnings("unchecked") - HashMap map1 = (HashMap) service - .execute(sql, new Object[] { Kontoart.GELD.getKey() }, rsmapa); - for (Long kontoId : map1.keySet()) - { - sql = getAnfangsbestandKontoSql(); - Double kontoStand = (Double) service.execute(sql, - new Object[] { datumvon, kontoId, datumvon }, rsd); - sql = getSummenBetragKontoSql(); - kontoStand += (Double) service.execute(sql, - new Object[] { datumvon, datumbis, kontoId }, rsd); - if (Math.abs(kontoStand) > LIMIT) - { - String kommentar = map1.get(kontoId)[1]; - if (kommentar != null && !kommentar.isEmpty()) - { - kommentar = kommentar.split("\n")[0]; - } - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, - map1.get(kontoId)[0], kontoStand, null, kommentar); - summeGeld += kontoStand; - } - } - bezeichnung = " Summe Geldkonten"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, summeGeld, - 0.0, NULL); - summeVermoegen += summeGeld; - - // Verbindlichkeitskonten - Double summeSchulden = 0.0; - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, - "Darlehen, Kredite etc.", null, null, NULL)); - sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; - @SuppressWarnings("unchecked") - HashMap map2 = (HashMap) service.execute( - sql, new Object[] { Kontoart.SCHULDEN.getKey() }, rsmapa); - for (Long kontoId : map2.keySet()) - { - sql = getAnfangsbestandKontoSql(); - Double kontoStand = (Double) service.execute(sql, - new Object[] { datumvon, kontoId, datumvon }, rsd); - sql = getSummenBetragKontoSql(); - kontoStand += (Double) service.execute(sql, - new Object[] { datumvon, datumbis, kontoId }, rsd); - if (Math.abs(kontoStand) > LIMIT) - { - String kommentar = map2.get(kontoId)[1]; - if (kommentar != null && !kommentar.isEmpty()) - { - kommentar = kommentar.split("\n")[0]; - } - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, - map2.get(kontoId)[0], kontoStand, null, kommentar); - summeSchulden += kontoStand; - } - } - bezeichnung = " Summe Darlehen, Kredite etc."; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - summeSchulden, 0.0, NULL); - summeVermoegen += summeSchulden; - bezeichnung = " Gesamtvermögen"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - summeVermoegen, 0.0, NULL); - // Leerzeile - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.LEERZEILE, null, - null, null, null, NULL)); - - // Mittelverwendung - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, - "Mittelverwendung", null, null, NULL)); - // Nutzungsgebundenes Anlagevermögen - sql = getAnfangsbestandKontoartZweckSql(); - Double anlagenStand = (Double) service.execute(sql, new Object[] { datumvon, - Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), datumvon }, - rsd); - sql = getSummenBetragKontoartZweckSql(); - anlagenStand += (Double) service.execute(sql, - new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey(), - Anlagenzweck.NUTZUNGSGEBUNDEN.getKey() }, - rsd); - bezeichnung = " Nutzungsgebundenes Anlagenvermögen"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, - -anlagenStand, NULL); - summeVermoegen -= anlagenStand; - // Verbindlichkeitskonten - bezeichnung = " Summe Darlehen, Kredite etc."; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, - -summeSchulden, NULL); - summeVermoegen -= summeSchulden; - // Rücklagen, Vermögen nicht zugeordnet - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, - "Nicht zugeordnete Rücklagen", null, null, NULL)); - Double summeRuecklagen = 0.0; - sql = "SELECT id, bezeichnung, kommentar FROM konto" - + " WHERE konto.kontoart >= ?" + " AND konto.kontoart <= ?" - + " AND konto.anlagenklasse IS NULL"; - @SuppressWarnings("unchecked") - HashMap map3 = (HashMap) service - .execute(sql, new Object[] { Kontoart.RUECKLAGE_ZWECK_GEBUNDEN.getKey(), - Kontoart.RUECKLAGE_SONSTIG.getKey() }, rsmapa); - for (Long kontoId : map3.keySet()) - { - sql = getAnfangsbestandKontoSql(); - Double ruecklagen = (Double) service.execute(sql, - new Object[] { datumvon, kontoId, datumvon }, rsd); - sql = getSummenBetragKontoSql(); - ruecklagen += (Double) service.execute(sql, - new Object[] { datumvon, datumbis, kontoId }, rsd); - if (Math.abs(ruecklagen) > LIMIT) - { - String kommentar = map3.get(kontoId)[1]; - if (kommentar != null && !kommentar.isEmpty()) - { - kommentar = kommentar.split("\n")[0]; - } - addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, - map3.get(kontoId)[0], null, -ruecklagen, kommentar); - summeRuecklagen += ruecklagen; - } - } - if (Math.abs(summeRuecklagen) > LIMIT) - { - bezeichnung = " Summe nicht zugeordneter Rücklagen"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, - -summeRuecklagen, NULL); - summeVermoegen -= summeRuecklagen; - } - else - { - zeilen.remove(zeilen.size() - 1); - } - - // Rücklagen, Vermögen den Buchungsklassen zugeordnet - sql = "SELECT buchungsklasse.id, buchungsklasse.bezeichnung FROM buchungsklasse" - + " ORDER BY nummer"; - @SuppressWarnings("unchecked") - HashMap buchungsklassen = (HashMap) service - .execute(sql, new Object[] {}, rsmap); - for (Long buchungsklasseId : buchungsklassen.keySet()) - { - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, - pos++, buchungsklassen.get(buchungsklasseId), null, null, NULL)); - summeRuecklagen = 0.0; - sql = "SELECT id, bezeichnung, kommentar FROM konto" - + " WHERE konto.kontoart >= ?" + " AND konto.kontoart <= ?" - + " AND konto.anlagenklasse = ?"; - @SuppressWarnings("unchecked") - HashMap map4 = (HashMap) service - .execute(sql, - new Object[] { Kontoart.RUECKLAGE_ZWECK_GEBUNDEN.getKey(), - Kontoart.RUECKLAGE_SONSTIG.getKey(), buchungsklasseId }, - rsmapa); - for (Long kontoId : map4.keySet()) - { - sql = getAnfangsbestandKontoSql(); - Double ruecklagen = (Double) service.execute(sql, - new Object[] { datumvon, kontoId, datumvon }, rsd); - sql = getSummenBetragKontoSql(); - ruecklagen += (Double) service.execute(sql, - new Object[] { datumvon, datumbis, kontoId }, rsd); - if (Math.abs(ruecklagen) > LIMIT) - { - String kommentar = map4.get(kontoId)[1]; - if (kommentar != null && !kommentar.isEmpty()) - { - kommentar = kommentar.split("\n")[0]; - } - addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, - map4.get(kontoId)[0], null, -ruecklagen, kommentar); - summeRuecklagen += ruecklagen; - } - } - if (Math.abs(summeRuecklagen) > LIMIT) - { - bezeichnung = " Summe Rücklagen/Vermögen " - + buchungsklassen.get(buchungsklasseId); - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, - -summeRuecklagen, NULL); - summeVermoegen -= summeRuecklagen; - } - else - { - zeilen.remove(zeilen.size() - 1); - } - } - // Leerzeile - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.LEERZEILE, null, - null, null, null, NULL)); - bezeichnung = "Verwendungsrückstand(+)/-überhang(-) zum Ende des GJ"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, - summeVermoegen, NULL); - // Leerzeile undefined - nicht drucken in PDF und CSV - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, null, - null, null, null, NULL)); - return zeilen; - } - public void setDatumvon(Date datumvon) { this.datumvon = datumvon; @@ -647,18 +367,6 @@ public void setDatumbis(Date datumbis) this.datumbis = datumbis; } - @Override - public void removeAll() - { - saldoList.removeAll(); - } - - @Override - public synchronized void paint(Composite parent) throws RemoteException - { - super.paint(parent); - } - private String getSummenKontoSql() throws RemoteException { String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" @@ -708,51 +416,6 @@ private String getSummenRuecklagenSql() + " AND buchungsart.art = ?"; } - private String getAnfangsbestandKontoartSql() throws RemoteException - { - return "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" - + " WHERE anfangsbestand.datum = ?" - + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? " - + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)"; - } - - private String getAnfangsbestandKontoartZweckSql() throws RemoteException - { - return "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" - + " WHERE anfangsbestand.datum = ?" - + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? " - + " AND konto.zweck = ?" - + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)"; - } - - private String getSummenBetragKontoartSql() throws RemoteException - { - return "SELECT sum(buchung.betrag) FROM buchung, konto" - + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" - + " AND konto.kontoart = ?"; - } - - private String getSummenBetragKontoartZweckSql() throws RemoteException - { - return "SELECT sum(buchung.betrag) FROM buchung, konto" - + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" - + " AND konto.kontoart = ?" + " AND konto.zweck = ?"; - } - - private String getAnfangsbestandKontoSql() throws RemoteException - { - return "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" - + " WHERE anfangsbestand.datum = ?" + " AND anfangsbestand.konto = ?" - + " AND anfangsbestand.konto = konto.id " - + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)"; - } - - private String getSummenBetragKontoSql() throws RemoteException - { - return "SELECT sum(buchung.betrag) FROM buchung" - + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = ?"; - } - private void addZeile(ArrayList zeilen, int status, Integer position, String bezeichnung, Double einnahme, Double ausgabe, String kommentar) throws RemoteException diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java new file mode 100644 index 000000000..5fa9bb627 --- /dev/null +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java @@ -0,0 +1,501 @@ +/********************************************************************** + * Copyright (c) by Heiner Jostkleigrewe + * + * This program 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, either version 3 of the + * License, or (at your option) any later version. + * + * This program 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 . + * + * heiner@jverein.de | www.jverein.de + **********************************************************************/ +package de.jost_net.JVerein.gui.parts; + +import java.rmi.RemoteException; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; + +import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.io.MittelverwendungZeile; +import de.jost_net.JVerein.keys.Anlagenzweck; +import de.jost_net.JVerein.keys.Kontoart; +import de.willuhn.datasource.rmi.DBService; +import de.willuhn.datasource.rmi.ResultSetExtractor; +import de.willuhn.jameica.gui.Part; +import de.willuhn.jameica.gui.formatter.CurrencyFormatter; +import de.willuhn.jameica.gui.parts.Column; +import de.willuhn.jameica.gui.parts.TablePart; +import de.willuhn.jameica.gui.parts.table.FeatureSummary; +import de.willuhn.util.ApplicationException; + +public class MittelverwendungSaldoList +{ + + private TablePart saldoList; + + private Date datumvon = null; + + private Date datumbis = null; + + private Double zwanghafteWeitergabeNeu; + + private Double rueckstandVorjahrNeu; + + private static double LIMIT = 0.005; + + private static String NULL = " "; + + public MittelverwendungSaldoList(Date datumvon, Date datumbis) + { + this.datumvon = datumvon; + this.datumbis = datumbis; + } + + public Part getSaldoList() throws ApplicationException + { + ArrayList zeilen = null; + try + { + zeilen = getInfo(); + + if (saldoList == null) + { + saldoList = new TablePart(zeilen, null) + { + @Override + protected void orderBy(int index) + { + return; + } + }; + saldoList.addColumn("Nr", "position"); + saldoList.addColumn("Mittel", "bezeichnung"); + saldoList.addColumn("Betrag", "betrag", + new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, + Column.ALIGN_RIGHT); + saldoList.addColumn("Summe", "summe", + new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, + Column.ALIGN_LEFT); + saldoList.addColumn("Kommentar", "kommentar"); + saldoList.setRememberColWidths(true); + saldoList.setRememberOrder(true); + saldoList.removeFeature(FeatureSummary.class); + } + else + { + saldoList.removeAll(); + for (MittelverwendungZeile sz : zeilen) + { + saldoList.addItem(sz); + } + } + } + catch (RemoteException e) + { + throw new ApplicationException("Fehler aufgetreten" + e.getMessage()); + } + return saldoList; + } + + 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)); + } + }; + + ResultSetExtractor rsmap = new ResultSetExtractor() + { + @Override + public Object extract(ResultSet rs) throws SQLException + { + HashMap map = new HashMap<>(); + while (rs.next()) + { + map.put(rs.getLong(1), rs.getString(2)); + } + return map; + } + }; + + ResultSetExtractor rsmapa = new ResultSetExtractor() + { + @Override + public Object extract(ResultSet rs) throws SQLException + { + HashMap map = new HashMap<>(); + while (rs.next()) + { + map.put(rs.getLong(1), + new String[] { rs.getString(2), rs.getString(3) }); + } + return map; + } + }; + + public ArrayList getInfo() + throws RemoteException + { + DBService service = Einstellungen.getDBService(); + String sql; + ArrayList zeilen = new ArrayList<>(); + Integer pos = 1; + Double summeVermoegen = 0.0; + String bezeichnung = ""; + // Anlagevermögen + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, + "Anlagenvermögen", null, null, NULL)); + if (Einstellungen.getEinstellung().getSummenAnlagenkonto()) + { + sql = getAnfangsbestandKontoartSql(); + Double anlagenStand = (Double) service.execute(sql, + new Object[] { datumvon, Kontoart.ANLAGE.getKey(), datumvon }, rsd); + sql = getSummenBetragKontoartSql(); + anlagenStand += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey() }, rsd); + bezeichnung = " Summe Anlagenkonten"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, + anlagenStand, 0.0, NULL); + summeVermoegen += anlagenStand; + } + else + { + sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; + @SuppressWarnings("unchecked") + HashMap map0 = (HashMap) service + .execute(sql, new Object[] { Kontoart.ANLAGE.getKey() }, rsmapa); + for (Long kontoId : map0.keySet()) + { + sql = getAnfangsbestandKontoSql(); + Double kontoStand = (Double) service.execute(sql, + new Object[] { datumvon, kontoId, datumvon }, rsd); + sql = getSummenBetragKontoSql(); + kontoStand += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, kontoId }, rsd); + if (Math.abs(kontoStand) > LIMIT) + { + String kommentar = map0.get(kontoId)[1]; + if (kommentar != null && !kommentar.isEmpty()) + { + kommentar = kommentar.split("\n")[0]; + } + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, + map0.get(kontoId)[0], kontoStand, null, kommentar); + summeVermoegen += kontoStand; + } + } + bezeichnung = " Summe Anlagenkonten"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, + summeVermoegen, 0.0, NULL); + } + + // Geldkonten + Double summeGeld = 0.0; + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, + "Geldvermögen", null, null, NULL)); + sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; + @SuppressWarnings("unchecked") + HashMap map1 = (HashMap) service + .execute(sql, new Object[] { Kontoart.GELD.getKey() }, rsmapa); + for (Long kontoId : map1.keySet()) + { + sql = getAnfangsbestandKontoSql(); + Double kontoStand = (Double) service.execute(sql, + new Object[] { datumvon, kontoId, datumvon }, rsd); + sql = getSummenBetragKontoSql(); + kontoStand += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, kontoId }, rsd); + if (Math.abs(kontoStand) > LIMIT) + { + String kommentar = map1.get(kontoId)[1]; + if (kommentar != null && !kommentar.isEmpty()) + { + kommentar = kommentar.split("\n")[0]; + } + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, + map1.get(kontoId)[0], kontoStand, null, kommentar); + summeGeld += kontoStand; + } + } + bezeichnung = " Summe Geldkonten"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, summeGeld, + 0.0, NULL); + summeVermoegen += summeGeld; + + // Verbindlichkeitskonten + Double summeSchulden = 0.0; + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, + "Darlehen, Kredite etc.", null, null, NULL)); + sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; + @SuppressWarnings("unchecked") + HashMap map2 = (HashMap) service.execute( + sql, new Object[] { Kontoart.SCHULDEN.getKey() }, rsmapa); + for (Long kontoId : map2.keySet()) + { + sql = getAnfangsbestandKontoSql(); + Double kontoStand = (Double) service.execute(sql, + new Object[] { datumvon, kontoId, datumvon }, rsd); + sql = getSummenBetragKontoSql(); + kontoStand += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, kontoId }, rsd); + if (Math.abs(kontoStand) > LIMIT) + { + String kommentar = map2.get(kontoId)[1]; + if (kommentar != null && !kommentar.isEmpty()) + { + kommentar = kommentar.split("\n")[0]; + } + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, + map2.get(kontoId)[0], kontoStand, null, kommentar); + summeSchulden += kontoStand; + } + } + bezeichnung = " Summe Darlehen, Kredite etc."; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, + summeSchulden, 0.0, NULL); + summeVermoegen += summeSchulden; + bezeichnung = " Gesamtvermögen"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, + summeVermoegen, 0.0, NULL); + // Leerzeile + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.LEERZEILE, null, + null, null, null, NULL)); + + // Mittelverwendung + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, + "Mittelverwendung", null, null, NULL)); + // Nutzungsgebundenes Anlagevermögen + sql = getAnfangsbestandKontoartZweckSql(); + Double anlagenStand = (Double) service.execute(sql, new Object[] { datumvon, + Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), datumvon }, + rsd); + sql = getSummenBetragKontoartZweckSql(); + anlagenStand += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey(), + Anlagenzweck.NUTZUNGSGEBUNDEN.getKey() }, + rsd); + bezeichnung = " Nutzungsgebundenes Anlagenvermögen"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, + -anlagenStand, NULL); + summeVermoegen -= anlagenStand; + // Verbindlichkeitskonten + bezeichnung = " Summe Darlehen, Kredite etc."; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, + -summeSchulden, NULL); + summeVermoegen -= summeSchulden; + // Rücklagen, Vermögen nicht zugeordnet + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, + "Nicht zugeordnete Rücklagen", null, null, NULL)); + Double summeRuecklagen = 0.0; + sql = "SELECT id, bezeichnung, kommentar FROM konto" + + " WHERE konto.kontoart >= ?" + " AND konto.kontoart <= ?" + + " AND konto.anlagenklasse IS NULL"; + @SuppressWarnings("unchecked") + HashMap map3 = (HashMap) service + .execute(sql, new Object[] { Kontoart.RUECKLAGE_ZWECK_GEBUNDEN.getKey(), + Kontoart.RUECKLAGE_SONSTIG.getKey() }, rsmapa); + for (Long kontoId : map3.keySet()) + { + sql = getAnfangsbestandKontoSql(); + Double ruecklagen = (Double) service.execute(sql, + new Object[] { datumvon, kontoId, datumvon }, rsd); + sql = getSummenBetragKontoSql(); + ruecklagen += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, kontoId }, rsd); + if (Math.abs(ruecklagen) > LIMIT) + { + String kommentar = map3.get(kontoId)[1]; + if (kommentar != null && !kommentar.isEmpty()) + { + kommentar = kommentar.split("\n")[0]; + } + addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, + map3.get(kontoId)[0], null, -ruecklagen, kommentar); + summeRuecklagen += ruecklagen; + } + } + if (Math.abs(summeRuecklagen) > LIMIT) + { + bezeichnung = " Summe nicht zugeordneter Rücklagen"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, + -summeRuecklagen, NULL); + summeVermoegen -= summeRuecklagen; + } + else + { + zeilen.remove(zeilen.size() - 1); + } + + // Rücklagen, Vermögen den Buchungsklassen zugeordnet + sql = "SELECT buchungsklasse.id, buchungsklasse.bezeichnung FROM buchungsklasse" + + " ORDER BY nummer"; + @SuppressWarnings("unchecked") + HashMap buchungsklassen = (HashMap) service + .execute(sql, new Object[] {}, rsmap); + for (Long buchungsklasseId : buchungsklassen.keySet()) + { + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, + pos++, buchungsklassen.get(buchungsklasseId), null, null, NULL)); + summeRuecklagen = 0.0; + sql = "SELECT id, bezeichnung, kommentar FROM konto" + + " WHERE konto.kontoart >= ?" + " AND konto.kontoart <= ?" + + " AND konto.anlagenklasse = ?"; + @SuppressWarnings("unchecked") + HashMap map4 = (HashMap) service + .execute(sql, + new Object[] { Kontoart.RUECKLAGE_ZWECK_GEBUNDEN.getKey(), + Kontoart.RUECKLAGE_SONSTIG.getKey(), buchungsklasseId }, + rsmapa); + for (Long kontoId : map4.keySet()) + { + sql = getAnfangsbestandKontoSql(); + Double ruecklagen = (Double) service.execute(sql, + new Object[] { datumvon, kontoId, datumvon }, rsd); + sql = getSummenBetragKontoSql(); + ruecklagen += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, kontoId }, rsd); + if (Math.abs(ruecklagen) > LIMIT) + { + String kommentar = map4.get(kontoId)[1]; + if (kommentar != null && !kommentar.isEmpty()) + { + kommentar = kommentar.split("\n")[0]; + } + addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, + map4.get(kontoId)[0], null, -ruecklagen, kommentar); + summeRuecklagen += ruecklagen; + } + } + if (Math.abs(summeRuecklagen) > LIMIT) + { + bezeichnung = " Summe Rücklagen/Vermögen " + + buchungsklassen.get(buchungsklasseId); + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, + -summeRuecklagen, NULL); + summeVermoegen -= summeRuecklagen; + } + else + { + zeilen.remove(zeilen.size() - 1); + } + } + // Leerzeile + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.LEERZEILE, null, + null, null, null, NULL)); + bezeichnung = "Verwendungsrückstand(+)/-überhang(-) zum Ende des GJ"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, + summeVermoegen, NULL); + // Leerzeile undefined - nicht drucken in PDF und CSV + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, null, + null, null, null, NULL)); + return zeilen; + } + + public void setDatumvon(Date datumvon) + { + this.datumvon = datumvon; + } + + public void setDatumbis(Date datumbis) + { + this.datumbis = datumbis; + } + + private String getAnfangsbestandKontoartSql() throws RemoteException + { + return "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + + " WHERE anfangsbestand.datum = ?" + + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? " + + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)"; + } + + private String getAnfangsbestandKontoartZweckSql() throws RemoteException + { + return "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + + " WHERE anfangsbestand.datum = ?" + + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? " + + " AND konto.zweck = ?" + + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)"; + } + + private String getSummenBetragKontoartSql() throws RemoteException + { + return "SELECT sum(buchung.betrag) FROM buchung, konto" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + + " AND konto.kontoart = ?"; + } + + private String getSummenBetragKontoartZweckSql() throws RemoteException + { + return "SELECT sum(buchung.betrag) FROM buchung, konto" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + + " AND konto.kontoart = ?" + " AND konto.zweck = ?"; + } + + private String getAnfangsbestandKontoSql() throws RemoteException + { + return "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + + " WHERE anfangsbestand.datum = ?" + " AND anfangsbestand.konto = ?" + + " AND anfangsbestand.konto = konto.id " + + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)"; + } + + private String getSummenBetragKontoSql() throws RemoteException + { + return "SELECT sum(buchung.betrag) FROM buchung" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = ?"; + } + + private void addZeile(ArrayList zeilen, int status, + Integer position, String bezeichnung, Double einnahme, Double ausgabe, + String kommentar) throws RemoteException + { + if (einnahme != null && einnahme == -0.0) + { + einnahme = 0.0; + } + if (ausgabe != null && ausgabe == -0.0) + { + ausgabe = 0.0; + } + switch (status) + { + case MittelverwendungZeile.EINNAHME: + zeilen.add(new MittelverwendungZeile(status, position, bezeichnung, + einnahme, null, kommentar)); + break; + case MittelverwendungZeile.AUSGABE: + zeilen.add(new MittelverwendungZeile(status, position, bezeichnung, + ausgabe, null, kommentar)); + break; + case MittelverwendungZeile.SUMME: + zeilen.add(new MittelverwendungZeile(status, position, bezeichnung, + null, einnahme + ausgabe, kommentar)); + break; + } + } + + public Double getZwanghafteWeitergabeNeu() + { + return zwanghafteWeitergabeNeu; + } + + public Double getRueckstandVorjahrNeu() + { + return rueckstandVorjahrNeu; + } +} diff --git a/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java b/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java index e64e9fa4c..82edecd9a 100644 --- a/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java +++ b/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java @@ -66,12 +66,14 @@ else if (item.getText().startsWith("Mittelverwendungsreport (Saldo")) } } }); - + // Die verschiedenen Tabs - TabGroup mittelverwendungFlow = new TabGroup(folder, "Mittelverwendungsreport (Zufluss basiert)", true, 1); - mittelverwendungFlow.addPart(control.getSaldoList(MittelverwendungControl.FLOW_REPORT)); - TabGroup mittelverwendungSaldo = new TabGroup(folder, "Mittelverwendungsreport (Saldo basiert)", true, 1); - mittelverwendungSaldo.addPart(control.getSaldoList(MittelverwendungControl.SALDO_REPORT)); + TabGroup mittelverwendungFlow = new TabGroup(folder, + "Mittelverwendungsreport (Zufluss basiert)", true, 1); + control.getFlowTable().paint(mittelverwendungFlow.getComposite()); + TabGroup mittelverwendungSaldo = new TabGroup(folder, + "Mittelverwendungsreport (Saldo basiert)", true, 1); + control.getSaldoTable().paint(mittelverwendungSaldo.getComposite()); ButtonArea buttons = new ButtonArea(); buttons.addButton("Hilfe", new DokumentationAction(), From 8387c75bddc6d9945489b21aa05fbe5540828858 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Sun, 26 Jan 2025 15:54:18 +0100 Subject: [PATCH 17/38] Zwischenstand --- .../gui/control/JahresabschlussControl.java | 10 +- .../gui/control/MittelverwendungControl.java | 6 +- .../gui/parts/MittelverwendungFlowList.java | 386 ++++++++++++++++++ .../gui/parts/MittelverwendungList.java | 350 +--------------- .../gui/parts/MittelverwendungSaldoList.java | 272 +++++------- .../gui/view/MittelverwendungListeView.java | 49 ++- .../JVerein/io/MittelverwendungExportCSV.java | 47 ++- .../JVerein/io/MittelverwendungExportPDF.java | 112 +++-- .../JVerein/io/MittelverwendungZeile.java | 22 +- src/de/jost_net/JVerein/keys/Kontoart.java | 2 +- src/de/jost_net/JVerein/server/KontoImpl.java | 2 +- 11 files changed, 672 insertions(+), 586 deletions(-) create mode 100644 src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java diff --git a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java index 796402110..2d73e3958 100644 --- a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java +++ b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java @@ -26,7 +26,7 @@ import de.jost_net.JVerein.gui.action.JahresabschlussDetailAction; import de.jost_net.JVerein.gui.menu.JahresabschlussMenu; import de.jost_net.JVerein.gui.parts.KontensaldoList; -import de.jost_net.JVerein.gui.parts.MittelverwendungList; +import de.jost_net.JVerein.gui.parts.MittelverwendungFlowList; import de.jost_net.JVerein.gui.util.AfaUtil; import de.jost_net.JVerein.io.SaldoZeile; import de.jost_net.JVerein.keys.Kontoart; @@ -109,7 +109,7 @@ public Jahresabschluss getJahresabschluss() } if (Einstellungen.getEinstellung().getMittelverwendung()) { - MittelverwendungList list = new MittelverwendungList( + MittelverwendungFlowList list = new MittelverwendungFlowList( (Date) getVon().getValue(), (Date) getBis().getValue()); list.getInfo(); jahresabschluss.setVerwendungsrueckstand(list.getRueckstandVorjahrNeu()); @@ -262,7 +262,8 @@ public DecimalInput getVerwendungsrueckstand() getJahresabschluss().getVerwendungsrueckstand(), Einstellungen.DECIMALFORMAT); } - verwendungsrueckstand.setEnabled(updateMittelverwendung); + verwendungsrueckstand.setEnabled( + updateMittelverwendung && !getJahresabschluss().isNewObject()); return verwendungsrueckstand; } @@ -284,7 +285,8 @@ public DecimalInput getZwanghafteWeitergabe() getJahresabschluss().getZwanghafteWeitergabe(), Einstellungen.DECIMALFORMAT); } - zwanghafteweitergabe.setEnabled(updateMittelverwendung); + zwanghafteweitergabe.setEnabled( + updateMittelverwendung && !getJahresabschluss().isNewObject()); return zwanghafteweitergabe; } diff --git a/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java b/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java index d486b9181..3575c1ade 100644 --- a/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java +++ b/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java @@ -25,7 +25,7 @@ import org.eclipse.swt.widgets.FileDialog; import de.jost_net.JVerein.Einstellungen; -import de.jost_net.JVerein.gui.parts.MittelverwendungList; +import de.jost_net.JVerein.gui.parts.MittelverwendungFlowList; import de.jost_net.JVerein.gui.parts.MittelverwendungSaldoList; import de.jost_net.JVerein.io.MittelverwendungExportCSV; import de.jost_net.JVerein.io.MittelverwendungExportPDF; @@ -46,7 +46,7 @@ public class MittelverwendungControl extends SaldoControl { - private MittelverwendungList zuflussList; + private MittelverwendungFlowList zuflussList; private MittelverwendungSaldoList saldoList; @@ -146,7 +146,7 @@ public Part getFlowTable() throws ApplicationException if (zuflussList == null) { - zuflussList = new MittelverwendungList(datumvon.getDate(), + zuflussList = new MittelverwendungFlowList(datumvon.getDate(), datumbis.getDate()); } else diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java new file mode 100644 index 000000000..04fb0b25f --- /dev/null +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java @@ -0,0 +1,386 @@ +/********************************************************************** + * Copyright (c) by Heiner Jostkleigrewe + * + * This program 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, either version 3 of the + * License, or (at your option) any later version. + * + * This program 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 . + * + * heiner@jverein.de | www.jverein.de + **********************************************************************/ +package de.jost_net.JVerein.gui.parts; + +import java.rmi.RemoteException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; + +import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.io.MittelverwendungZeile; +import de.jost_net.JVerein.keys.Anlagenzweck; +import de.jost_net.JVerein.keys.ArtBuchungsart; +import de.jost_net.JVerein.keys.Kontoart; +import de.jost_net.JVerein.rmi.Jahresabschluss; +import de.willuhn.datasource.rmi.DBIterator; +import de.willuhn.datasource.rmi.DBService; +import de.willuhn.jameica.gui.Part; +import de.willuhn.jameica.gui.formatter.CurrencyFormatter; +import de.willuhn.jameica.gui.parts.Column; +import de.willuhn.jameica.gui.parts.TablePart; +import de.willuhn.jameica.gui.parts.table.FeatureSummary; +import de.willuhn.util.ApplicationException; + +public class MittelverwendungFlowList extends MittelverwendungList +{ + + private TablePart flowList; + + private int aktuellesGJ; + + private int letztesGJ; + + private int vorletztesGJ; + + private Date endeLetztesGJ; + + private Double zwanghafteWeitergabeNeu; + + private Double rueckstandVorjahrNeu; + + public MittelverwendungFlowList(Date datumvon, Date datumbis) + { + this.datumvon = datumvon; + this.datumbis = datumbis; + updateDatum(); + } + + private void updateDatum() + { + Calendar cal = Calendar.getInstance(); + cal.setTime(datumvon); + aktuellesGJ = cal.get(Calendar.YEAR); + letztesGJ = aktuellesGJ - 1; + vorletztesGJ = aktuellesGJ - 2; + cal.add(Calendar.DAY_OF_MONTH, -1); + endeLetztesGJ = cal.getTime(); + } + + public Part getFlowList() throws ApplicationException + { + ArrayList zeilen = null; + try + { + zeilen = getInfo(); + + if (flowList == null) + { + flowList = new TablePart(zeilen, null) + { + @Override + protected void orderBy(int index) + { + return; + } + }; + flowList.addColumn("Nr", "position"); + flowList.addColumn("Mittel", "bezeichnung"); + flowList.addColumn("Betrag", "betrag", + new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, + Column.ALIGN_RIGHT); + flowList.addColumn("Summe", "summe", + new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, + Column.ALIGN_LEFT); + flowList.setRememberColWidths(true); + flowList.setRememberOrder(true); + flowList.removeFeature(FeatureSummary.class); + } + else + { + flowList.removeAll(); + for (MittelverwendungZeile sz : zeilen) + { + flowList.addItem(sz); + } + } + } + catch (RemoteException e) + { + throw new ApplicationException("Fehler aufgetreten" + e.getMessage()); + } + return flowList; + } + + public ArrayList getInfo() throws RemoteException + { + DBService service = Einstellungen.getDBService(); + String sql; + ArrayList zeilen = new ArrayList<>(); + String bezeichnung = ""; + Integer pos = 1; + + // Schritt 1: Berechnung des Verwendungsrückstand(+)/-überhang(-) + // am Ende des letzten GJ + // Vorhandene Geldmittel zum Ende des letzten GJ sind zu verwenden + sql = "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + + " WHERE anfangsbestand.datum = ?" + + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? "; + Double vorhandeneMittel = (Double) service.execute(sql, + new Object[] { datumvon, Kontoart.GELD.getKey() }, rsd); + + // Vorhandene zweckfremde Anlagen sind zu verwenden + sql = "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + + " WHERE anfangsbestand.datum = ?" + + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? " + + " AND konto.zweck = ?"; + vorhandeneMittel += (Double) service.execute(sql, new Object[] { datumvon, + Kontoart.ANLAGE.getKey(), Anlagenzweck.ZWECKFREMD_EINGESETZT.getKey() }, + rsd); + + // Nicht der zeitnahen Mittelverwendung unterliegende Mittel (Rücklagen) + // zum Ende des letzten GJ können abgezogen werden + sql = "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + + " WHERE anfangsbestand.datum = ?" + + " AND anfangsbestand.konto = konto.id" + " AND konto.kontoart >= ?" + + " AND konto.kontoart <= ?"; + vorhandeneMittel -= (Double) service.execute(sql, + new Object[] { datumvon, Kontoart.RUECKLAGE_ZWECK_GEBUNDEN.getKey(), + Kontoart.RUECKLAGE_SONSTIG.getKey() }, + rsd); + + bezeichnung = "Verwendungsrückstand(+)/-überhang(-) am Ende des letzten GJ " + + letztesGJ; + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + vorhandeneMittel, null, BLANK); + + // Der in dem Rückstand enthaltene Rückstand aus dem vorletzten Jahr + Double rueckstandVorVorjahr = null; + Double zwanghafteWeitergabeVorjahr = null; + DBIterator jahresabschluesse = service + .createList(Jahresabschluss.class); + jahresabschluesse.addFilter("bis = ?", endeLetztesGJ); + if (jahresabschluesse != null && jahresabschluesse.hasNext()) + { + Jahresabschluss abschluss = jahresabschluesse.next(); + rueckstandVorVorjahr = abschluss.getVerwendungsrueckstand(); + zwanghafteWeitergabeVorjahr = abschluss.getZwanghafteWeitergabe(); + } + bezeichnung = BLANKS + + "- Darin enthaltener Rest des Verwendungsrückstand aus dem vorletzten GJ " + + vorletztesGJ; + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + rueckstandVorVorjahr, null, BLANK); + bezeichnung = BLANKS + + "- Darin enthaltene zwanghafte satzungsgemäße Weitergabe von Mitteln"; + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + zwanghafteWeitergabeVorjahr, null, BLANK); + + // Schritt 2: Mittel Zufluss + // Summe aller Zuflüsse bei Geldkonten und Anlagen (=Sachspenden) + sql = getSummenKontenSql(); + Double zufuehrung = (Double) service.execute(sql, + new Object[] { datumvon, datumbis, Kontoart.GELD.getKey(), + Kontoart.ANLAGE.getKey(), ArtBuchungsart.EINNAHME }, + rsd); + // Summe Zuflüsse durch Umbuchung + // Auszahlung aus Verbindlichkeiten z.B. Darlehen, + // Rückbuchung von zweckgebundenen Anlagen + sql = getSummenUmbuchungSql() + " AND buchung.betrag < 0"; + zufuehrung -= (Double) service.execute(sql, + new Object[] { datumvon, datumbis, Kontoart.SCHULDEN.getKey(), + Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), + ArtBuchungsart.UMBUCHUNG }, + rsd); + + bezeichnung = "Insgesamt im aktuellen GJ zugeflossene Mittel"; + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + zufuehrung, null, BLANK); + bezeichnung = BLANKS + + "Zu verwendende Mittel im aktuellen GJ und nächstem GJ"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, + zufuehrung, vorhandeneMittel, BLANK); + + // Leerzeile + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.LEERZEILE, null, + null, null, null, BLANK)); + + // Schritt 3: Mittel Abfluss + // Summe aller Abflüsse bei Geldkonten + sql = getSummenKontoSql(); + Double verwendung = (Double) service.execute(sql, new Object[] { datumvon, + datumbis, Kontoart.GELD.getKey(), ArtBuchungsart.AUSGABE }, rsd); + // Summe aller Abflüsse bei nicht nutzungsgebundenen Anlagen + sql = getSummenKontoZweckSql(); + verwendung += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey(), + Anlagenzweck.ZWECKFREMD_EINGESETZT.getKey(), + ArtBuchungsart.AUSGABE }, + rsd); + // Summe der Abflüsse bei Umbuchung + // Tilgung Verbindlichkeiten z.B. Darlehen, + // Erwerb zweckgebundener Anlagen + sql = getSummenUmbuchungSql() + " AND buchung.betrag > 0"; + verwendung -= (Double) service.execute(sql, + new Object[] { datumvon, datumbis, Kontoart.SCHULDEN.getKey(), + Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), + ArtBuchungsart.UMBUCHUNG }, + rsd); + + bezeichnung = "Im aktuellen GJ verwendete Mittel"; + addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, null, + verwendung, BLANK); + + // Rücklagen + Double summeZuRuecklagen = 0.0; + Double summeEntRuecklagen = 0.0; + sql = getSummenRuecklagenSql(); + for (int i = Kontoart.RUECKLAGE_ZWECK_GEBUNDEN + .getKey(); i <= Kontoart.RUECKLAGE_SONSTIG.getKey(); i++) + { + Double zuRuecklagen = (Double) service.execute(sql, + new Object[] { datumvon, datumbis, i, ArtBuchungsart.EINNAHME }, rsd); + summeZuRuecklagen += zuRuecklagen; + if (Math.abs(zuRuecklagen) > LIMIT + || !Einstellungen.getEinstellung().getUnterdrueckungOhneBuchung()) + { + bezeichnung = "Zuführung " + Kontoart.getByKey(i).getText(); + addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, + null, -zuRuecklagen, BLANK); + } + Double entRuecklagen = (Double) service.execute(sql, + new Object[] { datumvon, datumbis, i, ArtBuchungsart.AUSGABE }, rsd); + summeEntRuecklagen += entRuecklagen; + if (Math.abs(entRuecklagen) > LIMIT + || !Einstellungen.getEinstellung().getUnterdrueckungOhneBuchung()) + { + bezeichnung = "Entnahme " + Kontoart.getByKey(i).getText(); + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + -entRuecklagen, null, BLANK); + } + } + + bezeichnung = BLANKS + + "Insgesamt im aktuellen GJ verwendete Mittel"; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, + verwendung - summeZuRuecklagen, -summeEntRuecklagen, BLANK); + + // Leerzeile + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.LEERZEILE, null, + null, null, null, BLANK)); + + bezeichnung = "Verwendungsrückstand(+)/-überhang(-) zum Ende des aktuellen GJ " + + aktuellesGJ; + addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, + zufuehrung + vorhandeneMittel + verwendung - summeZuRuecklagen, + -summeEntRuecklagen, BLANK); + + // Berechnung der Mittelverwendung + rueckstandVorVorjahr = (rueckstandVorVorjahr == null) ? 0.0 + : rueckstandVorVorjahr; + zwanghafteWeitergabeVorjahr = (zwanghafteWeitergabeVorjahr == null) ? 0.0 + : zwanghafteWeitergabeVorjahr; + Double ausgaben = summeEntRuecklagen - verwendung; + Double rueckstandVorjahr = vorhandeneMittel - rueckstandVorVorjahr + - zwanghafteWeitergabeVorjahr; + zwanghafteWeitergabeNeu = 0.0; + rueckstandVorjahrNeu = 0.0; // Rest aus Rückstand Vorjahr + // Der Rückstand aus dem vorletzten Jahr muss ganz aufgebraucht werden, + // ansonsten unterliegt der Restbetrag der zwanghaften satzungsgemäßen + // Weitergabe von Mitteln + + if (rueckstandVorVorjahr > ausgaben) + { + zwanghafteWeitergabeNeu = rueckstandVorVorjahr - ausgaben; + rueckstandVorjahrNeu = rueckstandVorjahr; + } + else + { + rueckstandVorjahrNeu = Math + .max(vorhandeneMittel - ausgaben - zwanghafteWeitergabeVorjahr, 0); + } + bezeichnung = BLANKS + + "- Darin enthaltener Verwendungsrückstand aus dem letzten GJ " + + letztesGJ; + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + rueckstandVorjahrNeu, null, BLANK); + bezeichnung = BLANKS + + "- Darin enthaltene zwanghafte satzungsgemäße Weitergabe von Mitteln"; + addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, + zwanghafteWeitergabeNeu, null, BLANK); + + // Leerzeile am Ende wegen Scrollbar + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, null, + null, null, null, BLANK)); + return zeilen; + } + + public void setDatumvon(Date datumvon) + { + this.datumvon = datumvon; + updateDatum(); + } + + private String getSummenKontoSql() throws RemoteException + { + String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + + " AND konto.kontoart = ?" + + " AND buchung.buchungsart = buchungsart.id" + + " AND buchungsart.art = ?"; + return sql; + } + + private String getSummenKontenSql() throws RemoteException + { + String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + + " AND (konto.kontoart = ? OR konto.kontoart = ?)" + + " AND buchung.buchungsart = buchungsart.id" + + " AND buchungsart.art = ?"; + return sql; + } + + private String getSummenKontoZweckSql() throws RemoteException + { + String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + + " AND konto.kontoart = ? AND konto.zweck = ?" + + " AND buchung.buchungsart = buchungsart.id" + + " AND buchungsart.art = ?"; + return sql; + } + + private String getSummenUmbuchungSql() throws RemoteException + { + String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + + " AND (konto.kontoart = ? OR (konto.kontoart = ? AND konto.zweck = ?))" + + " AND buchung.buchungsart = buchungsart.id" + + " AND buchungsart.art = ?"; + return sql; + } + + private String getSummenRuecklagenSql() + { + return "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" + + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" + + " AND konto.kontoart = ?" + + " AND buchung.buchungsart = buchungsart.id" + + " AND buchungsart.art = ?"; + } + + public Double getZwanghafteWeitergabeNeu() + { + return zwanghafteWeitergabeNeu; + } + + public Double getRueckstandVorjahrNeu() + { + return rueckstandVorjahrNeu; + } +} diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java index 94be1e99a..53cb3c4e7 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java @@ -20,113 +20,24 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; -import java.util.Calendar; import java.util.Date; import java.util.HashMap; -import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.io.MittelverwendungZeile; -import de.jost_net.JVerein.keys.Anlagenzweck; -import de.jost_net.JVerein.keys.ArtBuchungsart; -import de.jost_net.JVerein.keys.Kontoart; -import de.jost_net.JVerein.rmi.Jahresabschluss; -import de.willuhn.datasource.rmi.DBIterator; -import de.willuhn.datasource.rmi.DBService; import de.willuhn.datasource.rmi.ResultSetExtractor; -import de.willuhn.jameica.gui.Part; -import de.willuhn.jameica.gui.formatter.CurrencyFormatter; -import de.willuhn.jameica.gui.parts.Column; -import de.willuhn.jameica.gui.parts.TablePart; -import de.willuhn.jameica.gui.parts.table.FeatureSummary; -import de.willuhn.util.ApplicationException; public class MittelverwendungList { - private TablePart flowList; + protected Date datumvon = null; - private Date datumvon = null; + protected Date datumbis = null; - private Date datumbis = null; + protected static double LIMIT = 0.005; - private int aktuellesGJ; + protected static String BLANK = " "; - private int letztesGJ; - - private int vorletztesGJ; - - private Date endeLetztesGJ; - - private Double zwanghafteWeitergabeNeu; - - private Double rueckstandVorjahrNeu; - - private static double LIMIT = 0.005; - - private static String NULL = " "; - - public MittelverwendungList(Date datumvon, Date datumbis) - { - this.datumvon = datumvon; - this.datumbis = datumbis; - updateDatum(); - } - - private void updateDatum() - { - Calendar cal = Calendar.getInstance(); - cal.setTime(datumvon); - aktuellesGJ = cal.get(Calendar.YEAR); - letztesGJ = aktuellesGJ - 1; - vorletztesGJ = aktuellesGJ - 2; - cal.add(Calendar.DAY_OF_MONTH, -1); - endeLetztesGJ = cal.getTime(); - } - - public Part getFlowList() throws ApplicationException - { - ArrayList zeilen = null; - try - { - zeilen = getInfo(); - - if (flowList == null) - { - flowList = new TablePart(zeilen, null) - { - @Override - protected void orderBy(int index) - { - return; - } - }; - flowList.addColumn("Nr", "position"); - flowList.addColumn("Mittel", "bezeichnung"); - flowList.addColumn("Betrag", "betrag", - new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, - Column.ALIGN_RIGHT); - flowList.addColumn("Summe", "summe", - new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, - Column.ALIGN_LEFT); - flowList.setRememberColWidths(true); - flowList.setRememberOrder(true); - flowList.removeFeature(FeatureSummary.class); - } - else - { - flowList.removeAll(); - for (MittelverwendungZeile sz : zeilen) - { - flowList.addItem(sz); - } - } - } - catch (RemoteException e) - { - throw new ApplicationException("Fehler aufgetreten" + e.getMessage()); - } - return flowList; - } + protected static String BLANKS = " "; ResultSetExtractor rsd = new ResultSetExtractor() { @@ -170,196 +81,9 @@ public Object extract(ResultSet rs) throws SQLException } }; - public ArrayList getInfo() throws RemoteException - { - DBService service = Einstellungen.getDBService(); - String sql; - ArrayList zeilen = new ArrayList<>(); - String bezeichnung = ""; - Integer pos = 1; - - // Schritt 1: Berechnung des Verwendungsrückstand(+)/-überhang(-) - // am Ende des letzten GJ - // Vorhandene Geldmittel zum Ende des letzten GJ sind zu verwenden - sql = "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" - + " WHERE anfangsbestand.datum = ?" - + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? "; - Double vorhandeneMittel = (Double) service.execute(sql, - new Object[] { datumvon, Kontoart.GELD.getKey() }, rsd); - - // Vorhandene zweckfremde Anlagen sind zu verwenden - sql = "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" - + " WHERE anfangsbestand.datum = ?" - + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? " - + " AND konto.zweck = ?"; - vorhandeneMittel += (Double) service.execute(sql, new Object[] { datumvon, - Kontoart.ANLAGE.getKey(), Anlagenzweck.ZWECKFREMD_EINGESETZT.getKey() }, - rsd); - - // Nicht der zeitnahen Mittelverwendung unterliegende Mittel (Rücklagen) - // zum Ende des letzten GJ können abgezogen werden - sql = "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" - + " WHERE anfangsbestand.datum = ?" - + " AND anfangsbestand.konto = konto.id" + " AND konto.kontoart >= ?" - + " AND konto.kontoart <= ?"; - vorhandeneMittel -= (Double) service.execute(sql, - new Object[] { datumvon, Kontoart.RUECKLAGE_ZWECK_GEBUNDEN.getKey(), - Kontoart.RUECKLAGE_SONSTIG.getKey() }, - rsd); - - bezeichnung = "Verwendungsrückstand(+)/-überhang(-) am Ende des letzten GJ " - + letztesGJ; - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - vorhandeneMittel, null, NULL); - - // Der in dem Rückstand enthaltene Rückstand aus dem vorletzten Jahr - Double rueckstandVorVorjahr = null; - Double zwanghafteWeitergabeVorjahr = null; - DBIterator jahresabschluesse = service - .createList(Jahresabschluss.class); - jahresabschluesse.addFilter("bis = ?", endeLetztesGJ); - if (jahresabschluesse != null && jahresabschluesse.hasNext()) - { - Jahresabschluss abschluss = jahresabschluesse.next(); - rueckstandVorVorjahr = abschluss.getVerwendungsrueckstand(); - zwanghafteWeitergabeVorjahr = abschluss.getZwanghafteWeitergabe(); - } - bezeichnung = " - Darin enthaltener Rest des Verwendungsrückstand aus dem vorletzten GJ " - + vorletztesGJ; - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - rueckstandVorVorjahr, null, NULL); - bezeichnung = " - Darin enthaltene zwanghafte satzungsgemäße Weitergabe von Mitteln aus dem letzten GJ " - + letztesGJ; - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - zwanghafteWeitergabeVorjahr, null, NULL); - - // Schritt 2: Mittel Zufluss - // Summe aller Zuflüsse bei Geldkonten und Anlagen (=Sachspenden) - sql = getSummenKontenSql(); - Double zufuehrung = (Double) service.execute(sql, - new Object[] { datumvon, datumbis, Kontoart.GELD.getKey(), - Kontoart.ANLAGE.getKey(), ArtBuchungsart.EINNAHME }, - rsd); - // Summe Zuflüsse durch Umbuchung - // Auszahlung aus Verbindlichkeiten z.B. Darlehen, - // Rückbuchung von zweckgebundenen Anlagen - sql = getSummenUmbuchungSql() + " AND buchung.betrag < 0"; - zufuehrung -= (Double) service.execute(sql, - new Object[] { datumvon, datumbis, Kontoart.SCHULDEN.getKey(), - Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), - ArtBuchungsart.UMBUCHUNG }, - rsd); - - bezeichnung = "Insgesamt im aktuellen GJ zugeflossene Mittel"; - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - zufuehrung, null, NULL); - bezeichnung = " Zu verwendende Mittel im aktuellen GJ und nächstem GJ"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - zufuehrung, vorhandeneMittel, NULL); - - // Schritt 3: Mittel Abfluss - // Summe aller Abflüsse bei Geldkonten - sql = getSummenKontoSql(); - Double verwendung = (Double) service.execute(sql, new Object[] { datumvon, - datumbis, Kontoart.GELD.getKey(), ArtBuchungsart.AUSGABE }, rsd); - // Summe aller Abflüsse bei nicht nutzungsgebundenen Anlagen - sql = getSummenKontoZweckSql(); - verwendung += (Double) service.execute(sql, - new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey(), - Anlagenzweck.ZWECKFREMD_EINGESETZT.getKey(), - ArtBuchungsart.AUSGABE }, - rsd); - // Summe der Abflüsse bei Umbuchung - // Tilgung Verbindlichkeiten z.B. Darlehen, - // Erwerb zweckgebundener Anlagen - sql = getSummenUmbuchungSql() + " AND buchung.betrag > 0"; - verwendung -= (Double) service.execute(sql, - new Object[] { datumvon, datumbis, Kontoart.SCHULDEN.getKey(), - Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), - ArtBuchungsart.UMBUCHUNG }, - rsd); - - bezeichnung = "Im GJ verwendete Mittel"; - addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, null, - verwendung, NULL); - - // Rücklagen - Double summeZuRuecklagen = 0.0; - Double summeEntRuecklagen = 0.0; - sql = getSummenRuecklagenSql(); - for (int i = Kontoart.RUECKLAGE_ZWECK_GEBUNDEN - .getKey(); i <= Kontoart.RUECKLAGE_SONSTIG.getKey(); i++) - { - Double zuRuecklagen = (Double) service.execute(sql, - new Object[] { datumvon, datumbis, i, ArtBuchungsart.EINNAHME }, rsd); - summeZuRuecklagen += zuRuecklagen; - if (Math.abs(zuRuecklagen) > LIMIT - || !Einstellungen.getEinstellung().getUnterdrueckungOhneBuchung()) - { - bezeichnung = "Zuführung " + Kontoart.getByKey(i).getText(); - addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, - null, -zuRuecklagen, NULL); - } - Double entRuecklagen = (Double) service.execute(sql, - new Object[] { datumvon, datumbis, i, ArtBuchungsart.AUSGABE }, rsd); - summeEntRuecklagen += entRuecklagen; - if (Math.abs(entRuecklagen) > LIMIT - || !Einstellungen.getEinstellung().getUnterdrueckungOhneBuchung()) - { - bezeichnung = "Entnahme " + Kontoart.getByKey(i).getText(); - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - -entRuecklagen, null, NULL); - } - } - - bezeichnung = " Verwendungsrückstand(+)/-überhang(-) zum Ende des aktuellen GJ " - + aktuellesGJ; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - zufuehrung + vorhandeneMittel + verwendung - summeZuRuecklagen, - -summeEntRuecklagen, NULL); - - // Berechnung der Mittelverwendung - rueckstandVorVorjahr = (rueckstandVorVorjahr == null) ? 0.0 - : rueckstandVorVorjahr; - zwanghafteWeitergabeVorjahr = (zwanghafteWeitergabeVorjahr == null) ? 0.0 - : zwanghafteWeitergabeVorjahr; - Double ausgaben = summeEntRuecklagen - verwendung; - Double rueckstandVorjahr = vorhandeneMittel - rueckstandVorVorjahr - - zwanghafteWeitergabeVorjahr; - zwanghafteWeitergabeNeu = 0.0; - rueckstandVorjahrNeu = 0.0; // Rest aus Rückstand Vorjahr - // Der Rückstand aus dem vorletzten Jahr muss ganz aufgebraucht werden, - // ansonsten unterliegt der Restbetrag der zwanghaften satzungsgemäßen - // Weitergabe von Mitteln - - if (rueckstandVorVorjahr > ausgaben) - { - zwanghafteWeitergabeNeu = rueckstandVorVorjahr - ausgaben; - rueckstandVorjahrNeu = rueckstandVorjahr; - } - else - { - rueckstandVorjahrNeu = Math - .max(vorhandeneMittel - ausgaben - zwanghafteWeitergabeVorjahr, 0); - } - bezeichnung = " - Darin enthaltener Verwendungsrückstand aus dem letzten GJ " - + letztesGJ; - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - rueckstandVorjahrNeu, null, NULL); - bezeichnung = " - Darin enthaltene zwanghafte satzungsgemäße Weitergabe von Mitteln"; - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, bezeichnung, - zwanghafteWeitergabeNeu, null, NULL); - - // Leerzeile am Ende wegen Scrollbar - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, null, - null, null, null, NULL)); - return zeilen; - } - public void setDatumvon(Date datumvon) { this.datumvon = datumvon; - updateDatum(); } public void setDatumbis(Date datumbis) @@ -367,56 +91,7 @@ public void setDatumbis(Date datumbis) this.datumbis = datumbis; } - private String getSummenKontoSql() throws RemoteException - { - String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" - + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" - + " AND konto.kontoart = ?" - + " AND buchung.buchungsart = buchungsart.id" - + " AND buchungsart.art = ?"; - return sql; - } - - private String getSummenKontenSql() throws RemoteException - { - String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" - + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" - + " AND (konto.kontoart = ? OR konto.kontoart = ?)" - + " AND buchung.buchungsart = buchungsart.id" - + " AND buchungsart.art = ?"; - return sql; - } - - private String getSummenKontoZweckSql() throws RemoteException - { - String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" - + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" - + " AND konto.kontoart = ? AND konto.zweck = ?" - + " AND buchung.buchungsart = buchungsart.id" - + " AND buchungsart.art = ?"; - return sql; - } - - private String getSummenUmbuchungSql() throws RemoteException - { - String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" - + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" - + " AND (konto.kontoart = ? OR (konto.kontoart = ? AND konto.zweck = ?))" - + " AND buchung.buchungsart = buchungsart.id" - + " AND buchungsart.art = ?"; - return sql; - } - - private String getSummenRuecklagenSql() - { - return "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" - + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" - + " AND konto.kontoart = ?" - + " AND buchung.buchungsart = buchungsart.id" - + " AND buchungsart.art = ?"; - } - - private void addZeile(ArrayList zeilen, int status, + protected void addZeile(ArrayList zeilen, int status, Integer position, String bezeichnung, Double einnahme, Double ausgabe, String kommentar) throws RemoteException { @@ -442,16 +117,11 @@ private void addZeile(ArrayList zeilen, int status, zeilen.add(new MittelverwendungZeile(status, position, bezeichnung, null, einnahme + ausgabe, kommentar)); break; + case MittelverwendungZeile.ART: + zeilen.add(new MittelverwendungZeile(status, position, null, null, + einnahme + ausgabe, kommentar, bezeichnung)); + break; } } - public Double getZwanghafteWeitergabeNeu() - { - return zwanghafteWeitergabeNeu; - } - - public Double getRueckstandVorjahrNeu() - { - return rueckstandVorjahrNeu; - } } diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java index 5fa9bb627..9ee7bd98e 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java @@ -17,8 +17,6 @@ package de.jost_net.JVerein.gui.parts; import java.rmi.RemoteException; -import java.sql.ResultSet; -import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -28,7 +26,6 @@ import de.jost_net.JVerein.keys.Anlagenzweck; import de.jost_net.JVerein.keys.Kontoart; import de.willuhn.datasource.rmi.DBService; -import de.willuhn.datasource.rmi.ResultSetExtractor; import de.willuhn.jameica.gui.Part; import de.willuhn.jameica.gui.formatter.CurrencyFormatter; import de.willuhn.jameica.gui.parts.Column; @@ -36,23 +33,11 @@ import de.willuhn.jameica.gui.parts.table.FeatureSummary; import de.willuhn.util.ApplicationException; -public class MittelverwendungSaldoList +public class MittelverwendungSaldoList extends MittelverwendungList { private TablePart saldoList; - private Date datumvon = null; - - private Date datumbis = null; - - private Double zwanghafteWeitergabeNeu; - - private Double rueckstandVorjahrNeu; - - private static double LIMIT = 0.005; - - private static String NULL = " "; - public MittelverwendungSaldoList(Date datumvon, Date datumbis) { this.datumvon = datumvon; @@ -76,8 +61,8 @@ protected void orderBy(int index) return; } }; - saldoList.addColumn("Nr", "position"); - saldoList.addColumn("Mittel", "bezeichnung"); + saldoList.addColumn("Art", "art"); + saldoList.addColumn("Konto", "bezeichnung"); saldoList.addColumn("Betrag", "betrag", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, Column.ALIGN_RIGHT); @@ -105,60 +90,16 @@ protected void orderBy(int index) return saldoList; } - 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)); - } - }; - - ResultSetExtractor rsmap = new ResultSetExtractor() - { - @Override - public Object extract(ResultSet rs) throws SQLException - { - HashMap map = new HashMap<>(); - while (rs.next()) - { - map.put(rs.getLong(1), rs.getString(2)); - } - return map; - } - }; - - ResultSetExtractor rsmapa = new ResultSetExtractor() - { - @Override - public Object extract(ResultSet rs) throws SQLException - { - HashMap map = new HashMap<>(); - while (rs.next()) - { - map.put(rs.getLong(1), - new String[] { rs.getString(2), rs.getString(3) }); - } - return map; - } - }; - - public ArrayList getInfo() - throws RemoteException + public ArrayList getInfo() throws RemoteException { DBService service = Einstellungen.getDBService(); String sql; ArrayList zeilen = new ArrayList<>(); - Integer pos = 1; Double summeVermoegen = 0.0; String bezeichnung = ""; // Anlagevermögen - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, - "Anlagenvermögen", null, null, NULL)); + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, + null, null, null, BLANK, "Anlagenvermögen")); if (Einstellungen.getEinstellung().getSummenAnlagenkonto()) { sql = getAnfangsbestandKontoartSql(); @@ -167,10 +108,17 @@ public ArrayList getInfo() sql = getSummenBetragKontoartSql(); anlagenStand += (Double) service.execute(sql, new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey() }, rsd); - bezeichnung = " Summe Anlagenkonten"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - anlagenStand, 0.0, NULL); - summeVermoegen += anlagenStand; + if (Math.abs(anlagenStand) > LIMIT) + { + bezeichnung = "Summe Anlagenvermögen"; + addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, + anlagenStand, 0.0, BLANK); + summeVermoegen += anlagenStand; + } + else + { + zeilen.remove(zeilen.size() - 1); + } } else { @@ -193,20 +141,27 @@ public ArrayList getInfo() { kommentar = kommentar.split("\n")[0]; } - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, + addZeile(zeilen, MittelverwendungZeile.EINNAHME, null, map0.get(kontoId)[0], kontoStand, null, kommentar); summeVermoegen += kontoStand; } } - bezeichnung = " Summe Anlagenkonten"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - summeVermoegen, 0.0, NULL); + if (Math.abs(summeVermoegen) > LIMIT) + { + bezeichnung = "Summe Anlagenvermögen"; + addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, + summeVermoegen, 0.0, BLANK); + } + else + { + zeilen.remove(zeilen.size() - 1); + } } // Geldkonten Double summeGeld = 0.0; - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, - "Geldvermögen", null, null, NULL)); + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, + null, null, BLANK, "Geldvermögen")); sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; @SuppressWarnings("unchecked") HashMap map1 = (HashMap) service @@ -226,24 +181,31 @@ public ArrayList getInfo() { kommentar = kommentar.split("\n")[0]; } - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, + addZeile(zeilen, MittelverwendungZeile.EINNAHME, null, map1.get(kontoId)[0], kontoStand, null, kommentar); summeGeld += kontoStand; } } - bezeichnung = " Summe Geldkonten"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, summeGeld, - 0.0, NULL); - summeVermoegen += summeGeld; + if (Math.abs(summeGeld) > LIMIT) + { + bezeichnung = "Summe Geldvermögen"; + addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, + summeGeld, 0.0, BLANK); + summeVermoegen += summeGeld; + } + else + { + zeilen.remove(zeilen.size() - 1); + } - // Verbindlichkeitskonten + // Fremdkapital Double summeSchulden = 0.0; - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, - "Darlehen, Kredite etc.", null, null, NULL)); + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, + null, null, BLANK, "Fremdkapital")); sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; @SuppressWarnings("unchecked") - HashMap map2 = (HashMap) service.execute( - sql, new Object[] { Kontoart.SCHULDEN.getKey() }, rsmapa); + HashMap map2 = (HashMap) service + .execute(sql, new Object[] { Kontoart.SCHULDEN.getKey() }, rsmapa); for (Long kontoId : map2.keySet()) { sql = getAnfangsbestandKontoSql(); @@ -259,47 +221,63 @@ public ArrayList getInfo() { kommentar = kommentar.split("\n")[0]; } - addZeile(zeilen, MittelverwendungZeile.EINNAHME, pos++, + addZeile(zeilen, MittelverwendungZeile.EINNAHME, null, map2.get(kontoId)[0], kontoStand, null, kommentar); summeSchulden += kontoStand; } } - bezeichnung = " Summe Darlehen, Kredite etc."; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - summeSchulden, 0.0, NULL); - summeVermoegen += summeSchulden; - bezeichnung = " Gesamtvermögen"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - summeVermoegen, 0.0, NULL); + if (Math.abs(summeSchulden) > LIMIT) + { + bezeichnung = "Summe Fremdkapital"; + addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, + summeSchulden, 0.0, BLANK); + summeVermoegen += summeSchulden; + } + else + { + zeilen.remove(zeilen.size() - 1); + } + + + bezeichnung = "Gesamtvermögen"; + addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, + summeVermoegen, 0.0, BLANK); // Leerzeile zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.LEERZEILE, null, - null, null, null, NULL)); + null, null, null, BLANK)); // Mittelverwendung - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, - "Mittelverwendung", null, null, NULL)); + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, + null, null, BLANK, "Mittelverwendung")); // Nutzungsgebundenes Anlagevermögen sql = getAnfangsbestandKontoartZweckSql(); - Double anlagenStand = (Double) service.execute(sql, new Object[] { datumvon, - Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), datumvon }, + Double anlagenStand = (Double) service.execute(sql, + new Object[] { datumvon, Kontoart.ANLAGE.getKey(), + Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), datumvon }, rsd); sql = getSummenBetragKontoartZweckSql(); anlagenStand += (Double) service.execute(sql, new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey() }, rsd); - bezeichnung = " Nutzungsgebundenes Anlagenvermögen"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, - -anlagenStand, NULL); - summeVermoegen -= anlagenStand; - // Verbindlichkeitskonten - bezeichnung = " Summe Darlehen, Kredite etc."; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, - -summeSchulden, NULL); - summeVermoegen -= summeSchulden; + if (Math.abs(anlagenStand) > LIMIT) + { + bezeichnung = "Nutzungsgebundenes Anlagenvermögen"; + addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, + -anlagenStand, BLANK); + summeVermoegen -= anlagenStand; + } + // Fremdkapital + if (Math.abs(summeSchulden) > LIMIT) + { + bezeichnung = "Fremdkapital"; + addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, + -summeSchulden, BLANK); + summeVermoegen -= summeSchulden; + } // Rücklagen, Vermögen nicht zugeordnet - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, pos++, - "Nicht zugeordnete Rücklagen", null, null, NULL)); + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, + null, null, BLANK, "Nicht zugeordnete Rücklagen")); Double summeRuecklagen = 0.0; sql = "SELECT id, bezeichnung, kommentar FROM konto" + " WHERE konto.kontoart >= ?" + " AND konto.kontoart <= ?" @@ -323,16 +301,16 @@ public ArrayList getInfo() { kommentar = kommentar.split("\n")[0]; } - addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, + addZeile(zeilen, MittelverwendungZeile.AUSGABE, null, map3.get(kontoId)[0], null, -ruecklagen, kommentar); summeRuecklagen += ruecklagen; } } if (Math.abs(summeRuecklagen) > LIMIT) { - bezeichnung = " Summe nicht zugeordneter Rücklagen"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, - -summeRuecklagen, NULL); + bezeichnung = "Summe nicht zugeordneter Rücklagen"; + addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, + -summeRuecklagen, BLANK); summeVermoegen -= summeRuecklagen; } else @@ -348,8 +326,8 @@ public ArrayList getInfo() .execute(sql, new Object[] {}, rsmap); for (Long buchungsklasseId : buchungsklassen.keySet()) { - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, - pos++, buchungsklassen.get(buchungsklasseId), null, null, NULL)); + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, + null, null, null, BLANK, buchungsklassen.get(buchungsklasseId))); summeRuecklagen = 0.0; sql = "SELECT id, bezeichnung, kommentar FROM konto" + " WHERE konto.kontoart >= ?" + " AND konto.kontoart <= ?" @@ -375,17 +353,17 @@ public ArrayList getInfo() { kommentar = kommentar.split("\n")[0]; } - addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, + addZeile(zeilen, MittelverwendungZeile.AUSGABE, null, map4.get(kontoId)[0], null, -ruecklagen, kommentar); summeRuecklagen += ruecklagen; } } if (Math.abs(summeRuecklagen) > LIMIT) { - bezeichnung = " Summe Rücklagen/Vermögen " + bezeichnung = "Summe Rücklagen/Vermögen " + buchungsklassen.get(buchungsklasseId); - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, - -summeRuecklagen, NULL); + addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, + -summeRuecklagen, BLANK); summeVermoegen -= summeRuecklagen; } else @@ -395,26 +373,16 @@ public ArrayList getInfo() } // Leerzeile zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.LEERZEILE, null, - null, null, null, NULL)); + null, null, null, BLANK)); bezeichnung = "Verwendungsrückstand(+)/-überhang(-) zum Ende des GJ"; - addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, 0.0, - summeVermoegen, NULL); + addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, + summeVermoegen, BLANK); // Leerzeile undefined - nicht drucken in PDF und CSV zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, null, - null, null, null, NULL)); + null, null, null, BLANK)); return zeilen; } - public void setDatumvon(Date datumvon) - { - this.datumvon = datumvon; - } - - public void setDatumbis(Date datumbis) - { - this.datumbis = datumbis; - } - private String getAnfangsbestandKontoartSql() throws RemoteException { return "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" @@ -460,42 +428,4 @@ private String getSummenBetragKontoSql() throws RemoteException + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = ?"; } - private void addZeile(ArrayList zeilen, int status, - Integer position, String bezeichnung, Double einnahme, Double ausgabe, - String kommentar) throws RemoteException - { - if (einnahme != null && einnahme == -0.0) - { - einnahme = 0.0; - } - if (ausgabe != null && ausgabe == -0.0) - { - ausgabe = 0.0; - } - switch (status) - { - case MittelverwendungZeile.EINNAHME: - zeilen.add(new MittelverwendungZeile(status, position, bezeichnung, - einnahme, null, kommentar)); - break; - case MittelverwendungZeile.AUSGABE: - zeilen.add(new MittelverwendungZeile(status, position, bezeichnung, - ausgabe, null, kommentar)); - break; - case MittelverwendungZeile.SUMME: - zeilen.add(new MittelverwendungZeile(status, position, bezeichnung, - null, einnahme + ausgabe, kommentar)); - break; - } - } - - public Double getZwanghafteWeitergabeNeu() - { - return zwanghafteWeitergabeNeu; - } - - public Double getRueckstandVorjahrNeu() - { - return rueckstandVorjahrNeu; - } } diff --git a/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java b/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java index 82edecd9a..a933f8d2f 100644 --- a/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java +++ b/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java @@ -17,11 +17,10 @@ package de.jost_net.JVerein.gui.view; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.TabFolder; -import org.eclipse.swt.widgets.TabItem; import de.jost_net.JVerein.gui.action.DokumentationAction; import de.jost_net.JVerein.gui.control.MittelverwendungControl; @@ -34,6 +33,9 @@ public class MittelverwendungListeView extends AbstractView { + // Statische Variable, die den zuletzt ausgewählten Tab speichert. + private static int tabindex = -1; + @Override public void bind() throws Exception { @@ -49,32 +51,37 @@ public void bind() throws Exception final TabFolder folder = new TabFolder(getParent(), SWT.NONE); folder.setLayoutData(new GridData(GridData.FILL_BOTH)); - folder.addSelectionListener(new SelectionAdapter() - { - - @Override - public void widgetSelected(SelectionEvent evt) - { - TabItem item = folder.getSelection()[0]; - if (item.getText().startsWith("Mittelverwendungsreport (Zufluss")) - { - control.setSelectedTab(MittelverwendungControl.FLOW_REPORT); - } - else if (item.getText().startsWith("Mittelverwendungsreport (Saldo")) - { - control.setSelectedTab(MittelverwendungControl.SALDO_REPORT); - } - } - }); // Die verschiedenen Tabs TabGroup mittelverwendungFlow = new TabGroup(folder, - "Mittelverwendungsreport (Zufluss basiert)", true, 1); + "Mittelverwendungsreport (Zufluss-basiert)", true, 1); control.getFlowTable().paint(mittelverwendungFlow.getComposite()); TabGroup mittelverwendungSaldo = new TabGroup(folder, - "Mittelverwendungsreport (Saldo basiert)", true, 1); + "Mittelverwendungsreport (Saldo-basiert)", true, 1); control.getSaldoTable().paint(mittelverwendungSaldo.getComposite()); + // Aktiver zuletzt ausgewählter Tab. + if (tabindex != -1) + { + folder.setSelection(tabindex); + control.setSelectedTab(tabindex); + } + folder.addSelectionListener(new SelectionListener() + { + @Override + public void widgetSelected(SelectionEvent evt) + { + tabindex = folder.getSelectionIndex(); + control.setSelectedTab(tabindex); + } + + @Override + public void widgetDefaultSelected(SelectionEvent arg0) + { + // + } + }); + ButtonArea buttons = new ButtonArea(); buttons.addButton("Hilfe", new DokumentationAction(), DokumentationUtil.MITTELVERWENDUNG, false, "question-circle.png"); diff --git a/src/de/jost_net/JVerein/io/MittelverwendungExportCSV.java b/src/de/jost_net/JVerein/io/MittelverwendungExportCSV.java index 720ba08c4..07e4b7d39 100644 --- a/src/de/jost_net/JVerein/io/MittelverwendungExportCSV.java +++ b/src/de/jost_net/JVerein/io/MittelverwendungExportCSV.java @@ -44,7 +44,7 @@ private static CellProcessor[] getProcessors() { final CellProcessor[] processors = new CellProcessor[] { - new ConvertNullTo(""), // Nr + new ConvertNullTo(""), // Nr oder Art new ConvertNullTo(""), // Bezeichnung new ConvertNullTo("", new FmtNumber(Einstellungen.DECIMALFORMAT)), // Betrag new ConvertNullTo("", new FmtNumber(Einstellungen.DECIMALFORMAT)), // Summe @@ -65,25 +65,39 @@ public MittelverwendungExportCSV(ArrayList zeile, final CellProcessor[] processors = getProcessors(); Map csvzeile = new HashMap<>(); - String[] header = {"Nr", "Bezeichnung", "Betrag", "Summe", "Kommentar"}; + String[] header = { "Nr", "Bezeichnung", "Betrag", "Summe", " " }; + if (tab == MittelverwendungControl.SALDO_REPORT) + { + String[] header2 = { "Art", "Konto", "Betrag", "Summe", "Kommentar" }; + header = header2; + } writer.writeHeader(header); String title = ""; switch (tab) { case MittelverwendungControl.FLOW_REPORT: - title = "Mittelverwendungsrechnung (Zufluss basiert)"; + title = "Mittelverwendungsrechnung (Zufluss-basiert)"; + csvzeile.put(header[1], title); break; case MittelverwendungControl.SALDO_REPORT: - title = "Mittelverwendungsrechnung (Saldo basiert)"; + title = "Mittelverwendungsrechnung (Saldo-basiert)"; + csvzeile.put(header[0], title); break; } - csvzeile.put(header[1], title); writer.write(csvzeile, header, processors); csvzeile = new HashMap<>(); String subtitle = "Geschäftsjahr " + new JVDateFormatTTMMJJJJ().format(datumvon) + " - " + new JVDateFormatTTMMJJJJ().format(datumbis); - csvzeile.put(header[1], subtitle); + switch (tab) + { + case MittelverwendungControl.FLOW_REPORT: + csvzeile.put(header[1], subtitle); + break; + case MittelverwendungControl.SALDO_REPORT: + csvzeile.put(header[0], subtitle); + break; + } writer.write(csvzeile, header, processors); csvzeile = new HashMap<>(); @@ -108,10 +122,14 @@ public MittelverwendungExportCSV(ArrayList zeile, csvzeile.put(header[1], (String) mvz.getAttribute("bezeichnung")); csvzeile.put(header[2],(Double) mvz.getAttribute("betrag")); csvzeile.put(header[3], (Double) mvz.getAttribute("summe")); - csvzeile.put(header[4], (String) mvz.getAttribute("kommentar")); + if (tab == MittelverwendungControl.SALDO_REPORT) + { + csvzeile.put(header[4], (String) mvz.getAttribute("kommentar")); + } break; } case MittelverwendungZeile.SUMME: + case MittelverwendungZeile.ART: { String position = ""; Integer pos = (Integer) mvz.getAttribute("position"); @@ -119,11 +137,22 @@ public MittelverwendungExportCSV(ArrayList zeile, { position = pos.toString(); } - csvzeile.put(header[0], position); + String art = (String) mvz.getAttribute("art"); + if (mvz.getStatus() == MittelverwendungZeile.ART) + { + csvzeile.put(header[0], art); + } + else + { + csvzeile.put(header[0], position); + } csvzeile.put(header[1], (String) mvz.getAttribute("bezeichnung")); csvzeile.put(header[2], (Double) mvz.getAttribute("betrag")); csvzeile.put(header[3], (Double) mvz.getAttribute("summe")); - csvzeile.put(header[4], (String) mvz.getAttribute("kommentar")); + if (tab == MittelverwendungControl.SALDO_REPORT) + { + csvzeile.put(header[4], (String) mvz.getAttribute("kommentar")); + } break; } case MittelverwendungZeile.LEERZEILE: diff --git a/src/de/jost_net/JVerein/io/MittelverwendungExportPDF.java b/src/de/jost_net/JVerein/io/MittelverwendungExportPDF.java index 4bab6ac92..af2cb6e5f 100644 --- a/src/de/jost_net/JVerein/io/MittelverwendungExportPDF.java +++ b/src/de/jost_net/JVerein/io/MittelverwendungExportPDF.java @@ -48,10 +48,10 @@ public MittelverwendungExportPDF(ArrayList zeile, switch (tab) { case MittelverwendungControl.FLOW_REPORT: - title = "Mittelverwendungsrechnung (Zufluss basiert)"; + title = "Mittelverwendungsrechnung (Zufluss-basiert)"; break; case MittelverwendungControl.SALDO_REPORT: - title = "Mittelverwendungsrechnung (Saldo basiert)"; + title = "Mittelverwendungsrechnung (Saldo-basiert)"; break; } FileOutputStream fos = new FileOutputStream(file); @@ -59,7 +59,7 @@ public MittelverwendungExportPDF(ArrayList zeile, + " - " + new JVDateFormatTTMMJJJJ().format(datumbis); Reporter reporter = new Reporter(fos, title, subtitle, zeile.size()); - makeHeader(reporter); + makeHeader(reporter, tab); for (MittelverwendungZeile mvz : zeile) { @@ -73,12 +73,15 @@ public MittelverwendungExportPDF(ArrayList zeile, { position = pos.toString(); } - reporter.addColumn(position, Element.ALIGN_LEFT); + reporter.addColumn(position, Element.ALIGN_RIGHT); reporter.addColumn((String) mvz.getAttribute("bezeichnung"), Element.ALIGN_LEFT); - reporter.addColumn(" ", Element.ALIGN_LEFT); - reporter.addColumn(" ", Element.ALIGN_LEFT); - reporter.addColumn(" ", Element.ALIGN_LEFT); + reporter.addColumn(" ", Element.ALIGN_LEFT); + reporter.addColumn(" ", Element.ALIGN_LEFT); + if (tab == MittelverwendungControl.SALDO_REPORT) + { + reporter.addColumn(" ", Element.ALIGN_LEFT); + } break; } case MittelverwendungZeile.EINNAHME: @@ -90,16 +93,21 @@ public MittelverwendungExportPDF(ArrayList zeile, { position = pos.toString(); } - reporter.addColumn(position, Element.ALIGN_LEFT); - reporter.addColumn((String) mvz.getAttribute("bezeichnung"), + reporter.addColumn(position, Element.ALIGN_RIGHT); + reporter.addColumn( + (String) mvz.getAttribute("bezeichnung"), Element.ALIGN_LEFT); reporter.addColumn((Double) mvz.getAttribute("betrag")); - reporter.addColumn(" ", Element.ALIGN_LEFT); - reporter.addColumn((String) mvz.getAttribute("kommentar"), - Element.ALIGN_LEFT); + reporter.addColumn(" ", Element.ALIGN_LEFT); + if (tab == MittelverwendungControl.SALDO_REPORT) + { + reporter.addColumn((String) mvz.getAttribute("kommentar"), + Element.ALIGN_LEFT); + } break; } case MittelverwendungZeile.SUMME: + case MittelverwendungZeile.ART: { String position = " "; Integer pos = (Integer) mvz.getAttribute("position"); @@ -107,30 +115,48 @@ public MittelverwendungExportPDF(ArrayList zeile, { position = pos.toString(); } - reporter.addColumn(position, Element.ALIGN_LEFT); + String art = (String) mvz.getAttribute("art"); + if (mvz.getStatus() == MittelverwendungZeile.ART) + { + reporter.addColumn(art, Element.ALIGN_LEFT); + } + else + { + reporter.addColumn(position, Element.ALIGN_RIGHT); + } PdfPCell cell = null; cell = new PdfPCell(new Phrase(new Chunk( reporter.notNull((String) mvz.getAttribute("bezeichnung")), Reporter.getFreeSansBold(8)))); cell.setHorizontalAlignment(Element.ALIGN_RIGHT); reporter.addColumn(cell); - reporter.addColumn(" ", Element.ALIGN_LEFT); + reporter.addColumn(" ", Element.ALIGN_LEFT); Font f = null; Double value = (Double) mvz.getAttribute("summe"); - if (value >= 0) + if (value != null) { - f = Reporter.getFreeSansBold(8, BaseColor.BLACK); + if (value >= 0) + { + f = Reporter.getFreeSansBold(8, BaseColor.BLACK); + } + else + { + f = Reporter.getFreeSansBold(8, BaseColor.RED); + } + cell = new PdfPCell( + new Phrase(Einstellungen.DECIMALFORMAT.format(value), f)); + cell.setHorizontalAlignment(Element.ALIGN_RIGHT); + reporter.addColumn(cell); } else { - f = Reporter.getFreeSansBold(8, BaseColor.RED); + reporter.addColumn(" ", Element.ALIGN_RIGHT); + } + if (tab == MittelverwendungControl.SALDO_REPORT) + { + reporter.addColumn((String) mvz.getAttribute("kommentar"), + Element.ALIGN_LEFT); } - cell = new PdfPCell( - new Phrase(Einstellungen.DECIMALFORMAT.format(value), f)); - cell.setHorizontalAlignment(Element.ALIGN_RIGHT); - reporter.addColumn(cell); - reporter.addColumn((String) mvz.getAttribute("kommentar"), - Element.ALIGN_LEFT); break; } } @@ -148,18 +174,34 @@ public MittelverwendungExportPDF(ArrayList zeile, } } - private void makeHeader(Reporter reporter) throws DocumentException + private void makeHeader(Reporter reporter, int tab) throws DocumentException { - reporter.addHeaderColumn("Nr", Element.ALIGN_CENTER, 5, - BaseColor.LIGHT_GRAY); - reporter.addHeaderColumn("Mittel", Element.ALIGN_CENTER, 49, - BaseColor.LIGHT_GRAY); - reporter.addHeaderColumn("Betrag", Element.ALIGN_CENTER, 13, - BaseColor.LIGHT_GRAY); - reporter.addHeaderColumn("Summe", Element.ALIGN_CENTER, 13, - BaseColor.LIGHT_GRAY); - reporter.addHeaderColumn("Kommentar", Element.ALIGN_CENTER, 20, - BaseColor.LIGHT_GRAY); - reporter.createHeader(); + switch (tab) + { + case MittelverwendungControl.FLOW_REPORT: + reporter.addHeaderColumn("Nr", Element.ALIGN_CENTER, 5, + BaseColor.LIGHT_GRAY); + reporter.addHeaderColumn("Mittel", Element.ALIGN_CENTER, 69, + BaseColor.LIGHT_GRAY); + reporter.addHeaderColumn("Betrag", Element.ALIGN_CENTER, 13, + BaseColor.LIGHT_GRAY); + reporter.addHeaderColumn("Summe", Element.ALIGN_CENTER, 13, + BaseColor.LIGHT_GRAY); + reporter.createHeader(); + break; + case MittelverwendungControl.SALDO_REPORT: + reporter.addHeaderColumn("Art", Element.ALIGN_CENTER, 25, + BaseColor.LIGHT_GRAY); + reporter.addHeaderColumn("Konto", Element.ALIGN_CENTER, 27, + BaseColor.LIGHT_GRAY); + reporter.addHeaderColumn("Betrag", Element.ALIGN_CENTER, 13, + BaseColor.LIGHT_GRAY); + reporter.addHeaderColumn("Summe", Element.ALIGN_CENTER, 13, + BaseColor.LIGHT_GRAY); + reporter.addHeaderColumn("Kommentar", Element.ALIGN_CENTER, 20, + BaseColor.LIGHT_GRAY); + reporter.createHeader(); + break; + } } } diff --git a/src/de/jost_net/JVerein/io/MittelverwendungZeile.java b/src/de/jost_net/JVerein/io/MittelverwendungZeile.java index 511449761..1b750b141 100644 --- a/src/de/jost_net/JVerein/io/MittelverwendungZeile.java +++ b/src/de/jost_net/JVerein/io/MittelverwendungZeile.java @@ -27,6 +27,8 @@ public class MittelverwendungZeile implements GenericObject { private Integer position; + private String art = ""; + private String bezeichnung = ""; private Double betrag = null; @@ -45,6 +47,8 @@ public class MittelverwendungZeile implements GenericObject public static final int LEERZEILE = 4; + public static final int ART = 5; + private int status = UNDEFINED; public MittelverwendungZeile(int status, Integer position, @@ -58,6 +62,18 @@ public MittelverwendungZeile(int status, Integer position, this.kommentar = kommentar; } + public MittelverwendungZeile(int status, Integer position, String bezeichnung, + Double betrag, Double summe, String kommentar, String art) + { + this.position = position; + this.status = status; + this.art = art; + this.bezeichnung = bezeichnung; + this.betrag = betrag; + this.summe = summe; + this.kommentar = kommentar; + } + public int getStatus() { return status; @@ -66,7 +82,11 @@ public int getStatus() @Override public Object getAttribute(String arg0) throws RemoteException { - if (arg0.equals("bezeichnung")) + if (arg0.equals("art")) + { + return art; + } + else if (arg0.equals("bezeichnung")) { return bezeichnung; } diff --git a/src/de/jost_net/JVerein/keys/Kontoart.java b/src/de/jost_net/JVerein/keys/Kontoart.java index 8f69de602..b9dbf0220 100644 --- a/src/de/jost_net/JVerein/keys/Kontoart.java +++ b/src/de/jost_net/JVerein/keys/Kontoart.java @@ -24,7 +24,7 @@ public enum Kontoart // Ids über dem Limit werden in beiden Salden ignoriert. GELD(1, "Geldkonto"), ANLAGE(2, "Anlagenkonto"), - SCHULDEN(3, "Darlehen, Kredite etc."), + SCHULDEN(3, "Fremdkapital"), LIMIT(100, "-- Limit --"), RUECKLAGE_ZWECK_GEBUNDEN(101, "Zweckgebundene Rücklage nach § 62 Abs. 1 Nr. 1 AO"), RUECKLAGE_BETRIEBSMITTEL(102, "Betriebsmittelrücklage nach § 62 Abs. 1 Nr. 1 AO"), diff --git a/src/de/jost_net/JVerein/server/KontoImpl.java b/src/de/jost_net/JVerein/server/KontoImpl.java index ee79b807c..b832ecf7a 100644 --- a/src/de/jost_net/JVerein/server/KontoImpl.java +++ b/src/de/jost_net/JVerein/server/KontoImpl.java @@ -122,7 +122,7 @@ private void plausi() throws ApplicationException } if (getAfaart() == null) { - throw new ApplicationException("Bitte Afa Buchungsart eingeben"); + throw new ApplicationException("Bitte AfA Buchungsart eingeben"); } if (getBuchungsklasse() == null) { From 02cd5f8901e7813a521db415aa61b40b6830a822 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Mon, 27 Jan 2025 10:47:32 +0100 Subject: [PATCH 18/38] Bug fix --- .../gui/control/JahresabschlussControl.java | 16 +++++++++--- .../gui/parts/MittelverwendungFlowList.java | 25 ++++++++----------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java index 2d73e3958..a93564282 100644 --- a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java +++ b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java @@ -305,10 +305,22 @@ public void handleStore() Jahresabschluss ja = getJahresabschluss(); if (ja.isNewObject()) { + if (afaberechnung != null && (Boolean) getAfaberechnung().getValue()) + { + new AfaUtil(new Geschaeftsjahr(ja.getVon()), ja); + } ja.setVon((Date) getVon().getValue()); ja.setBis((Date) getBis().getValue()); ja.setDatum((Date) getDatum().getValue()); ja.setName((String) getName().getValue()); + if (Einstellungen.getEinstellung().getMittelverwendung()) + { + MittelverwendungFlowList list = new MittelverwendungFlowList( + ja.getVon(), ja.getBis()); + list.getInfo(); + ja.setVerwendungsrueckstand(list.getRueckstandVorjahrNeu()); + ja.setZwanghafteWeitergabe(list.getZwanghafteWeitergabeNeu()); + } ja.store(); if ((Boolean) getAnfangsbestaende().getValue()) { @@ -331,10 +343,6 @@ public void handleStore() } } } - if (afaberechnung != null && (Boolean) getAfaberechnung().getValue()) - { - new AfaUtil(new Geschaeftsjahr(ja.getVon()), ja); - } } else { diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java index 04fb0b25f..ca985e33f 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java @@ -182,13 +182,18 @@ public ArrayList getInfo() throws RemoteException // Schritt 2: Mittel Zufluss // Summe aller Zuflüsse bei Geldkonten und Anlagen (=Sachspenden) - sql = getSummenKontenSql(); - Double zufuehrung = (Double) service.execute(sql, - new Object[] { datumvon, datumbis, Kontoart.GELD.getKey(), - Kontoart.ANLAGE.getKey(), ArtBuchungsart.EINNAHME }, + sql = getSummenKontoSql(); + Double zufuehrung = (Double) service.execute(sql, new Object[] { datumvon, + datumbis, Kontoart.GELD.getKey(), ArtBuchungsart.EINNAHME }, rsd); + // Summe aller Abflüsse bei nicht nutzungsgebundenen Anlagen + sql = getSummenKontoZweckSql(); + zufuehrung += (Double) service.execute(sql, + new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey(), + Anlagenzweck.ZWECKFREMD_EINGESETZT.getKey(), + ArtBuchungsart.EINNAHME }, rsd); // Summe Zuflüsse durch Umbuchung - // Auszahlung aus Verbindlichkeiten z.B. Darlehen, + // Auszahlung aus Fremdkapital z.B. Darlehen, // Rückbuchung von zweckgebundenen Anlagen sql = getSummenUmbuchungSql() + " AND buchung.betrag < 0"; zufuehrung -= (Double) service.execute(sql, @@ -335,16 +340,6 @@ private String getSummenKontoSql() throws RemoteException return sql; } - private String getSummenKontenSql() throws RemoteException - { - String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" - + " WHERE datum >= ? AND datum <= ?" + " AND buchung.konto = konto.id" - + " AND (konto.kontoart = ? OR konto.kontoart = ?)" - + " AND buchung.buchungsart = buchungsart.id" - + " AND buchungsart.art = ?"; - return sql; - } - private String getSummenKontoZweckSql() throws RemoteException { String sql = "SELECT sum(buchung.betrag) FROM buchung, konto, buchungsart" From 0ae43bc181e505b6d72e87a7b511fcd61e48bc47 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Mon, 27 Jan 2025 15:21:06 +0100 Subject: [PATCH 19/38] Update JahresabschlussControl.java --- .../JVerein/gui/control/JahresabschlussControl.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java index a93564282..b6093425d 100644 --- a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java +++ b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java @@ -305,14 +305,15 @@ public void handleStore() Jahresabschluss ja = getJahresabschluss(); if (ja.isNewObject()) { - if (afaberechnung != null && (Boolean) getAfaberechnung().getValue()) - { - new AfaUtil(new Geschaeftsjahr(ja.getVon()), ja); - } ja.setVon((Date) getVon().getValue()); ja.setBis((Date) getBis().getValue()); ja.setDatum((Date) getDatum().getValue()); ja.setName((String) getName().getValue()); + ja.store(); + if (afaberechnung != null && (Boolean) getAfaberechnung().getValue()) + { + new AfaUtil(new Geschaeftsjahr(ja.getVon()), ja); + } if (Einstellungen.getEinstellung().getMittelverwendung()) { MittelverwendungFlowList list = new MittelverwendungFlowList( @@ -320,8 +321,8 @@ public void handleStore() list.getInfo(); ja.setVerwendungsrueckstand(list.getRueckstandVorjahrNeu()); ja.setZwanghafteWeitergabe(list.getZwanghafteWeitergabeNeu()); + ja.store(); } - ja.store(); if ((Boolean) getAnfangsbestaende().getValue()) { KontensaldoList jsl = new KontensaldoList(null, From ca8ae8466762d57cf6b2c8902d4891f5aa757d17 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Tue, 28 Jan 2025 10:40:13 +0100 Subject: [PATCH 20/38] Fix Kommentare --- .../gui/parts/MittelverwendungSaldoList.java | 138 ++++++++++-------- .../JVerein/gui/view/JahresabschlussView.java | 2 +- 2 files changed, 81 insertions(+), 59 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java index 9ee7bd98e..bb25fe468 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java @@ -97,20 +97,22 @@ public ArrayList getInfo() throws RemoteException ArrayList zeilen = new ArrayList<>(); Double summeVermoegen = 0.0; String bezeichnung = ""; + boolean nichtUnterdruecken = !Einstellungen.getEinstellung() + .getUnterdrueckungOhneBuchung(); // Anlagevermögen - zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, - null, null, null, BLANK, "Anlagenvermögen")); + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, + null, null, BLANK, "Anlagevermögen")); if (Einstellungen.getEinstellung().getSummenAnlagenkonto()) { sql = getAnfangsbestandKontoartSql(); - Double anlagenStand = (Double) service.execute(sql, - new Object[] { datumvon, Kontoart.ANLAGE.getKey(), datumvon }, rsd); + Double anlagenStand = (Double) service.execute(sql, new Object[] { + datumvon, Kontoart.ANLAGE.getKey(), datumvon, datumbis }, rsd); sql = getSummenBetragKontoartSql(); anlagenStand += (Double) service.execute(sql, new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey() }, rsd); - if (Math.abs(anlagenStand) > LIMIT) + if (Math.abs(anlagenStand) > LIMIT || nichtUnterdruecken) { - bezeichnung = "Summe Anlagenvermögen"; + bezeichnung = "Summe Anlagevermögen"; addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, anlagenStand, 0.0, BLANK); summeVermoegen += anlagenStand; @@ -122,19 +124,20 @@ public ArrayList getInfo() throws RemoteException } else { - sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; + sql = getAktiveKontenMapSql(); @SuppressWarnings("unchecked") - HashMap map0 = (HashMap) service - .execute(sql, new Object[] { Kontoart.ANLAGE.getKey() }, rsmapa); + HashMap map0 = (HashMap) service.execute( + sql, new Object[] { Kontoart.ANLAGE.getKey(), datumvon, datumbis }, + rsmapa); for (Long kontoId : map0.keySet()) { sql = getAnfangsbestandKontoSql(); Double kontoStand = (Double) service.execute(sql, - new Object[] { datumvon, kontoId, datumvon }, rsd); + new Object[] { datumvon, kontoId }, rsd); sql = getSummenBetragKontoSql(); kontoStand += (Double) service.execute(sql, new Object[] { datumvon, datumbis, kontoId }, rsd); - if (Math.abs(kontoStand) > LIMIT) + if (Math.abs(kontoStand) > LIMIT || nichtUnterdruecken) { String kommentar = map0.get(kontoId)[1]; if (kommentar != null && !kommentar.isEmpty()) @@ -146,9 +149,9 @@ public ArrayList getInfo() throws RemoteException summeVermoegen += kontoStand; } } - if (Math.abs(summeVermoegen) > LIMIT) + if (Math.abs(summeVermoegen) > LIMIT || nichtUnterdruecken) { - bezeichnung = "Summe Anlagenvermögen"; + bezeichnung = "Summe Anlagevermögen"; addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, summeVermoegen, 0.0, BLANK); } @@ -162,19 +165,20 @@ public ArrayList getInfo() throws RemoteException Double summeGeld = 0.0; zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, null, null, BLANK, "Geldvermögen")); - sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; + sql = getAktiveKontenMapSql(); @SuppressWarnings("unchecked") - HashMap map1 = (HashMap) service - .execute(sql, new Object[] { Kontoart.GELD.getKey() }, rsmapa); + HashMap map1 = (HashMap) service.execute( + sql, new Object[] { Kontoart.GELD.getKey(), datumvon, datumbis }, + rsmapa); for (Long kontoId : map1.keySet()) { sql = getAnfangsbestandKontoSql(); Double kontoStand = (Double) service.execute(sql, - new Object[] { datumvon, kontoId, datumvon }, rsd); + new Object[] { datumvon, kontoId }, rsd); sql = getSummenBetragKontoSql(); kontoStand += (Double) service.execute(sql, new Object[] { datumvon, datumbis, kontoId }, rsd); - if (Math.abs(kontoStand) > LIMIT) + if (Math.abs(kontoStand) > LIMIT || nichtUnterdruecken) { String kommentar = map1.get(kontoId)[1]; if (kommentar != null && !kommentar.isEmpty()) @@ -186,11 +190,11 @@ public ArrayList getInfo() throws RemoteException summeGeld += kontoStand; } } - if (Math.abs(summeGeld) > LIMIT) + if (Math.abs(summeGeld) > LIMIT || nichtUnterdruecken) { bezeichnung = "Summe Geldvermögen"; - addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, - summeGeld, 0.0, BLANK); + addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, summeGeld, + 0.0, BLANK); summeVermoegen += summeGeld; } else @@ -202,19 +206,20 @@ public ArrayList getInfo() throws RemoteException Double summeSchulden = 0.0; zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, null, null, BLANK, "Fremdkapital")); - sql = "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?"; + sql = getAktiveKontenMapSql(); @SuppressWarnings("unchecked") - HashMap map2 = (HashMap) service - .execute(sql, new Object[] { Kontoart.SCHULDEN.getKey() }, rsmapa); + HashMap map2 = (HashMap) service.execute( + sql, new Object[] { Kontoart.SCHULDEN.getKey(), datumvon, datumbis }, + rsmapa); for (Long kontoId : map2.keySet()) { sql = getAnfangsbestandKontoSql(); Double kontoStand = (Double) service.execute(sql, - new Object[] { datumvon, kontoId, datumvon }, rsd); + new Object[] { datumvon, kontoId }, rsd); sql = getSummenBetragKontoSql(); kontoStand += (Double) service.execute(sql, new Object[] { datumvon, datumbis, kontoId }, rsd); - if (Math.abs(kontoStand) > LIMIT) + if (Math.abs(kontoStand) > LIMIT || nichtUnterdruecken) { String kommentar = map2.get(kontoId)[1]; if (kommentar != null && !kommentar.isEmpty()) @@ -226,7 +231,7 @@ public ArrayList getInfo() throws RemoteException summeSchulden += kontoStand; } } - if (Math.abs(summeSchulden) > LIMIT) + if (Math.abs(summeSchulden) > LIMIT || nichtUnterdruecken) { bezeichnung = "Summe Fremdkapital"; addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, @@ -238,7 +243,6 @@ public ArrayList getInfo() throws RemoteException zeilen.remove(zeilen.size() - 1); } - bezeichnung = "Gesamtvermögen"; addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, summeVermoegen, 0.0, BLANK); @@ -251,24 +255,25 @@ public ArrayList getInfo() throws RemoteException null, null, BLANK, "Mittelverwendung")); // Nutzungsgebundenes Anlagevermögen sql = getAnfangsbestandKontoartZweckSql(); - Double anlagenStand = (Double) service.execute(sql, - new Object[] { datumvon, Kontoart.ANLAGE.getKey(), - Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), datumvon }, - rsd); + Double anlagenStand = (Double) service + .execute(sql, + new Object[] { datumvon, Kontoart.ANLAGE.getKey(), + Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), datumvon, datumbis }, + rsd); sql = getSummenBetragKontoartZweckSql(); anlagenStand += (Double) service.execute(sql, new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey() }, rsd); - if (Math.abs(anlagenStand) > LIMIT) + if (Math.abs(anlagenStand) > LIMIT || nichtUnterdruecken) { - bezeichnung = "Nutzungsgebundenes Anlagenvermögen"; + bezeichnung = "Nutzungsgebundenes Anlagevermögen"; addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, -anlagenStand, BLANK); summeVermoegen -= anlagenStand; } // Fremdkapital - if (Math.abs(summeSchulden) > LIMIT) + if (Math.abs(summeSchulden) > LIMIT || nichtUnterdruecken) { bezeichnung = "Fremdkapital"; addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, @@ -279,22 +284,22 @@ public ArrayList getInfo() throws RemoteException zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, null, null, BLANK, "Nicht zugeordnete Rücklagen")); Double summeRuecklagen = 0.0; - sql = "SELECT id, bezeichnung, kommentar FROM konto" - + " WHERE konto.kontoart >= ?" + " AND konto.kontoart <= ?" - + " AND konto.anlagenklasse IS NULL"; + sql = getAktiveKontenRangeMapSql() + " AND konto.anlagenklasse IS NULL"; @SuppressWarnings("unchecked") HashMap map3 = (HashMap) service - .execute(sql, new Object[] { Kontoart.RUECKLAGE_ZWECK_GEBUNDEN.getKey(), - Kontoart.RUECKLAGE_SONSTIG.getKey() }, rsmapa); + .execute(sql, + new Object[] { Kontoart.RUECKLAGE_ZWECK_GEBUNDEN.getKey(), + Kontoart.RUECKLAGE_SONSTIG.getKey(), datumvon, datumbis }, + rsmapa); for (Long kontoId : map3.keySet()) { sql = getAnfangsbestandKontoSql(); Double ruecklagen = (Double) service.execute(sql, - new Object[] { datumvon, kontoId, datumvon }, rsd); + new Object[] { datumvon, kontoId }, rsd); sql = getSummenBetragKontoSql(); ruecklagen += (Double) service.execute(sql, new Object[] { datumvon, datumbis, kontoId }, rsd); - if (Math.abs(ruecklagen) > LIMIT) + if (Math.abs(ruecklagen) > LIMIT || nichtUnterdruecken) { String kommentar = map3.get(kontoId)[1]; if (kommentar != null && !kommentar.isEmpty()) @@ -306,7 +311,7 @@ public ArrayList getInfo() throws RemoteException summeRuecklagen += ruecklagen; } } - if (Math.abs(summeRuecklagen) > LIMIT) + if (Math.abs(summeRuecklagen) > LIMIT || nichtUnterdruecken) { bezeichnung = "Summe nicht zugeordneter Rücklagen"; addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, @@ -329,24 +334,23 @@ public ArrayList getInfo() throws RemoteException zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, null, null, BLANK, buchungsklassen.get(buchungsklasseId))); summeRuecklagen = 0.0; - sql = "SELECT id, bezeichnung, kommentar FROM konto" - + " WHERE konto.kontoart >= ?" + " AND konto.kontoart <= ?" - + " AND konto.anlagenklasse = ?"; + sql = getAktiveKontenRangeMapSql() + " AND konto.anlagenklasse = ?"; @SuppressWarnings("unchecked") - HashMap map4 = (HashMap) service - .execute(sql, - new Object[] { Kontoart.RUECKLAGE_ZWECK_GEBUNDEN.getKey(), - Kontoart.RUECKLAGE_SONSTIG.getKey(), buchungsklasseId }, - rsmapa); + HashMap map4 = (HashMap) service.execute( + sql, + new Object[] { Kontoart.RUECKLAGE_ZWECK_GEBUNDEN.getKey(), + Kontoart.RUECKLAGE_SONSTIG.getKey(), datumvon, datumbis, + buchungsklasseId }, + rsmapa); for (Long kontoId : map4.keySet()) { sql = getAnfangsbestandKontoSql(); Double ruecklagen = (Double) service.execute(sql, - new Object[] { datumvon, kontoId, datumvon }, rsd); + new Object[] { datumvon, kontoId }, rsd); sql = getSummenBetragKontoSql(); ruecklagen += (Double) service.execute(sql, new Object[] { datumvon, datumbis, kontoId }, rsd); - if (Math.abs(ruecklagen) > LIMIT) + if (Math.abs(ruecklagen) > LIMIT || nichtUnterdruecken) { String kommentar = map4.get(kontoId)[1]; if (kommentar != null && !kommentar.isEmpty()) @@ -358,7 +362,7 @@ public ArrayList getInfo() throws RemoteException summeRuecklagen += ruecklagen; } } - if (Math.abs(summeRuecklagen) > LIMIT) + if (Math.abs(summeRuecklagen) > LIMIT || nichtUnterdruecken) { bezeichnung = "Summe Rücklagen/Vermögen " + buchungsklassen.get(buchungsklasseId); @@ -383,12 +387,30 @@ public ArrayList getInfo() throws RemoteException return zeilen; } + // Parameter Kontoart, datumvon, datumbis + private String getAktiveKontenMapSql() throws RemoteException + { + return "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart = ?" + + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)" + + " AND (konto.eroeffnung IS NULL OR konto.eroeffnung <= ?)"; + } + + // Parameter Kontoart von, Kontoart bis, datumvon, datumbis + private String getAktiveKontenRangeMapSql() throws RemoteException + { + return "SELECT id, bezeichnung, kommentar FROM konto WHERE konto.kontoart >= ?" + + " AND konto.kontoart <= ?" + + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)" + + " AND (konto.eroeffnung IS NULL OR konto.eroeffnung <= ?)"; + } + private String getAnfangsbestandKontoartSql() throws RemoteException { return "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + " WHERE anfangsbestand.datum = ?" + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? " - + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)"; + + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)" + + " AND (konto.eroeffnung IS NULL OR konto.eroeffnung <= ?)"; } private String getAnfangsbestandKontoartZweckSql() throws RemoteException @@ -397,7 +419,8 @@ private String getAnfangsbestandKontoartZweckSql() throws RemoteException + " WHERE anfangsbestand.datum = ?" + " AND anfangsbestand.konto = konto.id " + " AND konto.kontoart = ? " + " AND konto.zweck = ?" - + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)"; + + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)" + + " AND (konto.eroeffnung IS NULL OR konto.eroeffnung <= ?)"; } private String getSummenBetragKontoartSql() throws RemoteException @@ -418,8 +441,7 @@ private String getAnfangsbestandKontoSql() throws RemoteException { return "SELECT SUM(anfangsbestand.betrag) FROM anfangsbestand, konto" + " WHERE anfangsbestand.datum = ?" + " AND anfangsbestand.konto = ?" - + " AND anfangsbestand.konto = konto.id " - + " AND (konto.aufloesung IS NULL OR konto.aufloesung >= ?)"; + + " AND anfangsbestand.konto = konto.id "; } private String getSummenBetragKontoSql() throws RemoteException diff --git a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java index 4e49e155f..0733f3b1a 100644 --- a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java +++ b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java @@ -47,7 +47,7 @@ public void bind() throws Exception info.paint(getParent()); } - LabelGroup group = new LabelGroup(getParent(), "Jahresabschluss"); + LabelGroup group = new LabelGroup(getParent(), "Jahresabschluss", true); group.addLabelPair("Von", control.getVon()); group.addLabelPair("Bis", control.getBis()); group.addLabelPair("Datum", control.getDatum()); From 8f5048719b702e7f2683ac642bce071074d39876 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Wed, 29 Jan 2025 10:21:28 +0100 Subject: [PATCH 21/38] Fix Start erstes Jahr --- .../gui/control/JahresabschlussControl.java | 67 ++++++++++++++++++- .../JVerein/gui/view/JahresabschlussView.java | 4 ++ 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java index b6093425d..ec1d20809 100644 --- a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java +++ b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java @@ -41,6 +41,7 @@ import de.willuhn.datasource.rmi.DBService; import de.willuhn.jameica.gui.AbstractControl; import de.willuhn.jameica.gui.AbstractView; +import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.GUI; import de.willuhn.jameica.gui.Part; import de.willuhn.jameica.gui.formatter.DateFormatter; @@ -48,6 +49,7 @@ import de.willuhn.jameica.gui.input.DateInput; import de.willuhn.jameica.gui.input.DecimalInput; import de.willuhn.jameica.gui.input.TextInput; +import de.willuhn.jameica.gui.parts.Button; import de.willuhn.jameica.gui.parts.TablePart; import de.willuhn.jameica.gui.parts.table.FeatureSummary; import de.willuhn.logging.Logger; @@ -80,10 +82,16 @@ public class JahresabschlussControl extends AbstractControl private DecimalInput zwanghafteweitergabe; + private Button zurueck; + private boolean isSaveEnabled = false; private boolean updateMittelverwendung = false; + private boolean ersterAbschluss = false; + + private boolean mittelverwendungStart = false; + public JahresabschlussControl(AbstractView view) { super(view); @@ -147,6 +155,7 @@ private Date computeVonDatum() throws RemoteException, ParseException cal.add(Calendar.DAY_OF_MONTH, 1); return cal.getTime(); } + ersterAbschluss = true; DBIterator itbu = Einstellungen.getDBService() .createList(Buchung.class); itbu.setOrder("ORDER BY datum"); @@ -290,6 +299,50 @@ public DecimalInput getZwanghafteWeitergabe() return zwanghafteweitergabe; } + public Button getZurueck() + { + if (zurueck != null) + { + return zurueck; + } + else + { + zurueck = new Button("", new Action() + { + @Override + public void handleAction(Object context) throws ApplicationException + { + if (ersterAbschluss) + { + Calendar cal = Calendar.getInstance(); + try + { + mittelverwendungStart = true; + cal.setTime((Date) getVon().getValue()); + cal.add(Calendar.DAY_OF_MONTH, -1); + getBis().setValue(cal.getTime()); + cal.add(Calendar.DAY_OF_MONTH, 1); + cal.add(Calendar.YEAR, -1); + getVon().setValue(cal.getTime()); + zurueck.setEnabled(false); + verwendungsrueckstand.setValue(null); + verwendungsrueckstand.setEnabled(true); + zwanghafteweitergabe.setValue(null); + zwanghafteweitergabe.setEnabled(true); + } + catch (RemoteException | ParseException e) + { + throw new ApplicationException(e.getMessage()); + } + } + + } + }, null, false, "go-previous.png"); + } + zurueck.setEnabled(ersterAbschluss); + return zurueck; + } + public boolean isSaveEnabled() { return isSaveEnabled; @@ -303,7 +356,19 @@ public void handleStore() try { Jahresabschluss ja = getJahresabschluss(); - if (ja.isNewObject()) + if (mittelverwendungStart) + { + ja.setVon((Date) getVon().getValue()); + ja.setBis((Date) getBis().getValue()); + ja.setDatum((Date) getDatum().getValue()); + ja.setName((String) getName().getValue()); + ja.setVerwendungsrueckstand( + (Double) getVerwendungsrueckstand().getValue()); + ja.setZwanghafteWeitergabe( + (Double) getZwanghafteWeitergabe().getValue()); + ja.store(); + } + else if (ja.isNewObject()) { ja.setVon((Date) getVon().getValue()); ja.setBis((Date) getBis().getValue()); diff --git a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java index 0733f3b1a..099dc7a5f 100644 --- a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java +++ b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java @@ -68,6 +68,10 @@ public void bind() throws Exception ButtonArea buttons = new ButtonArea(); buttons.addButton("Hilfe", new DokumentationAction(), DokumentationUtil.JAHRESABSCHLUSS, false, "question-circle.png"); + if (Einstellungen.getEinstellung().getMittelverwendung()) + { + buttons.addButton(control.getZurueck()); + } Button save = new Button("Speichern", new Action() { From 61f81d68ed7de8c10328414173ac1da78992749b Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Wed, 29 Jan 2025 11:57:13 +0100 Subject: [PATCH 22/38] Fix Anzeige --- .../jost_net/JVerein/gui/control/JahresabschlussControl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java index ec1d20809..e7b06823e 100644 --- a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java +++ b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java @@ -115,7 +115,8 @@ public Jahresabschluss getJahresabschluss() { isSaveEnabled = true; } - if (Einstellungen.getEinstellung().getMittelverwendung()) + if (Einstellungen.getEinstellung().getMittelverwendung() + && jahresabschluss.isNewObject()) { MittelverwendungFlowList list = new MittelverwendungFlowList( (Date) getVon().getValue(), (Date) getBis().getValue()); From 5d4c97869053c3ba1d6e7f13803f2b85498ac21c Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Wed, 29 Jan 2025 12:17:01 +0100 Subject: [PATCH 23/38] Update Jahresabschluss View --- .../JVerein/gui/view/JahresabschlussView.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java index 099dc7a5f..4b144029a 100644 --- a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java +++ b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java @@ -25,7 +25,9 @@ import de.willuhn.jameica.gui.parts.Button; import de.willuhn.jameica.gui.parts.ButtonArea; import de.willuhn.jameica.gui.parts.InfoPanel; +import de.willuhn.jameica.gui.util.ColumnLayout; import de.willuhn.jameica.gui.util.LabelGroup; +import de.willuhn.jameica.gui.util.SimpleContainer; public class JahresabschlussView extends AbstractView { @@ -48,21 +50,31 @@ public void bind() throws Exception } LabelGroup group = new LabelGroup(getParent(), "Jahresabschluss", true); - group.addLabelPair("Von", control.getVon()); - group.addLabelPair("Bis", control.getBis()); - group.addLabelPair("Datum", control.getDatum()); - group.addLabelPair("Name", control.getName()); + ColumnLayout cl = new ColumnLayout(group.getComposite(), 2); + + SimpleContainer left = new SimpleContainer(cl.getComposite()); + left.addLabelPair("Von", control.getVon()); + left.addLabelPair("Bis", control.getBis()); + + SimpleContainer right = new SimpleContainer(cl.getComposite()); if (Einstellungen.getEinstellung().getMittelverwendung()) { - group.addLabelPair("Rest Verwendungsrückstand Vorjahr", + left.addLabelPair("Datum", control.getDatum()); + right.addLabelPair("Name", control.getName()); + right.addLabelPair("Rest Verwendungsrückstand Vorjahr", control.getVerwendungsrueckstand()); - group.addLabelPair("Zwanghafte satzungsgemäße Weitergabe von Mitteln", + right.addLabelPair("Zwanghafte satzungsgemäße Weitergabe von Mitteln", control.getZwanghafteWeitergabe()); } - group.addLabelPair("Anfangsbestände Folgejahr", + else + { + right.addLabelPair("Datum", control.getDatum()); + right.addLabelPair("Name", control.getName()); + } + left.addLabelPair("Anfangsbestände Folgejahr", control.getAnfangsbestaende()); if (Einstellungen.getEinstellung().getAfaInJahresabschluss()) - group.addLabelPair("Erzeuge Abschreibungen", control.getAfaberechnung()); + right.addLabelPair("Erzeuge Abschreibungen", control.getAfaberechnung()); group.addPart(control.getJahresabschlussSaldo()); ButtonArea buttons = new ButtonArea(); From eaf41f9e0cba0de5bead27f49c836eab6db2523f Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Wed, 29 Jan 2025 12:54:50 +0100 Subject: [PATCH 24/38] Update Jahresabchluss View --- .../gui/control/JahresabschlussControl.java | 2 ++ .../JVerein/gui/view/JahresabschlussView.java | 33 +++++++++++-------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java index e7b06823e..56cfcff3a 100644 --- a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java +++ b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java @@ -219,6 +219,7 @@ public CheckboxInput getAnfangsbestaende() return anfangsbestaende; } anfangsbestaende = new CheckboxInput(true); + anfangsbestaende.setName("Anfangsbestände Folgejahr"); return anfangsbestaende; } @@ -229,6 +230,7 @@ public CheckboxInput getAfaberechnung() return afaberechnung; } afaberechnung = new CheckboxInput(true); + afaberechnung.setName("Erzeuge Abschreibungen"); return afaberechnung; } diff --git a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java index 4b144029a..aeb7d5c8e 100644 --- a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java +++ b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java @@ -50,31 +50,36 @@ public void bind() throws Exception } LabelGroup group = new LabelGroup(getParent(), "Jahresabschluss", true); - ColumnLayout cl = new ColumnLayout(group.getComposite(), 2); + ColumnLayout cl; + if (Einstellungen.getEinstellung().getMittelverwendung()) + { + cl = new ColumnLayout(group.getComposite(), 3); + } + else + { + cl = new ColumnLayout(group.getComposite(), 2); + } SimpleContainer left = new SimpleContainer(cl.getComposite()); left.addLabelPair("Von", control.getVon()); left.addLabelPair("Bis", control.getBis()); - SimpleContainer right = new SimpleContainer(cl.getComposite()); + SimpleContainer middle = new SimpleContainer(cl.getComposite()); + middle.addLabelPair("Datum", control.getDatum()); + middle.addLabelPair("Name", control.getName()); + + if (Einstellungen.getEinstellung().getMittelverwendung()) { - left.addLabelPair("Datum", control.getDatum()); - right.addLabelPair("Name", control.getName()); - right.addLabelPair("Rest Verwendungsrückstand Vorjahr", + SimpleContainer right = new SimpleContainer(cl.getComposite()); + right.addLabelPair("Rest Verwendungsrückstand \naus dem Vorjahr", control.getVerwendungsrueckstand()); - right.addLabelPair("Zwanghafte satzungsgemäße Weitergabe von Mitteln", + right.addLabelPair("Zwanghafte satzungsgemäße\nWeitergabe von Mitteln", control.getZwanghafteWeitergabe()); } - else - { - right.addLabelPair("Datum", control.getDatum()); - right.addLabelPair("Name", control.getName()); - } - left.addLabelPair("Anfangsbestände Folgejahr", - control.getAnfangsbestaende()); + left.addLabelPair("", control.getAnfangsbestaende()); if (Einstellungen.getEinstellung().getAfaInJahresabschluss()) - right.addLabelPair("Erzeuge Abschreibungen", control.getAfaberechnung()); + middle.addLabelPair("", control.getAfaberechnung()); group.addPart(control.getJahresabschlussSaldo()); ButtonArea buttons = new ButtonArea(); From c0b3b7c8b3d31ec570a58ac04d46729a65f085b8 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Wed, 29 Jan 2025 13:07:03 +0100 Subject: [PATCH 25/38] Update JahresabschlussView.java --- src/de/jost_net/JVerein/gui/view/JahresabschlussView.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java index aeb7d5c8e..384062ddc 100644 --- a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java +++ b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java @@ -49,7 +49,7 @@ public void bind() throws Exception info.paint(getParent()); } - LabelGroup group = new LabelGroup(getParent(), "Jahresabschluss", true); + LabelGroup group = new LabelGroup(getParent(), "Jahresabschluss"); ColumnLayout cl; if (Einstellungen.getEinstellung().getMittelverwendung()) { @@ -68,7 +68,6 @@ public void bind() throws Exception middle.addLabelPair("Datum", control.getDatum()); middle.addLabelPair("Name", control.getName()); - if (Einstellungen.getEinstellung().getMittelverwendung()) { SimpleContainer right = new SimpleContainer(cl.getComposite()); @@ -80,7 +79,8 @@ public void bind() throws Exception left.addLabelPair("", control.getAnfangsbestaende()); if (Einstellungen.getEinstellung().getAfaInJahresabschluss()) middle.addLabelPair("", control.getAfaberechnung()); - group.addPart(control.getJahresabschlussSaldo()); + + control.getJahresabschlussSaldo().paint(this.getParent()); ButtonArea buttons = new ButtonArea(); buttons.addButton("Hilfe", new DokumentationAction(), From 0899aba3b71f74e3e720b8b3691094e28f4ce252 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Thu, 30 Jan 2025 08:43:16 +0100 Subject: [PATCH 26/38] Ausgaben sollen nicht negativ, sollte aber sowieso nicht sein --- src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java index ca985e33f..7468aac20 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java @@ -289,7 +289,7 @@ public ArrayList getInfo() throws RemoteException : rueckstandVorVorjahr; zwanghafteWeitergabeVorjahr = (zwanghafteWeitergabeVorjahr == null) ? 0.0 : zwanghafteWeitergabeVorjahr; - Double ausgaben = summeEntRuecklagen - verwendung; + Double ausgaben = Math.max(summeEntRuecklagen - verwendung, 0); Double rueckstandVorjahr = vorhandeneMittel - rueckstandVorVorjahr - zwanghafteWeitergabeVorjahr; zwanghafteWeitergabeNeu = 0.0; From 3f9b0dc6b77eefdff14a176670e1ce1cde0d3599 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Fri, 31 Jan 2025 09:40:57 +0100 Subject: [PATCH 27/38] Kommentare --- .../gui/parts/MittelverwendungFlowList.java | 18 +++++++++--------- .../gui/parts/MittelverwendungSaldoList.java | 11 +++++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java index 7468aac20..73a987811 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java @@ -217,11 +217,11 @@ public ArrayList getInfo() throws RemoteException // Schritt 3: Mittel Abfluss // Summe aller Abflüsse bei Geldkonten sql = getSummenKontoSql(); - Double verwendung = (Double) service.execute(sql, new Object[] { datumvon, + Double verwendung = -(Double) service.execute(sql, new Object[] { datumvon, datumbis, Kontoart.GELD.getKey(), ArtBuchungsart.AUSGABE }, rsd); // Summe aller Abflüsse bei nicht nutzungsgebundenen Anlagen sql = getSummenKontoZweckSql(); - verwendung += (Double) service.execute(sql, + verwendung -= (Double) service.execute(sql, new Object[] { datumvon, datumbis, Kontoart.ANLAGE.getKey(), Anlagenzweck.ZWECKFREMD_EINGESETZT.getKey(), ArtBuchungsart.AUSGABE }, @@ -230,7 +230,7 @@ public ArrayList getInfo() throws RemoteException // Tilgung Verbindlichkeiten z.B. Darlehen, // Erwerb zweckgebundener Anlagen sql = getSummenUmbuchungSql() + " AND buchung.betrag > 0"; - verwendung -= (Double) service.execute(sql, + verwendung += (Double) service.execute(sql, new Object[] { datumvon, datumbis, Kontoart.SCHULDEN.getKey(), Kontoart.ANLAGE.getKey(), Anlagenzweck.NUTZUNGSGEBUNDEN.getKey(), ArtBuchungsart.UMBUCHUNG }, @@ -255,9 +255,9 @@ public ArrayList getInfo() throws RemoteException { bezeichnung = "Zuführung " + Kontoart.getByKey(i).getText(); addZeile(zeilen, MittelverwendungZeile.AUSGABE, pos++, bezeichnung, - null, -zuRuecklagen, BLANK); + null, zuRuecklagen, BLANK); } - Double entRuecklagen = (Double) service.execute(sql, + Double entRuecklagen = -(Double) service.execute(sql, new Object[] { datumvon, datumbis, i, ArtBuchungsart.AUSGABE }, rsd); summeEntRuecklagen += entRuecklagen; if (Math.abs(entRuecklagen) > LIMIT @@ -272,7 +272,7 @@ public ArrayList getInfo() throws RemoteException bezeichnung = BLANKS + "Insgesamt im aktuellen GJ verwendete Mittel"; addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - verwendung - summeZuRuecklagen, -summeEntRuecklagen, BLANK); + verwendung + summeZuRuecklagen, -summeEntRuecklagen, BLANK); // Leerzeile zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.LEERZEILE, null, @@ -281,15 +281,15 @@ public ArrayList getInfo() throws RemoteException bezeichnung = "Verwendungsrückstand(+)/-überhang(-) zum Ende des aktuellen GJ " + aktuellesGJ; addZeile(zeilen, MittelverwendungZeile.SUMME, pos++, bezeichnung, - zufuehrung + vorhandeneMittel + verwendung - summeZuRuecklagen, - -summeEntRuecklagen, BLANK); + zufuehrung + vorhandeneMittel - verwendung - summeZuRuecklagen, + summeEntRuecklagen, BLANK); // Berechnung der Mittelverwendung rueckstandVorVorjahr = (rueckstandVorVorjahr == null) ? 0.0 : rueckstandVorVorjahr; zwanghafteWeitergabeVorjahr = (zwanghafteWeitergabeVorjahr == null) ? 0.0 : zwanghafteWeitergabeVorjahr; - Double ausgaben = Math.max(summeEntRuecklagen - verwendung, 0); + Double ausgaben = Math.max(verwendung - summeEntRuecklagen, 0); Double rueckstandVorjahr = vorhandeneMittel - rueckstandVorVorjahr - zwanghafteWeitergabeVorjahr; zwanghafteWeitergabeNeu = 0.0; diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java index bb25fe468..31674f70c 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java @@ -253,6 +253,7 @@ public ArrayList getInfo() throws RemoteException // Mittelverwendung zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, null, null, BLANK, "Mittelverwendung")); + boolean mittel = false; // Nutzungsgebundenes Anlagevermögen sql = getAnfangsbestandKontoartZweckSql(); Double anlagenStand = (Double) service @@ -271,6 +272,7 @@ public ArrayList getInfo() throws RemoteException addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, -anlagenStand, BLANK); summeVermoegen -= anlagenStand; + mittel = true; } // Fremdkapital if (Math.abs(summeSchulden) > LIMIT || nichtUnterdruecken) @@ -279,6 +281,7 @@ public ArrayList getInfo() throws RemoteException addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, -summeSchulden, BLANK); summeVermoegen -= summeSchulden; + mittel = true; } // Rücklagen, Vermögen nicht zugeordnet zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, @@ -317,6 +320,7 @@ public ArrayList getInfo() throws RemoteException addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, -summeRuecklagen, BLANK); summeVermoegen -= summeRuecklagen; + mittel = true; } else { @@ -369,12 +373,19 @@ public ArrayList getInfo() throws RemoteException addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, -summeRuecklagen, BLANK); summeVermoegen -= summeRuecklagen; + mittel = true; } else { zeilen.remove(zeilen.size() - 1); } } + + // Keine verwendeten Mittel, Mittelzeile löschen + if (!mittel) + { + zeilen.remove(zeilen.size() - 1); + } // Leerzeile zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.LEERZEILE, null, null, null, null, BLANK)); From 2ca4ae15a00f8606d863ced0e0e86a37f12f3c38 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Fri, 31 Jan 2025 10:58:25 +0100 Subject: [PATCH 28/38] =?UTF-8?q?Vorzeichen=20auch=20bei=20SaldoList=20umg?= =?UTF-8?q?edreht=20und=20Text=20ge=C3=A4ndert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/parts/MittelverwendungSaldoList.java | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java index 31674f70c..a6b445058 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java @@ -96,6 +96,7 @@ public ArrayList getInfo() throws RemoteException String sql; ArrayList zeilen = new ArrayList<>(); Double summeVermoegen = 0.0; + Double summeFreieMittel = 0.0; String bezeichnung = ""; boolean nichtUnterdruecken = !Einstellungen.getEinstellung() .getUnterdrueckungOhneBuchung(); @@ -252,8 +253,7 @@ public ArrayList getInfo() throws RemoteException // Mittelverwendung zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, - null, null, BLANK, "Mittelverwendung")); - boolean mittel = false; + null, null, BLANK, "Der zeitnahen Verwendung entzogene Mittel")); // Nutzungsgebundenes Anlagevermögen sql = getAnfangsbestandKontoartZweckSql(); Double anlagenStand = (Double) service @@ -270,18 +270,16 @@ public ArrayList getInfo() throws RemoteException { bezeichnung = "Nutzungsgebundenes Anlagevermögen"; addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, - -anlagenStand, BLANK); - summeVermoegen -= anlagenStand; - mittel = true; + anlagenStand, BLANK); + summeFreieMittel = anlagenStand; } // Fremdkapital if (Math.abs(summeSchulden) > LIMIT || nichtUnterdruecken) { bezeichnung = "Fremdkapital"; addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, - -summeSchulden, BLANK); - summeVermoegen -= summeSchulden; - mittel = true; + summeSchulden, BLANK); + summeFreieMittel += summeSchulden; } // Rücklagen, Vermögen nicht zugeordnet zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, @@ -310,7 +308,7 @@ public ArrayList getInfo() throws RemoteException kommentar = kommentar.split("\n")[0]; } addZeile(zeilen, MittelverwendungZeile.AUSGABE, null, - map3.get(kontoId)[0], null, -ruecklagen, kommentar); + map3.get(kontoId)[0], null, ruecklagen, kommentar); summeRuecklagen += ruecklagen; } } @@ -318,9 +316,8 @@ public ArrayList getInfo() throws RemoteException { bezeichnung = "Summe nicht zugeordneter Rücklagen"; addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, - -summeRuecklagen, BLANK); - summeVermoegen -= summeRuecklagen; - mittel = true; + summeRuecklagen, BLANK); + summeFreieMittel += summeRuecklagen; } else { @@ -362,7 +359,7 @@ public ArrayList getInfo() throws RemoteException kommentar = kommentar.split("\n")[0]; } addZeile(zeilen, MittelverwendungZeile.AUSGABE, null, - map4.get(kontoId)[0], null, -ruecklagen, kommentar); + map4.get(kontoId)[0], null, ruecklagen, kommentar); summeRuecklagen += ruecklagen; } } @@ -371,9 +368,8 @@ public ArrayList getInfo() throws RemoteException bezeichnung = "Summe Rücklagen/Vermögen " + buchungsklassen.get(buchungsklasseId); addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, - -summeRuecklagen, BLANK); - summeVermoegen -= summeRuecklagen; - mittel = true; + summeRuecklagen, BLANK); + summeFreieMittel += summeRuecklagen; } else { @@ -381,8 +377,14 @@ public ArrayList getInfo() throws RemoteException } } - // Keine verwendeten Mittel, Mittelzeile löschen - if (!mittel) + // Keine entzogenen Mittel, Mittelzeile löschen + if (Math.abs(summeFreieMittel) > LIMIT || nichtUnterdruecken) + { + bezeichnung = "Summe der zeitnahen Verwendung entzogene Mittel"; + addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, + summeFreieMittel, BLANK); + } + else { zeilen.remove(zeilen.size() - 1); } @@ -391,7 +393,7 @@ public ArrayList getInfo() throws RemoteException null, null, null, BLANK)); bezeichnung = "Verwendungsrückstand(+)/-überhang(-) zum Ende des GJ"; addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, - summeVermoegen, BLANK); + summeVermoegen - summeFreieMittel, BLANK); // Leerzeile undefined - nicht drucken in PDF und CSV zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.UNDEFINED, null, null, null, null, BLANK)); From 2f53ccf50dd42359eb1bf0acac973f99a803c756 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Sat, 1 Feb 2025 09:32:43 +0100 Subject: [PATCH 29/38] Summe der zeitnahen Verwendung entzogene Mittel immer anzeigen --- .../gui/parts/MittelverwendungSaldoList.java | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java index a6b445058..c5f8b5408 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java @@ -377,17 +377,10 @@ public ArrayList getInfo() throws RemoteException } } - // Keine entzogenen Mittel, Mittelzeile löschen - if (Math.abs(summeFreieMittel) > LIMIT || nichtUnterdruecken) - { - bezeichnung = "Summe der zeitnahen Verwendung entzogene Mittel"; - addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, - summeFreieMittel, BLANK); - } - else - { - zeilen.remove(zeilen.size() - 1); - } + bezeichnung = "Summe der zeitnahen Verwendung entzogene Mittel"; + addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, + summeFreieMittel, BLANK); + // Leerzeile zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.LEERZEILE, null, null, null, null, BLANK)); From e3c48fc9dda50a8ae9003956a6ebecd61a865c77 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Mon, 3 Feb 2025 11:25:43 +0100 Subject: [PATCH 30/38] Fix Comments --- .../gui/control/JahresabschlussControl.java | 13 ++- .../JVerein/gui/menu/JahresabschlussMenu.java | 86 ++++++++++++++++++- .../gui/parts/MittelverwendungList.java | 14 ++- .../gui/parts/MittelverwendungSaldoList.java | 8 +- .../JVerein/gui/view/JahresabschlussView.java | 12 ++- 5 files changed, 119 insertions(+), 14 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java index 56cfcff3a..2eb77ef40 100644 --- a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java +++ b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java @@ -213,24 +213,27 @@ public TextInput getName() throws RemoteException, ParseException } public CheckboxInput getAnfangsbestaende() + throws RemoteException, ParseException { if (anfangsbestaende != null) { return anfangsbestaende; } - anfangsbestaende = new CheckboxInput(true); + anfangsbestaende = new CheckboxInput(getJahresabschluss().isNewObject()); anfangsbestaende.setName("Anfangsbestände Folgejahr"); + anfangsbestaende.setEnabled(getJahresabschluss().isNewObject()); return anfangsbestaende; } - public CheckboxInput getAfaberechnung() + public CheckboxInput getAfaberechnung() throws RemoteException, ParseException { if (afaberechnung != null) { return afaberechnung; } - afaberechnung = new CheckboxInput(true); + afaberechnung = new CheckboxInput(getJahresabschluss().isNewObject()); afaberechnung.setName("Erzeuge Abschreibungen"); + afaberechnung.setEnabled(getJahresabschluss().isNewObject()); return afaberechnung; } @@ -332,6 +335,10 @@ public void handleAction(Object context) throws ApplicationException verwendungsrueckstand.setEnabled(true); zwanghafteweitergabe.setValue(null); zwanghafteweitergabe.setEnabled(true); + anfangsbestaende.setValue(false); + anfangsbestaende.setEnabled(false); + afaberechnung.setValue(false); + afaberechnung.setEnabled(false); } catch (RemoteException | ParseException e) { diff --git a/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java b/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java index 884ceea43..c2a4838f3 100644 --- a/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java +++ b/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java @@ -16,11 +16,17 @@ **********************************************************************/ package de.jost_net.JVerein.gui.menu; +import java.rmi.RemoteException; + +import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.gui.action.JahresabschlussDeleteAction; import de.jost_net.JVerein.gui.action.JahresabschlussDetailAction; +import de.jost_net.JVerein.rmi.Jahresabschluss; +import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.parts.CheckedContextMenuItem; import de.willuhn.jameica.gui.parts.CheckedSingleContextMenuItem; import de.willuhn.jameica.gui.parts.ContextMenu; +import de.willuhn.logging.Logger; /** * Kontext-Menu zu den Jahresabschlüssen. @@ -30,12 +36,86 @@ public class JahresabschlussMenu extends ContextMenu /** * Erzeugt ein Kontext-Menu fuer die Liste der Jahresabschlüsse + * + * @throws RemoteException */ - public JahresabschlussMenu() + public JahresabschlussMenu() throws RemoteException { - addItem(new CheckedSingleContextMenuItem("Bearbeiten", - new JahresabschlussDetailAction(), "text-x-generic.png")); + if (Einstellungen.getEinstellung().getMittelverwendung()) + { + addItem(new SingleAnzeigenMenuItem("Anzeigen", + new JahresabschlussDetailAction(), "text-x-generic.png")); + addItem(new SingleBearbeitenMenuItem("Bearbeiten", + new JahresabschlussDetailAction(), "text-x-generic.png")); + } + else + { + addItem(new CheckedSingleContextMenuItem("Anzeigen", + new JahresabschlussDetailAction(), "text-x-generic.png")); + } addItem(new CheckedContextMenuItem("Löschen", new JahresabschlussDeleteAction(), "user-trash-full.png")); } + + private static class SingleAnzeigenMenuItem + extends CheckedSingleContextMenuItem + { + private SingleAnzeigenMenuItem(String text, Action action, String icon) + { + super(text, action, icon); + } + + @Override + public boolean isEnabledFor(Object o) + { + if (o instanceof Jahresabschluss) + { + Jahresabschluss ja = (Jahresabschluss) o; + try + { + if (ja.getVerwendungsrueckstand() == null + || ja.getZwanghafteWeitergabe() == null) + { + return false; + } + } + catch (RemoteException e) + { + Logger.error("Fehler", e); + } + } + return true; + } + } + + private static class SingleBearbeitenMenuItem + extends CheckedSingleContextMenuItem + { + private SingleBearbeitenMenuItem(String text, Action action, String icon) + { + super(text, action, icon); + } + + @Override + public boolean isEnabledFor(Object o) + { + if (o instanceof Jahresabschluss) + { + Jahresabschluss ja = (Jahresabschluss) o; + try + { + if (ja.getVerwendungsrueckstand() == null + || ja.getZwanghafteWeitergabe() == null) + { + return true; + } + } + catch (RemoteException e) + { + Logger.error("Fehler", e); + } + } + return false; + } + } } diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java index 53cb3c4e7..2a9467e37 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java @@ -95,6 +95,16 @@ protected void addZeile(ArrayList zeilen, int status, Integer position, String bezeichnung, Double einnahme, Double ausgabe, String kommentar) throws RemoteException { + Double summe = 0.0; + if (status == MittelverwendungZeile.ART + || status == MittelverwendungZeile.SUMME) + { + summe = einnahme + ausgabe; + if (summe == -0.0) + { + summe = 0.0; + } + } if (einnahme != null && einnahme == -0.0) { einnahme = 0.0; @@ -115,11 +125,11 @@ protected void addZeile(ArrayList zeilen, int status, break; case MittelverwendungZeile.SUMME: zeilen.add(new MittelverwendungZeile(status, position, bezeichnung, - null, einnahme + ausgabe, kommentar)); + null, summe, kommentar)); break; case MittelverwendungZeile.ART: zeilen.add(new MittelverwendungZeile(status, position, null, null, - einnahme + ausgabe, kommentar, bezeichnung)); + summe, kommentar, bezeichnung)); break; } } diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java index c5f8b5408..f01a9d4c5 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java @@ -100,6 +100,9 @@ public ArrayList getInfo() throws RemoteException String bezeichnung = ""; boolean nichtUnterdruecken = !Einstellungen.getEinstellung() .getUnterdrueckungOhneBuchung(); + // Überschrift + zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, + null, null, BLANK, "Liste an Vermögen:")); // Anlagevermögen zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, null, null, BLANK, "Anlagevermögen")); @@ -253,7 +256,8 @@ public ArrayList getInfo() throws RemoteException // Mittelverwendung zeilen.add(new MittelverwendungZeile(MittelverwendungZeile.ART, null, null, - null, null, BLANK, "Der zeitnahen Verwendung entzogene Mittel")); + null, null, BLANK, + "Liste der zeitnahen Verwendung entzogenen Mittel:")); // Nutzungsgebundenes Anlagevermögen sql = getAnfangsbestandKontoartZweckSql(); Double anlagenStand = (Double) service @@ -377,7 +381,7 @@ public ArrayList getInfo() throws RemoteException } } - bezeichnung = "Summe der zeitnahen Verwendung entzogene Mittel"; + bezeichnung = "Summe der zeitnahen Verwendung entzogenen Mittel"; addZeile(zeilen, MittelverwendungZeile.ART, null, bezeichnung, 0.0, summeFreieMittel, BLANK); diff --git a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java index 384062ddc..6a2776919 100644 --- a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java +++ b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java @@ -80,15 +80,19 @@ public void bind() throws Exception if (Einstellungen.getEinstellung().getAfaInJahresabschluss()) middle.addLabelPair("", control.getAfaberechnung()); + if (Einstellungen.getEinstellung().getMittelverwendung()) + { + ButtonArea abuttons = new ButtonArea(); + abuttons.addButton(control.getZurueck()); + group.addButtonArea(abuttons); + } + control.getJahresabschlussSaldo().paint(this.getParent()); ButtonArea buttons = new ButtonArea(); buttons.addButton("Hilfe", new DokumentationAction(), DokumentationUtil.JAHRESABSCHLUSS, false, "question-circle.png"); - if (Einstellungen.getEinstellung().getMittelverwendung()) - { - buttons.addButton(control.getZurueck()); - } + Button save = new Button("Speichern", new Action() { From f1dcdc7c46bdc6f156b1e83c4fa5835ee9c76280 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Tue, 4 Feb 2025 10:52:31 +0100 Subject: [PATCH 31/38] Startwerte mit Button setzen --- .../gui/control/JahresabschlussControl.java | 196 +++++------------- .../gui/control/MittelverwendungControl.java | 174 +++++++++++++++- .../gui/dialogs/MittelverwendungDialog.java | 184 ++++++++++++++++ .../JVerein/gui/menu/JahresabschlussMenu.java | 80 +------ .../JVerein/gui/view/JahresabschlussView.java | 15 +- .../gui/view/MittelverwendungListeView.java | 1 + 6 files changed, 411 insertions(+), 239 deletions(-) create mode 100644 src/de/jost_net/JVerein/gui/dialogs/MittelverwendungDialog.java diff --git a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java index 2eb77ef40..a498cd2c7 100644 --- a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java +++ b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java @@ -41,7 +41,6 @@ import de.willuhn.datasource.rmi.DBService; import de.willuhn.jameica.gui.AbstractControl; import de.willuhn.jameica.gui.AbstractView; -import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.GUI; import de.willuhn.jameica.gui.Part; import de.willuhn.jameica.gui.formatter.DateFormatter; @@ -49,7 +48,6 @@ import de.willuhn.jameica.gui.input.DateInput; import de.willuhn.jameica.gui.input.DecimalInput; import de.willuhn.jameica.gui.input.TextInput; -import de.willuhn.jameica.gui.parts.Button; import de.willuhn.jameica.gui.parts.TablePart; import de.willuhn.jameica.gui.parts.table.FeatureSummary; import de.willuhn.logging.Logger; @@ -75,23 +73,13 @@ public class JahresabschlussControl extends AbstractControl private Jahresabschluss jahresabschluss; private CheckboxInput anfangsbestaende; - + private CheckboxInput afaberechnung; private DecimalInput verwendungsrueckstand; private DecimalInput zwanghafteweitergabe; - private Button zurueck; - - private boolean isSaveEnabled = false; - - private boolean updateMittelverwendung = false; - - private boolean ersterAbschluss = false; - - private boolean mittelverwendungStart = false; - public JahresabschlussControl(AbstractView view) { super(view); @@ -107,14 +95,6 @@ public Jahresabschluss getJahresabschluss() return jahresabschluss; } jahresabschluss = (Jahresabschluss) getCurrentObject(); - updateMittelverwendung = (Einstellungen.getEinstellung() - .getMittelverwendung() - && (jahresabschluss.getVerwendungsrueckstand() == null - || jahresabschluss.getZwanghafteWeitergabe() == null)); - if (jahresabschluss.isNewObject() || updateMittelverwendung) - { - isSaveEnabled = true; - } if (Einstellungen.getEinstellung().getMittelverwendung() && jahresabschluss.isNewObject()) { @@ -156,7 +136,6 @@ private Date computeVonDatum() throws RemoteException, ParseException cal.add(Calendar.DAY_OF_MONTH, 1); return cal.getTime(); } - ersterAbschluss = true; DBIterator itbu = Einstellungen.getDBService() .createList(Buchung.class); itbu.setOrder("ORDER BY datum"); @@ -205,10 +184,7 @@ public TextInput getName() throws RemoteException, ParseException return name; } name = new TextInput(getJahresabschluss().getName(), 50); - if (!getJahresabschluss().isNewObject()) - { - name.setEnabled(false); - } + name.setEnabled(getJahresabschluss().isNewObject()); return name; } @@ -224,7 +200,7 @@ public CheckboxInput getAnfangsbestaende() anfangsbestaende.setEnabled(getJahresabschluss().isNewObject()); return anfangsbestaende; } - + public CheckboxInput getAfaberechnung() throws RemoteException, ParseException { if (afaberechnung != null) @@ -277,8 +253,7 @@ public DecimalInput getVerwendungsrueckstand() getJahresabschluss().getVerwendungsrueckstand(), Einstellungen.DECIMALFORMAT); } - verwendungsrueckstand.setEnabled( - updateMittelverwendung && !getJahresabschluss().isNewObject()); + verwendungsrueckstand.setEnabled(false); return verwendungsrueckstand; } @@ -300,62 +275,13 @@ public DecimalInput getZwanghafteWeitergabe() getJahresabschluss().getZwanghafteWeitergabe(), Einstellungen.DECIMALFORMAT); } - zwanghafteweitergabe.setEnabled( - updateMittelverwendung && !getJahresabschluss().isNewObject()); + zwanghafteweitergabe.setEnabled(false); return zwanghafteweitergabe; } - public Button getZurueck() + public boolean isSaveEnabled() throws RemoteException, ParseException { - if (zurueck != null) - { - return zurueck; - } - else - { - zurueck = new Button("", new Action() - { - @Override - public void handleAction(Object context) throws ApplicationException - { - if (ersterAbschluss) - { - Calendar cal = Calendar.getInstance(); - try - { - mittelverwendungStart = true; - cal.setTime((Date) getVon().getValue()); - cal.add(Calendar.DAY_OF_MONTH, -1); - getBis().setValue(cal.getTime()); - cal.add(Calendar.DAY_OF_MONTH, 1); - cal.add(Calendar.YEAR, -1); - getVon().setValue(cal.getTime()); - zurueck.setEnabled(false); - verwendungsrueckstand.setValue(null); - verwendungsrueckstand.setEnabled(true); - zwanghafteweitergabe.setValue(null); - zwanghafteweitergabe.setEnabled(true); - anfangsbestaende.setValue(false); - anfangsbestaende.setEnabled(false); - afaberechnung.setValue(false); - afaberechnung.setEnabled(false); - } - catch (RemoteException | ParseException e) - { - throw new ApplicationException(e.getMessage()); - } - } - - } - }, null, false, "go-previous.png"); - } - zurueck.setEnabled(ersterAbschluss); - return zurueck; - } - - public boolean isSaveEnabled() - { - return isSaveEnabled; + return getJahresabschluss().isNewObject(); } /** @@ -366,68 +292,45 @@ public void handleStore() try { Jahresabschluss ja = getJahresabschluss(); - if (mittelverwendungStart) + ja.setVon((Date) getVon().getValue()); + ja.setBis((Date) getBis().getValue()); + ja.setDatum((Date) getDatum().getValue()); + ja.setName((String) getName().getValue()); + ja.store(); + if (afaberechnung != null && (Boolean) getAfaberechnung().getValue()) { - ja.setVon((Date) getVon().getValue()); - ja.setBis((Date) getBis().getValue()); - ja.setDatum((Date) getDatum().getValue()); - ja.setName((String) getName().getValue()); - ja.setVerwendungsrueckstand( - (Double) getVerwendungsrueckstand().getValue()); - ja.setZwanghafteWeitergabe( - (Double) getZwanghafteWeitergabe().getValue()); - ja.store(); + new AfaUtil(new Geschaeftsjahr(ja.getVon()), ja); } - else if (ja.isNewObject()) + if (Einstellungen.getEinstellung().getMittelverwendung()) { - ja.setVon((Date) getVon().getValue()); - ja.setBis((Date) getBis().getValue()); - ja.setDatum((Date) getDatum().getValue()); - ja.setName((String) getName().getValue()); + MittelverwendungFlowList list = new MittelverwendungFlowList( + ja.getVon(), ja.getBis()); + list.getInfo(); + ja.setVerwendungsrueckstand(list.getRueckstandVorjahrNeu()); + ja.setZwanghafteWeitergabe(list.getZwanghafteWeitergabeNeu()); ja.store(); - if (afaberechnung != null && (Boolean) getAfaberechnung().getValue()) - { - new AfaUtil(new Geschaeftsjahr(ja.getVon()), ja); - } - if (Einstellungen.getEinstellung().getMittelverwendung()) - { - MittelverwendungFlowList list = new MittelverwendungFlowList( - ja.getVon(), ja.getBis()); - list.getInfo(); - ja.setVerwendungsrueckstand(list.getRueckstandVorjahrNeu()); - ja.setZwanghafteWeitergabe(list.getZwanghafteWeitergabeNeu()); - ja.store(); - } - if ((Boolean) getAnfangsbestaende().getValue()) + } + if ((Boolean) getAnfangsbestaende().getValue()) + { + KontensaldoList jsl = new KontensaldoList(null, + new Geschaeftsjahr(ja.getVon())); + ArrayList zeilen = jsl.getInfo(false); + for (SaldoZeile z : zeilen) { - KontensaldoList jsl = new KontensaldoList(null, - new Geschaeftsjahr(ja.getVon())); - ArrayList zeilen = jsl.getInfo(false); - for (SaldoZeile z : zeilen) + String ktonr = (String) z.getAttribute("kontonummer"); + if (ktonr.length() > 0) { - String ktonr = (String) z.getAttribute("kontonummer"); - if (ktonr.length() > 0) - { - Double endbestand = (Double) z.getAttribute("endbestand"); - Anfangsbestand anf = (Anfangsbestand) Einstellungen.getDBService() - .createObject(Anfangsbestand.class, null); - Konto konto = (Konto) z.getAttribute("konto"); - anf.setBetrag(endbestand); - anf.setDatum(Datum.addTage(ja.getBis(), 1)); - anf.setKonto(konto); - anf.store(); - } + Double endbestand = (Double) z.getAttribute("endbestand"); + Anfangsbestand anf = (Anfangsbestand) Einstellungen.getDBService() + .createObject(Anfangsbestand.class, null); + Konto konto = (Konto) z.getAttribute("konto"); + anf.setBetrag(endbestand); + anf.setDatum(Datum.addTage(ja.getBis(), 1)); + anf.setKonto(konto); + anf.store(); } } } - else - { - ja.setVerwendungsrueckstand( - (Double) getVerwendungsrueckstand().getValue()); - ja.setZwanghafteWeitergabe( - (Double) getZwanghafteWeitergabe().getValue()); - ja.store(); - } GUI.getStatusBar().setSuccessText("Jahresabschluss gespeichert"); } catch (RemoteException e) @@ -485,7 +388,7 @@ public void refreshTable() throws RemoteException } jahresabschlussList.sort(); } - + public String getInfo() { String text = ""; @@ -506,24 +409,23 @@ public String getInfo() Konto konto = (Konto) kontenIt.next(); if (konto.getEroeffnung() == null) { - text = text + "Das Anlagenkonto mit Nummer " + konto.getNummer() - + " hat kein Eröffnungsdatum\n"; + text = text + "Das Anlagenkonto mit Nummer " + konto.getNummer() + + " hat kein Eröffnungsdatum\n"; } if (konto.getAnschaffung() == null) { - text = text + "Das Anlagenkonto mit Nummer " + konto.getNummer() - + " hat kein Anschaffungsdatum. Bitte auf Plausibilität prüfen!\n"; + text = text + "Das Anlagenkonto mit Nummer " + konto.getNummer() + + " hat kein Anschaffungsdatum. Bitte auf Plausibilität prüfen!\n"; } - else if (konto.getAnschaffung().after(Datum.addTage(vongj, -1)) && - konto.getAnschaffung().before(Datum.addTage(bisgj, 1))) + else if (konto.getAnschaffung().after(Datum.addTage(vongj, -1)) + && konto.getAnschaffung().before(Datum.addTage(bisgj, 1))) { Double betrag = 0d; DBService service2 = Einstellungen.getDBService(); DBIterator buchungenIt = service2.createList(Buchung.class); buchungenIt.join("buchungsart"); buchungenIt.addFilter("buchungsart.id = buchung.buchungsart"); - buchungenIt.addFilter("konto = ?", - new Object[] { konto.getID() }); + buchungenIt.addFilter("konto = ?", new Object[] { konto.getID() }); buchungenIt.addFilter("buchungsart.abschreibung = FALSE"); buchungenIt.addFilter("datum <= ?", new Object[] { new java.sql.Date(bisgj.getTime()) }); @@ -533,9 +435,11 @@ else if (konto.getAnschaffung().after(Datum.addTage(vongj, -1)) && } if (Math.abs(betrag - konto.getBetrag()) > Double.MIN_NORMAL) { - text = text + "Für das Anlagenkonto mit der Nummer " + konto.getNummer() - + " stimmt die Summe der Buchungen (" + betrag + ") nicht mit den Anschaffungskosten (" - + konto.getBetrag() + ") überein. Bitte auf Plausibilität prüfen!\n"; + text = text + "Für das Anlagenkonto mit der Nummer " + + konto.getNummer() + " stimmt die Summe der Buchungen (" + + betrag + ") nicht mit den Anschaffungskosten (" + + konto.getBetrag() + + ") überein. Bitte auf Plausibilität prüfen!\n"; } } } diff --git a/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java b/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java index 3575c1ade..d5585b0da 100644 --- a/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java +++ b/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java @@ -19,19 +19,24 @@ import java.io.File; import java.rmi.RemoteException; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.FileDialog; import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.gui.dialogs.MittelverwendungDialog; import de.jost_net.JVerein.gui.parts.MittelverwendungFlowList; import de.jost_net.JVerein.gui.parts.MittelverwendungSaldoList; import de.jost_net.JVerein.io.MittelverwendungExportCSV; import de.jost_net.JVerein.io.MittelverwendungExportPDF; import de.jost_net.JVerein.io.MittelverwendungZeile; +import de.jost_net.JVerein.rmi.Jahresabschluss; import de.jost_net.JVerein.util.Dateiname; import de.jost_net.JVerein.util.JVDateFormatTTMMJJJJ; +import de.willuhn.datasource.rmi.DBIterator; +import de.willuhn.datasource.rmi.DBService; import de.willuhn.jameica.gui.AbstractView; import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.GUI; @@ -39,6 +44,7 @@ import de.willuhn.jameica.gui.parts.Button; import de.willuhn.jameica.system.Application; import de.willuhn.jameica.system.BackgroundTask; +import de.willuhn.jameica.system.OperationCanceledException; import de.willuhn.jameica.system.Settings; import de.willuhn.util.ApplicationException; import de.willuhn.util.ProgressMonitor; @@ -60,9 +66,154 @@ public class MittelverwendungControl extends SaldoControl private int selectedTab = FLOW_REPORT; - public MittelverwendungControl(AbstractView view) + private Button configButton; + + private Jahresabschluss[] jahresabschluesse = null; + + private Date editDatumvon = null; + + private String jaId = null; + + private String vorJaId = null; + + public MittelverwendungControl(AbstractView view) throws RemoteException { super(view); + updateJahreasabschlüsse(); + } + + private void updateJahreasabschlüsse() throws RemoteException + { + DBService service = Einstellungen.getDBService(); + DBIterator abschluesse = service + .createList(Jahresabschluss.class); + abschluesse.setOrder("ORDER BY von desc"); + jahresabschluesse = new Jahresabschluss[abschluesse.size()]; + int i = 0; + while (abschluesse.hasNext()) + { + jahresabschluesse[i] = abschluesse.next(); + i++; + } + } + + public Button getConfigButton() throws RemoteException + { + configButton = new Button("Startwerte setzen", new Action() + { + @Override + public void handleAction(Object context) throws ApplicationException + { + try + { + Double rueckstand = null; + Double weitergabe = null; + Jahresabschluss ja = (Jahresabschluss) Einstellungen.getDBService() + .createObject(Jahresabschluss.class, jaId); + if (vorJaId != null) + { + Jahresabschluss vorJa = (Jahresabschluss) Einstellungen + .getDBService().createObject(Jahresabschluss.class, vorJaId); + if (vorJa.getVerwendungsrueckstand() != null + && vorJa.getZwanghafteWeitergabe() != null) + { + MittelverwendungFlowList list = new MittelverwendungFlowList( + ja.getVon(), ja.getBis()); + list.getInfo(); + rueckstand = list.getRueckstandVorjahrNeu(); + weitergabe = list.getZwanghafteWeitergabeNeu(); + } + } + MittelverwendungDialog dialog = new MittelverwendungDialog(rueckstand, + weitergabe, ja.getName()); + if (!dialog.open()) + { + return; + } + if (ja.isNewObject()) + { + ja.setVon(editDatumvon); + Calendar cal = Calendar.getInstance(); + cal.setTime(editDatumvon); + cal.add(Calendar.YEAR, 1); + cal.add(Calendar.DAY_OF_MONTH, -1); + ja.setBis(cal.getTime()); + ja.setDatum(new Date()); + ja.setName(dialog.getName()); + } + ja.setVerwendungsrueckstand(dialog.getVerwendungsrueckstand()); + ja.setZwanghafteWeitergabe(dialog.getZwanghafteWeitergabe()); + ja.store(); + getSaldoList(); + updateJahreasabschlüsse(); + } + catch (OperationCanceledException ignore) + { + throw new OperationCanceledException(); + } + catch (Exception e) + { + throw new ApplicationException(e); + } + } + }, null, false, "text-x-generic.png"); + updateConfigButton(); + return configButton; + } + + private void updateConfigButton() throws RemoteException + { + Calendar cal = Calendar.getInstance(); + cal.setTime((Date) datumvon.getDate()); + cal.add(Calendar.YEAR, -1); + Date abschlussvon = cal.getTime(); + + // Es gibt noch keinen Jahresabschluss, dann wird er erzeugt + // Oder es ist der Mittelverwendungsreport des ersten Jahressabschlusses + // Dann muss einer vorher erzeugt werden + if (jahresabschluesse.length == 0 + || jahresabschluesse[jahresabschluesse.length - 1].getVon() + .equals(datumvon.getDate())) + { + configButton.setEnabled(true); + editDatumvon = abschlussvon; + jaId = null; + vorJaId = null; + return; + } + + // Der aktuelle Mittelverwendungsreport ist mehr als 1 Jahr nach dem letzten + // Jahresabschluss oder vor dem ersten Jahresabschluss + if (abschlussvon.after(jahresabschluesse[0].getVon()) || datumvon.getDate() + .before(jahresabschluesse[jahresabschluesse.length - 1].getVon())) + { + configButton.setEnabled(false); + return; + } + + for (int i = 0; i < jahresabschluesse.length; i++) + { + if (jahresabschluesse[i].getVon().equals(abschlussvon)) + { + if (jahresabschluesse[i].getVerwendungsrueckstand() == null + || jahresabschluesse[i].getZwanghafteWeitergabe() == null) + { + configButton.setEnabled(true); + editDatumvon = abschlussvon; + jaId = jahresabschluesse[i].getID(); + if (i == jahresabschluesse.length - 1) + { + vorJaId = null; + } + else + { + vorJaId = jahresabschluesse[i + 1].getID(); + } + return; + } + } + } + configButton.setEnabled(false); } public Button getPDFExportButton() @@ -75,7 +226,6 @@ public void handleAction(Object context) throws ApplicationException starteExport(ExportPDF); } }, null, false, "file-pdf.png"); - // button return b; } @@ -89,7 +239,6 @@ public void handleAction(Object context) throws ApplicationException starteExport(ExportCSV); } }, null, false, "xsd.png"); - // button return b; } @@ -103,11 +252,27 @@ public Part getSaldoList() throws ApplicationException if (selectedTab == FLOW_REPORT) { getSaldoTable(); + try + { + updateConfigButton(); + } + catch (RemoteException e) + { + throw new ApplicationException(e); + } return getFlowTable(); } else { getFlowTable(); + try + { + updateConfigButton(); + } + catch (RemoteException e) + { + throw new ApplicationException(e); + } return getSaldoTable(); } } @@ -195,8 +360,7 @@ private void starteExport(String type) throws ApplicationException final File file = new File(s); settings.setAttribute("lastdir", file.getParent()); - exportSaldo(zeilen, file, - getDatumvon().getDate(), + exportSaldo(zeilen, file, getDatumvon().getDate(), getDatumbis().getDate(), type, selectedTab); } catch (RemoteException e) diff --git a/src/de/jost_net/JVerein/gui/dialogs/MittelverwendungDialog.java b/src/de/jost_net/JVerein/gui/dialogs/MittelverwendungDialog.java new file mode 100644 index 000000000..d2c73ac33 --- /dev/null +++ b/src/de/jost_net/JVerein/gui/dialogs/MittelverwendungDialog.java @@ -0,0 +1,184 @@ +/********************************************************************** + * Copyright (c) by Heiner Jostkleigrewe + * This program 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, either version 3 of the + * License, or (at your option) any later version. + * + * This program 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 . + * + * heiner@jverein.de + * www.jverein.de + **********************************************************************/ + +package de.jost_net.JVerein.gui.dialogs; + +import java.rmi.RemoteException; +import java.text.ParseException; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; + +import de.jost_net.JVerein.Einstellungen; +import de.willuhn.jameica.gui.dialogs.AbstractDialog; +import de.willuhn.jameica.gui.input.DecimalInput; +import de.willuhn.jameica.gui.input.LabelInput; +import de.willuhn.jameica.gui.input.TextInput; +import de.willuhn.jameica.gui.parts.ButtonArea; +import de.willuhn.jameica.gui.util.Color; +import de.willuhn.jameica.gui.util.LabelGroup; + +public class MittelverwendungDialog extends AbstractDialog +{ + + private DecimalInput verwendungsrueckstandInput = null; + + private DecimalInput zwanghafteWeitergabeInput = null; + + private LabelInput status = null; + + private TextInput nameInput = null; + + private boolean fortfahren = false; + + private Double verwendungsrueckstand; + + private Double zwanghafteWeitergabe; + + private String name; + + public MittelverwendungDialog(Double verwendungsrueckstand, + Double zwanghafteWeitergabe, String name) + { + super(SWT.CENTER); + setTitle("Startwerte setzen"); + this.verwendungsrueckstand = verwendungsrueckstand; + this.zwanghafteWeitergabe = zwanghafteWeitergabe; + this.name = name; + } + + @Override + protected Boolean getData() throws Exception + { + return fortfahren; + } + + private LabelInput getStatus() + { + if (status != null) + { + return status; + } + status = new LabelInput(""); + return status; + } + + private DecimalInput getVerwendungsrueckstandInput() + throws RemoteException, ParseException + { + if (verwendungsrueckstandInput != null) + { + return verwendungsrueckstandInput; + } + + if (verwendungsrueckstand == null) + { + verwendungsrueckstandInput = new DecimalInput( + Einstellungen.DECIMALFORMAT); + } + else + { + verwendungsrueckstandInput = new DecimalInput(verwendungsrueckstand, + Einstellungen.DECIMALFORMAT); + } + return verwendungsrueckstandInput; + } + + private DecimalInput getZwanghafteWeitergabeInput() + throws RemoteException, ParseException + { + if (zwanghafteWeitergabeInput != null) + { + return zwanghafteWeitergabeInput; + } + + if (zwanghafteWeitergabe == null) + { + zwanghafteWeitergabeInput = new DecimalInput(Einstellungen.DECIMALFORMAT); + } + else + { + zwanghafteWeitergabeInput = new DecimalInput(zwanghafteWeitergabe, + Einstellungen.DECIMALFORMAT); + } + return zwanghafteWeitergabeInput; + } + + private TextInput getNameInput() throws RemoteException, ParseException + { + if (nameInput != null) + { + return nameInput; + } + nameInput = new TextInput(name, 50); + return nameInput; + } + + public Double getVerwendungsrueckstand() + { + return verwendungsrueckstand; + } + + public Double getZwanghafteWeitergabe() + { + return zwanghafteWeitergabe; + } + + public String getName() + { + return name; + } + + @Override + protected void paint(Composite parent) throws Exception + { + LabelGroup group = new LabelGroup(parent, ""); + group.addLabelPair("Rest des Verwendungsrückstand aus\ndem vorletzten GJ", + getVerwendungsrueckstandInput()); + group.addLabelPair( + "Zwanghafte satzungsgemäße \nWeitergabe von Mitteln im letzten GJ", + getZwanghafteWeitergabeInput()); + group.addLabelPair("Name", getNameInput()); + group.addInput(getStatus()); + + ButtonArea buttons = new ButtonArea(); + buttons.addButton("Übernehmen", context -> { + if (zwanghafteWeitergabeInput.getValue() == null + || verwendungsrueckstandInput.getValue() == null) + { + status.setValue("Bitte Daten eingeben"); + status.setColor(Color.ERROR); + return; + } + String value = (String) nameInput.getValue(); + if (value == null || value.isEmpty()) + { + status.setValue("Bitte Namen eingeben"); + status.setColor(Color.ERROR); + return; + } + verwendungsrueckstand = (Double) verwendungsrueckstandInput.getValue(); + zwanghafteWeitergabe = (Double) zwanghafteWeitergabeInput.getValue(); + name = (String) nameInput.getValue(); + fortfahren = true; + close(); + }, null, false, "ok.png"); + buttons.addButton("Abbrechen", context -> close(), null, false, + "process-stop.png"); + buttons.paint(parent); + } +} diff --git a/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java b/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java index c2a4838f3..d3c9c0eea 100644 --- a/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java +++ b/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java @@ -18,15 +18,11 @@ import java.rmi.RemoteException; -import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.gui.action.JahresabschlussDeleteAction; import de.jost_net.JVerein.gui.action.JahresabschlussDetailAction; -import de.jost_net.JVerein.rmi.Jahresabschluss; -import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.parts.CheckedContextMenuItem; import de.willuhn.jameica.gui.parts.CheckedSingleContextMenuItem; import de.willuhn.jameica.gui.parts.ContextMenu; -import de.willuhn.logging.Logger; /** * Kontext-Menu zu den Jahresabschlüssen. @@ -41,81 +37,9 @@ public class JahresabschlussMenu extends ContextMenu */ public JahresabschlussMenu() throws RemoteException { - if (Einstellungen.getEinstellung().getMittelverwendung()) - { - addItem(new SingleAnzeigenMenuItem("Anzeigen", - new JahresabschlussDetailAction(), "text-x-generic.png")); - addItem(new SingleBearbeitenMenuItem("Bearbeiten", - new JahresabschlussDetailAction(), "text-x-generic.png")); - } - else - { - addItem(new CheckedSingleContextMenuItem("Anzeigen", - new JahresabschlussDetailAction(), "text-x-generic.png")); - } + addItem(new CheckedSingleContextMenuItem("Anzeigen", + new JahresabschlussDetailAction(), "text-x-generic.png")); addItem(new CheckedContextMenuItem("Löschen", new JahresabschlussDeleteAction(), "user-trash-full.png")); } - - private static class SingleAnzeigenMenuItem - extends CheckedSingleContextMenuItem - { - private SingleAnzeigenMenuItem(String text, Action action, String icon) - { - super(text, action, icon); - } - - @Override - public boolean isEnabledFor(Object o) - { - if (o instanceof Jahresabschluss) - { - Jahresabschluss ja = (Jahresabschluss) o; - try - { - if (ja.getVerwendungsrueckstand() == null - || ja.getZwanghafteWeitergabe() == null) - { - return false; - } - } - catch (RemoteException e) - { - Logger.error("Fehler", e); - } - } - return true; - } - } - - private static class SingleBearbeitenMenuItem - extends CheckedSingleContextMenuItem - { - private SingleBearbeitenMenuItem(String text, Action action, String icon) - { - super(text, action, icon); - } - - @Override - public boolean isEnabledFor(Object o) - { - if (o instanceof Jahresabschluss) - { - Jahresabschluss ja = (Jahresabschluss) o; - try - { - if (ja.getVerwendungsrueckstand() == null - || ja.getZwanghafteWeitergabe() == null) - { - return true; - } - } - catch (RemoteException e) - { - Logger.error("Fehler", e); - } - } - return false; - } - } } diff --git a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java index 6a2776919..d72994a9d 100644 --- a/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java +++ b/src/de/jost_net/JVerein/gui/view/JahresabschlussView.java @@ -63,10 +63,15 @@ public void bind() throws Exception SimpleContainer left = new SimpleContainer(cl.getComposite()); left.addLabelPair("Von", control.getVon()); left.addLabelPair("Bis", control.getBis()); + left.addLabelPair("", control.getAnfangsbestaende()); SimpleContainer middle = new SimpleContainer(cl.getComposite()); middle.addLabelPair("Datum", control.getDatum()); middle.addLabelPair("Name", control.getName()); + if (Einstellungen.getEinstellung().getAfaInJahresabschluss()) + { + middle.addLabelPair("", control.getAfaberechnung()); + } if (Einstellungen.getEinstellung().getMittelverwendung()) { @@ -76,16 +81,6 @@ public void bind() throws Exception right.addLabelPair("Zwanghafte satzungsgemäße\nWeitergabe von Mitteln", control.getZwanghafteWeitergabe()); } - left.addLabelPair("", control.getAnfangsbestaende()); - if (Einstellungen.getEinstellung().getAfaInJahresabschluss()) - middle.addLabelPair("", control.getAfaberechnung()); - - if (Einstellungen.getEinstellung().getMittelverwendung()) - { - ButtonArea abuttons = new ButtonArea(); - abuttons.addButton(control.getZurueck()); - group.addButtonArea(abuttons); - } control.getJahresabschlussSaldo().paint(this.getParent()); diff --git a/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java b/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java index a933f8d2f..e7de70a15 100644 --- a/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java +++ b/src/de/jost_net/JVerein/gui/view/MittelverwendungListeView.java @@ -85,6 +85,7 @@ public void widgetDefaultSelected(SelectionEvent arg0) ButtonArea buttons = new ButtonArea(); buttons.addButton("Hilfe", new DokumentationAction(), DokumentationUtil.MITTELVERWENDUNG, false, "question-circle.png"); + buttons.addButton(control.getConfigButton()); buttons.addButton(control.getCSVExportButton()); buttons.addButton(control.getPDFExportButton()); buttons.paint(this.getParent()); From 34f01543192f89ace76438102ecf4ba4c8bfd38f Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Tue, 4 Feb 2025 16:59:13 +0100 Subject: [PATCH 32/38] fix button refresh --- src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java b/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java index d5585b0da..adf9a9213 100644 --- a/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java +++ b/src/de/jost_net/JVerein/gui/control/MittelverwendungControl.java @@ -146,6 +146,7 @@ public void handleAction(Object context) throws ApplicationException ja.store(); getSaldoList(); updateJahreasabschlüsse(); + updateConfigButton(); } catch (OperationCanceledException ignore) { From cfa0ab447525a233b6cb2ba728cf84f84181ee81 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Wed, 5 Feb 2025 09:48:07 +0100 Subject: [PATCH 33/38] Update Update0463.java --- .../DDLTool/Updates/{Update0462.java => Update0463.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/de/jost_net/JVerein/server/DDLTool/Updates/{Update0462.java => Update0463.java} (92%) diff --git a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0463.java similarity index 92% rename from src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java rename to src/de/jost_net/JVerein/server/DDLTool/Updates/Update0463.java index fd8cac6ab..fb21d9e49 100644 --- a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java +++ b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0463.java @@ -20,9 +20,9 @@ import de.willuhn.util.ApplicationException; import de.willuhn.util.ProgressMonitor; -public class Update0462 extends AbstractDDLUpdate +public class Update0463 extends AbstractDDLUpdate { - public Update0462(String driver, ProgressMonitor monitor, Connection conn) + public Update0463(String driver, ProgressMonitor monitor, Connection conn) { super(driver, monitor, conn); } From b153913c460d435ba67b163173ac1fac07a3104a Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Fri, 7 Feb 2025 08:21:52 +0100 Subject: [PATCH 34/38] Kommentare --- src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java | 6 +++--- .../JVerein/gui/parts/MittelverwendungSaldoList.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java index 2a9467e37..aab6add2d 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungList.java @@ -100,16 +100,16 @@ protected void addZeile(ArrayList zeilen, int status, || status == MittelverwendungZeile.SUMME) { summe = einnahme + ausgabe; - if (summe == -0.0) + if (Math.abs(summe) < LIMIT) { summe = 0.0; } } - if (einnahme != null && einnahme == -0.0) + if (einnahme != null && Math.abs(einnahme) < LIMIT) { einnahme = 0.0; } - if (ausgabe != null && ausgabe == -0.0) + if (ausgabe != null && Math.abs(ausgabe) < LIMIT) { ausgabe = 0.0; } diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java index f01a9d4c5..b6c117563 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungSaldoList.java @@ -68,7 +68,7 @@ protected void orderBy(int index) Column.ALIGN_RIGHT); saldoList.addColumn("Summe", "summe", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, - Column.ALIGN_LEFT); + Column.ALIGN_RIGHT); saldoList.addColumn("Kommentar", "kommentar"); saldoList.setRememberColWidths(true); saldoList.setRememberOrder(true); From d20f2e0c0cfe873df4e0d5bf88a1612cddaa59f4 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Fri, 7 Feb 2025 08:35:52 +0100 Subject: [PATCH 35/38] Change to EditAction --- .../jost_net/JVerein/gui/control/JahresabschlussControl.java | 5 +++-- src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java index a498cd2c7..560f8c27d 100644 --- a/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java +++ b/src/de/jost_net/JVerein/gui/control/JahresabschlussControl.java @@ -23,11 +23,12 @@ import java.util.Date; import de.jost_net.JVerein.Einstellungen; -import de.jost_net.JVerein.gui.action.JahresabschlussDetailAction; +import de.jost_net.JVerein.gui.action.EditAction; import de.jost_net.JVerein.gui.menu.JahresabschlussMenu; import de.jost_net.JVerein.gui.parts.KontensaldoList; import de.jost_net.JVerein.gui.parts.MittelverwendungFlowList; import de.jost_net.JVerein.gui.util.AfaUtil; +import de.jost_net.JVerein.gui.view.JahresabschlussView; import de.jost_net.JVerein.io.SaldoZeile; import de.jost_net.JVerein.keys.Kontoart; import de.jost_net.JVerein.rmi.Anfangsbestand; @@ -360,7 +361,7 @@ public Part getJahresabschlussList() throws RemoteException jahresabschluesse.setOrder("ORDER BY von desc"); jahresabschlussList = new TablePart(jahresabschluesse, - new JahresabschlussDetailAction()); + new EditAction(JahresabschlussView.class)); jahresabschlussList.addColumn("Nr", "id-int"); jahresabschlussList.addColumn("Von", "von", new DateFormatter(new JVDateFormatTTMMJJJJ())); diff --git a/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java b/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java index d3c9c0eea..7703a05f4 100644 --- a/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java +++ b/src/de/jost_net/JVerein/gui/menu/JahresabschlussMenu.java @@ -18,8 +18,9 @@ import java.rmi.RemoteException; +import de.jost_net.JVerein.gui.action.EditAction; import de.jost_net.JVerein.gui.action.JahresabschlussDeleteAction; -import de.jost_net.JVerein.gui.action.JahresabschlussDetailAction; +import de.jost_net.JVerein.gui.view.JahresabschlussView; import de.willuhn.jameica.gui.parts.CheckedContextMenuItem; import de.willuhn.jameica.gui.parts.CheckedSingleContextMenuItem; import de.willuhn.jameica.gui.parts.ContextMenu; @@ -38,7 +39,7 @@ public class JahresabschlussMenu extends ContextMenu public JahresabschlussMenu() throws RemoteException { addItem(new CheckedSingleContextMenuItem("Anzeigen", - new JahresabschlussDetailAction(), "text-x-generic.png")); + new EditAction(JahresabschlussView.class), "text-x-generic.png")); addItem(new CheckedContextMenuItem("Löschen", new JahresabschlussDeleteAction(), "user-trash-full.png")); } From 8cee6bb2ad25556c45e83e3d295ba4df4fdf2e66 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Fri, 7 Feb 2025 08:49:27 +0100 Subject: [PATCH 36/38] Dummy Spalte --- src/de/jost_net/JVerein/gui/parts/AnlagenList.java | 3 +++ .../jost_net/JVerein/gui/parts/MittelverwendungFlowList.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/de/jost_net/JVerein/gui/parts/AnlagenList.java b/src/de/jost_net/JVerein/gui/parts/AnlagenList.java index e3eee2f10..8cc323cf1 100644 --- a/src/de/jost_net/JVerein/gui/parts/AnlagenList.java +++ b/src/de/jost_net/JVerein/gui/parts/AnlagenList.java @@ -104,6 +104,9 @@ protected void orderBy(int index) saldoList.addColumn("Buchwert Ende GJ", "endwert", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, Column.ALIGN_RIGHT); + saldoList.addColumn(" ", " ", + new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, + Column.ALIGN_LEFT); saldoList.setRememberColWidths(true); saldoList.removeFeature(FeatureSummary.class); } diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java index 73a987811..75317000e 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java @@ -94,6 +94,9 @@ protected void orderBy(int index) new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, Column.ALIGN_RIGHT); flowList.addColumn("Summe", "summe", + new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, + Column.ALIGN_RIGHT); + flowList.addColumn(" ", " ", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, Column.ALIGN_LEFT); flowList.setRememberColWidths(true); From d98cd0e0001342ff4e95185bf5854e915173c859 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Fri, 7 Feb 2025 08:59:34 +0100 Subject: [PATCH 37/38] Spalten --- src/de/jost_net/JVerein/gui/control/RechnungControl.java | 5 +++++ .../jost_net/JVerein/gui/parts/MittelverwendungFlowList.java | 1 + src/de/jost_net/JVerein/gui/parts/ProjektSaldoList.java | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/src/de/jost_net/JVerein/gui/control/RechnungControl.java b/src/de/jost_net/JVerein/gui/control/RechnungControl.java index bc9c50e07..82ee89194 100644 --- a/src/de/jost_net/JVerein/gui/control/RechnungControl.java +++ b/src/de/jost_net/JVerein/gui/control/RechnungControl.java @@ -59,6 +59,7 @@ import de.willuhn.jameica.gui.input.DecimalInput; import de.willuhn.jameica.gui.input.TextInput; import de.willuhn.jameica.gui.parts.Button; +import de.willuhn.jameica.gui.parts.Column; import de.willuhn.jameica.gui.parts.TablePart; import de.willuhn.jameica.gui.parts.table.FeatureSummary; import de.willuhn.jameica.hbci.HBCIProperties; @@ -151,6 +152,10 @@ public Part getRechnungList() throws RemoteException rechnungList.addColumn("Differenz", "differenz", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT)); rechnungList.addColumn("Zahlungsweg", "zahlungsweg", new ZahlungswegFormatter()); + // Dummy Spalte, damit Zahlungsweg nicht am rechten Rand klebt + rechnungList.addColumn(" ", " ", + new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, + Column.ALIGN_LEFT); rechnungList.setRememberColWidths(true); rechnungList.setContextMenu(new RechnungMenu()); diff --git a/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java b/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java index 75317000e..ca718d45e 100644 --- a/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java +++ b/src/de/jost_net/JVerein/gui/parts/MittelverwendungFlowList.java @@ -96,6 +96,7 @@ protected void orderBy(int index) flowList.addColumn("Summe", "summe", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, Column.ALIGN_RIGHT); + // Dummy Spalte, damit Summe nicht am rechten Rand klebt flowList.addColumn(" ", " ", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, Column.ALIGN_LEFT); diff --git a/src/de/jost_net/JVerein/gui/parts/ProjektSaldoList.java b/src/de/jost_net/JVerein/gui/parts/ProjektSaldoList.java index c2b80c76d..1fa0b982c 100644 --- a/src/de/jost_net/JVerein/gui/parts/ProjektSaldoList.java +++ b/src/de/jost_net/JVerein/gui/parts/ProjektSaldoList.java @@ -83,6 +83,10 @@ protected void orderBy(int index) saldoList.addColumn("Umbuchungen", "umbuchungen", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, Column.ALIGN_RIGHT); + // Dummy Spalte, damit Umbuchungen nicht am rechten Rand klebt + saldoList.addColumn(" ", " ", + new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, + Column.ALIGN_LEFT); saldoList.setRememberColWidths(true); saldoList.removeFeature(FeatureSummary.class); } From 48b599b55518422f59b34e813c3314bc25dac8ba Mon Sep 17 00:00:00 2001 From: Johann Maierhofer Date: Fri, 7 Feb 2025 09:04:32 +0100 Subject: [PATCH 38/38] noch ein Kommentar --- src/de/jost_net/JVerein/gui/parts/AnlagenList.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/de/jost_net/JVerein/gui/parts/AnlagenList.java b/src/de/jost_net/JVerein/gui/parts/AnlagenList.java index 8cc323cf1..969c03400 100644 --- a/src/de/jost_net/JVerein/gui/parts/AnlagenList.java +++ b/src/de/jost_net/JVerein/gui/parts/AnlagenList.java @@ -104,6 +104,7 @@ protected void orderBy(int index) saldoList.addColumn("Buchwert Ende GJ", "endwert", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, Column.ALIGN_RIGHT); + // Dummy Spalte, damit endwert nicht am rechten Rand klebt saldoList.addColumn(" ", " ", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT), false, Column.ALIGN_LEFT);