diff --git a/src/de/jost_net/JVerein/Queries/SollbuchungQuery.java b/src/de/jost_net/JVerein/Queries/SollbuchungQuery.java index 063f863fa..0db6157f6 100644 --- a/src/de/jost_net/JVerein/Queries/SollbuchungQuery.java +++ b/src/de/jost_net/JVerein/Queries/SollbuchungQuery.java @@ -354,15 +354,13 @@ else if (ein_zahler_name && umwandeln) if (DIFFERENZ.FEHLBETRAG == diff) { - sql.append( - " HAVING SUM(buchung.betrag) < mitgliedskonto.betrag OR" - + " (SUM(buchung.betrag) IS NULL AND mitgliedskonto.betrag > 0)"); + sql.append(" (HAVING SUM(buchung.betrag) < mitgliedskonto.betrag OR " + + "(SUM(buchung.betrag) IS NULL AND mitgliedskonto.betrag > 0))"); } if (DIFFERENZ.UEBERZAHLUNG == diff) { - sql.append( - " HAVING SUM(buchung.betrag) > mitgliedskonto.betrag OR" - + " (SUM(buchung.betrag) IS NULL AND mitgliedskonto.betrag < 0)"); + sql.append(" (HAVING SUM(buchung.betrag) > mitgliedskonto.betrag OR" + + "(SUM(buchung.betrag) IS NULL AND mitgliedskonto.betrag < 0))"); } List ids = (List) service.execute(sql.toString(), param.toArray(), diff --git a/src/de/jost_net/JVerein/gui/action/RechnungNeuAction.java b/src/de/jost_net/JVerein/gui/action/RechnungNeuAction.java index 0c85bc9e3..1aecce866 100644 --- a/src/de/jost_net/JVerein/gui/action/RechnungNeuAction.java +++ b/src/de/jost_net/JVerein/gui/action/RechnungNeuAction.java @@ -16,14 +16,17 @@ **********************************************************************/ package de.jost_net.JVerein.gui.action; +import java.util.Date; + import de.jost_net.JVerein.Einstellungen; -import de.jost_net.JVerein.gui.dialogs.FormularAuswahlDialog; +import de.jost_net.JVerein.gui.dialogs.RechnungDialog; import de.jost_net.JVerein.rmi.Formular; import de.jost_net.JVerein.rmi.Mitgliedskonto; import de.jost_net.JVerein.rmi.Rechnung; import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.GUI; import de.willuhn.jameica.gui.parts.TablePart; +import de.willuhn.jameica.system.OperationCanceledException; import de.willuhn.logging.Logger; import de.willuhn.util.ApplicationException; @@ -53,9 +56,14 @@ else if (context instanceof Mitgliedskonto[]) try { - FormularAuswahlDialog dialog = new FormularAuswahlDialog(); - Formular formular = dialog.open(); - if (formular == null) + RechnungDialog dialog = new RechnungDialog(); + if (!dialog.open()) + { + return; + } + Formular formular = dialog.getFormular(); + Date rechnungsdatum = dialog.getDatum(); + if (formular == null || rechnungsdatum == null) { return; } @@ -72,6 +80,7 @@ else if (context instanceof Mitgliedskonto[]) .createObject(Rechnung.class, null); rechnung.setFormular(formular); + rechnung.setDatum(rechnungsdatum); rechnung.fill(mk); rechnung.store(); @@ -89,6 +98,10 @@ else if (context instanceof Mitgliedskonto[]) GUI.getStatusBar().setSuccessText(erstellt + " Rechnung(en) erstellt" + (skip > 0 ? ", " + skip + " vorhandene übersprungen." : ".")); } + } + catch (OperationCanceledException ignore) + { + } catch (Exception e) { diff --git a/src/de/jost_net/JVerein/gui/action/SollbuchungEditAction.java b/src/de/jost_net/JVerein/gui/action/SollbuchungEditAction.java index 4cb4385e0..7efb1ea72 100644 --- a/src/de/jost_net/JVerein/gui/action/SollbuchungEditAction.java +++ b/src/de/jost_net/JVerein/gui/action/SollbuchungEditAction.java @@ -32,16 +32,20 @@ public class SollbuchungEditAction implements Action @Override public void handleAction(Object context) throws ApplicationException { - MitgliedskontoNode mkn = null; Mitgliedskonto mk = null; + MitgliedskontoNode mkn = null; - if (context != null && (context instanceof MitgliedskontoNode)) + if (context instanceof Mitgliedskonto) + { + mk = (Mitgliedskonto) context; + } + else if (context instanceof MitgliedskontoNode) { mkn = (MitgliedskontoNode) context; try { - mk = (Mitgliedskonto) Einstellungen.getDBService().createObject( - Mitgliedskonto.class, mkn.getID()); + mk = (Mitgliedskonto) Einstellungen.getDBService() + .createObject(Mitgliedskonto.class, mkn.getID()); } catch (RemoteException e) { @@ -49,22 +53,9 @@ public void handleAction(Object context) throws ApplicationException "Fehler beim Editieren einer Sollbuchung"); } } - else if (context != null && (context instanceof Mitgliedskonto)) - { - mk = (Mitgliedskonto) context; - } else { - try - { - mk = (Mitgliedskonto) Einstellungen.getDBService().createObject( - Mitgliedskonto.class, null); - } - catch (Exception e) - { - throw new ApplicationException( - "Fehler bei der Erzeugung einer neuen Sollbuchung", e); - } + throw new ApplicationException("Keine Sollbuchung ausgewählt"); } GUI.startView(new SollbuchungDetailView(), mk); } diff --git a/src/de/jost_net/JVerein/gui/action/SollbuchungNeuAction.java b/src/de/jost_net/JVerein/gui/action/SollbuchungNeuAction.java index b3ddc5cce..51540f117 100644 --- a/src/de/jost_net/JVerein/gui/action/SollbuchungNeuAction.java +++ b/src/de/jost_net/JVerein/gui/action/SollbuchungNeuAction.java @@ -36,33 +36,38 @@ public void handleAction(Object context) throws ApplicationException MitgliedskontoNode mkn = null; Mitgliedskonto mk = null; - if (context == null || !(context instanceof MitgliedskontoNode)) + if (context instanceof MitgliedskontoNode) { - throw new ApplicationException("Keine Sollbuchung ausgewählt"); - } - - mkn = (MitgliedskontoNode) context; - try - { - Mitglied m = (Mitglied) Einstellungen.getDBService() - .createObject(Mitglied.class, mkn.getID()); - mk = (Mitgliedskonto) Einstellungen.getDBService() - .createObject(Mitgliedskonto.class, null); - mk.setZahlungsweg(m.getZahlungsweg()); - mk.setMitglied(m); - if (m.getZahlerID() != null) + mkn = (MitgliedskontoNode) context; + try { - mk.setZahlerId(m.getZahlerID()); + Mitglied m = (Mitglied) Einstellungen.getDBService() + .createObject(Mitglied.class, mkn.getID()); + mk = (Mitgliedskonto) Einstellungen.getDBService() + .createObject(Mitgliedskonto.class, null); + mk.setZahlungsweg(m.getZahlungsweg()); + mk.setMitglied(m); + mk.setBetrag(0.0); } - else + catch (RemoteException e) { - mk.setZahler(m); + throw new ApplicationException( + "Fehler bei der Erzeugung einer Sollbuchung"); } } - catch (RemoteException e) + else { - throw new ApplicationException( - "Fehler bei der Erzeugung einer Sollbuchung"); + try + { + mk = (Mitgliedskonto) Einstellungen.getDBService() + .createObject(Mitgliedskonto.class, null); + mk.setBetrag(0.0); + } + catch (Exception e) + { + throw new ApplicationException( + "Fehler bei der Erzeugung einer neuen Sollbuchung", e); + } } GUI.startView(new SollbuchungDetailView(), mk); } diff --git a/src/de/jost_net/JVerein/gui/action/SollbuchungPositionDeleteAction.java b/src/de/jost_net/JVerein/gui/action/SollbuchungPositionDeleteAction.java new file mode 100644 index 000000000..1a563c914 --- /dev/null +++ b/src/de/jost_net/JVerein/gui/action/SollbuchungPositionDeleteAction.java @@ -0,0 +1,97 @@ +/********************************************************************** + * 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.action; + +import java.rmi.RemoteException; +import java.util.ArrayList; + +import de.jost_net.JVerein.gui.view.SollbuchungDetailView; +import de.jost_net.JVerein.rmi.Mitgliedskonto; +import de.jost_net.JVerein.rmi.SollbuchungPosition; +import de.willuhn.jameica.gui.Action; +import de.willuhn.jameica.gui.GUI; +import de.willuhn.jameica.gui.dialogs.YesNoDialog; +import de.willuhn.jameica.gui.parts.TablePart; +import de.willuhn.logging.Logger; +import de.willuhn.util.ApplicationException; + +/** + * Löschen eines Formularfeldes + */ +public class SollbuchungPositionDeleteAction implements Action +{ + + @Override + public void handleAction(Object context) throws ApplicationException + { + if (context instanceof TablePart) + { + TablePart tp = (TablePart) context; + context = tp.getSelection(); + } + if (context == null || !(context instanceof SollbuchungPosition)) + { + throw new ApplicationException("Keine Sollbuchungsposition ausgewählt"); + } + try + { + SollbuchungPosition position = (SollbuchungPosition) context; + if (position.isNewObject()) + { + return; + } + + YesNoDialog d = new YesNoDialog(YesNoDialog.POSITION_CENTER); + d.setTitle("Sollbuchungsposition löschen"); + d.setText("Wollen Sie diese Sollbuchungsposition wirklich löschen?"); + + try + { + Boolean choice = (Boolean) d.open(); + if (!choice.booleanValue()) + { + return; + } + } + catch (Exception e) + { + Logger.error("Fehler beim Löschen der Sollbuchungsposition", e); + return; + } + position.delete(); + // Betrag in Sollbuchung neu berechnen + Double betrag = 0.0; + Mitgliedskonto sollb = position.getSollbuchung(); + ArrayList sollbpList = sollb + .getSollbuchungPositionList(); + for (SollbuchungPosition sollp : sollbpList) + { + betrag += sollp.getBetrag(); + } + sollb.setBetrag(betrag); + sollb.store(); + GUI.startView(SollbuchungDetailView.class.getName(), sollb); + GUI.getStatusBar().setSuccessText("Sollbuchungsposition gelöscht."); + } + catch (RemoteException e) + { + String fehler = "Fehler beim Löschen der Sollbuchungsposition"; + GUI.getStatusBar().setErrorText(fehler); + Logger.error(fehler, e); + } + } +} diff --git a/src/de/jost_net/JVerein/gui/action/SollbuchungPositionEditAction.java b/src/de/jost_net/JVerein/gui/action/SollbuchungPositionEditAction.java new file mode 100644 index 000000000..235620db5 --- /dev/null +++ b/src/de/jost_net/JVerein/gui/action/SollbuchungPositionEditAction.java @@ -0,0 +1,44 @@ +/********************************************************************** + * 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.action; + +import de.jost_net.JVerein.gui.view.SollbuchungPositionView; +import de.jost_net.JVerein.rmi.SollbuchungPosition; +import de.willuhn.jameica.gui.Action; +import de.willuhn.jameica.gui.GUI; +import de.willuhn.util.ApplicationException; + +public class SollbuchungPositionEditAction implements Action +{ + + @Override + public void handleAction(Object context) throws ApplicationException + { + SollbuchungPosition position = null; + + if (context != null && (context instanceof SollbuchungPosition)) + { + position = (SollbuchungPosition) context; + } + else + { + throw new ApplicationException("Keine Sollbuchungsposition ausgewählt"); + } + + GUI.startView(SollbuchungPositionView.class.getName(), position); + } +} diff --git a/src/de/jost_net/JVerein/gui/action/SollbuchungPositionNeuAction.java b/src/de/jost_net/JVerein/gui/action/SollbuchungPositionNeuAction.java new file mode 100644 index 000000000..e14645061 --- /dev/null +++ b/src/de/jost_net/JVerein/gui/action/SollbuchungPositionNeuAction.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.gui.action; + +import java.rmi.RemoteException; + +import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.gui.view.SollbuchungPositionView; +import de.jost_net.JVerein.rmi.Mitgliedskonto; +import de.jost_net.JVerein.rmi.SollbuchungPosition; +import de.willuhn.jameica.gui.Action; +import de.willuhn.jameica.gui.GUI; +import de.willuhn.logging.Logger; +import de.willuhn.util.ApplicationException; + +public class SollbuchungPositionNeuAction implements Action +{ + + @Override + public void handleAction(Object context) throws ApplicationException + { + Mitgliedskonto sollbuchung = null; + SollbuchungPosition position = null; + + if (context != null && (context instanceof Mitgliedskonto)) + { + sollbuchung = (Mitgliedskonto) context; + try + { + if (sollbuchung.isNewObject()) + { + throw new ApplicationException( + "Vor dem Anlegen der Sollbuchungsposition muss die Sollbuchung gespeichert werden!"); + } + position = (SollbuchungPosition) Einstellungen.getDBService() + .createObject(SollbuchungPosition.class, null); + position.setSollbuchung(sollbuchung.getID()); + } + catch (RemoteException e) + { + Logger.error("Fehler", e); + throw new ApplicationException( + "Fehler bei der Erzeugung einer neuen Sollbuchungsposition", e); + } + } + else + { + throw new ApplicationException("Keine Sollbuchung ausgewählt"); + } + + GUI.startView(SollbuchungPositionView.class.getName(), position); + } +} diff --git a/src/de/jost_net/JVerein/gui/control/AbrechnungSEPAControl.java b/src/de/jost_net/JVerein/gui/control/AbrechnungSEPAControl.java index 2ee38e790..021bab397 100644 --- a/src/de/jost_net/JVerein/gui/control/AbrechnungSEPAControl.java +++ b/src/de/jost_net/JVerein/gui/control/AbrechnungSEPAControl.java @@ -105,6 +105,8 @@ public class AbrechnungSEPAControl extends AbstractControl private TextInput rechnungstext; + private DateInput rechnungsdatum; + public AbrechnungSEPAControl(AbstractView view) { super(view); @@ -128,7 +130,9 @@ public AbbuchungsmodusInput getAbbuchungsmodus() throws RemoteException { return modus; } - modus = new AbbuchungsmodusInput(Abrechnungsmodi.KEINBEITRAG); + Integer mod = settings.getInt("modus", Abrechnungsmodi.KEINBEITRAG); + + modus = new AbbuchungsmodusInput(mod); modus.addListener(new Listener() { @Override @@ -184,9 +188,20 @@ public DateInput getFaelligkeit() throws RemoteException 1 + Einstellungen.getEinstellung().getSEPADatumOffset()); this.faelligkeit = new DateInput(cal.getTime(), new JVDateFormatTTMMJJJJ()); - this.faelligkeit.setTitle("Fälligkeit SEPA-Lastschrift"); + this.faelligkeit.setTitle("Fälligkeit"); this.faelligkeit.setText( - "Bitte Fälligkeitsdatum der SEPA-Lastschrift wählen"); + "Bitte Fälligkeitsdatum wählen"); + faelligkeit.addListener(event -> { + if (event.type != SWT.Selection && event.type != SWT.FocusOut) + { + return; + } + if (faelligkeit.getValue() != null && getStichtag() != null + && getStichtag().getValue() == null) + { + getStichtag().setValue(faelligkeit.getValue()); + } + }); return faelligkeit; } @@ -312,6 +327,17 @@ public TextInput getRechnungstext() return rechnungstext; } + public DateInput getRechnungsdatum() + { + if (rechnungsdatum != null) + { + return rechnungsdatum; + } + rechnungsdatum = new DateInput(new Date()); + rechnungsdatum.setEnabled(settings.getBoolean("rechnung", false)); + return rechnungsdatum; + } + public CheckboxInput getSEPAPrint() { if (sepaprint != null) @@ -412,10 +438,19 @@ public void handleAction(Object context) private void doAbrechnung() throws ApplicationException, RemoteException { + settings.setAttribute("modus", + (Integer) modus.getValue()); settings.setAttribute("zahlungsgrund", (String) zahlungsgrund.getValue()); - settings.setAttribute("zusatzbetraege", (Boolean) zusatzbetrag.getValue()); - settings.setAttribute("kursteilnehmer", - (Boolean) kursteilnehmer.getValue()); + if (zusatzbetrag != null) + { + settings.setAttribute("zusatzbetraege", + (Boolean) zusatzbetrag.getValue()); + } + if (kursteilnehmer != null) + { + settings.setAttribute("kursteilnehmer", + (Boolean) kursteilnehmer.getValue()); + } settings.setAttribute("kompakteabbuchung", (Boolean) kompakteabbuchung.getValue()); settings.setAttribute("sollbuchungenzusammenfassen", @@ -444,12 +479,6 @@ private void doAbrechnung() throws ApplicationException, RemoteException { throw new ApplicationException("Fälligkeitsdatum fehlt"); } - Date f = (Date) faelligkeit.getValue(); - if (f.before(new Date())) - { - throw new ApplicationException( - "Fälligkeit muss in der Zukunft liegen"); - } Date vondatum = null; if (stichtag.getValue() == null) { @@ -613,6 +642,7 @@ public void handleEvent(Event event) } rechnungsformular.setEnabled((boolean) rechnung.getValue()); rechnungstext.setEnabled((boolean) rechnung.getValue()); + rechnungsdatum.setEnabled((boolean) rechnung.getValue()); } } diff --git a/src/de/jost_net/JVerein/gui/control/AbrechnungslaufControl.java b/src/de/jost_net/JVerein/gui/control/AbrechnungslaufControl.java index 5eefb55f6..6e82b2d5a 100644 --- a/src/de/jost_net/JVerein/gui/control/AbrechnungslaufControl.java +++ b/src/de/jost_net/JVerein/gui/control/AbrechnungslaufControl.java @@ -374,10 +374,16 @@ public Part getAbrechnungslaeufeList() throws RemoteException abrechnungslaufList.addColumn("Austrittsdatum", "austrittsdatum", new DateFormatter(new JVDateFormatTTMMJJJJ())); abrechnungslaufList.addColumn("Zahlungsgrund", "zahlungsgrund"); - abrechnungslaufList.addColumn("Zusatzbeträge", "zusatzbetraege", - new JaNeinFormatter()); - abrechnungslaufList.addColumn("Kursteilnehmer", "kursteilnehmer", - new JaNeinFormatter()); + if (Einstellungen.getEinstellung().getZusatzbetrag()) + { + abrechnungslaufList.addColumn("Zusatzbeträge", "zusatzbetraege", + new JaNeinFormatter()); + } + if (Einstellungen.getEinstellung().getKursteilnehmer()) + { + abrechnungslaufList.addColumn("Kursteilnehmer", "kursteilnehmer", + new JaNeinFormatter()); + } abrechnungslaufList.setContextMenu(new AbrechnungslaufMenu()); abrechnungslaufList.setRememberColWidths(true); abrechnungslaufList.setRememberOrder(true); diff --git a/src/de/jost_net/JVerein/gui/control/EinstellungControl.java b/src/de/jost_net/JVerein/gui/control/EinstellungControl.java index fb3c236ed..94662b9fa 100644 --- a/src/de/jost_net/JVerein/gui/control/EinstellungControl.java +++ b/src/de/jost_net/JVerein/gui/control/EinstellungControl.java @@ -352,6 +352,8 @@ public class EinstellungControl extends AbstractControl private DialogInput verrechnungskonto; + private CheckboxInput splitpositionzweck; + public EinstellungControl(AbstractView view) { super(view); @@ -845,6 +847,19 @@ public CheckboxInput getOptiert() throws RemoteException return optiert; } + public CheckboxInput getSplitPositionZweck() throws RemoteException + { + if (splitpositionzweck != null) + { + return splitpositionzweck; + } + splitpositionzweck = new CheckboxInput( + Einstellungen.getEinstellung().getSplitPositionZweck()); + splitpositionzweck.setName("Bei automatischem Splitten den " + + "Verwendungszweck aus den Sollbuchungspositionen übernehmen"); + return splitpositionzweck; + } + public CheckboxInput getFreieBuchungsklasse() throws RemoteException { if (freiebuchungsklasse != null) @@ -2096,7 +2111,7 @@ public void handleStoreAllgemein() e.setOrt((String) getOrt().getValue()); e.setBic((String) getBic().getValue()); String ib = (String) getIban().getValue(); - if (ib == null) + if (ib == null || ib.isBlank()) e.setIban(null); else e.setIban(ib.toUpperCase().replace(" ","")); @@ -2351,6 +2366,7 @@ public void handleStoreBuchfuehrung() e.setKontonummerInBuchungsliste((Boolean) kontonummer_in_buchungsliste.getValue()); e.setOptiert((Boolean) getOptiert().getValue()); e.setBuchungsklasseInBuchung((Boolean) getFreieBuchungsklasse().getValue()); + e.setSplitPositionZweck((Boolean) getSplitPositionZweck().getValue()); e.store(); Einstellungen.setEinstellung(e); diff --git a/src/de/jost_net/JVerein/gui/control/MitgliedskontoControl.java b/src/de/jost_net/JVerein/gui/control/MitgliedskontoControl.java index 2a839737a..573e28542 100644 --- a/src/de/jost_net/JVerein/gui/control/MitgliedskontoControl.java +++ b/src/de/jost_net/JVerein/gui/control/MitgliedskontoControl.java @@ -30,9 +30,13 @@ import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.Messaging.MitgliedskontoMessage; import de.jost_net.JVerein.Queries.SollbuchungQuery; +import de.jost_net.JVerein.gui.action.SollbuchungPositionEditAction; +import de.jost_net.JVerein.gui.formatter.BuchungsartFormatter; +import de.jost_net.JVerein.gui.formatter.BuchungsklasseFormatter; import de.jost_net.JVerein.gui.formatter.ZahlungswegFormatter; import de.jost_net.JVerein.gui.input.MitgliedInput; import de.jost_net.JVerein.gui.menu.MitgliedskontoMenu; +import de.jost_net.JVerein.gui.menu.SollbuchungPositionMenu; import de.jost_net.JVerein.gui.parts.SollbuchungListTablePart; import de.jost_net.JVerein.gui.view.BuchungView; import de.jost_net.JVerein.gui.view.SollbuchungDetailView; @@ -249,6 +253,7 @@ public DecimalInput getBetrag() throws RemoteException b = getMitgliedskonto().getBetrag(); } betrag = new DecimalInput(b, Einstellungen.DECIMALFORMAT); + betrag.setEnabled(false); return betrag; } @@ -519,7 +524,7 @@ private void refreshMitgliedkonto2() throws RemoteException mitgliedskontoList2.sort(); } - public Part getBuchungenList() throws RemoteException + public Part getBuchungenList(boolean hasRechnung) throws RemoteException { if (buchungList != null) { @@ -527,9 +532,16 @@ public Part getBuchungenList() throws RemoteException } DBIterator sps = Einstellungen.getDBService() .createList(SollbuchungPosition.class); - sps.addFilter( "sollbuchung = ?", getMitgliedskonto().getID()); - - buchungList = new TablePart(sps, null); + sps.addFilter("sollbuchung = ?", getMitgliedskonto().getID()); + + if (hasRechnung) + { + buchungList = new TablePart(sps, null); + } + else + { + buchungList = new TablePart(sps, new SollbuchungPositionEditAction()); + } buchungList.addColumn("Datum", "datum", new DateFormatter(new JVDateFormatTTMMJJJJ())); buchungList.addColumn("Zweck", "zweck"); @@ -543,18 +555,24 @@ public Part getBuchungenList() throws RemoteException buchungList.addColumn("Steuerbetrag", "steuerbetrag", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT)); } - buchungList.addColumn("Buchungsart", "buchungsart"); + buchungList.addColumn("Buchungsart", "buchungsart", + new BuchungsartFormatter()); if (Einstellungen.getEinstellung().getBuchungsklasseInBuchung()) { - buchungList.addColumn("Buchungsklasse", "buchungsklasse"); + buchungList.addColumn("Buchungsklasse", "buchungsklasse", + new BuchungsklasseFormatter()); } buchungList.setRememberColWidths(true); + if (!hasRechnung) + { + buchungList.setContextMenu(new SollbuchungPositionMenu()); + } buchungList.setRememberOrder(true); buchungList.addFeature(new FeatureSummary()); return buchungList; } - + private GenericIterator getMitgliedIterator() throws RemoteException { DBIterator mitglieder = Einstellungen.getDBService() diff --git a/src/de/jost_net/JVerein/gui/control/RechnungControl.java b/src/de/jost_net/JVerein/gui/control/RechnungControl.java index 8346538b5..6ac5439d5 100644 --- a/src/de/jost_net/JVerein/gui/control/RechnungControl.java +++ b/src/de/jost_net/JVerein/gui/control/RechnungControl.java @@ -682,7 +682,14 @@ public Part getBuchungenList() throws RemoteException buchungList.addColumn("Zweck", "zweck"); buchungList.addColumn("Betrag", "betrag", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT)); - buchungList.addColumn("Steuersatz", "steuersatz"); + if (Einstellungen.getEinstellung().getOptiert()) + { + buchungList.addColumn("Nettobetrag", "nettobetrag", + new CurrencyFormatter("", Einstellungen.DECIMALFORMAT)); + buchungList.addColumn("Steuersatz", "steuersatz"); + buchungList.addColumn("Steuerbetrag", "steuerbetrag", + new CurrencyFormatter("", Einstellungen.DECIMALFORMAT)); + } buchungList.addColumn("Buchungsart", "buchungsart", new BuchungsartFormatter()); if (Einstellungen.getEinstellung().getBuchungsklasseInBuchung()) diff --git a/src/de/jost_net/JVerein/gui/control/SollbuchungPositionControl.java b/src/de/jost_net/JVerein/gui/control/SollbuchungPositionControl.java new file mode 100644 index 000000000..226dcb13a --- /dev/null +++ b/src/de/jost_net/JVerein/gui/control/SollbuchungPositionControl.java @@ -0,0 +1,243 @@ +/********************************************************************** + * Copyright (c) by Heiner Jostkleigrewe, Leonardo Mörlein + * 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.control; + +import java.rmi.RemoteException; +import java.util.ArrayList; +import java.util.Date; + +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; + +import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.gui.input.BuchungsartInput; +import de.jost_net.JVerein.gui.input.BuchungsklasseInput; +import de.jost_net.JVerein.gui.input.BuchungsartInput.buchungsarttyp; +import de.jost_net.JVerein.gui.view.SollbuchungDetailView; +import de.jost_net.JVerein.keys.SteuersatzBuchungsart; +import de.jost_net.JVerein.rmi.Buchungsart; +import de.jost_net.JVerein.rmi.Buchungsklasse; +import de.jost_net.JVerein.rmi.Mitgliedskonto; +import de.jost_net.JVerein.rmi.SollbuchungPosition; +import de.jost_net.JVerein.util.JVDateFormatTTMMJJJJ; +import de.willuhn.jameica.gui.AbstractControl; +import de.willuhn.jameica.gui.AbstractView; +import de.willuhn.jameica.gui.GUI; +import de.willuhn.jameica.gui.input.AbstractInput; +import de.willuhn.jameica.gui.input.DateInput; +import de.willuhn.jameica.gui.input.DecimalInput; +import de.willuhn.jameica.gui.input.Input; +import de.willuhn.jameica.gui.input.SelectInput; +import de.willuhn.jameica.gui.input.TextAreaInput; +import de.willuhn.logging.Logger; + +public class SollbuchungPositionControl extends AbstractControl +{ + + private DateInput datum; + + private TextAreaInput zweck; + + private DecimalInput betrag; + + private AbstractInput buchungsart; + + private SelectInput buchungsklasse; + + private SelectInput steuersatz; + + private SollbuchungPosition position = null; + + public SollbuchungPositionControl(AbstractView view) + { + super(view); + } + + public SollbuchungPosition getPosition() + { + if (position != null) + { + return position; + } + position = (SollbuchungPosition) getCurrentObject(); + return position; + } + + public DecimalInput getBetrag() throws RemoteException + { + if (betrag != null) + { + return betrag; + } + + if (getPosition().isNewObject() && getPosition().getBetrag() == null) + { + betrag = new DecimalInput(Einstellungen.DECIMALFORMAT); + } + else + { + betrag = new DecimalInput(getPosition().getBetrag(), + Einstellungen.DECIMALFORMAT); + } + betrag.setMandatory(true); + return betrag; + } + + public Input getZweck() throws RemoteException + { + if (zweck != null) + { + return zweck; + } + zweck = new TextAreaInput(getPosition().getZweck(), 500); + zweck.setHeight(50); + zweck.setMandatory(true); + return zweck; + } + + public DateInput getDatum() throws RemoteException + { + if (datum != null) + { + return datum; + } + Date d = getPosition().getDatum(); + this.datum = new DateInput(d, new JVDateFormatTTMMJJJJ()); + this.datum.setTitle("Datum"); + this.datum.setText("Bitte Datum wählen"); + datum.setMandatory(true); + return datum; + } + + public Input getBuchungsart() throws RemoteException + { + if (buchungsart != null) + { + return buchungsart; + } + buchungsart = new BuchungsartInput().getBuchungsartInput(buchungsart, + getPosition().getBuchungsart(), buchungsarttyp.BUCHUNGSART, + Einstellungen.getEinstellung().getBuchungBuchungsartAuswahl()); + + buchungsart.addListener(new Listener() + { + @Override + public void handleEvent(Event event) + { + try + { + Buchungsart bua = (Buchungsart) buchungsart.getValue(); + if (buchungsklasse != null && buchungsklasse.getValue() == null + && bua != null) + buchungsklasse.setValue(bua.getBuchungsklasse()); + } + catch (RemoteException e) + { + Logger.error("Fehler", e); + } + } + }); + return buchungsart; + } + + public Input getBuchungsklasse() throws RemoteException + { + if (buchungsklasse != null) + { + return buchungsklasse; + } + buchungsklasse = new BuchungsklasseInput().getBuchungsklasseInput( + buchungsklasse, getPosition().getBuchungsklasse()); + return buchungsklasse; + } + + public SelectInput getSteuersatz() throws RemoteException + { + if (steuersatz != null) + { + return steuersatz; + } + if (getPosition().getSteuersatz() == null) + { + steuersatz = new SelectInput(SteuersatzBuchungsart.getArray(), + new SteuersatzBuchungsart(0)); + } + else + { + steuersatz = new SelectInput(SteuersatzBuchungsart.getArray(), + new SteuersatzBuchungsart(getPosition().getSteuersatz())); + } + return steuersatz; + } + + public void handleStore() + { + try + { + SollbuchungPosition pos = getPosition(); + pos.setDatum((Date) getDatum().getValue()); + pos.setZweck((String) getZweck().getValue()); + pos.setBetrag((Double) getBetrag().getValue()); + if (getBuchungsart().getValue() != null) + { + Buchungsart ba = (Buchungsart) getBuchungsart().getValue(); + pos.setBuchungsartId(Long.parseLong(ba.getID())); + pos.setSteuersatz(ba.getSteuersatz()); + } + else + { + pos.setBuchungsartId(null); + pos.setSteuersatz(0.0); + } + if (getBuchungsklasse().getValue() != null) + { + pos.setBuchungsklasseId(Long.parseLong( + ((Buchungsklasse) getBuchungsklasse().getValue()).getID())); + } + else + { + pos.setBuchungsklasseId(null); + } + pos.store(); + // Betrag in Sollbuchung neu berechnen + Double betrag = 0.0; + Mitgliedskonto sollb = pos.getSollbuchung(); + ArrayList sollbpList = sollb + .getSollbuchungPositionList(); + for (SollbuchungPosition sollp : sollbpList) + { + betrag += sollp.getBetrag(); + } + sollb.setBetrag(betrag); + sollb.store(); + + GUI.startView(SollbuchungDetailView.class.getName(), sollb); + GUI.getStatusBar().setSuccessText("Sollbuchungsposition gespeichert"); + } + catch (RemoteException e) + { + String fehler = "Fehler beim Speichern der Sollbuchungsposition"; + Logger.error(fehler, e); + GUI.getStatusBar().setErrorText(fehler); + } + catch (Exception e) + { + GUI.getStatusBar().setErrorText(e.getMessage()); + } + } + +} diff --git a/src/de/jost_net/JVerein/gui/dialogs/BuchungenSollbuchungZuordnungDialog.java b/src/de/jost_net/JVerein/gui/dialogs/BuchungenSollbuchungZuordnungDialog.java index 6a0b37b9a..af878dd72 100644 --- a/src/de/jost_net/JVerein/gui/dialogs/BuchungenSollbuchungZuordnungDialog.java +++ b/src/de/jost_net/JVerein/gui/dialogs/BuchungenSollbuchungZuordnungDialog.java @@ -34,6 +34,7 @@ import org.eclipse.swt.widgets.Composite; import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.keys.SplitbuchungTyp; import de.jost_net.JVerein.keys.Zahlungsweg; import de.jost_net.JVerein.rmi.Buchung; import de.jost_net.JVerein.rmi.Mitglied; @@ -286,6 +287,8 @@ public Object extract(ResultSet rs) throws SQLException, RemoteException DBIterator buchungen = Einstellungen.getDBService().createList(Buchung.class); buchungen.addFilter("datum >= ?", dateFromInput); buchungen.addFilter("datum <= ?", dateUntilInput); + buchungen.addFilter("splittyp != ?", SplitbuchungTyp.HAUPT); + buchungen.addFilter("splittyp != ?", SplitbuchungTyp.GEGEN); buchungen.addFilter("mitgliedskonto is null"); buchungen.setOrder("ORDER BY datum"); @@ -304,7 +307,10 @@ public Object extract(ResultSet rs) throws SQLException, RemoteException uniqueNames.get(bookingPurpose), "Vorname und Nachname") || assginMemberAccountToBooking(assignedBooking, usedMemberAccount, dateFromInput, dateUntilInput, buchung, - uniqueZweck.get(buchung.getZweck()), "Verwendungszweck")) + uniqueNames.get(buchung.getName()), "Vorname und Nachname") + || assginMemberAccountToBooking(assignedBooking, + usedMemberAccount, dateFromInput, dateUntilInput, buchung, + uniqueZweck.get(bookingPurpose), "Verwendungszweck")) { continue; } diff --git a/src/de/jost_net/JVerein/gui/dialogs/FormularAuswahlDialog.java b/src/de/jost_net/JVerein/gui/dialogs/RechnungDialog.java similarity index 53% rename from src/de/jost_net/JVerein/gui/dialogs/FormularAuswahlDialog.java rename to src/de/jost_net/JVerein/gui/dialogs/RechnungDialog.java index 3ea382521..58b4d9ef4 100644 --- a/src/de/jost_net/JVerein/gui/dialogs/FormularAuswahlDialog.java +++ b/src/de/jost_net/JVerein/gui/dialogs/RechnungDialog.java @@ -17,6 +17,8 @@ package de.jost_net.JVerein.gui.dialogs; +import java.util.Date; + import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; @@ -24,26 +26,57 @@ import de.jost_net.JVerein.keys.FormularArt; import de.jost_net.JVerein.rmi.Formular; import de.willuhn.jameica.gui.dialogs.AbstractDialog; +import de.willuhn.jameica.gui.input.DateInput; +import de.willuhn.jameica.gui.input.LabelInput; import de.willuhn.jameica.gui.parts.ButtonArea; +import de.willuhn.jameica.gui.util.Color; import de.willuhn.jameica.gui.util.LabelGroup; -public class FormularAuswahlDialog extends AbstractDialog +public class RechnungDialog extends AbstractDialog { - private FormularInput formular; + private FormularInput formularInput; + + private DateInput datumInput; + + private Formular formular; + + private Date datum; + + private LabelInput status = null; - private Formular data; + private boolean fortfahren = false; - public FormularAuswahlDialog() + public RechnungDialog() { super(SWT.CENTER); - setTitle("Formular auswählen"); + setTitle("Rechnung(en) erstellen"); } @Override - protected Formular getData() throws Exception + protected Boolean getData() throws Exception + { + return fortfahren; + } + + private LabelInput getStatus() + { + if (status != null) + { + return status; + } + status = new LabelInput(""); + return status; + } + + public Formular getFormular() + { + return formular; + } + + public Date getDatum() { - return data; + return datum; } @Override @@ -51,19 +84,32 @@ protected void paint(Composite parent) throws Exception { LabelGroup group = new LabelGroup(parent, ""); group.addText( - "Bitte Formular, das für die\n" - + "Rechnung(en) verwendet werden soll, auswählen.", + "Bitte Rechnungsdatum und zu verwendendes Formular auswählen.", true); - formular = new FormularInput(FormularArt.RECHNUNG); - group.addLabelPair("Formular", formular); + group.addInput(getStatus()); + formularInput = new FormularInput(FormularArt.RECHNUNG); + group.addLabelPair("Formular", formularInput); + + datumInput = new DateInput(new Date()); + group.addLabelPair("Datum", datumInput); ButtonArea buttons = new ButtonArea(); buttons.addButton("Rechnung(en) erstellen", context -> { - if (formular.getValue() == null) + if (formularInput.getValue() == null) + { + status.setValue("Bitte Formular auswählen"); + status.setColor(Color.ERROR); + return; + } + if (datumInput.getValue() == null) { + status.setValue("Bitte Datum auswählen"); + status.setColor(Color.ERROR); return; } - data = (Formular) formular.getValue(); + formular = (Formular) formularInput.getValue(); + datum = (Date) datumInput.getValue(); + fortfahren = true; close(); }, null, false, "ok.png"); buttons.addButton("Abbrechen", context -> close(), null, false, diff --git a/src/de/jost_net/JVerein/gui/menu/MitgliedskontoMenu.java b/src/de/jost_net/JVerein/gui/menu/MitgliedskontoMenu.java index 9768edb9c..3ef48d734 100755 --- a/src/de/jost_net/JVerein/gui/menu/MitgliedskontoMenu.java +++ b/src/de/jost_net/JVerein/gui/menu/MitgliedskontoMenu.java @@ -23,6 +23,7 @@ import de.jost_net.JVerein.gui.action.IstbuchungLoesenAction; import de.jost_net.JVerein.gui.action.SollbuchungEditAction; import de.jost_net.JVerein.gui.action.SollbuchungLoeschenAction; +import de.jost_net.JVerein.gui.action.SollbuchungNeuAction; import de.jost_net.JVerein.gui.action.SpendenbescheinigungAction; import de.jost_net.JVerein.gui.control.MitgliedskontoNode; import de.jost_net.JVerein.keys.Spendenart; @@ -45,11 +46,10 @@ public class MitgliedskontoMenu extends ContextMenu */ public MitgliedskontoMenu() { - // TODO Das mauelle erstellen von Sollbuchungen muss überarbeitet werden - // addItem(new MitgliedItem("Neue Sollbuchung", - // new SollbuchungNeuAction(), "document-new.png")); - addItem(new SollItem("Sollbuchung bearbeiten", - new SollbuchungEditAction(), "text-x-generic.png")); + addItem(new MitgliedItem("Neue Sollbuchung", new SollbuchungNeuAction(), + "document-new.png")); + addItem(new SollItem("Sollbuchung bearbeiten", new SollbuchungEditAction(), + "text-x-generic.png")); addItem(new SollOhneIstItem("Sollbuchung löschen", new SollbuchungLoeschenAction(), "user-trash-full.png")); addItem(ContextMenuItem.SEPARATOR); diff --git a/src/de/jost_net/JVerein/gui/menu/SollbuchungPositionMenu.java b/src/de/jost_net/JVerein/gui/menu/SollbuchungPositionMenu.java new file mode 100644 index 000000000..57868d01c --- /dev/null +++ b/src/de/jost_net/JVerein/gui/menu/SollbuchungPositionMenu.java @@ -0,0 +1,41 @@ +/********************************************************************** + * 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.menu; + +import de.jost_net.JVerein.gui.action.SollbuchungPositionDeleteAction; +import de.jost_net.JVerein.gui.action.SollbuchungPositionEditAction; +import de.willuhn.jameica.gui.parts.CheckedContextMenuItem; +import de.willuhn.jameica.gui.parts.CheckedSingleContextMenuItem; +import de.willuhn.jameica.gui.parts.ContextMenu; + +/** + * Kontext-Menu zu den Formularen. + */ +public class SollbuchungPositionMenu extends ContextMenu +{ + + /** + * Erzeugt ein Kontext-Menu fuer die Liste der Formulare. + */ + public SollbuchungPositionMenu() + { + addItem(new CheckedSingleContextMenuItem("Bearbeiten", + new SollbuchungPositionEditAction(), "text-x-generic.png")); + addItem(new CheckedContextMenuItem("Löschen", + new SollbuchungPositionDeleteAction(), "user-trash-full.png")); + } +} diff --git a/src/de/jost_net/JVerein/gui/view/AbrechnungSEPAView.java b/src/de/jost_net/JVerein/gui/view/AbrechnungSEPAView.java index 4efcabd5e..b485c23f8 100644 --- a/src/de/jost_net/JVerein/gui/view/AbrechnungSEPAView.java +++ b/src/de/jost_net/JVerein/gui/view/AbrechnungSEPAView.java @@ -24,7 +24,9 @@ import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.GUI; import de.willuhn.jameica.gui.parts.ButtonArea; +import de.willuhn.jameica.gui.util.ColumnLayout; import de.willuhn.jameica.gui.util.LabelGroup; +import de.willuhn.jameica.gui.util.SimpleContainer; public class AbrechnungSEPAView extends AbstractView { @@ -37,39 +39,46 @@ public void bind() throws Exception final AbrechnungSEPAControl control = new AbrechnungSEPAControl(this); LabelGroup group = new LabelGroup(getParent(), "Parameter"); - group.addLabelPair("Modus", control.getAbbuchungsmodus()); - group.addLabelPair("Fälligkeit SEPA", control.getFaelligkeit()); + ColumnLayout cl = new ColumnLayout(group.getComposite(), 2); + SimpleContainer left = new SimpleContainer(cl.getComposite()); + SimpleContainer rigth = new SimpleContainer(cl.getComposite()); + + left.addLabelPair("Modus", control.getAbbuchungsmodus()); + left.addLabelPair("Fälligkeit", control.getFaelligkeit()); if (Einstellungen.getEinstellung() .getBeitragsmodel() == Beitragsmodel.FLEXIBEL) { - group.addLabelPair("Abrechnungsmonat", control.getAbrechnungsmonat()); + left.addLabelPair("Abrechnungsmonat", control.getAbrechnungsmonat()); } - group.addLabelPair("Stichtag¹", control.getStichtag()); - group.addLabelPair("Von Eintrittsdatum", control.getVondatum()); - group.addLabelPair("Bis Austrittsdatum", control.getBisdatum()); - group.addLabelPair("Zahlungsgrund für Beiträge", + left.addLabelPair("Stichtag¹", control.getStichtag()); + left.addLabelPair("Von Eintrittsdatum", control.getVondatum()); + left.addLabelPair("Bis Austrittsdatum", control.getBisdatum()); + left.addLabelPair("Zahlungsgrund für Beiträge", control.getZahlungsgrund()); - group.addLabelPair("Zusatzbeträge", control.getZusatzbetrag()); - if (!Einstellungen.getEinstellung().getZusatzbetrag()) + if (Einstellungen.getEinstellung().getZusatzbetrag()) { - control.getZusatzbetrag().setEnabled(false); + left.addLabelPair("Zusatzbeträge", control.getZusatzbetrag()); } - group.addLabelPair("Kursteilnehmer", control.getKursteilnehmer()); - group.addLabelPair("Kompakte Abbuchung(en)", - control.getKompakteAbbuchung()); - group.addLabelPair("Sollbuchung(en) zusammenfassen", - control.getSollbuchungenZusammenfassen()); - group.addLabelPair("Rechnung(en) erstellen²", control.getRechnung()); - group.addLabelPair("Rechnung Formular", control.getRechnungFormular()); - group.addLabelPair("Rechnung Text", control.getRechnungstext()); - group.addLabelPair("SEPA-Datei drucken", control.getSEPAPrint()); - group.addLabelPair("SEPA-Check temporär deaktivieren", control.getSEPACheck()); - - if (!Einstellungen.getEinstellung().getKursteilnehmer()) + if (Einstellungen.getEinstellung().getKursteilnehmer()) { - control.getKursteilnehmer().setEnabled(false); + left.addLabelPair("Kursteilnehmer", control.getKursteilnehmer()); } - group.addLabelPair("Abbuchungsausgabe", control.getAbbuchungsausgabe()); + left.addLabelPair("Sollbuchung(en) zusammenfassen", + control.getSollbuchungenZusammenfassen()); + + rigth.addHeadline("Lastschriften"); + rigth.addLabelPair("Kompakte Abbuchung(en)", + control.getKompakteAbbuchung()); + rigth.addLabelPair("SEPA-Check temporär deaktivieren", control.getSEPACheck()); + rigth.addLabelPair("Lastschrift-PDF erstellen", control.getSEPAPrint()); + rigth.addLabelPair("Abbuchungsausgabe", control.getAbbuchungsausgabe()); + + rigth.addHeadline("Rechnungen"); + rigth.addLabelPair("Rechnung(en) erstellen²", control.getRechnung()); + rigth.addLabelPair("Rechnung Formular", control.getRechnungFormular()); + rigth.addLabelPair("Rechnung Text", control.getRechnungstext()); + rigth.addLabelPair("Rechnung Datum", control.getRechnungsdatum()); + group.addSeparator(); group.addText( "¹) Für die Berechnung, ob ein Mitglied bereits eingetreten oder ausgetreten ist. " diff --git a/src/de/jost_net/JVerein/gui/view/EinstellungenBuchfuehrungView.java b/src/de/jost_net/JVerein/gui/view/EinstellungenBuchfuehrungView.java index 23581db3a..148a45726 100644 --- a/src/de/jost_net/JVerein/gui/view/EinstellungenBuchfuehrungView.java +++ b/src/de/jost_net/JVerein/gui/view/EinstellungenBuchfuehrungView.java @@ -49,6 +49,7 @@ public void bind() throws Exception cont.addInput(control.getKontonummerInBuchungsliste()); cont.addInput(control.getOptiert()); cont.addInput(control.getFreieBuchungsklasse()); + cont.addInput(control.getSplitPositionZweck()); ButtonArea buttons = new ButtonArea(); buttons.addButton("Hilfe", new DokumentationAction(), diff --git a/src/de/jost_net/JVerein/gui/view/SollbuchungDetailView.java b/src/de/jost_net/JVerein/gui/view/SollbuchungDetailView.java index 9e1894f39..1b1f4eeac 100644 --- a/src/de/jost_net/JVerein/gui/view/SollbuchungDetailView.java +++ b/src/de/jost_net/JVerein/gui/view/SollbuchungDetailView.java @@ -16,7 +16,13 @@ **********************************************************************/ package de.jost_net.JVerein.gui.view; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; + import de.jost_net.JVerein.gui.action.DokumentationAction; +import de.jost_net.JVerein.gui.action.SollbuchungPositionNeuAction; import de.jost_net.JVerein.gui.control.MitgliedskontoControl; import de.willuhn.jameica.gui.AbstractView; import de.willuhn.jameica.gui.Action; @@ -43,15 +49,30 @@ public void bind() throws Exception control.getBetrag().setMandatory(true); grBuchung.addLabelPair("Betrag", control.getBetrag()); + boolean hasRechnung = control.hasRechnung(); + LabelGroup cont = new LabelGroup(getParent(), "Sollbuchungspositionen", true); - cont.addPart(control.getBuchungenList()); + ButtonArea buttons1 = new ButtonArea(); + Button neu = new Button("Neu", new SollbuchungPositionNeuAction(), + getCurrentObject(), false, "document-new.png"); + neu.setEnabled(!hasRechnung); + buttons1.addButton(neu); + + // Diese Zeilen werden gebraucht um die Buttons rechts zu plazieren + GridLayout layout = new GridLayout(); + Composite comp = new Composite(cont.getComposite(), SWT.NONE); + comp.setLayout(layout); + comp.setLayoutData(new GridData(GridData.END)); + + buttons1.paint(cont.getComposite()); + cont.addPart(control.getBuchungenList(hasRechnung)); + ButtonArea buttons = new ButtonArea(); buttons.addButton("Hilfe", new DokumentationAction(), DokumentationUtil.MITGLIEDSKONTO_UEBERSICHT, false, "question-circle.png"); - boolean hasRechnung = control.hasRechnung(); Button save = new Button("Speichern", new Action() { @Override diff --git a/src/de/jost_net/JVerein/gui/view/SollbuchungListeView.java b/src/de/jost_net/JVerein/gui/view/SollbuchungListeView.java index 2b20681c4..dde1dbffe 100644 --- a/src/de/jost_net/JVerein/gui/view/SollbuchungListeView.java +++ b/src/de/jost_net/JVerein/gui/view/SollbuchungListeView.java @@ -20,6 +20,7 @@ import de.jost_net.JVerein.gui.action.SollbuchungEditAction; import de.jost_net.JVerein.gui.action.SollbuchungExportAction; import de.jost_net.JVerein.gui.action.SollbuchungExportAction.EXPORT_TYP; +import de.jost_net.JVerein.gui.action.SollbuchungNeuAction; import de.jost_net.JVerein.gui.control.MitgliedskontoControl; import de.jost_net.JVerein.gui.menu.SollbuchungMenu; import de.jost_net.JVerein.gui.parts.ToolTipButton; @@ -79,9 +80,8 @@ public void bind() throws Exception buttons.addButton(new Button("Export", new SollbuchungExportAction(EXPORT_TYP.MITGLIEDSKONTO), control, false, "document-save.png")); - // TODO das Bearbeiten der Sollbuchungen muss noch überarbeitet werden - // buttons.addButton("Neu", new SollbuchungEditAction(), control, false, - // "document-new.png"); + buttons.addButton("Neu", new SollbuchungNeuAction(), control, false, + "document-new.png"); buttons.paint(this.getParent()); } } diff --git a/src/de/jost_net/JVerein/gui/view/SollbuchungPositionView.java b/src/de/jost_net/JVerein/gui/view/SollbuchungPositionView.java new file mode 100644 index 000000000..527ca566d --- /dev/null +++ b/src/de/jost_net/JVerein/gui/view/SollbuchungPositionView.java @@ -0,0 +1,64 @@ +/********************************************************************** + * 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.view; + +import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.gui.action.DokumentationAction; +import de.jost_net.JVerein.gui.control.SollbuchungPositionControl; +import de.willuhn.jameica.gui.AbstractView; +import de.willuhn.jameica.gui.Action; +import de.willuhn.jameica.gui.GUI; +import de.willuhn.jameica.gui.parts.ButtonArea; +import de.willuhn.jameica.gui.util.LabelGroup; + +public class SollbuchungPositionView extends AbstractView +{ + + @Override + public void bind() throws Exception + { + GUI.getView().setTitle("Sollbuchungsposition"); + + final SollbuchungPositionControl control = new SollbuchungPositionControl( + this); + + LabelGroup group = new LabelGroup(getParent(), "Sollbuchungsposition"); + group.addLabelPair("Datum", control.getDatum()); + group.addLabelPair("Zweck", control.getZweck()); + group.addLabelPair("Betrag", control.getBetrag()); + group.addLabelPair("Buchungsart", control.getBuchungsart()); + if (Einstellungen.getEinstellung().getBuchungsklasseInBuchung()) + { + group.addLabelPair("Buchungsklasse", control.getBuchungsklasse()); + } + + ButtonArea buttons = new ButtonArea(); + buttons.addButton("Hilfe", new DokumentationAction(), + DokumentationUtil.MITGLIEDSKONTO_UEBERSICHT, false, + "question-circle.png"); + buttons.addButton("Speichern", new Action() + { + + @Override + public void handleAction(Object context) + { + control.handleStore(); + } + }, null, true, "document-save.png"); + buttons.paint(this.getParent()); + } +} diff --git a/src/de/jost_net/JVerein/io/AbrechnungSEPA.java b/src/de/jost_net/JVerein/io/AbrechnungSEPA.java index e6c7836b2..3ab351a57 100644 --- a/src/de/jost_net/JVerein/io/AbrechnungSEPA.java +++ b/src/de/jost_net/JVerein/io/AbrechnungSEPA.java @@ -108,47 +108,18 @@ public AbrechnungSEPA(AbrechnungSEPAParam param, ProgressMonitor monitor, BackgroundTask backgroundTask) throws Exception { interrupt = backgroundTask; - if (Einstellungen.getEinstellung().getName() == null - || Einstellungen.getEinstellung().getName().length() == 0 - || Einstellungen.getEinstellung().getIban() == null - || Einstellungen.getEinstellung().getIban().length() == 0) - { - throw new ApplicationException( - "Name des Vereins oder Bankverbindung fehlt. Bitte unter Administration|Einstellungen erfassen."); - } - - if (Einstellungen.getEinstellung().getGlaeubigerID() == null - || Einstellungen.getEinstellung().getGlaeubigerID().length() == 0) - { - throw new ApplicationException( - "Gläubiger-ID fehlt. Gfls. unter https://extranet.bundesbank.de/scp/ oder" - + " http://www.oenb.at/idakilz/cid?lang=de beantragen und unter" - + " Administration|Einstellungen|Allgemein eintragen.\n" - + "Zu Testzwecken kann DE98ZZZ09999999999 eingesetzt werden."); - } Abrechnungslauf abrl = getAbrechnungslauf(param); - Basislastschrift lastschrift = new Basislastschrift(); - // Vorbereitung: Allgemeine Informationen einstellen - lastschrift.setBIC(Einstellungen.getEinstellung().getBic()); - lastschrift - .setGlaeubigerID(Einstellungen.getEinstellung().getGlaeubigerID()); - lastschrift.setIBAN(Einstellungen.getEinstellung().getIban()); - lastschrift.setKomprimiert(param.kompakteabbuchung); - lastschrift - .setName(Zeichen.convert(Einstellungen.getEinstellung().getName())); - lastschrift.setMessageID(abrl.getID() + "-RCUR"); - Konto konto = getKonto(); ArrayList zahlerarray = new ArrayList<>(); - // Mitglieder Abrechnen und zahlerMap füllen + // Mitglieder abrechnen und zahlerMap füllen abrechnenMitglieder(param, monitor); if (param.zusatzbetraege) { - // Zusatzbetraege Abrechnen und zahlerMap füllen + // Zusatzbetraege abrechnen und zahlerMap füllen abbuchenZusatzbetraege(param, abrl, monitor); } @@ -297,6 +268,46 @@ public AbrechnungSEPA(AbrechnungSEPAParam param, ProgressMonitor monitor, if (zahlerarray.size() > 0) { monitor.setStatusText("Lastschriften erstellen"); + + if (Einstellungen.getEinstellung().getName() == null + || Einstellungen.getEinstellung().getName().length() == 0 + || Einstellungen.getEinstellung().getIban() == null + || Einstellungen.getEinstellung().getIban().length() == 0 + || Einstellungen.getEinstellung().getBic() == null + || Einstellungen.getEinstellung().getBic().length() == 0) + { + throw new ApplicationException( + "Name des Vereins oder Bankverbindung fehlt. Bitte unter " + + "Administration|Einstellungen|Allgemein erfassen."); + } + + if (Einstellungen.getEinstellung().getGlaeubigerID() == null + || Einstellungen.getEinstellung().getGlaeubigerID().length() == 0) + { + throw new ApplicationException( + "Gläubiger-ID fehlt. Gfls. unter https://extranet.bundesbank.de/scp/ oder" + + " http://www.oenb.at/idakilz/cid?lang=de beantragen und unter" + + " Administration|Einstellungen|Allgemein eintragen.\n" + + "Zu Testzwecken kann DE98ZZZ09999999999 eingesetzt werden."); + } + + if (param.faelligkeit.before(new Date())) + { + throw new ApplicationException( + "Fälligkeit muss bei Lastschriften in der Zukunft liegen"); + } + + Basislastschrift lastschrift = new Basislastschrift(); + // Vorbereitung: Allgemeine Informationen einstellen + lastschrift.setBIC(Einstellungen.getEinstellung().getBic()); + lastschrift + .setGlaeubigerID(Einstellungen.getEinstellung().getGlaeubigerID()); + lastschrift.setIBAN(Einstellungen.getEinstellung().getIban()); + lastschrift.setKomprimiert(param.kompakteabbuchung); + lastschrift + .setName(Zeichen.convert(Einstellungen.getEinstellung().getName())); + lastschrift.setMessageID(abrl.getID() + "-RCUR"); + count = 0; BigDecimal summelastschriften = BigDecimal.valueOf(0); for (JVereinZahler zahler : zahlerarray) @@ -316,7 +327,6 @@ public AbrechnungSEPA(AbrechnungSEPAParam param, ProgressMonitor monitor, -summelastschriften.doubleValue()); } - // Wenn keine Lastschriften vorhanden sind, wird kein File erzeugt. if (param.abbuchungsausgabe == Abrechnungsausgabe.SEPA_DATEI) { writeSepaFile(param, lastschrift, zahlerarray); @@ -1169,6 +1179,7 @@ private String writeSollbuchung(Long zahlerId, int zahlungsweg, IAdresse adress, .createObject(Rechnung.class, null); re.setFormular(form); + re.setDatum(param.rechnungsdatum); re.fill(mk); re.store(); mk.setRechnung(re); diff --git a/src/de/jost_net/JVerein/io/AbrechnungSEPAParam.java b/src/de/jost_net/JVerein/io/AbrechnungSEPAParam.java index e46390a5f..36b7ca6cf 100644 --- a/src/de/jost_net/JVerein/io/AbrechnungSEPAParam.java +++ b/src/de/jost_net/JVerein/io/AbrechnungSEPAParam.java @@ -20,6 +20,8 @@ import java.rmi.RemoteException; import java.util.Date; +import org.kapott.hbci.sepa.SepaVersion; + import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.gui.control.AbrechnungSEPAControl; import de.jost_net.JVerein.keys.Abrechnungsausgabe; @@ -34,7 +36,6 @@ import de.willuhn.jameica.system.OperationCanceledException; import de.willuhn.logging.Logger; import de.willuhn.util.ApplicationException; -import org.kapott.hbci.sepa.SepaVersion; public class AbrechnungSEPAParam { @@ -68,6 +69,8 @@ public class AbrechnungSEPAParam public final String rechnungstext; + public final Date rechnungsdatum; + public final Boolean sepaprint; public final Boolean sepacheckdisable; @@ -104,6 +107,7 @@ public AbrechnungSEPAParam(AbrechnungSEPAControl ac, File sepafileRCUR, SepaVers rechnung = (Boolean) ac.getRechnung().getValue(); rechnungsformular = (Formular) ac.getRechnungFormular().getValue(); rechnungstext = (String) ac.getRechnungstext().getValue(); + rechnungsdatum = (Date) ac.getRechnungsdatum().getValue(); sepaprint = (Boolean) ac.getSEPAPrint().getValue(); sepacheckdisable = (Boolean) ac.getSEPACheck().getValue(); this.pdffileRCUR = pdffileRCUR; diff --git a/src/de/jost_net/JVerein/io/SplitbuchungsContainer.java b/src/de/jost_net/JVerein/io/SplitbuchungsContainer.java index e652eec50..9b3c0946f 100644 --- a/src/de/jost_net/JVerein/io/SplitbuchungsContainer.java +++ b/src/de/jost_net/JVerein/io/SplitbuchungsContainer.java @@ -35,7 +35,6 @@ import de.willuhn.jameica.gui.GUI; import de.willuhn.jameica.gui.dialogs.YesNoDialog; import de.willuhn.jameica.system.OperationCanceledException; -import de.willuhn.jameica.system.Settings; import de.willuhn.logging.Logger; import de.willuhn.util.ApplicationException; @@ -416,6 +415,7 @@ else if (splitMap.size() > 1) { throw new OperationCanceledException(); } + splitten = true; } if (splitten) { @@ -470,8 +470,8 @@ else if (buchung.getSplitTyp() == SplitbuchungTyp.GEGEN } } - boolean splitPositionZweck = new Settings(SplitbuchungsContainer.class) - .getBoolean("splitPositionZweck", true); + boolean splitPositionZweck = Einstellungen.getEinstellung() + .getSplitPositionZweck(); Iterator> iterator = splitMap.entrySet() .iterator(); while (iterator.hasNext()) @@ -490,7 +490,7 @@ else if (buchung.getSplitTyp() == SplitbuchungTyp.GEGEN } else { - splitBuchung.setZweck(mk.getZweck1()); + splitBuchung.setZweck(buchung.getZweck()); } splitBuchung.setMitgliedskonto(mk); String buchungsart = entry.getKey().substring(0, diff --git a/src/de/jost_net/JVerein/rmi/Einstellung.java b/src/de/jost_net/JVerein/rmi/Einstellung.java index 10a833858..2bd4244b6 100644 --- a/src/de/jost_net/JVerein/rmi/Einstellung.java +++ b/src/de/jost_net/JVerein/rmi/Einstellung.java @@ -632,4 +632,8 @@ public void setCt1SepaVersion(SepaVersion sepaversion) public Long getVerrechnungskontoId() throws RemoteException; public void setVerrechnungskontoId(Long konto) throws RemoteException; + + public boolean getSplitPositionZweck() throws RemoteException; + + public void setSplitPositionZweck(boolean split) throws RemoteException;; } diff --git a/src/de/jost_net/JVerein/rmi/Rechnung.java b/src/de/jost_net/JVerein/rmi/Rechnung.java index 7c8579ac9..c7dfeb67e 100644 --- a/src/de/jost_net/JVerein/rmi/Rechnung.java +++ b/src/de/jost_net/JVerein/rmi/Rechnung.java @@ -33,6 +33,13 @@ public interface Rechnung extends DBObject, IAdresse public void setFormular(Formular formular) throws RemoteException; + /** + * Füllt alle Daten aus der Sollbuchung in die Rechnung. Das Datum und das + * Formular müssen selbst hinzugefügt werden + * + * @param mk + * die Sollbuchung aus der eine Rechnung erstellt werden soll + */ public void fill(Mitgliedskonto mk) throws RemoteException, ApplicationException; diff --git a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0459.java b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0459.java new file mode 100644 index 000000000..1197d3af3 --- /dev/null +++ b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0459.java @@ -0,0 +1,51 @@ +/********************************************************************** + * 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.willuhn.util.ApplicationException; +import de.willuhn.util.ProgressMonitor; + +public class Update0459 extends AbstractDDLUpdate +{ + public Update0459(String driver, ProgressMonitor monitor, Connection conn) + { + super(driver, monitor, conn); + } + + @Override + public void run() throws ApplicationException + { + { + // Autoincrement von Rechnung auf den maximalen Zähler aus Formular setzen + // so gibt es eine fortlaufende Rechnungsnummer bei verwendung der + // Rechnung-ID + if (getDriver() == DRIVER.H2) + { + execute( + "SET @max_id = (SELECT MAX(zaehler)+1 FROM formular WHERE art = 2);" + + "ALTER TABLE rechnung ALTER COLUMN id RESTART WITH @max_id;"); + } + if (getDriver() == DRIVER.MYSQL) + { + execute( + "SET @max_id = (SELECT MAX(zaehler)+1 FROM formular WHERE art = 2);" + + "SET @sql = CONCAT('ALTER TABLE rechnung AUTO_INCREMENT = ', @max_id);" + + "PREPARE st FROM @sql; EXECUTE st;"); + } + } + } +} diff --git a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0460.java b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0460.java new file mode 100644 index 000000000..c5b71c660 --- /dev/null +++ b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0460.java @@ -0,0 +1,36 @@ +/********************************************************************** + * 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 Update0460 extends AbstractDDLUpdate +{ + public Update0460(String driver, ProgressMonitor monitor, Connection conn) + { + super(driver, monitor, conn); + } + + @Override + public void run() throws ApplicationException + { + execute(addColumn("einstellung", new Column("splitpositionzweck", + COLTYPE.BOOLEAN, 1, "0", true, false))); + } +} diff --git a/src/de/jost_net/JVerein/server/EinstellungImpl.java b/src/de/jost_net/JVerein/server/EinstellungImpl.java index fe6e7c2cd..4c4c42713 100644 --- a/src/de/jost_net/JVerein/server/EinstellungImpl.java +++ b/src/de/jost_net/JVerein/server/EinstellungImpl.java @@ -2209,4 +2209,16 @@ public void setVerrechnungskontoId(Long konto) throws RemoteException { setAttribute("verrechnungskonto", konto); } + + @Override + public boolean getSplitPositionZweck() throws RemoteException + { + return (Boolean) getAttribute("splitpositionzweck"); + } + + @Override + public void setSplitPositionZweck(boolean split) throws RemoteException + { + setAttribute("splitpositionzweck", split); + } } diff --git a/src/de/jost_net/JVerein/server/JVereinUpdateProvider.java b/src/de/jost_net/JVerein/server/JVereinUpdateProvider.java index e51f828dd..f38edcf65 100644 --- a/src/de/jost_net/JVerein/server/JVereinUpdateProvider.java +++ b/src/de/jost_net/JVerein/server/JVereinUpdateProvider.java @@ -6892,9 +6892,14 @@ private void update0339(Connection conn) throws ApplicationException private void update0340(Connection conn) throws ApplicationException { Map statements = new HashMap(); - String sql = alterColumn("einstellung", "name", - "VARCHAR(70) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci"); - statements.put(driver, sql); + // Update fuer H2 + statements.put(DBSupportH2Impl.class.getName(), + alterColumn("einstellung", "name", "VARCHAR(70)")); + + // Update fuer MySQL + statements.put(DBSupportMySqlImpl.class.getName(), alterColumn( + "einstellung", "name", + "VARCHAR(70) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci")); execute(conn, statements, 340); } diff --git a/src/de/jost_net/JVerein/server/RechnungImpl.java b/src/de/jost_net/JVerein/server/RechnungImpl.java index 87216ff92..fdf874b00 100644 --- a/src/de/jost_net/JVerein/server/RechnungImpl.java +++ b/src/de/jost_net/JVerein/server/RechnungImpl.java @@ -394,7 +394,6 @@ public void fill(Mitgliedskonto mk) setStaat(mitglied.getKtoiStaat()); setGeschlecht(mitglied.getKtoiGeschlecht()); } - setDatum(new Date()); if (!mitglied.getMandatDatum().equals(Einstellungen.NODATE)) { setMandatDatum(mitglied.getMandatDatum()); diff --git a/src/de/jost_net/JVerein/server/SollbuchungPositionImpl.java b/src/de/jost_net/JVerein/server/SollbuchungPositionImpl.java index e63b8c72f..b4ecc6a4e 100644 --- a/src/de/jost_net/JVerein/server/SollbuchungPositionImpl.java +++ b/src/de/jost_net/JVerein/server/SollbuchungPositionImpl.java @@ -24,6 +24,8 @@ import de.jost_net.JVerein.rmi.Mitgliedskonto; import de.jost_net.JVerein.rmi.SollbuchungPosition; import de.willuhn.datasource.db.AbstractDBObject; +import de.willuhn.logging.Logger; +import de.willuhn.util.ApplicationException; public class SollbuchungPositionImpl extends AbstractDBObject implements SollbuchungPosition @@ -36,6 +38,43 @@ public SollbuchungPositionImpl() throws RemoteException super(); } + @Override + protected void insertCheck() throws ApplicationException + { + try + { + plausi(); + } + catch (RemoteException e) + { + Logger.error("Fehler", e); + throw new ApplicationException( + "Buchung kann nicht gespeichert werden. Siehe system log"); + } + } + + public void plausi() throws RemoteException, ApplicationException + { + if (getDatum() == null) + { + throw new ApplicationException("Bitte Datum eingeben"); + } + if (getBetrag() == null) + { + throw new ApplicationException("Bitte Betrag eingeben"); + } + if (getZweck() == null || getZweck().length() == 0) + { + throw new ApplicationException("Bitte Verwendungszweck eingeben"); + } + } + + @Override + protected void updateCheck() throws ApplicationException + { + insertCheck(); + } + @Override protected String getTableName() {