diff --git a/src/de/jost_net/JVerein/gui/action/BuchungDeleteAction.java b/src/de/jost_net/JVerein/gui/action/BuchungDeleteAction.java index b074698c8..2a84609d4 100644 --- a/src/de/jost_net/JVerein/gui/action/BuchungDeleteAction.java +++ b/src/de/jost_net/JVerein/gui/action/BuchungDeleteAction.java @@ -19,6 +19,7 @@ import java.rmi.RemoteException; import de.jost_net.JVerein.Messaging.BuchungMessage; +import de.jost_net.JVerein.io.SplitbuchungsContainer; import de.jost_net.JVerein.rmi.Buchung; import de.jost_net.JVerein.rmi.Jahresabschluss; import de.jost_net.JVerein.util.JVDateFormatTTMMJJJJ; @@ -107,16 +108,32 @@ else if (context instanceof Buchung[]) } else if (splitbuchung) { - bu.setDelete(true); - Application.getMessagingFactory().sendMessage(new BuchungMessage(bu)); - count++; + if (bu.getDependencyId() == -1) + { + bu.setDelete(true); + Application.getMessagingFactory() + .sendMessage(new BuchungMessage(bu)); + count++; + } + else + { + for (Buchung buchung_tmp : SplitbuchungsContainer.get()) + { + if (buchung_tmp.getDependencyId() == bu.getDependencyId()) + { + buchung_tmp.setDelete(true); + Application.getMessagingFactory() + .sendMessage(new BuchungMessage(buchung_tmp)); + count++; + } + } + } } } if (count > 0) { - GUI.getStatusBar().setSuccessText( - String.format("%d Buchung" + (b.length != 1 ? "en" : "") - + " gelöscht.", count)); + GUI.getStatusBar().setSuccessText(String.format( + "%d Buchung" + (count != 1 ? "en" : "") + " gelöscht.", count)); } else { diff --git a/src/de/jost_net/JVerein/gui/control/BuchungsControl.java b/src/de/jost_net/JVerein/gui/control/BuchungsControl.java index 3dc0fc9f6..82f65f138 100644 --- a/src/de/jost_net/JVerein/gui/control/BuchungsControl.java +++ b/src/de/jost_net/JVerein/gui/control/BuchungsControl.java @@ -17,6 +17,8 @@ package de.jost_net.JVerein.gui.control; import java.io.File; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.rmi.RemoteException; import java.text.ParseException; import java.util.ArrayList; @@ -55,8 +57,10 @@ import de.jost_net.JVerein.io.BuchungsjournalPDF; import de.jost_net.JVerein.io.SplitbuchungsContainer; import de.jost_net.JVerein.io.Adressbuch.Adressaufbereitung; +import de.jost_net.JVerein.keys.ArtBuchungsart; import de.jost_net.JVerein.keys.BuchungsartSort; import de.jost_net.JVerein.keys.SplitbuchungTyp; +import de.jost_net.JVerein.keys.SteuersatzBuchungsart; import de.jost_net.JVerein.keys.Zahlungsweg; import de.jost_net.JVerein.rmi.Buchung; import de.jost_net.JVerein.rmi.Buchungsart; @@ -164,6 +168,8 @@ public class BuchungsControl extends AbstractControl private Buchung buchung; + private ArrayList dependent_buchungen; + private Button sammelueberweisungButton; private BuchungQuery query; @@ -200,6 +206,59 @@ public Buchung getBuchung() throws RemoteException return buchung; } + public void fillBuchung(Buchung b) throws ApplicationException, RemoteException + { + b.setBuchungsart(getSelectedBuchungsArtId()); + b.setProjektID(getSelectedProjektId()); + b.setKonto(getSelectedKonto()); + b.setAuszugsnummer(getAuszugsnummerWert()); + b.setBlattnummer(getBlattnummerWert()); + b.setName((String) getName().getValue()); + b.setIban((String) getIban().getValue()); + if (getBetrag().getValue() != null) + { + b.setBetrag((Double) getBetrag().getValue()); + } + b.setZweck((String) getZweck().getValue()); + b.setDatum((Date) getDatum().getValue()); + b.setArt((String) getArt().getValue()); + b.setVerzicht((Boolean) getVerzicht().getValue()); + b.setMitgliedskonto(getSelectedMitgliedsKonto(b)); + b.setKommentar((String) getKommentar().getValue()); + } + + public ArrayList getDependentBuchungen() throws RemoteException + { + if (dependent_buchungen != null) + { + return dependent_buchungen; + } + + // Falls noch nichts erzeugt wurde, neue Liste erzeugen und DependencyId setzen! + dependent_buchungen = new ArrayList(); + if (getBuchung().getDependencyId() == -1) { + Buchung new_dependent_buchung = (Buchung) Einstellungen.getDBService() + .createObject(Buchung.class, null); + getBuchung().setDependencyId(SplitbuchungsContainer.getNewDependencyId()); + new_dependent_buchung.setDependencyId(getBuchung().getDependencyId()); + dependent_buchungen.add(new_dependent_buchung); + } + // Falls DependencyId vorhanden ist, alle anderen Elemente mit gleicher Id raussuchen + else { + int pos_b = SplitbuchungsContainer.get().indexOf(getBuchung()); + for (Buchung b_tmp : SplitbuchungsContainer.get()) { + if (b_tmp.getDependencyId() == getBuchung().getDependencyId() && + SplitbuchungsContainer.get().indexOf(b_tmp) != pos_b) { + dependent_buchungen.add(b_tmp); + } + } + } + if (dependent_buchungen.size() == 0) { + throw new RemoteException("Buchungen mit Id " + getBuchung().getDependencyId() + " konnten nicht gefunden werden!"); + } + return dependent_buchungen; + } + public Input getID() throws RemoteException { if (id != null) @@ -755,24 +814,7 @@ private void handleStore() throws ApplicationException try { Buchung b = getBuchung(); - - b.setBuchungsart(getSelectedBuchungsArtId()); - b.setProjektID(getSelectedProjektId()); - b.setKonto(getSelectedKonto()); - b.setAuszugsnummer(getAuszugsnummerWert()); - b.setBlattnummer(getBlattnummerWert()); - b.setName((String) getName().getValue()); - b.setIban((String) getIban().getValue()); - if (getBetrag().getValue() != null) - { - b.setBetrag((Double) getBetrag().getValue()); - } - b.setZweck((String) getZweck().getValue()); - b.setDatum((Date) getDatum().getValue()); - b.setArt((String) getArt().getValue()); - b.setVerzicht((Boolean) getVerzicht().getValue()); - b.setMitgliedskonto(getSelectedMitgliedsKonto(b)); - b.setKommentar((String) getKommentar().getValue()); + fillBuchung(b); if (b.getSpeicherung()) { @@ -782,7 +824,50 @@ private void handleStore() throws ApplicationException } else { - SplitbuchungsContainer.add(b); + Buchungsart b_art = b.getBuchungsart(); + if (b_art.getSteuersatz() > 0) { + Buchung b_steuer = getDependentBuchungen().get(0); + fillBuchung(b_steuer); + + BigDecimal steuer = new BigDecimal( + Double.toString(b.getBetrag() * b_art.getSteuersatz() / 100)) + .setScale(2, RoundingMode.HALF_UP); + String zweck_postfix = " - " + SteuersatzBuchungsart.get(b_art.getSteuersatz()); + switch (b_art.getArt()) { + case ArtBuchungsart.AUSGABE: + zweck_postfix += " VSt."; + break; + case ArtBuchungsart.EINNAHME: + zweck_postfix += " MwSt."; + break; + default: + zweck_postfix += " USt."; + break; + } + + b_steuer.setBuchungsart(new Long(b_art.getSteuerBuchungsart().getID())); + b_steuer.setBetrag(steuer.doubleValue()); + b_steuer.setZweck(b.getZweck() + zweck_postfix); + b_steuer.setSplitId(b.getSplitId()); + b_steuer.setSplitTyp(SplitbuchungTyp.SPLIT); + + SplitbuchungsContainer.add(b); + SplitbuchungsContainer.add(b_steuer); + } + else { + // Falls vorher abhängige Buchungen erzeugt wurden, nun dies aber durch ändern der Buchungsart o.ä. aufgehoben wird, + // alle abhängigen Buchungen löschen und Abhängigkeit resetten + if (b.getDependencyId() != -1) { + for (Buchung b_tmp : getDependentBuchungen()) { + b_tmp.setDependencyId(-1); + b_tmp.setDelete(true); + Application.getMessagingFactory().sendMessage(new BuchungMessage(b_tmp)); + } + b.setDependencyId(-1); + } + SplitbuchungsContainer.add(b); + } + refreshSplitbuchungen(); GUI.getStatusBar().setSuccessText("Buchung übernommen"); } diff --git a/src/de/jost_net/JVerein/gui/control/BuchungsartControl.java b/src/de/jost_net/JVerein/gui/control/BuchungsartControl.java index 5dd620338..6fde0cc71 100644 --- a/src/de/jost_net/JVerein/gui/control/BuchungsartControl.java +++ b/src/de/jost_net/JVerein/gui/control/BuchungsartControl.java @@ -20,9 +20,10 @@ import java.io.FileOutputStream; import java.rmi.RemoteException; import java.util.List; - import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; +import org.eclipse.swt.widgets.Listener; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Element; @@ -34,6 +35,7 @@ import de.jost_net.JVerein.io.FileViewer; import de.jost_net.JVerein.io.Reporter; import de.jost_net.JVerein.keys.ArtBuchungsart; +import de.jost_net.JVerein.keys.SteuersatzBuchungsart; import de.jost_net.JVerein.keys.BuchungsartSort; import de.jost_net.JVerein.rmi.Buchungsart; import de.jost_net.JVerein.rmi.Buchungsklasse; @@ -78,6 +80,10 @@ public class BuchungsartControl extends AbstractControl private CheckboxInput spende; + private SelectInput steuersatz; + + private SelectInput steuer_buchungsart; + private TextInput suchtext; private Buchungsart buchungsart; @@ -141,42 +147,209 @@ public CheckboxInput getSpende() throws RemoteException return spende; } spende = new CheckboxInput(getBuchungsart().getSpende()); + spende.addListener(new Listener() + { + // Listener enabled / disabled Steuer Felder falls eine Spende ausgewählt wurde + // (Steuer und Spende schließen sich aus) + @Override + public void handleEvent(Event event) + { + // Disable steuersatz and buchungsart for type spende + if ((Boolean) spende.getValue()) + { + steuersatz.setPleaseChoose("Kein Steuersatz für Spenden"); + steuersatz.setList(null); + steuersatz.setValue(null); + steuersatz.disable(); + steuer_buchungsart.setPleaseChoose("Keine Buchungsart für Spenden"); + steuer_buchungsart.setList(null); + steuer_buchungsart.setValue(null); + steuer_buchungsart.disable(); + } + else + { + // Rebuild selectinput values if buchungsart is NOT spende + steuersatz.setPleaseChoose(null); + steuersatz.setList(SteuersatzBuchungsart.getArray()); + steuersatz.setValue(null); + steuersatz.enable(); + steuer_buchungsart.setPleaseChoose("Bitte Steuersatz wählen"); + steuer_buchungsart.setList(null); + steuer_buchungsart.setValue(null); + steuer_buchungsart.disable(); + } + } + }); return spende; } - public Input getBuchungsklasse() throws RemoteException + public SelectInput getSteuersatz() throws RemoteException { - if (buchungsklasse != null) + if (steuersatz != null) { - return buchungsklasse; + return steuersatz; } - DBIterator list = Einstellungen.getDBService() - .createList(Buchungsklasse.class); - if (Einstellungen.getEinstellung() - .getBuchungsartSort() == BuchungsartSort.NACH_NUMMER) + steuersatz = new SelectInput(SteuersatzBuchungsart.getArray(), + new SteuersatzBuchungsart(getBuchungsart().getSteuersatz())); + // Disable steuersatz for type spende + if (getBuchungsart().getSpende()) { - list.setOrder("ORDER BY nummer"); + steuersatz.setPleaseChoose("Kein Steuersatz für Spenden"); + steuersatz.setValue(null); + steuersatz.setList(null); + steuersatz.disable(); + } + steuersatz.addListener(new Listener() + { + // Listener enabled / disabled Feld Buchungsart für Steuer falls Steuer = 0 ist + @Override + public void handleEvent(Event event) + { + SteuersatzBuchungsart steuersatzItem = (SteuersatzBuchungsart) steuersatz.getValue(); + Double steuersatzValue = (steuersatzItem == null) ? Double.valueOf(0) : (Double) steuersatzItem.getSteuersatz(); + if (steuersatzValue == null || steuersatzValue == 0) + { + // disable und auf 0 setzen + steuer_buchungsart.setPleaseChoose("Bitte Steuersatz wählen"); + steuer_buchungsart.setValue(null); + steuer_buchungsart.setList(null); + steuer_buchungsart.disable(); + } + else + { + try + { + DBIterator it = getFilteredBuchungsart(); + List buchungsartenListe = it != null ? PseudoIterator.asList(it) : null; + steuer_buchungsart.setPleaseChoose("Bitte wählen"); + steuer_buchungsart.setAttribute(getBuchungartAttribute()); + steuer_buchungsart.setList(buchungsartenListe); + steuer_buchungsart.enable(); + } + catch (RemoteException e) + { + Logger.error(e.getMessage()); + } + } + } + }); + return steuersatz; + } + + public SelectInput getSteuerBuchungsart() throws RemoteException + { + if (steuer_buchungsart != null) + { + return steuer_buchungsart; + } + + Boolean isSpende = getBuchungsart().getSpende(); + Boolean hasSteuersatz = ((getSteuersatz().getValue() != null) && (getSteuersatz().getValue().toString().length() > 0)) ? true : false; + + DBIterator it = (!isSpende && hasSteuersatz) ? getFilteredBuchungsart() : null; + steuer_buchungsart = new SelectInput(it, null); + if (it != null) + { + List buchungsartenListe = it != null ? PseudoIterator.asList(it) : null; + steuer_buchungsart.setAttribute(getBuchungartAttribute()); + steuer_buchungsart.setPleaseChoose("Bitte wählen"); + steuer_buchungsart.setPreselected(getBuchungsart().getSteuerBuchungsart()); + steuer_buchungsart.setList(buchungsartenListe); + steuer_buchungsart.setMandatory(true); } else { - list.setOrder("ORDER BY bezeichnung"); + String pleaseChoose = null; + if (isSpende) + { + pleaseChoose = "Keine Buchungsart für Spenden"; + } + else if (!hasSteuersatz) + { + pleaseChoose = "Bitte Steuersatz wählen"; + } + steuer_buchungsart.setPleaseChoose(pleaseChoose); + steuer_buchungsart.setValue(null); + steuer_buchungsart.setList(null); + steuer_buchungsart.setMandatory(false); + steuer_buchungsart.disable(); } - buchungsklasse = new SelectInput(list, - getBuchungsart().getBuchungsklasse()); - buchungsklasse.setValue(getBuchungsart().getBuchungsklasse()); - switch (Einstellungen.getEinstellung().getBuchungsartSort()) + + return steuer_buchungsart; + } + + public String getBuchungartAttribute() + { + try { - case BuchungsartSort.NACH_NUMMER: - buchungsklasse.setAttribute("nrbezeichnung"); - break; - case BuchungsartSort.NACH_BEZEICHNUNG_NR: - buchungsklasse.setAttribute("bezeichnungnr"); - break; - default: - buchungsklasse.setAttribute("bezeichnung"); - break; + switch (Einstellungen.getEinstellung().getBuchungsartSort()) + { + case BuchungsartSort.NACH_NUMMER: + return "nrbezeichnung"; + case BuchungsartSort.NACH_BEZEICHNUNG_NR: + return "bezeichnungnr"; + default: + return "bezeichnung"; + } } + catch (RemoteException e) + { + String fehler = "Keine Buchungssortierung hinterlegt."; + Logger.error(fehler, e); + GUI.getStatusBar().setErrorText(fehler); + } + + return "bezeichnung"; + } + public String getBuchungartSortOrder() + { + try + { + switch (Einstellungen.getEinstellung().getBuchungsartSort()) + { + case BuchungsartSort.NACH_NUMMER: + return "ORDER BY nummer"; + default: + return "ORDER BY bezeichnung"; + } + } + catch (RemoteException e) + { + String fehler = "Keine Buchungssortierung hinterlegt."; + Logger.error(fehler, e); + GUI.getStatusBar().setErrorText(fehler); + } + + return "ORDER BY bezeichnung"; + } + + public DBIterator getFilteredBuchungsart() throws RemoteException + { + DBIterator it = Einstellungen.getDBService() + .createList(Buchungsart.class); + it.setOrder("ORDER BY nummer"); + // Do not allow to select oneself + if (getBuchungsart().getID() != null) it.addFilter("id != " + getBuchungsart().getID()); + it.addFilter("(spende = false OR spende IS NULL)"); + it.addFilter("(steuersatz = 0 OR steuersatz IS NULL)"); + + return it; + } + + public Input getBuchungsklasse() throws RemoteException + { + if (buchungsklasse != null) + { + return buchungsklasse; + } + DBIterator list = Einstellungen.getDBService() + .createList(Buchungsklasse.class); + list.setOrder(getBuchungartSortOrder()); + buchungsklasse = new SelectInput(list, + getBuchungsart().getBuchungsklasse()); + buchungsklasse.setValue(getBuchungsart().getBuchungsklasse()); + buchungsklasse.setAttribute(getBuchungartAttribute()); buchungsklasse.setPleaseChoose("Bitte auswählen"); return buchungsklasse; } @@ -211,6 +384,16 @@ public void handleStore() b.setBuchungsklasse(null); } b.setSpende((Boolean) spende.getValue()); + double steuersatzValue = (SteuersatzBuchungsart) steuersatz.getValue() == null ? 0 : ((SteuersatzBuchungsart) steuersatz.getValue()).getSteuersatz(); + b.setSteuersatz(steuersatzValue); + if (steuer_buchungsart.getValue() instanceof Buchungsart) + { + b.setSteuerBuchungsart((String) ((Buchungsart) steuer_buchungsart.getValue()).getID()); + } + else + { + b.setSteuerBuchungsart(null); + } try { @@ -274,22 +457,52 @@ public String format(Object o) } if (o instanceof Integer) { - Integer art = (Integer) o; - switch (art.intValue()) - { - case 0: - return "Einnahme"; - case 1: - return "Ausgabe"; - case 2: - return "Umbuchung"; - } + return ArtBuchungsart.get((Integer) o); } return "ungültig"; } }, false, Column.ALIGN_LEFT); buchungsartList.addColumn("Buchungsklasse", "buchungsklasse"); buchungsartList.addColumn("Spende", "spende", new JaNeinFormatter()); + buchungsartList.addColumn("Steuersatz", "steuersatz", new Formatter() + { + @Override + public String format(Object o) + { + if (o == null) + { + return ""; + } + if (o instanceof Double) + { + return SteuersatzBuchungsart.get((Double) o); + } + return "ungültig"; + } + }, false, Column.ALIGN_RIGHT); + buchungsartList.addColumn("Steuer Buchungsart", "steuer_buchungsart", new Formatter() + { + @Override + public String format(Object o) + { + if (o == null) + { + return ""; + } + if (o instanceof String) + { + try { + DBIterator steuer_buchungsart = Einstellungen.getDBService().createList(Buchungsart.class); + steuer_buchungsart.addFilter("id = " + (String) o); + return steuer_buchungsart.next().getNummer() + ""; + + } catch (RemoteException e) { + return ""; + } + } + return "ungültig"; + } + }, false, Column.ALIGN_RIGHT); buchungsartList.setContextMenu(new BuchungsartMenu()); buchungsartList.setRememberColWidths(true); buchungsartList.setRememberOrder(true); @@ -378,6 +591,10 @@ public void run(ProgressMonitor monitor) throws ApplicationException reporter.addHeaderColumn("Buchungsklasse", Element.ALIGN_LEFT, 80, BaseColor.LIGHT_GRAY); reporter.addHeaderColumn("Spende", Element.ALIGN_CENTER, 20, + BaseColor.LIGHT_GRAY); + reporter.addHeaderColumn("Steuersatz", Element.ALIGN_CENTER, 25, + BaseColor.LIGHT_GRAY); + reporter.addHeaderColumn("Steuer Buchungsart", Element.ALIGN_CENTER, 30, BaseColor.LIGHT_GRAY); reporter.createHeader(); while (it.hasNext()) @@ -385,20 +602,7 @@ public void run(ProgressMonitor monitor) throws ApplicationException Buchungsart b = it.next(); reporter.addColumn(b.getNummer() + "", Element.ALIGN_RIGHT); reporter.addColumn(b.getBezeichnung(), Element.ALIGN_LEFT); - String arttxt = ""; - switch (b.getArt()) - { - case 0: - arttxt = "Einnahme"; - break; - case 1: - arttxt = "Ausgabe"; - break; - case 2: - arttxt = "Umbuchung"; - break; - } - reporter.addColumn(arttxt, Element.ALIGN_LEFT); + reporter.addColumn(ArtBuchungsart.get(b.getArt()), Element.ALIGN_LEFT); if (b.getBuchungsklasse() != null) { reporter.addColumn(b.getBuchungsklasse().getBezeichnung(), @@ -409,6 +613,13 @@ public void run(ProgressMonitor monitor) throws ApplicationException reporter.addColumn("", Element.ALIGN_LEFT); } reporter.addColumn(b.getSpende()); + reporter.addColumn(SteuersatzBuchungsart.get(b.getSteuersatz()), Element.ALIGN_RIGHT); + if (b.getSteuerBuchungsart() != null) { + reporter.addColumn(b.getSteuerBuchungsart().getNummer() + "", Element.ALIGN_RIGHT); + } + else { + reporter.addColumn("", Element.ALIGN_LEFT); + } } reporter.closeTable(); reporter.close(); diff --git a/src/de/jost_net/JVerein/gui/menu/SplitBuchungMenu.java b/src/de/jost_net/JVerein/gui/menu/SplitBuchungMenu.java index 6a68fddce..db12c9d42 100644 --- a/src/de/jost_net/JVerein/gui/menu/SplitBuchungMenu.java +++ b/src/de/jost_net/JVerein/gui/menu/SplitBuchungMenu.java @@ -26,6 +26,7 @@ import de.jost_net.JVerein.gui.action.BuchungMitgliedskontoZuordnungAction; import de.jost_net.JVerein.gui.action.BuchungProjektZuordnungAction; import de.jost_net.JVerein.gui.control.BuchungsControl; +import de.jost_net.JVerein.io.SplitbuchungsContainer; import de.jost_net.JVerein.keys.SplitbuchungTyp; import de.jost_net.JVerein.rmi.Buchung; import de.willuhn.jameica.gui.Action; @@ -127,9 +128,24 @@ public void handleAction(Object context) throws ApplicationException try { Buchung bu = (Buchung) context; - bu.setDelete(false); - Application.getMessagingFactory() - .sendMessage(new BuchungMessage(bu)); + if (bu.getDependencyId() == -1) + { + bu.setDelete(false); + Application.getMessagingFactory() + .sendMessage(new BuchungMessage(bu)); + } + else + { + for (Buchung buchung_tmp : SplitbuchungsContainer.get()) + { + if (buchung_tmp.getDependencyId() == bu.getDependencyId()) + { + buchung_tmp.setDelete(false); + Application.getMessagingFactory() + .sendMessage(new BuchungMessage(buchung_tmp)); + } + } + } } catch (RemoteException e) { diff --git a/src/de/jost_net/JVerein/gui/parts/BuchungsklasseSaldoList.java b/src/de/jost_net/JVerein/gui/parts/BuchungsklasseSaldoList.java index 884c22275..36f653086 100644 --- a/src/de/jost_net/JVerein/gui/parts/BuchungsklasseSaldoList.java +++ b/src/de/jost_net/JVerein/gui/parts/BuchungsklasseSaldoList.java @@ -1,18 +1,18 @@ /********************************************************************** * 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 + * + * 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. + * 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 . + * 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 + * heiner@jverein.de | www.jverein.de **********************************************************************/ package de.jost_net.JVerein.gui.parts; @@ -21,11 +21,13 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; - +import java.util.HashMap; +import java.util.HashSet; import org.eclipse.swt.widgets.Composite; import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.io.BuchungsklasseSaldoZeile; +import de.jost_net.JVerein.keys.ArtBuchungsart; import de.jost_net.JVerein.rmi.Buchungsart; import de.jost_net.JVerein.rmi.Buchungsklasse; import de.willuhn.datasource.GenericIterator; @@ -44,11 +46,11 @@ public class BuchungsklasseSaldoList extends TablePart implements Part { - private TablePart saldoList; + private TablePart saldoList; - private Date datumvon = null; + private Date datumvon = null; - private Date datumbis = null; + private Date datumbis = null; public BuchungsklasseSaldoList(Action action, Date datumvon, Date datumbis) { @@ -123,6 +125,11 @@ public ArrayList getInfo() throws RemoteException Double suEinnahmen = new Double(0); Double suAusgaben = new Double(0); Double suUmbuchungen = new Double(0); + HashMap suNetto = new HashMap(); + HashMap suSteuer = new HashMap(); + HashMap suBukNetto = new HashMap(); + HashMap suBukSteuer = new HashMap(); + HashMap suBukSteuersatz = new HashMap(); ResultSetExtractor rsd = new ResultSetExtractor() { @@ -162,10 +169,39 @@ public Object extract(ResultSet rs) throws SQLException .createList(Buchungsart.class); buchungsartenIt.addFilter("buchungsklasse = ?", new Object[] { buchungsklasse.getID() }); + + suBukSteuersatz.clear(); + DBIterator buchungsartenSteuerIt = service + .createList(Buchungsart.class); + buchungsartenSteuerIt.addFilter("buchungsklasse = ?", + new Object[] { buchungsklasse.getID() }); + buchungsartenSteuerIt.addFilter("steuersatz <> 0"); + while (buchungsartenSteuerIt.hasNext()) + { + buchungsart = (Buchungsart) buchungsartenSteuerIt.next(); + Buchungsart steuer_buchungsart = buchungsart.getSteuerBuchungsart(); + if (steuer_buchungsart != null) + { + String steuer_buchungsart_id = steuer_buchungsart.getID(); + if (buchungsart.getArt() == ArtBuchungsart.EINNAHME) + { + suBukSteuersatz.put(steuer_buchungsart_id, + buchungsart.getSteuersatz()); + } + else if (buchungsart.getArt() == ArtBuchungsart.AUSGABE) + { + suBukSteuersatz.put(steuer_buchungsart_id, + -buchungsart.getSteuersatz()); + } + } + } + buchungsartenIt.setOrder("order by nummer"); suBukEinnahmen = new Double(0); suBukAusgaben = new Double(0); suBukUmbuchungen = new Double(0); + suBukNetto.clear(); + suBukSteuer.clear(); boolean ausgabe = false; while (buchungsartenIt.hasNext()) @@ -195,6 +231,37 @@ public Object extract(ResultSet rs) throws SQLException umbuchungen = (Double) service.execute(sql, new Object[] { datumvon, datumbis, buchungsart.getID(), 2 }, rsd); suBukUmbuchungen += umbuchungen; + + if (buchungsart.getSteuersatz() > 0.0) + { + Double steuersatz = buchungsart.getSteuersatz(); + Double val = 0.0; + if (buchungsart.getArt() == ArtBuchungsart.EINNAHME) + { + val = einnahmen; + } + else if (buchungsart.getArt() == ArtBuchungsart.AUSGABE) + { + steuersatz = -steuersatz; + val = ausgaben; + } + if (!suBukNetto.containsKey(steuersatz)) + { + suBukNetto.put(steuersatz, 0.0); + } + suBukNetto.put(steuersatz, suBukNetto.get(steuersatz) + val); + } + else if (suBukSteuersatz.containsKey(buchungsart.getID())) + { + Double steuersatz = suBukSteuersatz.get(buchungsart.getID()); + if (!suBukSteuer.containsKey(steuersatz)) + { + suBukSteuer.put(steuersatz, 0.0); + } + suBukSteuer.put(steuersatz, + suBukSteuer.get(steuersatz) + einnahmen + ausgaben + umbuchungen); + } + zeile.add(new BuchungsklasseSaldoZeile(BuchungsklasseSaldoZeile.DETAIL, buchungsart, einnahmen, ausgaben, umbuchungen)); } @@ -216,6 +283,52 @@ public Object extract(ResultSet rs) throws SQLException BuchungsklasseSaldoZeile.SALDOGEWINNVERLUST, "Gewinn/Verlust" + " " + buchungsklasse.getBezeichnung(), suBukEinnahmen + suBukAusgaben + suBukUmbuchungen)); + + // Buchungsklasse Übersicht Steuern ausgeben + Boolean first_row = true; + for (Double steuersatz : suBukNetto.keySet()) + { + String string_steuersatz = String.format("%.2f", Math.abs(steuersatz)) + + "% "; + if (steuersatz > 0.0) + { + string_steuersatz += " MwSt."; + } + else + { + string_steuersatz += " VSt."; + } + if (!suBukSteuer.containsKey(steuersatz)) + { + suBukSteuer.put(steuersatz, 0.0); + } + if (first_row) + { + zeile.add(new BuchungsklasseSaldoZeile( + BuchungsklasseSaldoZeile.STEUERHEADER, + "Steuern " + buchungsklasse.getBezeichnung(), string_steuersatz, + suBukNetto.get(steuersatz), suBukSteuer.get(steuersatz))); + first_row = false; + } + else + { + zeile.add(new BuchungsklasseSaldoZeile( + BuchungsklasseSaldoZeile.STEUER, "", string_steuersatz, + suBukNetto.get(steuersatz), suBukSteuer.get(steuersatz))); + } + + // Werte für Gesamtübersicht addieren + if (!suNetto.containsKey(steuersatz)) + { + suNetto.put(steuersatz, 0.0); + suSteuer.put(steuersatz, 0.0); + } + suNetto.put(steuersatz, + suNetto.get(steuersatz) + suBukNetto.get(steuersatz)); + suSteuer.put(steuersatz, + suSteuer.get(steuersatz) + suBukSteuer.get(steuersatz)); + + } } String sql = "select sum(betrag) from buchung, buchungsart " + "where datum >= ? and datum <= ? " @@ -250,8 +363,39 @@ public Object extract(ResultSet rs) throws SQLException BuchungsklasseSaldoZeile.GESAMTGEWINNVERLUST, "Gesamt Gewinn/Verlust ", suEinnahmen + suAusgaben + suUmbuchungen)); + // Gesamtübersicht Steuern ausgeben + Boolean first_row = true; + for (Double steuersatz : suNetto.keySet()) + { + String string_steuersatz = String.format("%.2f", Math.abs(steuersatz)) + + "% "; + if (steuersatz > 0.0) + { + string_steuersatz += " MwSt."; + } + else + { + string_steuersatz += " VSt."; + } + if (first_row) + { + zeile.add( + new BuchungsklasseSaldoZeile(BuchungsklasseSaldoZeile.STEUERHEADER, + "Gesamtübersicht Steuern", string_steuersatz, + suNetto.get(steuersatz), suSteuer.get(steuersatz))); + first_row = false; + } + else + { + zeile.add(new BuchungsklasseSaldoZeile(BuchungsklasseSaldoZeile.STEUER, + "", string_steuersatz, suNetto.get(steuersatz), + suSteuer.get(steuersatz))); + } + } + sql = "select count(*) from buchung " + "where datum >= ? and datum <= ? " + "and buchung.buchungsart is null"; + Integer anzahl = (Integer) service.execute(sql, new Object[] { datumvon, datumbis }, rsi); if (anzahl > 0) diff --git a/src/de/jost_net/JVerein/gui/view/BuchungsartView.java b/src/de/jost_net/JVerein/gui/view/BuchungsartView.java index 709a69c2d..b3da3f111 100644 --- a/src/de/jost_net/JVerein/gui/view/BuchungsartView.java +++ b/src/de/jost_net/JVerein/gui/view/BuchungsartView.java @@ -40,6 +40,8 @@ public void bind() throws Exception group.addLabelPair("Art", control.getArt()); group.addLabelPair("Buchungsklasse", control.getBuchungsklasse()); group.addLabelPair("Spende", control.getSpende()); + group.addLabelPair("Steuersatz", control.getSteuersatz()); + group.addLabelPair("Steuer Buchungsart", control.getSteuerBuchungsart()); // TODO Jo Dokumentation nachpflegen ButtonArea buttons = new ButtonArea(); diff --git a/src/de/jost_net/JVerein/io/BuchungsklasseSaldoZeile.java b/src/de/jost_net/JVerein/io/BuchungsklasseSaldoZeile.java index 1e5623f13..2306fce3e 100644 --- a/src/de/jost_net/JVerein/io/BuchungsklasseSaldoZeile.java +++ b/src/de/jost_net/JVerein/io/BuchungsklasseSaldoZeile.java @@ -1,18 +1,18 @@ /********************************************************************** * 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 + * + * 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. + * 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 . + * 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 + * heiner@jverein.de | www.jverein.de **********************************************************************/ package de.jost_net.JVerein.io; @@ -34,6 +34,8 @@ public class BuchungsklasseSaldoZeile implements GenericObject private String text; + private String text_buchungsart; + private Double umbuchungen; private Double einnahmen; @@ -56,16 +58,21 @@ public class BuchungsklasseSaldoZeile implements GenericObject public static final int GESAMTGEWINNVERLUST = 6; - public static final int NICHTZUGEORDNETEBUCHUNGEN = 7; + public static final int STEUERHEADER = 7; + + public static final int STEUER = 8; + + public static final int NICHTZUGEORDNETEBUCHUNGEN = 9; private int status = UNDEFINED; public BuchungsklasseSaldoZeile(int status, Buchungsklasse buchungsklasse) { - this.buchungsklasse = buchungsklasse; this.status = status; + this.buchungsklasse = buchungsklasse; this.buchungsart = null; this.text = null; + this.text_buchungsart = null; this.umbuchungen = null; this.einnahmen = null; this.ausgaben = null; @@ -78,6 +85,7 @@ public BuchungsklasseSaldoZeile(int status, Buchungsart buchungsart, this.buchungsklasse = null; this.buchungsart = buchungsart; this.text = null; + this.text_buchungsart = null; this.umbuchungen = new Double(umbuchungen); this.einnahmen = new Double(einnahmen); this.ausgaben = new Double(ausgaben); @@ -90,6 +98,7 @@ public BuchungsklasseSaldoZeile(int status, String text, Double einnahmen, this.buchungsklasse = null; this.buchungsart = null; this.text = text; + this.text_buchungsart = null; this.umbuchungen = new Double(umbuchungen); this.einnahmen = new Double(einnahmen); this.ausgaben = new Double(ausgaben); @@ -101,6 +110,7 @@ public BuchungsklasseSaldoZeile(int status, String text, Double gewinnverlust) this.buchungsklasse = null; this.buchungsart = null; this.text = text; + this.text_buchungsart = null; this.umbuchungen = null; this.einnahmen = new Double(gewinnverlust); this.ausgaben = null; @@ -113,12 +123,28 @@ public BuchungsklasseSaldoZeile(int status, String text, this.buchungsklasse = null; this.buchungsart = null; this.text = text; + this.text_buchungsart = null; this.umbuchungen = null; this.einnahmen = null; this.ausgaben = null; this.anzahlbuchungen = anzahlbuchungen; } + public BuchungsklasseSaldoZeile(int status, String text, + String text_buchungsart, Double einnahmen, Double ausgaben) + { + this.status = status; + this.buchungsklasse = null; + this.buchungsart = null; + this.text = text; + this.text_buchungsart = text_buchungsart; + einnahmen = (einnahmen == null) ? 0 : einnahmen; + this.einnahmen = Double.valueOf(einnahmen); + ausgaben = (ausgaben == null) ? 0 : ausgaben; + this.ausgaben = Double.valueOf(ausgaben); + this.umbuchungen = null; + } + public int getStatus() { return status; @@ -137,7 +163,15 @@ public Object getAttribute(String arg0) throws RemoteException } if (arg0.equals("buchungsartbezeichnung")) { - return buchungsart != null ? buchungsart.getBezeichnung() : ""; + if (text_buchungsart != null) + { + return text_buchungsart; + } + else + { + return (buchungsart != null ? buchungsart.getBezeichnung() : ""); + + } } else if (arg0.equals("einnahmen")) { @@ -155,8 +189,8 @@ else if (arg0.equals("anzahlbuchungen")) { return anzahlbuchungen; } - throw new RemoteException(String.format("Ungültige Spaltenbezeichung: %s", - arg0)); + throw new RemoteException( + String.format("Ungültige Spaltenbezeichung: %s", arg0)); } @Override diff --git a/src/de/jost_net/JVerein/io/BuchungsklassesaldoCSV.java b/src/de/jost_net/JVerein/io/BuchungsklassesaldoCSV.java index 2895706df..00439176c 100644 --- a/src/de/jost_net/JVerein/io/BuchungsklassesaldoCSV.java +++ b/src/de/jost_net/JVerein/io/BuchungsklassesaldoCSV.java @@ -1,18 +1,18 @@ /********************************************************************** * Copyright (c) by Thomas Laubrock - * 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 + * + * 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. + * 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 . + * 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 + * heiner@jverein.de | www.jverein.de **********************************************************************/ package de.jost_net.JVerein.io; @@ -120,6 +120,23 @@ public BuchungsklassesaldoCSV(ArrayList zeile, csvzeile.put(header[1], (Double) bkz.getAttribute("einnahmen")); break; } + case BuchungsklasseSaldoZeile.STEUERHEADER: + { + csvzeile.put(header[0], + (String) bkz.getAttribute("buchungsklassenbezeichnung") + " - " + + (String) bkz.getAttribute("buchungsartbezeichnung")); + csvzeile.put(header[1], (Double) bkz.getAttribute("einnahmen")); + csvzeile.put(header[2], (Double) bkz.getAttribute("ausgaben")); + break; + } + case BuchungsklasseSaldoZeile.STEUER: + { + csvzeile.put(header[0], + (String) bkz.getAttribute("buchungsartbezeichnung")); + csvzeile.put(header[1], (Double) bkz.getAttribute("einnahmen")); + csvzeile.put(header[2], (Double) bkz.getAttribute("ausgaben")); + break; + } case BuchungsklasseSaldoZeile.NICHTZUGEORDNETEBUCHUNGEN: { csvzeile.put(header[0], @@ -165,4 +182,4 @@ public BuchungsklassesaldoCSV(ArrayList zeile, } -} \ No newline at end of file +} diff --git a/src/de/jost_net/JVerein/io/BuchungsklassesaldoPDF.java b/src/de/jost_net/JVerein/io/BuchungsklassesaldoPDF.java index 88b53024f..ef0df5d92 100644 --- a/src/de/jost_net/JVerein/io/BuchungsklassesaldoPDF.java +++ b/src/de/jost_net/JVerein/io/BuchungsklassesaldoPDF.java @@ -1,18 +1,18 @@ /********************************************************************** * 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 + * + * 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. + * 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 . + * 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 + * heiner@jverein.de | www.jverein.de **********************************************************************/ package de.jost_net.JVerein.io; @@ -34,8 +34,7 @@ public class BuchungsklassesaldoPDF { public BuchungsklassesaldoPDF(ArrayList zeile, - final File file, Date datumvon, Date datumbis) - throws ApplicationException + final File file, Date datumvon, Date datumbis) throws ApplicationException { try { @@ -98,6 +97,22 @@ public BuchungsklassesaldoPDF(ArrayList zeile, reporter.addColumn("", Element.ALIGN_LEFT, 2); break; } + case BuchungsklasseSaldoZeile.STEUERHEADER: + { + reporter.addColumn( + (String) bkz.getAttribute("buchungsklassenbezeichnung"), + Element.ALIGN_LEFT, 4); + } + case BuchungsklasseSaldoZeile.STEUER: + { + reporter.addColumn( + (String) bkz.getAttribute("buchungsartbezeichnung"), + Element.ALIGN_RIGHT); + reporter.addColumn((Double) bkz.getAttribute("einnahmen")); + reporter.addColumn((Double) bkz.getAttribute("ausgaben")); + reporter.addColumn("", Element.ALIGN_LEFT, 1); + break; + } case BuchungsklasseSaldoZeile.NICHTZUGEORDNETEBUCHUNGEN: { reporter.addColumn( diff --git a/src/de/jost_net/JVerein/io/KontenrahmenImportXML.java b/src/de/jost_net/JVerein/io/KontenrahmenImportXML.java index 469ddf36a..482a3963e 100644 --- a/src/de/jost_net/JVerein/io/KontenrahmenImportXML.java +++ b/src/de/jost_net/JVerein/io/KontenrahmenImportXML.java @@ -88,6 +88,8 @@ public void doImport(Object context, IOFormat format, File file, { buchungsart.setSpende(true); } + buchungsart.setSteuersatz(buaelement.getAttribute("steuersatz", 0)); + buchungsart.setSteuerBuchungsart(buaelement.getAttribute("steuer_buchungsart", null)); buchungsart.store(); } diff --git a/src/de/jost_net/JVerein/io/SplitbuchungsContainer.java b/src/de/jost_net/JVerein/io/SplitbuchungsContainer.java index 991c2b3bd..064ca2832 100644 --- a/src/de/jost_net/JVerein/io/SplitbuchungsContainer.java +++ b/src/de/jost_net/JVerein/io/SplitbuchungsContainer.java @@ -29,13 +29,16 @@ public class SplitbuchungsContainer { - private static ArrayList splitbuchungen = null; + private static int dependencyid = 0; + public static void init(Buchung b) throws RemoteException, ApplicationException { splitbuchungen = new ArrayList<>(); + dependencyid = 0; + // Wenn eine gesplittete Buchung aufgerufen wird, wird die Hauptbuchung // gelesen if (b.getSplitId() != null) @@ -76,7 +79,9 @@ public static void init(Buchung b) } while (it.hasNext()) { - SplitbuchungsContainer.add((Buchung) it.next()); + Buchung buchung = (Buchung) it.next(); + SplitbuchungsContainer.add(buchung); + dependencyid = Math.max(dependencyid, buchung.getDependencyId()); } } @@ -203,4 +208,8 @@ public static void store() throws RemoteException, ApplicationException } } } + + public static int getNewDependencyId() { + return ++dependencyid; + } } \ No newline at end of file diff --git a/src/de/jost_net/JVerein/keys/SteuersatzBuchungsart.java b/src/de/jost_net/JVerein/keys/SteuersatzBuchungsart.java new file mode 100644 index 000000000..8979616b9 --- /dev/null +++ b/src/de/jost_net/JVerein/keys/SteuersatzBuchungsart.java @@ -0,0 +1,81 @@ + + /********************************************************************** + * Copyright (c) by Vinzent Rudolf + * 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 . + * + * vinzent.rudolf@web.de + * www.jverein.de + **********************************************************************/ + +package de.jost_net.JVerein.keys; + +import java.util.ArrayList; + +/** + * Steuersatz: Entweder 7% oder 19% + */ + +public class SteuersatzBuchungsart +{ + private double steuersatz_; + + public SteuersatzBuchungsart(double steuersatz) + { + steuersatz_ = steuersatz; + } + + public double getSteuersatz() + { + return steuersatz_; + } + + public String getText() + { + return get(steuersatz_); + } + + @Override + public String toString() + { + return get(steuersatz_); + } + + public static String get(double steuersatz) + { + if (steuersatz == 0.00) { + return ""; + } + else { + return String.format ("%.2f", steuersatz) + "%"; + } + } + + public static ArrayList getArray() + { + ArrayList ret = new ArrayList<>(); + ret.add(new SteuersatzBuchungsart(0)); + ret.add(new SteuersatzBuchungsart(19)); + ret.add(new SteuersatzBuchungsart(7)); + return ret; + } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof SteuersatzBuchungsart) + { + SteuersatzBuchungsart v = (SteuersatzBuchungsart) obj; + return (getSteuersatz() == v.getSteuersatz()); + } + return false; + } +} \ No newline at end of file diff --git a/src/de/jost_net/JVerein/rmi/Buchung.java b/src/de/jost_net/JVerein/rmi/Buchung.java index 98f02388f..5a77ebf32 100644 --- a/src/de/jost_net/JVerein/rmi/Buchung.java +++ b/src/de/jost_net/JVerein/rmi/Buchung.java @@ -117,6 +117,10 @@ public void setMitgliedskonto(Mitgliedskonto mitgliedskonto) public void setSpendenbescheinigungId(Long spendenbescheinigung) throws RemoteException; + + public int getDependencyId() throws RemoteException; + + public void setDependencyId(int dependencyid) throws RemoteException; public Map getMap(Map map) throws RemoteException; diff --git a/src/de/jost_net/JVerein/rmi/Buchungsart.java b/src/de/jost_net/JVerein/rmi/Buchungsart.java index 4a9ff88de..1acfe94b5 100644 --- a/src/de/jost_net/JVerein/rmi/Buchungsart.java +++ b/src/de/jost_net/JVerein/rmi/Buchungsart.java @@ -43,5 +43,12 @@ public interface Buchungsart extends DBObject public Boolean getSpende() throws RemoteException; public void setSpende(Boolean spende) throws RemoteException; + + public double getSteuersatz() throws RemoteException; + public void setSteuersatz(double steuersatz) throws RemoteException; + + public Buchungsart getSteuerBuchungsart() throws RemoteException; + + public void setSteuerBuchungsart(String steuer_buchungsart) throws RemoteException; } diff --git a/src/de/jost_net/JVerein/server/BuchungImpl.java b/src/de/jost_net/JVerein/server/BuchungImpl.java index 5c39449e6..da89c3bd5 100644 --- a/src/de/jost_net/JVerein/server/BuchungImpl.java +++ b/src/de/jost_net/JVerein/server/BuchungImpl.java @@ -459,6 +459,24 @@ public void setSpendenbescheinigungId(Long spendenbescheinigung) { setAttribute("spendenbescheinigung", spendenbescheinigung); } + + @Override + public int getDependencyId() throws RemoteException + { + Integer dependencyid = (Integer) getAttribute("dependencyid"); + if (dependencyid == null) { + return -1; + } + else { + return dependencyid.intValue(); + } + } + + @Override + public void setDependencyId(int dependencyid) throws RemoteException + { + setAttribute("dependencyid", dependencyid); + } @Override public Map getMap(Map inma) diff --git a/src/de/jost_net/JVerein/server/BuchungsartImpl.java b/src/de/jost_net/JVerein/server/BuchungsartImpl.java index 078ad9985..b1c8bae71 100644 --- a/src/de/jost_net/JVerein/server/BuchungsartImpl.java +++ b/src/de/jost_net/JVerein/server/BuchungsartImpl.java @@ -18,9 +18,11 @@ import java.rmi.RemoteException; +import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.rmi.Buchungsart; import de.jost_net.JVerein.rmi.Buchungsklasse; import de.willuhn.datasource.db.AbstractDBObject; +import de.willuhn.datasource.rmi.DBIterator; import de.willuhn.logging.Logger; import de.willuhn.util.ApplicationException; @@ -65,6 +67,10 @@ protected void insertCheck() throws ApplicationException { throw new ApplicationException("Nummer nicht gültig"); } + if (getSteuersatz() > 0 && getSteuerBuchungsart() == null) + { + throw new ApplicationException("Bitte Buchungsart auswählen."); + } } catch (RemoteException e) { @@ -164,6 +170,44 @@ public void setSpende(Boolean spende) throws RemoteException setAttribute("spende", Boolean.valueOf(spende)); } + @Override + public double getSteuersatz() throws RemoteException + { + Double i = (Double) getAttribute("steuersatz"); + if (i == null) + { + return 0; + } + return i.doubleValue(); + } + + @Override + public void setSteuersatz(double steuersatz) throws RemoteException + { + setAttribute("steuersatz", steuersatz); + } + + @Override + public Buchungsart getSteuerBuchungsart() throws RemoteException + { + String id = (String) getAttribute("steuer_buchungsart"); + if (id == null) { + return null; + } + else { + DBIterator steuer_buchungsart = Einstellungen.getDBService() + .createList(Buchungsart.class); + steuer_buchungsart.addFilter("ID = " + id); + return steuer_buchungsart.next(); + } + } + + @Override + public void setSteuerBuchungsart(String steuer_buchungsart) throws RemoteException + { + setAttribute("steuer_buchungsart", steuer_buchungsart); + } + @Override public Object getAttribute(String fieldName) throws RemoteException { diff --git a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0421.java b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0421.java index 40c13743b..080f2fd93 100644 --- a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0421.java +++ b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0421.java @@ -35,4 +35,4 @@ public void run() throws ApplicationException new Column("iban", COLTYPE.VARCHAR, 34, "NULL", false, false))); } -} \ No newline at end of file +} diff --git a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0422.java b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0422.java index 7344ee1f0..e09cc6300 100644 --- a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0422.java +++ b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0422.java @@ -36,4 +36,4 @@ public void run() throws ApplicationException new Column("iban", COLTYPE.VARCHAR, 34, null, true, false))); } -} \ No newline at end of file +} diff --git a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0425.java b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0425.java new file mode 100644 index 000000000..3a232cd7f --- /dev/null +++ b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0425.java @@ -0,0 +1,40 @@ +/********************************************************************** + * 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 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; + +import java.sql.Connection; + +public class Update0425 extends AbstractDDLUpdate +{ + public Update0425(String driver, ProgressMonitor monitor, Connection conn) + { + super(driver, monitor, conn); + } + + @Override + public void run() throws ApplicationException + { + execute(addColumn("buchungsart", + new Column("steuersatz", COLTYPE.DOUBLE, 17, "0", false, false))); + execute(addColumn("buchungsart", + new Column("steuer_buchungsart", COLTYPE.VARCHAR, 10, null, false, false))); + execute(addColumn("buchung", + new Column("dependencyid", COLTYPE.INTEGER, 10, "-1", false, false))); + } +} \ No newline at end of file