From 0c8a830c098d881b9b7467884993e62cff4238f1 Mon Sep 17 00:00:00 2001 From: nils Date: Sun, 2 Feb 2025 23:25:38 +0100 Subject: [PATCH] =?UTF-8?q?Buchung=20gepr=C3=BCft=20Markieren.=20Buchungsl?= =?UTF-8?q?iste=20teilweise=20aktualisieren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin.xml | 4 + .../control/BuchungsTextKorrekturControl.java | 65 ------ .../JVerein/Messaging/BuchungMessage.java | 32 --- .../HibscusUmsatzMessageConsumer.java | 98 +++++++++ .../JVerein/Queries/BuchungQuery.java | 10 +- .../BuchungBuchungsartZuordnungAction.java | 8 - .../gui/action/BuchungDeleteAction.java | 13 +- .../gui/action/BuchungGeprueftAction.java | 85 ++++++++ .../BuchungKontoauszugZuordnungAction.java | 10 - .../action/BuchungProjektZuordnungAction.java | 8 - .../BuchungSollbuchungZuordnungAction.java | 9 - .../gui/action/SplitBuchungDeleteAction.java | 2 +- .../SplitBuchungWiederherstellenAction.java | 74 +++++++ .../SplitbuchungBulkAufloesenAction.java | 34 ++- .../JVerein/gui/control/BuchungsControl.java | 195 +++++------------- .../gui/control/EinstellungControl.java | 17 ++ .../JVerein/gui/menu/BuchungMenu.java | 48 ++++- .../JVerein/gui/menu/SplitBuchungMenu.java | 63 +----- .../gui/parts/AutoUpdateTablePart.java | 101 +++++++++ .../gui/parts/BuchungListTablePart.java | 3 +- .../JVerein/gui/view/BuchungslisteView.java | 2 +- .../view/EinstellungenBuchfuehrungView.java | 1 + .../JVerein/io/CSVBuchungsImport.java | 3 - src/de/jost_net/JVerein/rmi/Buchung.java | 4 + src/de/jost_net/JVerein/rmi/Einstellung.java | 7 +- .../jost_net/JVerein/server/BuchungImpl.java | 17 ++ .../server/DDLTool/Updates/Update0462.java | 39 ++++ .../JVerein/server/EinstellungImpl.java | 13 ++ 28 files changed, 582 insertions(+), 383 deletions(-) delete mode 100644 src/de/jost_net/JVerein/Messaging/BuchungMessage.java create mode 100644 src/de/jost_net/JVerein/Messaging/HibscusUmsatzMessageConsumer.java create mode 100644 src/de/jost_net/JVerein/gui/action/BuchungGeprueftAction.java create mode 100644 src/de/jost_net/JVerein/gui/action/SplitBuchungWiederherstellenAction.java create mode 100644 src/de/jost_net/JVerein/gui/parts/AutoUpdateTablePart.java create mode 100644 src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java diff --git a/plugin.xml b/plugin.xml index 9b9d95005..0ad609d4c 100644 --- a/plugin.xml +++ b/plugin.xml @@ -37,6 +37,10 @@ class="de.jost_net.JVerein.server.JVereinDBServiceImpl" /> + + + + diff --git a/src/com/schlevoigt/JVerein/gui/control/BuchungsTextKorrekturControl.java b/src/com/schlevoigt/JVerein/gui/control/BuchungsTextKorrekturControl.java index 29ca862ea..39a726c64 100644 --- a/src/com/schlevoigt/JVerein/gui/control/BuchungsTextKorrekturControl.java +++ b/src/com/schlevoigt/JVerein/gui/control/BuchungsTextKorrekturControl.java @@ -22,7 +22,6 @@ import com.schlevoigt.JVerein.util.Misc; import de.jost_net.JVerein.DBTools.DBTransaction; -import de.jost_net.JVerein.Messaging.BuchungMessage; import de.jost_net.JVerein.gui.action.BuchungAction; import de.jost_net.JVerein.rmi.Buchung; import de.jost_net.JVerein.rmi.Konto; @@ -36,9 +35,6 @@ import de.willuhn.jameica.gui.formatter.Formatter; import de.willuhn.jameica.gui.parts.Button; import de.willuhn.jameica.gui.parts.TablePart; -import de.willuhn.jameica.messaging.Message; -import de.willuhn.jameica.messaging.MessageConsumer; -import de.willuhn.jameica.system.Application; import de.willuhn.logging.Logger; import de.willuhn.util.ApplicationException; @@ -48,8 +44,6 @@ public class BuchungsTextKorrekturControl extends AbstractControl { private BuchungsKorrekturQuery query; - private BuchungMessageConsumer mc = null; - public BuchungsTextKorrekturControl(AbstractView view) { super(view); } @@ -121,17 +115,7 @@ public String format(Object value) { buchungsList.setRememberColWidths(true); buchungsList.setRememberOrder(true); buchungsList.setRememberState(true); - this.mc = new BuchungMessageConsumer(); - Application.getMessagingFactory().registerMessageConsumer(this.mc); - } else { - buchungsList.removeAll(); - - for (Buchung bu : query.get()) { - buchungsList.addItem(bu); - } - buchungsList.sort(); } - return buchungsList; } @@ -175,53 +159,4 @@ private void starteKorrektur() { GUI.getStatusBar().setErrorText(e.getLocalizedMessage()); } } - - /** - * Wird benachrichtigt um die Anzeige zu aktualisieren. - */ - private class BuchungMessageConsumer implements MessageConsumer { - - /** - * @see de.willuhn.jameica.messaging.MessageConsumer#autoRegister() - */ - @Override - public boolean autoRegister() { - return false; - } - - /** - * @see de.willuhn.jameica.messaging.MessageConsumer#getExpectedMessageTypes() - */ - @Override - public Class[] getExpectedMessageTypes() { - return new Class[] { BuchungMessage.class }; - } - - /** - * @see de.willuhn.jameica.messaging.MessageConsumer#handleMessage(de.willuhn.jameica.messaging.Message) - */ - @Override - public void handleMessage(final Message message) throws Exception { - GUI.getDisplay().syncExec(new Runnable() { - - @Override - public void run() { - try { - if (buchungsList == null) { - // Eingabe-Feld existiert nicht. Also abmelden - Application.getMessagingFactory().unRegisterMessageConsumer(BuchungMessageConsumer.this); - return; - } - refreshBuchungen(); - } catch (Exception e) { - // Wenn hier ein Fehler auftrat, deregistrieren wir uns - // wieder - Logger.error("unable to refresh Splitbuchungen", e); - Application.getMessagingFactory().unRegisterMessageConsumer(BuchungMessageConsumer.this); - } - } - }); - } - - } } diff --git a/src/de/jost_net/JVerein/Messaging/BuchungMessage.java b/src/de/jost_net/JVerein/Messaging/BuchungMessage.java deleted file mode 100644 index 3d78ae3f6..000000000 --- a/src/de/jost_net/JVerein/Messaging/BuchungMessage.java +++ /dev/null @@ -1,32 +0,0 @@ -/********************************************************************** - * 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.Messaging; - -import de.willuhn.datasource.GenericObject; -import de.willuhn.jameica.hbci.messaging.ObjectMessage; - -/** - * Wird versendet, wenn sich die Buchungstabelle geaendert hat. - */ -public class BuchungMessage extends ObjectMessage -{ - public BuchungMessage(GenericObject object) - { - super(object); - } -} \ No newline at end of file diff --git a/src/de/jost_net/JVerein/Messaging/HibscusUmsatzMessageConsumer.java b/src/de/jost_net/JVerein/Messaging/HibscusUmsatzMessageConsumer.java new file mode 100644 index 000000000..65a516520 --- /dev/null +++ b/src/de/jost_net/JVerein/Messaging/HibscusUmsatzMessageConsumer.java @@ -0,0 +1,98 @@ +/********************************************************************** + * + * Copyright (c) 2004 Olaf Willuhn + * All right/********************************************************************** + * 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.Messaging; + +import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.rmi.Buchung; +import de.willuhn.datasource.GenericObject; +import de.willuhn.datasource.rmi.DBIterator; +import de.willuhn.jameica.messaging.Message; +import de.willuhn.jameica.messaging.MessageConsumer; +import de.willuhn.jameica.messaging.QueryMessage; + +/** + * Wird benachrichtigt, wenn eine Buchung aus Hibiscus als geprueft/ungeprueft + * markiert wurde. Insofern wir eine Buchung haben, die aus diesem Umsatz + * erzeugt wurde, uebernehmen wir den Status dann auch gleich in JVerein. + */ +public class HibscusUmsatzMessageConsumer implements MessageConsumer +{ + /** + * @see de.willuhn.jameica.messaging.MessageConsumer#getExpectedMessageTypes() + */ + @SuppressWarnings("rawtypes") + @Override + public Class[] getExpectedMessageTypes() + { + return new Class[] { QueryMessage.class }; + } + + /** + * @see de.willuhn.jameica.messaging.MessageConsumer#handleMessage(de.willuhn.jameica.messaging.Message) + */ + @Override + public void handleMessage(Message message) throws Exception + { + if (!Einstellungen.getEinstellung().getGeprueftSynchronisieren()) + return; + + final QueryMessage m = (QueryMessage) message; + final String name = m.getName(); + final Object data = m.getData(); + + if (name == null || data == null) + return; + + final boolean state = Boolean.valueOf(name); + + // Wir muessen hier nichtmal auf Umsatz casten - uns genuegt die ID des + // Datensatzes + if (!(data instanceof GenericObject)) + return; + + final GenericObject o = (GenericObject) data; + final String id = o.getID(); + if (id == null || id.length() == 0) + return; + + DBIterator list = Einstellungen.getDBService() + .createList(Buchung.class); + list.addFilter("umsatzid = ?", id); + if (!list.hasNext()) + return; + + Buchung b = list.next(); + b.setGeprueft(state); + b.store(); + } + + /** + * @see de.willuhn.jameica.messaging.MessageConsumer#autoRegister() + */ + @Override + public boolean autoRegister() + { + // Per plugin.xml registriert. + return false; + } + +} + diff --git a/src/de/jost_net/JVerein/Queries/BuchungQuery.java b/src/de/jost_net/JVerein/Queries/BuchungQuery.java index 6a09ea461..322fb0eee 100644 --- a/src/de/jost_net/JVerein/Queries/BuchungQuery.java +++ b/src/de/jost_net/JVerein/Queries/BuchungQuery.java @@ -81,10 +81,12 @@ private void SortHashMap() { private SplitFilter split; + private boolean ungeprueft; + public BuchungQuery(Date datumvon, Date datumbis, Konto konto, Buchungsart buchungsart, Projekt projekt, String text, String betrag, Boolean hasMitglied, String mitglied, boolean geldkonto, - SplitFilter split) + SplitFilter split, boolean ungeprueft) { this.datumvon = datumvon; this.datumbis = datumbis; @@ -97,6 +99,7 @@ public BuchungQuery(Date datumvon, Date datumbis, Konto konto, this.geldkonto = geldkonto; this.mitglied = mitglied; this.split = split; + this.ungeprueft = ungeprueft; } public String getOrder(String value) { @@ -242,6 +245,11 @@ else if (buchungart.getNummer() >= 0) break; } + if (ungeprueft) + { + it.addFilter("geprueft = 0"); + } + if (betrag != null && betrag.length() > 0) { try diff --git a/src/de/jost_net/JVerein/gui/action/BuchungBuchungsartZuordnungAction.java b/src/de/jost_net/JVerein/gui/action/BuchungBuchungsartZuordnungAction.java index 51a441a4d..c79d4448f 100644 --- a/src/de/jost_net/JVerein/gui/action/BuchungBuchungsartZuordnungAction.java +++ b/src/de/jost_net/JVerein/gui/action/BuchungBuchungsartZuordnungAction.java @@ -17,7 +17,6 @@ package de.jost_net.JVerein.gui.action; -import de.jost_net.JVerein.gui.control.BuchungsControl; import de.jost_net.JVerein.gui.dialogs.BuchungsartZuordnungDialog; import de.jost_net.JVerein.rmi.Buchung; import de.jost_net.JVerein.rmi.Buchungsart; @@ -33,12 +32,6 @@ */ public class BuchungBuchungsartZuordnungAction implements Action { - private BuchungsControl control; - - public BuchungBuchungsartZuordnungAction(BuchungsControl control) - { - this.control = control; - } @Override public void handleAction(Object context) throws ApplicationException @@ -111,7 +104,6 @@ public void handleAction(Object context) throws ApplicationException } } } - control.getBuchungsList(); if (ba == null) { GUI.getStatusBar().setSuccessText("Buchungsarten gelöscht"); diff --git a/src/de/jost_net/JVerein/gui/action/BuchungDeleteAction.java b/src/de/jost_net/JVerein/gui/action/BuchungDeleteAction.java index 52c16425a..8bb5018d6 100644 --- a/src/de/jost_net/JVerein/gui/action/BuchungDeleteAction.java +++ b/src/de/jost_net/JVerein/gui/action/BuchungDeleteAction.java @@ -18,8 +18,6 @@ import java.rmi.RemoteException; -import de.jost_net.JVerein.Messaging.BuchungMessage; -import de.jost_net.JVerein.gui.control.BuchungsControl; import de.jost_net.JVerein.io.SplitbuchungsContainer; import de.jost_net.JVerein.rmi.Buchung; import de.jost_net.JVerein.rmi.Jahresabschluss; @@ -28,7 +26,6 @@ import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.GUI; import de.willuhn.jameica.gui.dialogs.YesNoDialog; -import de.willuhn.jameica.system.Application; import de.willuhn.logging.Logger; import de.willuhn.util.ApplicationException; @@ -39,12 +36,9 @@ public class BuchungDeleteAction implements Action { private boolean splitbuchung; - private BuchungsControl control; - - public BuchungDeleteAction(BuchungsControl control, boolean splitbuchung) + public BuchungDeleteAction(boolean splitbuchung) { this.splitbuchung = splitbuchung; - this.control = control; } @Override @@ -153,15 +147,12 @@ else if (context instanceof Buchung[]) bu.getSpendenbescheinigung().delete(); bu.delete(); count++; - control.getBuchungsList(); } else if (splitbuchung) { if (bu.getDependencyId() == -1) { bu.setDelete(true); - Application.getMessagingFactory() - .sendMessage(new BuchungMessage(bu)); count++; } else @@ -171,8 +162,6 @@ else if (splitbuchung) if (buchung_tmp.getDependencyId() == bu.getDependencyId()) { buchung_tmp.setDelete(true); - Application.getMessagingFactory() - .sendMessage(new BuchungMessage(buchung_tmp)); count++; } } diff --git a/src/de/jost_net/JVerein/gui/action/BuchungGeprueftAction.java b/src/de/jost_net/JVerein/gui/action/BuchungGeprueftAction.java new file mode 100644 index 000000000..380615f94 --- /dev/null +++ b/src/de/jost_net/JVerein/gui/action/BuchungGeprueftAction.java @@ -0,0 +1,85 @@ +/********************************************************************** + * 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.rmi.Buchung; +import de.willuhn.jameica.gui.Action; +import de.willuhn.jameica.messaging.QueryMessage; +import de.willuhn.jameica.system.Application; +import de.willuhn.util.ApplicationException; + +public class BuchungGeprueftAction implements Action +{ + private boolean geprueft; + + public BuchungGeprueftAction(boolean geprueft) + { + this.geprueft = geprueft; + } + + @Override + public void handleAction(Object context) throws ApplicationException + { + Buchung[] buchungen = null; + if (context instanceof Buchung) + { + buchungen = new Buchung[1]; + buchungen[0] = (Buchung) context; + } + else if (context instanceof Buchung[]) + { + buchungen = (Buchung[]) context; + } + if (buchungen == null) + { + return; + } + if (buchungen.length == 0) + { + return; + } + + try + { + boolean sync = Einstellungen.getEinstellung().getGeprueftSynchronisieren(); + for (Buchung b : buchungen) + { + b.setGeprueft(geprueft); + b.store(); + + // ggfs. mit Hibiscus syncronisieren + // wir verwenden hier die SynTAX-MessageQueue, da diese bereits + // existiert und somit keine Änderung an Hibiscus nötig ist + if (sync) + { + String hid = b.getUmsatzid().toString(); + if (hid != null && hid.length() > 0) + Application.getMessagingFactory() + .getMessagingQueue("syntax.buchung.markchecked") + .sendMessage(new QueryMessage(Boolean.toString(geprueft), hid)); + } + } + } + catch (RemoteException e) + { + throw new ApplicationException(e); + } + } +} diff --git a/src/de/jost_net/JVerein/gui/action/BuchungKontoauszugZuordnungAction.java b/src/de/jost_net/JVerein/gui/action/BuchungKontoauszugZuordnungAction.java index 7bc0db233..f9c11e45b 100644 --- a/src/de/jost_net/JVerein/gui/action/BuchungKontoauszugZuordnungAction.java +++ b/src/de/jost_net/JVerein/gui/action/BuchungKontoauszugZuordnungAction.java @@ -17,7 +17,6 @@ package de.jost_net.JVerein.gui.action; -import de.jost_net.JVerein.gui.control.BuchungsControl; import de.jost_net.JVerein.gui.dialogs.KontoauszugZuordnungDialog; import de.jost_net.JVerein.rmi.Buchung; import de.willuhn.jameica.gui.Action; @@ -31,14 +30,6 @@ */ public class BuchungKontoauszugZuordnungAction implements Action { - - private BuchungsControl control; - - public BuchungKontoauszugZuordnungAction(BuchungsControl control) - { - this.control = control; - } - @Override public void handleAction(Object context) throws ApplicationException { @@ -98,7 +89,6 @@ public void handleAction(Object context) throws ApplicationException buchung.store(); } } - control.getBuchungsList(); String protecttext = ""; if (counter > 0) { diff --git a/src/de/jost_net/JVerein/gui/action/BuchungProjektZuordnungAction.java b/src/de/jost_net/JVerein/gui/action/BuchungProjektZuordnungAction.java index d5d66d258..3ae3d4a0b 100644 --- a/src/de/jost_net/JVerein/gui/action/BuchungProjektZuordnungAction.java +++ b/src/de/jost_net/JVerein/gui/action/BuchungProjektZuordnungAction.java @@ -17,7 +17,6 @@ package de.jost_net.JVerein.gui.action; -import de.jost_net.JVerein.gui.control.BuchungsControl; import de.jost_net.JVerein.gui.dialogs.ProjektAuswahlDialog; import de.jost_net.JVerein.rmi.Buchung; import de.jost_net.JVerein.rmi.Projekt; @@ -33,12 +32,6 @@ */ public class BuchungProjektZuordnungAction implements Action { - private BuchungsControl control; - - public BuchungProjektZuordnungAction(BuchungsControl control) - { - this.control = control; - } @Override public void handleAction(Object context) throws ApplicationException @@ -97,7 +90,6 @@ public void handleAction(Object context) throws ApplicationException } } } - control.getBuchungsList(); String protecttext = ""; if (open == null) { diff --git a/src/de/jost_net/JVerein/gui/action/BuchungSollbuchungZuordnungAction.java b/src/de/jost_net/JVerein/gui/action/BuchungSollbuchungZuordnungAction.java index 17aae892d..9ca924c1a 100644 --- a/src/de/jost_net/JVerein/gui/action/BuchungSollbuchungZuordnungAction.java +++ b/src/de/jost_net/JVerein/gui/action/BuchungSollbuchungZuordnungAction.java @@ -18,7 +18,6 @@ package de.jost_net.JVerein.gui.action; import de.jost_net.JVerein.Einstellungen; -import de.jost_net.JVerein.gui.control.BuchungsControl; import de.jost_net.JVerein.gui.dialogs.SollbuchungAuswahlDialog; import de.jost_net.JVerein.io.SplitbuchungsContainer; import de.jost_net.JVerein.keys.SplitbuchungTyp; @@ -39,13 +38,6 @@ */ public class BuchungSollbuchungZuordnungAction implements Action { - private BuchungsControl control; - - public BuchungSollbuchungZuordnungAction(BuchungsControl control) - { - this.control = control; - } - @Override public void handleAction(Object context) throws ApplicationException { @@ -222,7 +214,6 @@ else if (open instanceof Mitglied) } } } - control.getBuchungsList(); if (mk == null) { diff --git a/src/de/jost_net/JVerein/gui/action/SplitBuchungDeleteAction.java b/src/de/jost_net/JVerein/gui/action/SplitBuchungDeleteAction.java index 27ca62dae..3cfd945ba 100644 --- a/src/de/jost_net/JVerein/gui/action/SplitBuchungDeleteAction.java +++ b/src/de/jost_net/JVerein/gui/action/SplitBuchungDeleteAction.java @@ -73,7 +73,7 @@ public void handleAction(Object context) throws ApplicationException } else { - BuchungDeleteAction action = new BuchungDeleteAction(control, true); + BuchungDeleteAction action = new BuchungDeleteAction(true); action.handleAction(context); } control.refreshSplitbuchungen(); diff --git a/src/de/jost_net/JVerein/gui/action/SplitBuchungWiederherstellenAction.java b/src/de/jost_net/JVerein/gui/action/SplitBuchungWiederherstellenAction.java new file mode 100644 index 000000000..dd2ebb1f3 --- /dev/null +++ b/src/de/jost_net/JVerein/gui/action/SplitBuchungWiederherstellenAction.java @@ -0,0 +1,74 @@ +/********************************************************************** + * 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.gui.control.BuchungsControl; +import de.jost_net.JVerein.io.SplitbuchungsContainer; +import de.jost_net.JVerein.rmi.Buchung; +import de.willuhn.jameica.gui.Action; +import de.willuhn.jameica.gui.GUI; +import de.willuhn.logging.Logger; +import de.willuhn.util.ApplicationException; + +/** + * Loeschen einer Buchung. + */ +public class SplitBuchungWiederherstellenAction implements Action +{ + private BuchungsControl control; + + public SplitBuchungWiederherstellenAction(BuchungsControl control) + { + this.control = control; + } + + @Override + public void handleAction(Object context) throws ApplicationException + { + if (context == null || !(context instanceof Buchung)) + { + throw new ApplicationException("Keine Buchung ausgewählt"); + } + try + { + Buchung bu = (Buchung) context; + if (bu.getDependencyId() == -1) + { + bu.setDelete(false); + } + else + { + for (Buchung buchung_tmp : SplitbuchungsContainer.get()) + { + if (buchung_tmp.getDependencyId() == bu.getDependencyId()) + { + buchung_tmp.setDelete(false); + } + } + } + control.refreshSplitbuchungen(); + } + catch (RemoteException e) + { + String fehler = "Fehler beim Wiederherstellen der Buchung."; + GUI.getStatusBar().setErrorText(fehler); + Logger.error(fehler, e); + } + } +} diff --git a/src/de/jost_net/JVerein/gui/action/SplitbuchungBulkAufloesenAction.java b/src/de/jost_net/JVerein/gui/action/SplitbuchungBulkAufloesenAction.java index 49af3b7ef..d76c876fe 100644 --- a/src/de/jost_net/JVerein/gui/action/SplitbuchungBulkAufloesenAction.java +++ b/src/de/jost_net/JVerein/gui/action/SplitbuchungBulkAufloesenAction.java @@ -22,7 +22,7 @@ import java.util.ArrayList; import de.jost_net.JVerein.Einstellungen; -import de.jost_net.JVerein.Messaging.BuchungMessage; +import de.jost_net.JVerein.gui.control.BuchungsControl; import de.jost_net.JVerein.io.SplitbuchungsContainer; import de.jost_net.JVerein.rmi.Buchung; import de.jost_net.JVerein.rmi.Jahresabschluss; @@ -33,16 +33,18 @@ import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.GUI; import de.willuhn.jameica.gui.dialogs.YesNoDialog; -import de.willuhn.jameica.system.Application; import de.willuhn.logging.Logger; import de.willuhn.util.ApplicationException; public class SplitbuchungBulkAufloesenAction implements Action { - private ArrayList geloescht = new ArrayList<>(); - private ArrayList schongeprueft = new ArrayList<>(); - private Long splitid; - + private BuchungsControl control; + + public SplitbuchungBulkAufloesenAction(BuchungsControl control) + { + this.control = control; + } + @Override public void handleAction(Object context) throws ApplicationException { @@ -53,6 +55,10 @@ public void handleAction(Object context) throws ApplicationException } try { + ArrayList geloescht = new ArrayList<>(); + ArrayList schongeprueft = new ArrayList<>(); + Long splitid; + Buchung[] b = null; if (context instanceof Buchung) { @@ -63,15 +69,7 @@ else if (context instanceof Buchung[]) { b = (Buchung[]) context; } - if (b == null) - { - return; - } - if (b.length == 0) - { - return; - } - if (b[0].isNewObject()) + if (b == null || b.length == 0 || b[0].isNewObject()) { return; } @@ -172,6 +170,8 @@ public Object extract(ResultSet rs) geloescht.add(splitid); } } + control.refreshBuchungsList(); + int count = geloescht.size(); if (count > 0) { @@ -189,9 +189,5 @@ public Object extract(ResultSet rs) GUI.getStatusBar().setErrorText(fehler); Logger.error(fehler, e); } - finally - { - Application.getMessagingFactory().sendMessage(new BuchungMessage(null)); - } } } diff --git a/src/de/jost_net/JVerein/gui/control/BuchungsControl.java b/src/de/jost_net/JVerein/gui/control/BuchungsControl.java index 1ade8f4f5..4c82d0cf7 100644 --- a/src/de/jost_net/JVerein/gui/control/BuchungsControl.java +++ b/src/de/jost_net/JVerein/gui/control/BuchungsControl.java @@ -40,7 +40,6 @@ import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.DBTools.DBTransaction; -import de.jost_net.JVerein.Messaging.BuchungMessage; import de.jost_net.JVerein.Queries.BuchungQuery; import de.jost_net.JVerein.gui.action.BuchungAction; import de.jost_net.JVerein.gui.action.BuchungSollbuchungZuordnungAutomatischAction; @@ -108,12 +107,11 @@ import de.willuhn.jameica.gui.parts.Column; import de.willuhn.jameica.gui.parts.TablePart; import de.willuhn.jameica.gui.parts.table.FeatureSummary; +import de.willuhn.jameica.gui.util.SWTUtil; import de.willuhn.jameica.hbci.HBCIProperties; import de.willuhn.jameica.hbci.gui.formatter.IbanFormatter; import de.willuhn.jameica.hbci.rmi.SepaSammelUeberweisung; import de.willuhn.jameica.hbci.rmi.SepaSammelUeberweisungBuchung; -import de.willuhn.jameica.messaging.Message; -import de.willuhn.jameica.messaging.MessageConsumer; import de.willuhn.jameica.system.Application; import de.willuhn.jameica.system.BackgroundTask; import de.willuhn.jameica.system.OperationCanceledException; @@ -263,6 +261,8 @@ public static SplitFilter getByKey(int key) private Calendar calendar = Calendar.getInstance(); private SelectInput suchsplitbuchung; + + private CheckboxInput ungeprueft; private enum RANGE { @@ -902,6 +902,18 @@ public DateInput getBisdatum() return bisdatum; } + public CheckboxInput getUngeprueft() + { + if (ungeprueft != null) + { + return ungeprueft; + } + ungeprueft = new CheckboxInput( + settings.getBoolean(settingsprefix + "ungeprueft", false)); + ungeprueft.addListener(new FilterListener()); + return ungeprueft; + } + public Button getStartAuswertungEinzelbuchungenButton() { Button b = new Button("PDF Einzelbuchungen", new Action() @@ -976,7 +988,7 @@ public void handleAction(Object context) try { new AfaUtil(new Geschaeftsjahr(new Date()), null); - refreshBuchungen(); + refreshBuchungsList(); } catch (RemoteException e) { @@ -1050,7 +1062,6 @@ private void handleStore() throws ApplicationException for (Buchung b_tmp : getDependentBuchungen()) { b_tmp.setDependencyId(-1); b_tmp.setDelete(true); - Application.getMessagingFactory().sendMessage(new BuchungMessage(b_tmp)); } b.setDependencyId(-1); } @@ -1222,6 +1233,8 @@ public BuchungListTablePart getBuchungsList() throws RemoteException { settings.setAttribute(settingsprefix + BuchungsControl.PROJEKT, -2); } + settings.setAttribute(settingsprefix + "ungeprueft", + (Boolean) getUngeprueft().getValue()); settings.setAttribute(settingsprefix + "suchtext", (String) getSuchtext().getValue()); settings.setAttribute(settingsprefix + "suchbetrag", (String) getSuchBetrag().getValue()); settings.setAttribute(settingsprefix + "mitglied", (String) getMitglied().getValue()); @@ -1231,13 +1244,15 @@ public BuchungListTablePart getBuchungsList() throws RemoteException query = new BuchungQuery(dv, db, k, b, p, (String) getSuchtext().getValue(), (String) getSuchBetrag().getValue(), m.getValue(), (String) getMitglied().getValue(), geldkonto, - (SplitFilter) getSuchSplibuchung().getValue()); + (SplitFilter) getSuchSplibuchung().getValue(), + (Boolean) getUngeprueft().getValue()); if (buchungsList == null) { buchungsList = new BuchungListTablePart(query.get(), new BuchungAction(false)); buchungsList.addColumn("Nr", "id-int"); + buchungsList.addColumn("Geprüft", "geprueft"); if (Einstellungen.getEinstellung().getDokumentenspeicherung()) { buchungsList.addColumn("D", "document"); @@ -1251,6 +1266,7 @@ public String format(Object o) return SplitbuchungTyp.get(typ).substring(0, 1); } }); + buchungsList.addColumn("Konto", "konto", new Formatter() { @@ -1322,8 +1338,6 @@ public String format(Object value) buchungsList.setRememberOrder(true); buchungsList.setRememberState(true); buchungsList.addFeature(new FeatureSummary()); - Application.getMessagingFactory() - .registerMessageConsumer(new BuchungMessageConsumer()); buchungsList.updateSaldo((Konto) getSuchKonto().getValue()); } else @@ -1338,6 +1352,29 @@ public String format(Object value) buchungsList.sort(); } + buchungsList.setFormatter(new TableFormatter() + { + public void format(TableItem item) + { + Buchung b = (Buchung) item.getData(); + if (b == null) + return; + + try + { + // Spalte 1 = Geprüft + item.setText(1, ""); + if (b.getGeprueft()) + item.setImage(1, SWTUtil.getImage("emblem-default.png")); + else + item.setImage(1, null); + } + catch (RemoteException e) + { + Logger.error("unable to format line", e); + } + } + }); informKontoChangeListener(); return buchungsList; @@ -1400,8 +1437,6 @@ public String format(Object o) splitbuchungsList.setContextMenu(new SplitBuchungMenu(this)); splitbuchungsList.setRememberColWidths(true); splitbuchungsList.addFeature(new FeatureSummary()); - Application.getMessagingFactory() - .registerMessageConsumer(new SplitBuchungMessageConsumer()); splitbuchungsList.setFormatter(new TableFormatter() { /** @@ -1436,21 +1471,6 @@ public void format(TableItem item) return splitbuchungsList; } - public void refreshBuchungen() throws RemoteException - { - if (buchungsList == null) - { - return; - } - buchungsList.removeAll(); - - for (Buchung b : query.get()) - { - buchungsList.addItem(b); - } - buchungsList.sort(); - } - public void refreshSplitbuchungen() throws RemoteException { if (splitbuchungsList == null) @@ -1747,7 +1767,7 @@ public void handleEvent(Event event) } } - + public void refreshBuchungsList() { try @@ -1755,7 +1775,7 @@ public void refreshBuchungsList() getBuchungsList(); } catch (RemoteException e) - + { GUI.getStatusBar().setErrorText(e.getMessage()); } @@ -1878,126 +1898,6 @@ private void buchungSpeichern() } } - /** - * Wird benachrichtigt um die Anzeige zu aktualisieren. - */ - private class BuchungMessageConsumer implements MessageConsumer - { - - /** - * @see de.willuhn.jameica.messaging.MessageConsumer#autoRegister() - */ - @Override - public boolean autoRegister() - { - return false; - } - - /** - * @see de.willuhn.jameica.messaging.MessageConsumer#getExpectedMessageTypes() - */ - @Override - public Class[] getExpectedMessageTypes() - { - return new Class[] { BuchungMessage.class }; - } - - /** - * @see de.willuhn.jameica.messaging.MessageConsumer#handleMessage(de.willuhn.jameica.messaging.Message) - */ - @Override - public void handleMessage(final Message message) throws Exception - { - GUI.getDisplay().syncExec(new Runnable() - { - - @Override - public void run() - { - try - { - if (buchungsList == null) - { - // Eingabe-Feld existiert nicht. Also abmelden - Application.getMessagingFactory() - .unRegisterMessageConsumer(BuchungMessageConsumer.this); - return; - } - refreshBuchungen(); - } - catch (Exception e) - { - // Wenn hier ein Fehler auftrat, deregistrieren wir uns - // wieder - Logger.error("unable to refresh Splitbuchungen", e); - Application.getMessagingFactory() - .unRegisterMessageConsumer(BuchungMessageConsumer.this); - } - } - }); - } - } - - /** - * Wird benachrichtigt um die Anzeige zu aktualisieren. - */ - private class SplitBuchungMessageConsumer implements MessageConsumer - { - - /** - * @see de.willuhn.jameica.messaging.MessageConsumer#autoRegister() - */ - @Override - public boolean autoRegister() - { - return false; - } - - /** - * @see de.willuhn.jameica.messaging.MessageConsumer#getExpectedMessageTypes() - */ - @Override - public Class[] getExpectedMessageTypes() - { - return new Class[] { BuchungMessage.class }; - } - - /** - * @see de.willuhn.jameica.messaging.MessageConsumer#handleMessage(de.willuhn.jameica.messaging.Message) - */ - @Override - public void handleMessage(final Message message) throws Exception - { - GUI.getDisplay().syncExec(new Runnable() - { - - @Override - public void run() - { - try - { - if (splitbuchungsList == null) - { - // Eingabe-Feld existiert nicht. Also abmelden - Application.getMessagingFactory() - .unRegisterMessageConsumer(SplitBuchungMessageConsumer.this); - return; - } - refreshSplitbuchungen(); - } - catch (Exception e) - { - // Wenn hier ein Fehler auftrat, deregistrieren wir uns - // wieder - Logger.error("unable to refresh Splitbuchungen", e); - Application.getMessagingFactory() - .unRegisterMessageConsumer(SplitBuchungMessageConsumer.this); - } - } - }); - } - } - public Input getSuchMitgliedZugeordnet() { if (hasmitglied != null) @@ -2181,6 +2081,7 @@ public void resetFilter() calendar.add(Calendar.YEAR, 1); calendar.add(Calendar.DAY_OF_MONTH, -1); bisdatum.setValue(calendar.getTime()); + ungeprueft.setValue(false); suchtext.setValue(""); mitglied.setValue(""); refreshBuchungsList(); diff --git a/src/de/jost_net/JVerein/gui/control/EinstellungControl.java b/src/de/jost_net/JVerein/gui/control/EinstellungControl.java index 94662b9fa..b273a6967 100644 --- a/src/de/jost_net/JVerein/gui/control/EinstellungControl.java +++ b/src/de/jost_net/JVerein/gui/control/EinstellungControl.java @@ -354,6 +354,8 @@ public class EinstellungControl extends AbstractControl private CheckboxInput splitpositionzweck; + private CheckboxInput geprueftsynchronisieren; + public EinstellungControl(AbstractView view) { super(view); @@ -860,6 +862,19 @@ public CheckboxInput getSplitPositionZweck() throws RemoteException return splitpositionzweck; } + public CheckboxInput getGeprueftSynchronisieren() throws RemoteException + { + if (geprueftsynchronisieren != null) + { + return geprueftsynchronisieren; + } + geprueftsynchronisieren = new CheckboxInput( + Einstellungen.getEinstellung().getGeprueftSynchronisieren()); + geprueftsynchronisieren + .setName("Geprüft Markierung mit Hibiscus synchronisieren"); + return geprueftsynchronisieren; + } + public CheckboxInput getFreieBuchungsklasse() throws RemoteException { if (freiebuchungsklasse != null) @@ -2367,6 +2382,8 @@ public void handleStoreBuchfuehrung() e.setOptiert((Boolean) getOptiert().getValue()); e.setBuchungsklasseInBuchung((Boolean) getFreieBuchungsklasse().getValue()); e.setSplitPositionZweck((Boolean) getSplitPositionZweck().getValue()); + e.setGeprueftSynchronisieren( + (Boolean) getGeprueftSynchronisieren().getValue()); e.store(); Einstellungen.setEinstellung(e); diff --git a/src/de/jost_net/JVerein/gui/menu/BuchungMenu.java b/src/de/jost_net/JVerein/gui/menu/BuchungMenu.java index aef537493..2df1a7347 100644 --- a/src/de/jost_net/JVerein/gui/menu/BuchungMenu.java +++ b/src/de/jost_net/JVerein/gui/menu/BuchungMenu.java @@ -24,6 +24,7 @@ import de.jost_net.JVerein.gui.action.BuchungDeleteAction; import de.jost_net.JVerein.gui.action.BuchungDuplizierenAction; import de.jost_net.JVerein.gui.action.BuchungGegenbuchungAction; +import de.jost_net.JVerein.gui.action.BuchungGeprueftAction; import de.jost_net.JVerein.gui.action.BuchungKontoauszugZuordnungAction; import de.jost_net.JVerein.gui.action.BuchungProjektZuordnungAction; import de.jost_net.JVerein.gui.action.BuchungSollbuchungZuordnungAction; @@ -58,6 +59,10 @@ public BuchungMenu(BuchungsControl control) boolean geldkonto = control.getGeldkonto(); addItem(new CheckedSingleContextMenuItem("Bearbeiten", new BuchungAction(false), "text-x-generic.png")); + addItem(new GeprueftBuchungItem("als \"geprüft\" markieren", + new BuchungGeprueftAction(true), "emblem-default.png", false)); + addItem(new GeprueftBuchungItem("als \"ungeprüft\" markieren", + new BuchungGeprueftAction(false), "edit-undo.png", true)); addItem(new SingleBuchungItem("Duplizieren", new BuchungDuplizierenAction(), "edit-copy.png")); if (geldkonto) @@ -67,9 +72,10 @@ public BuchungMenu(BuchungsControl control) } addItem(new SplitBuchungItem("Splitbuchung", new SplitBuchungAction(), "edit-copy.png")); - addItem(new AufloesenItem("Auflösen", new SplitbuchungBulkAufloesenAction(), + addItem(new AufloesenItem("Auflösen", + new SplitbuchungBulkAufloesenAction(control), "unlocked.png")); - addItem(new BuchungItem("Löschen", new BuchungDeleteAction(control, false), + addItem(new BuchungItem("Löschen", new BuchungDeleteAction(false), "user-trash-full.png")); addItem(ContextMenuItem.SEPARATOR); if (geldkonto) @@ -80,16 +86,16 @@ public BuchungMenu(BuchungsControl control) "document-new.png")); } addItem(new CheckedContextMenuItem("Buchungsart zuordnen", - new BuchungBuchungsartZuordnungAction(control), "view-refresh.png")); + new BuchungBuchungsartZuordnungAction(), "view-refresh.png")); if (geldkonto) { addItem(new CheckedContextMenuItem("Sollbuchung zuordnen", - new BuchungSollbuchungZuordnungAction(control), "view-refresh.png")); + new BuchungSollbuchungZuordnungAction(), "view-refresh.png")); } addItem(new CheckedContextMenuItem("Projekt zuordnen", - new BuchungProjektZuordnungAction(control), "view-refresh.png")); + new BuchungProjektZuordnungAction(), "view-refresh.png")); if (geldkonto) addItem(new CheckedContextMenuItem("Kontoauszug zuordnen", - new BuchungKontoauszugZuordnungAction(control), "view-refresh.png")); + new BuchungKontoauszugZuordnungAction(), "view-refresh.png")); Plugin syntax = Application.getPluginLoader() .getPlugin("de.willuhn.jameica.fibu.Fibu"); if (syntax != null @@ -288,4 +294,34 @@ public boolean isEnabledFor(Object o) { return false; } } + + private static class GeprueftBuchungItem extends CheckedContextMenuItem + { + boolean geprueft; + + private GeprueftBuchungItem(String text, Action action, String icon, + boolean geprueft) + { + super(text, action, icon); + this.geprueft = geprueft; + } + + @Override + public boolean isEnabledFor(Object o) + { + if (o instanceof Buchung) + { + Buchung b = (Buchung) o; + try + { + return !geprueft ^ b.getGeprueft(); + } + catch (RemoteException e) + { + Logger.error("Fehler", e); + } + } + return true; + } + } } diff --git a/src/de/jost_net/JVerein/gui/menu/SplitBuchungMenu.java b/src/de/jost_net/JVerein/gui/menu/SplitBuchungMenu.java index 05113fb5a..3248441b1 100644 --- a/src/de/jost_net/JVerein/gui/menu/SplitBuchungMenu.java +++ b/src/de/jost_net/JVerein/gui/menu/SplitBuchungMenu.java @@ -18,25 +18,17 @@ import java.rmi.RemoteException; -import de.jost_net.JVerein.Messaging.BuchungMessage; import de.jost_net.JVerein.gui.action.BuchungAction; import de.jost_net.JVerein.gui.action.SplitBuchungDeleteAction; -/*import de.jost_net.JVerein.gui.action.BuchungBuchungsartZuordnungAction; -import de.jost_net.JVerein.gui.action.BuchungKontoauszugZuordnungAction; -import de.jost_net.JVerein.gui.action.BuchungMitgliedskontoZuordnungAction; -import de.jost_net.JVerein.gui.action.BuchungProjektZuordnungAction;*/ +import de.jost_net.JVerein.gui.action.SplitBuchungWiederherstellenAction; 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; -import de.willuhn.jameica.gui.GUI; import de.willuhn.jameica.gui.parts.CheckedContextMenuItem; import de.willuhn.jameica.gui.parts.CheckedSingleContextMenuItem; import de.willuhn.jameica.gui.parts.ContextMenu; -import de.willuhn.jameica.system.Application; import de.willuhn.logging.Logger; -import de.willuhn.util.ApplicationException; public class SplitBuchungMenu extends ContextMenu { @@ -48,17 +40,10 @@ public SplitBuchungMenu(BuchungsControl control) { addItem(new CheckedSplitBuchungItem("Bearbeiten", new BuchungAction(true), "text-x-generic.png")); - /*addItem(new CheckedSplitBuchungItem("Buchungsart zuordnen", - new BuchungBuchungsartZuordnungAction(control), "view-refresh.png")); - addItem(new CheckedSplitBuchungItem("Sollbuchung zuordnen", - new BuchungMitgliedskontoZuordnungAction(control), "view-refresh.png")); - addItem(new CheckedSplitBuchungItem("Projekt zuordnen", - new BuchungProjektZuordnungAction(control), "view-refresh.png")); - addItem(new CheckedSplitBuchungItem("Kontoauszug zuordnen", - new BuchungKontoauszugZuordnungAction(control), "view-refresh.png"));*/ addItem(new DeleteSplitBuchungItem("Löschen", new SplitBuchungDeleteAction(control), "user-trash-full.png")); - addItem(new RestoreSplitBuchungItem()); + addItem(new RestoreSplitBuchungItem("Wiederherstellen", + new SplitBuchungWiederherstellenAction(control), "edit-undo.png")); } private static class CheckedSplitBuchungItem @@ -115,47 +100,9 @@ public boolean isEnabledFor(Object o) private static class RestoreSplitBuchungItem extends CheckedContextMenuItem { - private RestoreSplitBuchungItem() + private RestoreSplitBuchungItem(String text, Action action, String icon) { - super("Wiederherstellen", new Action() - { - @Override - public void handleAction(Object context) throws ApplicationException - { - if (context == null || !(context instanceof Buchung)) - { - throw new ApplicationException("Keine Buchung ausgewählt"); - } - try - { - Buchung bu = (Buchung) context; - 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) - { - String fehler = "Fehler beim Wiederherstellen der Buchung."; - GUI.getStatusBar().setErrorText(fehler); - Logger.error(fehler, e); - } - } - }, "edit-undo.png"); + super(text, action, icon); } @Override diff --git a/src/de/jost_net/JVerein/gui/parts/AutoUpdateTablePart.java b/src/de/jost_net/JVerein/gui/parts/AutoUpdateTablePart.java new file mode 100644 index 000000000..36ff0166c --- /dev/null +++ b/src/de/jost_net/JVerein/gui/parts/AutoUpdateTablePart.java @@ -0,0 +1,101 @@ +/********************************************************************** + * Copyright (c) by Heiner Jostkleigrewe + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See + * the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, + * see . + * + * heiner@jverein.de + * www.jverein.de + **********************************************************************/ + +package de.jost_net.JVerein.gui.parts; + +import java.rmi.RemoteException; +import java.util.List; + +import org.eclipse.swt.SWTException; + +import de.jost_net.JVerein.rmi.Buchung; +import de.willuhn.jameica.gui.Action; +import de.willuhn.jameica.gui.GUI; +import de.willuhn.jameica.gui.parts.TablePart; +import de.willuhn.datasource.GenericIterator; +import de.willuhn.datasource.rmi.DBObject; +import de.willuhn.datasource.rmi.Listener; + +public class AutoUpdateTablePart extends TablePart +{ + + private Listener storeListener = new StoreListener(); + + public AutoUpdateTablePart(Action action) + { + super(action); + } + + public AutoUpdateTablePart(List list, Action action) + { + super(list, action); + } + + @SuppressWarnings("rawtypes") + public AutoUpdateTablePart(GenericIterator list, Action action) + { + super(list, action); + } + + @Override + public void addItem(final Object object, int index, boolean checked) + throws RemoteException + { + super.addItem(object, index, checked); + ((DBObject) object).removeStoreListener(this.storeListener); + ((DBObject) object).addStoreListener(this.storeListener); + } + + /** + * Der Listener ueberwacht das speichern von Objekten und aktuelisiert die + * Objekte in der Tabelle. + */ + private class StoreListener implements de.willuhn.datasource.rmi.Listener + { + + @Override + public void handleEvent(final de.willuhn.datasource.rmi.Event e) + throws RemoteException + { + try + { + final int pos = removeItem(e.getObject()); + + addItem(e.getObject(), pos); + } + catch (SWTException ex) + { + // Fallback: Wir versuchens mal synchronisiert + GUI.getDisplay().syncExec(new Runnable() + { + + public void run() + { + try + { + updateItem(e.getObject(), e.getObject()); + } + catch (Exception ignore) + { + } + } + + }); + } + } + } +} diff --git a/src/de/jost_net/JVerein/gui/parts/BuchungListTablePart.java b/src/de/jost_net/JVerein/gui/parts/BuchungListTablePart.java index 02313fd18..de6dff5c7 100644 --- a/src/de/jost_net/JVerein/gui/parts/BuchungListTablePart.java +++ b/src/de/jost_net/JVerein/gui/parts/BuchungListTablePart.java @@ -24,12 +24,11 @@ import de.jost_net.JVerein.rmi.Buchung; import de.jost_net.JVerein.rmi.Konto; import de.willuhn.jameica.gui.Action; -import de.willuhn.jameica.gui.parts.TablePart; import de.willuhn.jameica.gui.parts.table.Feature; import de.willuhn.jameica.gui.parts.table.FeatureSummary; import de.willuhn.jameica.gui.parts.table.Feature.Context; -public class BuchungListTablePart extends TablePart +public class BuchungListTablePart extends AutoUpdateTablePart { private Double saldo = null; diff --git a/src/de/jost_net/JVerein/gui/view/BuchungslisteView.java b/src/de/jost_net/JVerein/gui/view/BuchungslisteView.java index 91b4aaefb..d224f92fb 100644 --- a/src/de/jost_net/JVerein/gui/view/BuchungslisteView.java +++ b/src/de/jost_net/JVerein/gui/view/BuchungslisteView.java @@ -73,7 +73,7 @@ public void bind() throws Exception center.addLabelPair("Betrag", control.getSuchBetrag()); center.addLabelPair("Datum von", control.getVondatum()); center.addLabelPair("Datum bis", control.getBisdatum()); - + center.addLabelPair("Nur ungeprüfte", control.getUngeprueft()); right.addLabelPair("Enthaltener Text", control.getSuchtext()); right.addLabelPair("Mitglied zugeordnet?", control.getSuchMitgliedZugeordnet()); diff --git a/src/de/jost_net/JVerein/gui/view/EinstellungenBuchfuehrungView.java b/src/de/jost_net/JVerein/gui/view/EinstellungenBuchfuehrungView.java index 148a45726..0fde79ae2 100644 --- a/src/de/jost_net/JVerein/gui/view/EinstellungenBuchfuehrungView.java +++ b/src/de/jost_net/JVerein/gui/view/EinstellungenBuchfuehrungView.java @@ -50,6 +50,7 @@ public void bind() throws Exception cont.addInput(control.getOptiert()); cont.addInput(control.getFreieBuchungsklasse()); cont.addInput(control.getSplitPositionZweck()); + cont.addInput(control.getGeprueftSynchronisieren()); ButtonArea buttons = new ButtonArea(); buttons.addButton("Hilfe", new DokumentationAction(), diff --git a/src/de/jost_net/JVerein/io/CSVBuchungsImport.java b/src/de/jost_net/JVerein/io/CSVBuchungsImport.java index e69265c91..b350778f3 100644 --- a/src/de/jost_net/JVerein/io/CSVBuchungsImport.java +++ b/src/de/jost_net/JVerein/io/CSVBuchungsImport.java @@ -26,14 +26,12 @@ import java.util.Properties; import de.jost_net.JVerein.Einstellungen; -import de.jost_net.JVerein.Messaging.BuchungMessage; import de.jost_net.JVerein.Variable.BuchungVar; import de.jost_net.JVerein.rmi.Buchung; import de.jost_net.JVerein.rmi.Buchungsart; import de.jost_net.JVerein.rmi.Buchungsklasse; import de.jost_net.JVerein.rmi.Konto; import de.willuhn.datasource.rmi.DBIterator; -import de.willuhn.jameica.system.Application; import de.willuhn.logging.Logger; import de.willuhn.util.ApplicationException; import de.willuhn.util.ProgressMonitor; @@ -226,7 +224,6 @@ public void doImport(Object context, IOFormat format, File file, // Optionales Feld. } bu.store(); - Application.getMessagingFactory().sendMessage(new BuchungMessage(bu)); } catch (Exception e) { diff --git a/src/de/jost_net/JVerein/rmi/Buchung.java b/src/de/jost_net/JVerein/rmi/Buchung.java index ad94f5d59..92f0e2ad4 100644 --- a/src/de/jost_net/JVerein/rmi/Buchung.java +++ b/src/de/jost_net/JVerein/rmi/Buchung.java @@ -168,4 +168,8 @@ public Map getMap(Map map) public void store(boolean check) throws RemoteException, ApplicationException; + public Boolean getGeprueft() throws RemoteException; + + public void setGeprueft(Boolean geprueft) throws RemoteException; + } diff --git a/src/de/jost_net/JVerein/rmi/Einstellung.java b/src/de/jost_net/JVerein/rmi/Einstellung.java index 2bd4244b6..9509765fa 100644 --- a/src/de/jost_net/JVerein/rmi/Einstellung.java +++ b/src/de/jost_net/JVerein/rmi/Einstellung.java @@ -635,5 +635,10 @@ public void setCt1SepaVersion(SepaVersion sepaversion) public boolean getSplitPositionZweck() throws RemoteException; - public void setSplitPositionZweck(boolean split) throws RemoteException;; + public void setSplitPositionZweck(boolean split) throws RemoteException; + + public boolean getGeprueftSynchronisieren() throws RemoteException; + + public void setGeprueftSynchronisieren(boolean geprueftsynchonisieren) + throws RemoteException; } diff --git a/src/de/jost_net/JVerein/server/BuchungImpl.java b/src/de/jost_net/JVerein/server/BuchungImpl.java index 1623c1c4e..55c0ffa0d 100644 --- a/src/de/jost_net/JVerein/server/BuchungImpl.java +++ b/src/de/jost_net/JVerein/server/BuchungImpl.java @@ -786,6 +786,23 @@ public void setVerzicht(Boolean verzicht) throws RemoteException setAttribute("verzicht", verzicht); } + @Override + public Boolean getGeprueft() throws RemoteException + { + Boolean geprueft = (Boolean) getAttribute("geprueft"); + if (geprueft == null) + { + return false; + } + return geprueft; + } + + @Override + public void setGeprueft(Boolean geprueft) throws RemoteException + { + setAttribute("geprueft", geprueft); + } + @Override public void setSpeicherung(boolean speicherung) { diff --git a/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java new file mode 100644 index 000000000..f93a79b73 --- /dev/null +++ b/src/de/jost_net/JVerein/server/DDLTool/Updates/Update0462.java @@ -0,0 +1,39 @@ +/********************************************************************** + * 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 Update0462 extends AbstractDDLUpdate +{ + public Update0462(String driver, ProgressMonitor monitor, Connection conn) + { + super(driver, monitor, conn); + } + + @Override + public void run() throws ApplicationException + { + execute(addColumn("buchung", + new Column("geprueft", COLTYPE.BOOLEAN, 0, null, false, false))); + + execute(addColumn("einstellung", new Column("geprueftsynchronisieren", + COLTYPE.BOOLEAN, 0, "1", true, false))); + } +} diff --git a/src/de/jost_net/JVerein/server/EinstellungImpl.java b/src/de/jost_net/JVerein/server/EinstellungImpl.java index 4c4c42713..be9174a33 100644 --- a/src/de/jost_net/JVerein/server/EinstellungImpl.java +++ b/src/de/jost_net/JVerein/server/EinstellungImpl.java @@ -2221,4 +2221,17 @@ public void setSplitPositionZweck(boolean split) throws RemoteException { setAttribute("splitpositionzweck", split); } + + @Override + public boolean getGeprueftSynchronisieren() throws RemoteException + { + return (Boolean) getAttribute("geprueftsynchronisieren"); + } + + @Override + public void setGeprueftSynchronisieren(boolean geprueftsynchronisieren) + throws RemoteException + { + setAttribute("geprueftsynchronisieren", geprueftsynchronisieren); + } }