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..a4e97ac58 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 = ?"; @@ -402,6 +318,14 @@ private void addZeile(ArrayList zeilen, int status, Integer position, String bezeichnung, Double einnahme, Double ausgabe) 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: 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/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); 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..8ca9d2d0f --- /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, "Nutzungsgebundene 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..1fb8ff81d 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ü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. 1 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 für Gesellschaftsrechte nach § 62 Abs. 1 Nr. 4 AO"), + VERMOEGEN(108, "Vermögen nach § 62 Abs. 3 und 4 AO"), + RUECKLAGE_SONSTIG(109, "Sonstige Rücklage"); 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 c7ff17383..1213c0e7b 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; @@ -114,4 +115,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/Update0458.java b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0458.java new file mode 100644 index 000000000..c5afb117d --- /dev/null +++ b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0458.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 Update0458 extends AbstractDDLUpdate +{ + public Update0458(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 cba9f23ae..94725af3e 100644 --- a/src/de/jost_net/JVerein/server/KontoImpl.java +++ b/src/de/jost_net/JVerein/server/KontoImpl.java @@ -23,6 +23,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.Anfangsbestand; import de.jost_net.JVerein.rmi.Buchungsart; @@ -531,4 +532,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()); + } }