Repository: openjverein/jverein
Pull request #723: Feature Zusatzbetrag-Vorlagen Liste View und Detail View
Author: login: JohannMaierhofer
Labels: name: enhancement
description: New feature or request
Created: 2025-02-27T15:42:24Z | Merged: 2025-03-11T21:14:30Z

Das Feature implementiert #564.

Es gibt einen Liste View für Zusatzbeträge-Vorlagen und einen Zusatzbetrag-Vorlagen Detail View. Sie ist über einen Button im Zusatzbeträge View erreichbar.

Im Liste View gibt es den Neu Button um eine neue Vorlage zu erstellen. Das Kontextmenü erlaubt Editieren und Löschen von Vorlagen. Löschen geht mit multiselection
![Bildschirmfoto_20250227_164041](https://github.com/user-attachments/assets/8c05d29c-779e-4b4b-859d-ae7c31c6f666)



Diff:
diff --git a/src/de/jost_net/JVerein/gui/control/ZusatzbetragVorlageControl.java b/src/de/jost_net/JVerein/gui/control/ZusatzbetragVorlageControl.java
index 280fb27fd9..e805e7a649 100644
--- a/src/de/jost_net/JVerein/gui/control/ZusatzbetragVorlageControl.java
+++ b/src/de/jost_net/JVerein/gui/control/ZusatzbetragVorlageControl.java
@@ -23,17 +23,23 @@
 import org.eclipse.swt.widgets.Listener;
 
 import de.jost_net.JVerein.Einstellungen;
+import de.jost_net.JVerein.gui.action.EditAction;
+import de.jost_net.JVerein.gui.formatter.BuchungsartFormatter;
+import de.jost_net.JVerein.gui.formatter.BuchungsklasseFormatter;
 import de.jost_net.JVerein.gui.input.BuchungsartInput;
 import de.jost_net.JVerein.gui.input.BuchungsartInput.buchungsarttyp;
+import de.jost_net.JVerein.gui.input.BuchungsklasseInput;
+import de.jost_net.JVerein.gui.menu.ZusatzbetragVorlageMenu;
+import de.jost_net.JVerein.gui.view.ZusatzbetragVorlageDetailView;
 import de.jost_net.JVerein.keys.IntervallZusatzzahlung;
 import de.jost_net.JVerein.keys.Zahlungsweg;
 import de.jost_net.JVerein.rmi.Buchungsart;
+import de.jost_net.JVerein.rmi.Buchungsklasse;
 import de.jost_net.JVerein.rmi.ZusatzbetragVorlage;
 import de.jost_net.JVerein.util.JVDateFormatTTMMJJJJ;
 import de.willuhn.datasource.rmi.DBIterator;
 import de.willuhn.jameica.gui.AbstractControl;
 import de.willuhn.jameica.gui.AbstractView;
-import de.willuhn.jameica.gui.Action;
 import de.willuhn.jameica.gui.GUI;
 import de.willuhn.jameica.gui.Part;
 import de.willuhn.jameica.gui.formatter.CurrencyFormatter;
@@ -71,7 +77,9 @@ public class ZusatzbetragVorlageControl extends AbstractControl
 
   private AbstractInput buchungsart;
 
-  private TablePart zusatzbetraegeList;
+  private SelectInput buchungsklasse;
+
+  private TablePart zusatzbetragVorlageList;
 
   public ZusatzbetragVorlage auswahl;
 
@@ -206,10 +214,64 @@ public AbstractInput getBuchungsart() throws RemoteException
     buchungsart = new BuchungsartInput().getBuchungsartInput(buchungsart,
         getZusatzbetragVorlage().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 SelectInput getBuchungsklasse() throws RemoteException
+  {
+    if (buchungsklasse != null)
+    {
+      return buchungsklasse;
+    }
+    buchungsklasse = new BuchungsklasseInput().getBuchungsklasseInput(
+        buchungsklasse, getZusatzbetragVorlage().getBuchungsklasse());
+    return buchungsklasse;
+  }
+
+  public boolean isBuchungsklasseActive()
+  {
+    return buchungsklasse != null;
+  }
+
+  public Long getSelectedBuchungsKlasseId() throws ApplicationException
+  {
+    try
+    {
+      if (buchungsklasse == null)
+        return null;
+      Buchungsklasse bukla = (Buchungsklasse) getBuchungsklasse()
+          .getValue();
+      if (null == bukla)
+        return null;
+      Long id = Long.valueOf(bukla.getID());
+      return id;
+    }
+    catch (RemoteException ex)
+    {
+      final String meldung = "Gew�hlte Buchungsklasse kann nicht ermittelt werden";
+      Logger.error(meldung, ex);
+      throw new ApplicationException(meldung, ex);
+    }
+  }
+
   public SelectInput getZahlungsweg() throws RemoteException
   {
     if (zahlungsweg != null)
@@ -262,10 +324,8 @@ public void handleStore()
       z.setBuchungstext((String) getBuchungstext().getValue());
       Double d = (Double) getBetrag().getValue();
       z.setBetrag(d.doubleValue());
-      if (getBuchungsart().getValue() != null)
-      {
-        z.setBuchungsart((Buchungsart) getBuchungsart().getValue());
-      }
+      z.setBuchungsart((Buchungsart) getBuchungsart().getValue());
+      z.setBuchungsklasseId(getSelectedBuchungsKlasseId());
       z.setZahlungsweg((Zahlungsweg) getZahlungsweg().getValue());
 
       z.store();
@@ -289,54 +349,52 @@ public Part getZusatzbetraegeVorlageList() throws RemoteException
         .getDBService().createList(ZusatzbetragVorlage.class);
     zusatzbetragsvorlagen.setOrder("ORDER BY buchungstext");
 
-    if (zusatzbetraegeList == null)
+    if (zusatzbetragVorlageList == null)
     {
-      zusatzbetraegeList = new TablePart(zusatzbetragsvorlagen, new Action()
-      {
-        @Override
-        public void handleAction(Object context) throws ApplicationException
-        {
-          auswahl = (ZusatzbetragVorlage) context;
-        }
-      });
-      zusatzbetraegeList.addColumn("Startdatum", "startdatum",
+      zusatzbetragVorlageList = new TablePart(zusatzbetragsvorlagen,
+          new EditAction(ZusatzbetragVorlageDetailView.class));
+      zusatzbetragVorlageList.addColumn("Erste F�lligkeit", "startdatum",
           new DateFormatter(new JVDateFormatTTMMJJJJ()));
-      zusatzbetraegeList.addColumn("n�chste F�lligkeit", "faelligkeit",
+      zusatzbetragVorlageList.addColumn("N�chste F�lligkeit", "faelligkeit",
           new DateFormatter(new JVDateFormatTTMMJJJJ()));
-      zusatzbetraegeList.addColumn("Intervall", "intervalltext");
-      zusatzbetraegeList.addColumn("Endedatum", "endedatum",
+      zusatzbetragVorlageList.addColumn("Intervall", "intervalltext");
+      zusatzbetragVorlageList.addColumn("Nicht mehr ausf�hren ab", "endedatum",
           new DateFormatter(new JVDateFormatTTMMJJJJ()));
-      zusatzbetraegeList.addColumn("Buchungstext", "buchungstext");
-      zusatzbetraegeList.addColumn("Betrag", "betrag",
+      zusatzbetragVorlageList.addColumn("Buchungstext", "buchungstext");
+      zusatzbetragVorlageList.addColumn("Betrag", "betrag",
           new CurrencyFormatter("", Einstellungen.DECIMALFORMAT));
-      zusatzbetraegeList.addColumn("Zahlungsweg", "zahlungsweg", new Formatter()
-      {
-        @Override
-        public String format(Object o)
-        {
-          if (o == null)
+      zusatzbetragVorlageList.addColumn("Zahlungsweg", "zahlungsweg",
+          new Formatter()
           {
-            return "";
-          }
-          return new Zahlungsweg((Integer) o).getText();
-        }
-      });
-      // zusatzbetraegeList.setContextMenu(new ZusatzbetraegeMenu(
-      // zusatzbetraegeList));
-      zusatzbetraegeList.setRememberColWidths(true);
-      zusatzbetraegeList.setRememberOrder(true);
-      zusatzbetraegeList.addFeature(new FeatureSummary());
-      zusatzbetraegeList.setMulti(true);
+            @Override
+            public String format(Object o)
+            {
+              return new Zahlungsweg((Integer) o).getText();
+            }
+          });
+      if (Einstellungen.getEinstellung().getBuchungsklasseInBuchung())
+      {
+        zusatzbetragVorlageList.addColumn("Buchungsklasse", "buchungsklasse",
+            new BuchungsklasseFormatter());
+      }
+      zusatzbetragVorlageList.addColumn("Buchungsart", "buchungsart",
+          new BuchungsartFormatter());
+
+      zusatzbetragVorlageList.setContextMenu(new ZusatzbetragVorlageMenu());
+      zusatzbetragVorlageList.setRememberColWidths(true);
+      zusatzbetragVorlageList.setRememberOrder(true);
+      zusatzbetragVorlageList.addFeature(new FeatureSummary());
+      zusatzbetragVorlageList.setMulti(true);
     }
     else
     {
-      zusatzbetraegeList.removeAll();
+      zusatzbetragVorlageList.removeAll();
       while (zusatzbetragsvorlagen.hasNext())
       {
-        zusatzbetraegeList.addItem(zusatzbetragsvorlagen.next());
+        zusatzbetragVorlageList.addItem(zusatzbetragsvorlagen.next());
       }
-      zusatzbetraegeList.sort();
+      zusatzbetragVorlageList.sort();
     }
-    return zusatzbetraegeList;
+    return zusatzbetragVorlageList;
   }
-}
\ No newline at end of file
+}
diff --git a/src/de/jost_net/JVerein/gui/dialogs/MitgliedZusatzbetragZuordnungDialog.java b/src/de/jost_net/JVerein/gui/dialogs/MitgliedZusatzbetragZuordnungDialog.java
index 61d65b6a69..c01900406b 100644
--- a/src/de/jost_net/JVerein/gui/dialogs/MitgliedZusatzbetragZuordnungDialog.java
+++ b/src/de/jost_net/JVerein/gui/dialogs/MitgliedZusatzbetragZuordnungDialog.java
@@ -23,17 +23,22 @@
 import org.eclipse.swt.widgets.Composite;
 
 import de.jost_net.JVerein.Einstellungen;
+import de.jost_net.JVerein.gui.action.DokumentationAction;
 import de.jost_net.JVerein.gui.action.ZusatzbetragVorlageAuswahlAction;
+import de.jost_net.JVerein.gui.control.ZusatzbetragControl;
 import de.jost_net.JVerein.gui.parts.ZusatzbetragPart;
+import de.jost_net.JVerein.gui.view.DokumentationUtil;
 import de.jost_net.JVerein.keys.IntervallZusatzzahlung;
 import de.jost_net.JVerein.keys.Zahlungsweg;
 import de.jost_net.JVerein.rmi.Buchungsart;
 import de.jost_net.JVerein.rmi.Mitglied;
 import de.jost_net.JVerein.rmi.Zusatzbetrag;
+import de.jost_net.JVerein.rmi.ZusatzbetragVorlage;
 import de.willuhn.jameica.gui.Action;
 import de.willuhn.jameica.gui.dialogs.AbstractDialog;
 import de.willuhn.jameica.gui.dialogs.SimpleDialog;
 import de.willuhn.jameica.gui.parts.ButtonArea;
+import de.willuhn.jameica.gui.util.LabelGroup;
 import de.willuhn.jameica.system.OperationCanceledException;
 import de.willuhn.logging.Logger;
 import de.willuhn.util.ApplicationException;
@@ -62,17 +67,22 @@ public MitgliedZusatzbetragZuordnungDialog(int position, Mitglied[] m)
   @Override
   protected void paint(Composite parent) throws Exception
   {
-    Zusatzbetrag zb = (Zusatzbetrag) Einstellungen.getDBService()
+    Zusatzbetrag zusatzb = (Zusatzbetrag) Einstellungen.getDBService()
         .createObject(Zusatzbetrag.class, null);
-    part = new ZusatzbetragPart(zb, false);
+    part = new ZusatzbetragPart(zusatzb, false);
     part.paint(parent);
 
+    final ZusatzbetragControl control = new ZusatzbetragControl(null);
+    LabelGroup group = new LabelGroup(parent, "Vorlagen");
+    group.addLabelPair("Als Vorlage speichern", control.getVorlage());
+
     ButtonArea buttons = new ButtonArea();
-    
+    buttons.addButton("Hilfe", new DokumentationAction(),
+        DokumentationUtil.ZUSATZBETRAEGE, false, "question-circle.png");
     buttons.addButton("Vorlagen", new ZusatzbetragVorlageAuswahlAction(part)
-        , null, false, "text-x-generic.png");
+        , null, false, "view-refresh.png");
     
-    buttons.addButton("Zuordnen", new Action()
+    buttons.addButton("Speichern", new Action()
     {
       @Override
       public void handleAction(Object context)
@@ -100,6 +110,27 @@ public void handleAction(Object context)
             zb.store();
             count++;
           }
+          if (control.getVorlage().getValue().equals(ZusatzbetragControl.MITDATUM)
+              || control.getVorlage().getValue().equals(ZusatzbetragControl.OHNEDATUM))
+          {
+            ZusatzbetragVorlage zv = (ZusatzbetragVorlage) Einstellungen
+                .getDBService().createObject(ZusatzbetragVorlage.class, null);
+            IntervallZusatzzahlung iz = (IntervallZusatzzahlung) part
+                .getIntervall().getValue();
+            zv.setIntervall(iz.getKey());
+            zv.setBuchungstext((String) part.getBuchungstext().getValue());
+            zv.setBetrag((Double) part.getBetrag().getValue());
+            if (control.getVorlage().getValue().equals(ZusatzbetragControl.MITDATUM))
+            {
+              zv.setEndedatum((Date) part.getEndedatum().getValue());
+              zv.setFaelligkeit((Date) part.getFaelligkeit().getValue());
+              zv.setStartdatum((Date) part.getStartdatum(true).getValue());
+            }
+            zv.setBuchungsart((Buchungsart) part.getBuchungsart().getValue());
+            zv.setBuchungsklasseId(part.getSelectedBuchungsKlasseId());
+            zv.setZahlungsweg((Zahlungsweg) part.getZahlungsweg().getValue());
+            zv.store();
+          }
           message = String.format("%d Zusatzbeitr�ge gespeichert.", count);
         }
         catch (RemoteException e)
@@ -124,7 +155,7 @@ public void handleAction(Object context)
 
         close();
       }
-    }, null, true, "ok.png");
+    }, null, true, "document-save.png");
 
     buttons.addButton("Abbrechen", new Action()
     {
diff --git a/src/de/jost_net/JVerein/gui/dialogs/ZusatzbetragVorlageDialog.java b/src/de/jost_net/JVerein/gui/dialogs/ZusatzbetragVorlageDialog.java
index 1f7c29a5db..6ea4bdd9ae 100644
--- a/src/de/jost_net/JVerein/gui/dialogs/ZusatzbetragVorlageDialog.java
+++ b/src/de/jost_net/JVerein/gui/dialogs/ZusatzbetragVorlageDialog.java
@@ -24,7 +24,6 @@
 import de.jost_net.JVerein.Einstellungen;
 import de.jost_net.JVerein.gui.formatter.BuchungsartFormatter;
 import de.jost_net.JVerein.gui.formatter.BuchungsklasseFormatter;
-import de.jost_net.JVerein.gui.menu.ZusatzbetragVorlageMenu;
 import de.jost_net.JVerein.keys.Zahlungsweg;
 import de.jost_net.JVerein.rmi.ZusatzbetragVorlage;
 import de.jost_net.JVerein.util.JVDateFormatTTMMJJJJ;
@@ -54,7 +53,7 @@ public ZusatzbetragVorlageDialog()
     super(AbstractDialog.POSITION_CENTER);
 
     setTitle("Zusatzbetrag-Vorlagen");
-    setSize(850, 350);
+    setSize(950, 450);
   }
 
   @Override
@@ -136,7 +135,6 @@ public String format(Object o)
         return new Zahlungsweg((Integer) o).getText();
       }
     });
-    tab.setContextMenu(new ZusatzbetragVorlageMenu());
     tab.setRememberColWidths(true);
     tab.setRememberOrder(true);
     tab.addFeature(new FeatureSummary());
diff --git a/src/de/jost_net/JVerein/gui/menu/MitgliedMenu.java b/src/de/jost_net/JVerein/gui/menu/MitgliedMenu.java
index 0c083d054d..18d08dd3c7 100644
--- a/src/de/jost_net/JVerein/gui/menu/MitgliedMenu.java
+++ b/src/de/jost_net/JVerein/gui/menu/MitgliedMenu.java
@@ -79,11 +79,11 @@ public MitgliedMenu(Action detailaction) throws RemoteException
         new MitgliedInZwischenablageKopierenAction(), "edit-copy.png"));
     addItem(new CheckedContextMenuItem("Eigenschaften",
         new MitgliedEigenschaftZuordnungAction(), "document-properties.png"));
-    addItem(new CheckedContextMenuItem("Zusatzbetr�ge zuweisen",
-        new MitgliedZusatzbetraegeZuordnungAction(), "coins.png"));
+    addItem(new CheckedContextMenuItem("Zusatzbetrag zuordnen",
+        new MitgliedZusatzbetraegeZuordnungAction(), "euro-sign.png"));
     if (Einstellungen.getEinstellung().getArbeitseinsatz() && !(detailaction instanceof NichtMitgliedDetailAction))
     {
-      addItem(new CheckedContextMenuItem("Arbeitseins�tze zuweisen",
+      addItem(new CheckedContextMenuItem("Arbeitseinsatz zuordnen",
           new MitgliedArbeitseinsatzZuordnungAction(), "screwdriver.png"));
     }
     if (detailaction instanceof NichtMitgliedDetailAction)
diff --git a/src/de/jost_net/JVerein/gui/menu/ZusatzbetragVorlageMenu.java b/src/de/jost_net/JVerein/gui/menu/ZusatzbetragVorlageMenu.java
index e34746e6b6..87728d6b8d 100755
--- a/src/de/jost_net/JVerein/gui/menu/ZusatzbetragVorlageMenu.java
+++ b/src/de/jost_net/JVerein/gui/menu/ZusatzbetragVorlageMenu.java
@@ -16,8 +16,11 @@
  **********************************************************************/
 package de.jost_net.JVerein.gui.menu;
 
+import de.jost_net.JVerein.gui.action.EditAction;
 import de.jost_net.JVerein.gui.action.ZusatzbetragVorlageDeleteAction;
+import de.jost_net.JVerein.gui.view.ZusatzbetragVorlageDetailView;
 import de.willuhn.jameica.gui.parts.CheckedContextMenuItem;
+import de.willuhn.jameica.gui.parts.CheckedSingleContextMenuItem;
 import de.willuhn.jameica.gui.parts.ContextMenu;
 
 /**
@@ -31,6 +34,8 @@ public class ZusatzbetragVorlageMenu extends ContextMenu
    */
   public ZusatzbetragVorlageMenu()
   {
+    addItem(new CheckedSingleContextMenuItem("Bearbeiten",
+        new EditAction(ZusatzbetragVorlageDetailView.class), "text-x-generic.png"));
     addItem(new CheckedContextMenuItem("L�schen",
         new ZusatzbetragVorlageDeleteAction(), "user-trash-full.png"));
   }
diff --git a/src/de/jost_net/JVerein/gui/view/DokumentationUtil.java b/src/de/jost_net/JVerein/gui/view/DokumentationUtil.java
index 53f094ac5e..a70ddba1d3 100644
--- a/src/de/jost_net/JVerein/gui/view/DokumentationUtil.java
+++ b/src/de/jost_net/JVerein/gui/view/DokumentationUtil.java
@@ -82,6 +82,9 @@ public class DokumentationUtil
 
   public static final String ZUSATZBETRAEGE = PRE + FUNKTIONEN + MITGLIEDER  + "zusatzbetrage";
 
+  public static final String ZUSATZBETRAEGE_VORLAGE = PRE + FUNKTIONEN
+      + MITGLIEDER + "zusatzbetragevorlage";
+
   public static final String ZUSATZBETRAEGEIMPORT = PRE + FUNKTIONEN + MITGLIEDER 
       + "zusatzbetrage-importieren";
   
diff --git a/src/de/jost_net/JVerein/gui/view/ZusatzbetragListeView.java b/src/de/jost_net/JVerein/gui/view/ZusatzbetragListeView.java
index 47d592d598..f864e628de 100644
--- a/src/de/jost_net/JVerein/gui/view/ZusatzbetragListeView.java
+++ b/src/de/jost_net/JVerein/gui/view/ZusatzbetragListeView.java
@@ -17,6 +17,7 @@
 package de.jost_net.JVerein.gui.view;
 
 import de.jost_net.JVerein.gui.action.DokumentationAction;
+import de.jost_net.JVerein.gui.action.StartViewAction;
 import de.jost_net.JVerein.gui.action.ZusatzbetraegeAction;
 import de.jost_net.JVerein.gui.action.ZusatzbetraegeImportAction;
 import de.jost_net.JVerein.gui.control.ZusatzbetragControl;
@@ -43,6 +44,9 @@ public void bind() throws Exception
     ButtonArea buttons = new ButtonArea();
     buttons.addButton("Hilfe", new DokumentationAction(),
         DokumentationUtil.ZUSATZBETRAEGE, false, "question-circle.png");
+    buttons.addButton("Vorlagen",
+        new StartViewAction(ZusatzbetragVorlageListeView.class), null, false,
+        "euro-sign.png");
     buttons.addButton("Import",
         new ZusatzbetraegeImportAction(),null,false, "file-import.png");
     buttons.addButton(control.getPDFAusgabeButton());
diff --git a/src/de/jost_net/JVerein/gui/view/ZusatzbetragVorlageDetailView.java b/src/de/jost_net/JVerein/gui/view/ZusatzbetragVorlageDetailView.java
new file mode 100644
index 0000000000..1183aed780
--- /dev/null
+++ b/src/de/jost_net/JVerein/gui/view/ZusatzbetragVorlageDetailView.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 <http://www.gnu.org/licenses/>.
+ * 
+ * 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.ZusatzbetragVorlageControl;
+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 ZusatzbetragVorlageDetailView extends AbstractView
+{
+
+  @Override
+  public void bind() throws Exception
+  {
+    GUI.getView().setTitle("Zusatzbetrag-Vorlage");
+    final ZusatzbetragVorlageControl control = new ZusatzbetragVorlageControl(
+        this);
+
+    LabelGroup group = new LabelGroup(getParent(), "Zusatzbetrag-Vorlage");
+    group.addLabelPair("Erste F�lligkeit ", control.getStartdatum(true));
+    group.addLabelPair("N�chste F�lligkeit", control.getFaelligkeit());
+    group.addLabelPair("Intervall", control.getIntervall());
+    group.addLabelPair("Nicht mehr ausf�hren ab", control.getEndedatum());
+    group.addLabelPair("Buchungstext", control.getBuchungstext());
+    group.addLabelPair("Betrag", control.getBetrag());
+    group.addLabelPair("Buchungsart", control.getBuchungsart());
+    if (Einstellungen.getEinstellung().getBuchungsklasseInBuchung())
+      group.addLabelPair("Buchungsklasse", control.getBuchungsklasse());
+    group.addLabelPair("Zahlungsweg", control.getZahlungsweg());
+
+    ButtonArea buttons = new ButtonArea();
+    buttons.addButton("Hilfe", new DokumentationAction(),
+        DokumentationUtil.ZUSATZBETRAEGE_VORLAGE, false, "question-circle.png");
+    buttons.addButton("Speichern", new Action()
+    {
+
+      @Override
+      public void handleAction(Object context)
+      {
+        control.handleStore();
+      }
+    }, null, true, "document-save.png");
+    buttons.paint(getParent());
+  }
+}
diff --git a/src/de/jost_net/JVerein/gui/view/ZusatzbetragVorlageListeView.java b/src/de/jost_net/JVerein/gui/view/ZusatzbetragVorlageListeView.java
new file mode 100644
index 0000000000..1152dae577
--- /dev/null
+++ b/src/de/jost_net/JVerein/gui/view/ZusatzbetragVorlageListeView.java
@@ -0,0 +1,48 @@
+/**********************************************************************
+ * 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 <http://www.gnu.org/licenses/>.
+ * 
+ * heiner@jverein.de
+ * www.jverein.de
+ **********************************************************************/
+package de.jost_net.JVerein.gui.view;
+
+import de.jost_net.JVerein.gui.action.DokumentationAction;
+import de.jost_net.JVerein.gui.action.NewAction;
+import de.jost_net.JVerein.gui.control.ZusatzbetragVorlageControl;
+import de.jost_net.JVerein.rmi.ZusatzbetragVorlage;
+import de.willuhn.jameica.gui.AbstractView;
+import de.willuhn.jameica.gui.GUI;
+import de.willuhn.jameica.gui.parts.ButtonArea;
+
+public class ZusatzbetragVorlageListeView extends AbstractView
+{
+
+  @Override
+  public void bind() throws Exception
+  {
+    GUI.getView().setTitle("Zusatzbetr�ge-Vorlagen");
+
+    final ZusatzbetragVorlageControl control = new ZusatzbetragVorlageControl(
+        this);
+
+    control.getZusatzbetraegeVorlageList().paint(this.getParent());
+
+    ButtonArea buttons = new ButtonArea();
+    buttons.addButton("Hilfe", new DokumentationAction(),
+        DokumentationUtil.ZUSATZBETRAEGE_VORLAGE, false, "question-circle.png");
+    buttons.addButton("Neu",
+        new NewAction(ZusatzbetragVorlageDetailView.class, ZusatzbetragVorlage.class),
+        control, false, "document-new.png");
+    buttons.paint(this.getParent());
+  }
+}
diff --git a/src/de/jost_net/JVerein/server/ZusatzbetragImpl.java b/src/de/jost_net/JVerein/server/ZusatzbetragImpl.java
index 2720fd00f5..5e5938e404 100644
--- a/src/de/jost_net/JVerein/server/ZusatzbetragImpl.java
+++ b/src/de/jost_net/JVerein/server/ZusatzbetragImpl.java
@@ -429,7 +429,7 @@ public Zahlungsweg getZahlungsweg() throws RemoteException
     Object o = getAttribute("zahlungsweg");
     if (o == null)
     {
-      return new Zahlungsweg(0);
+      return new Zahlungsweg(Zahlungsweg.STANDARD);
     }
     return new Zahlungsweg((Integer) o);
   }
@@ -439,7 +439,7 @@ public void setZahlungsweg(Zahlungsweg zahlungsweg) throws RemoteException
   {
     if (zahlungsweg == null)
     {
-      setAttribute("zahlungsweg", 0);
+      setAttribute("zahlungsweg", Zahlungsweg.STANDARD);
     }
     else
     {
diff --git a/src/de/jost_net/JVerein/server/ZusatzbetragVorlageImpl.java b/src/de/jost_net/JVerein/server/ZusatzbetragVorlageImpl.java
index fe4b07998d..e406390814 100644
--- a/src/de/jost_net/JVerein/server/ZusatzbetragVorlageImpl.java
+++ b/src/de/jost_net/JVerein/server/ZusatzbetragVorlageImpl.java
@@ -239,7 +239,7 @@ public Zahlungsweg getZahlungsweg() throws RemoteException
     Object o = getAttribute("zahlungsweg");
     if (o == null)
     {
-      return null;
+      return new Zahlungsweg(Zahlungsweg.STANDARD);
     }
     return new Zahlungsweg((Integer) o);
   }
@@ -249,7 +249,7 @@ public void setZahlungsweg(Zahlungsweg zahlungsweg) throws RemoteException
   {
     if (zahlungsweg == null)
     {
-      setAttribute("zahlungsweg", null);
+      setAttribute("zahlungsweg", Zahlungsweg.STANDARD);
     }
     else
     {


Reviews:
user: login: dippeal
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-03-03T08:57:24Z
user: login: lenilsas
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-03T19:40:44Z
user: login: tolot27
body: Noch ein paar generelle Beobachtungen:
- Wenn man bei einem Mitglied auf dem Reiter "Zusatzbeträge" einen neuen Zusatzbetrag erstellt, wird ein anderes Symbol auf dem Vorlagen-Button angezeigt, als an den anderen Stellen: 
![image](https://github.com/user-attachments/assets/9ed0e89b-e2f2-46d6-9de0-f3653326e6e0)
![image](https://github.com/user-attachments/assets/c30d203d-4a61-4636-b48e-f1c7c39b67ec)
- Wenn man auf den Vorlagen-Button klickt, werden die Vorlagen angezeigt. Hier kann man sie jedoch nicht via Kontextmenü löschen. Eigentlich könnte man das hier einbauen. Dann benötigt man es nicht extra im Navigator.
- Wenn man in der MitgliedListeView das Kontextmenü via Rechtsklick öffnet, wird "Zusatzbeträge hinzufügen" angezeigt. Das ist Plural im Vergleich zu "Neuer Zusatzbetrag" im Zusatzbeträge-Reiter der Mitglieder. Das könnte angeglichen werden.
- In dem Dialog, der über das Kontextmenü geöffnet wird, könnte man auch "Als Vorlage speichern" einbauen bzw. vielleicht sogar die gleiche GUI-Komponente darstellen, wie bei den Mitglieder-Reiter. Diese Option muss übrigens keine Ausklappliste sein; eine Checkbox würde genügen. Allerdings habe ich das GUI-Konzept von OpenJVerein nicht im Hinterkopf.
- Eventuell könnte man unter Administration/Einstellungen einen Eintrag "Vorlagen" hinzufügen und da die Mail-, Zusatzbeträge- und sonstige Vorlagen zentral verwalten.
state: CHANGES_REQUESTED
author_association: MEMBER
submitted_at: 2025-03-03T20:06:12Z
user: login: JohannMaierhofer
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-03T20:36:43Z
user: login: JohannMaierhofer
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-03T20:41:02Z
user: login: lenilsas
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-03T20:43:27Z
user: login: JohannMaierhofer
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-03T20:49:51Z
user: login: tolot27
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-03T20:55:30Z
user: login: JohannMaierhofer
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-04T10:37:38Z
user: login: JohannMaierhofer
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-04T10:37:54Z
user: login: JohannMaierhofer
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-04T10:38:18Z
user: login: lenilsas
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-03-04T12:27:44Z
user: login: dippeal
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-03-04T13:40:16Z
user: login: lenilsas
state: APPROVED
author_association: MEMBER
submitted_at: 2025-03-09T18:51:11Z
user: login: dippeal
state: APPROVED
author_association: MEMBER
submitted_at: 2025-03-10T10:26:41Z
user: login: tolot27
body: > @tolot27 passt das für dich jetzt auch?

Ja, passt! 😄
state: APPROVED
author_association: MEMBER
submitted_at: 2025-03-11T21:13:45Z

Review comments:
diff_hunk: @@ -206,10 +214,64 @@ public AbstractInput getBuchungsart() throws RemoteException
     buchungsart = new BuchungsartInput().getBuchungsartInput(buchungsart,
         getZusatzbetragVorlage().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 SelectInput getBuchungsklasse() throws RemoteException
+  {
+    if (buchungsklasse != null)
+    {
+      return buchungsklasse;
+    }
+    buchungsklasse = new BuchungsklasseInput().getBuchungsklasseInput(
+        buchungsklasse, getZusatzbetragVorlage().getBuchungsklasse());
+    return buchungsklasse;
+  }
+
+  public boolean isBuchungsklasseActive()
+  {
+    return buchungsklasse != null;
+  }
+
+  public Long getSelectedBuchungsKlasseId() throws ApplicationException
+  {
+    try
+    {
+      if (null == buchungsklasse)
+        return null;
+      Buchungsklasse buchungsKlasse = (Buchungsklasse) getBuchungsklasse()
+          .getValue();
+      if (null == buchungsKlasse)
+        return null;
path: src/de/jost_net/JVerein/gui/control/ZusatzbetragVorlageControl.java
user: login: tolot27
body: Hier musste ich zweimal hinschauen, um zu verstehen, dass `buchungsklasse` und `buchungsKlasse` unterschiedliche Typen sind. Die erste Variable ist klassenweit und vom Typ `SelectInput` und die zweite vom Typ `Buchungsklasse`. Nur der eine Großbuchstabe macht den Unterschied. Das ist sehr leicht zu übersehen und ich empfehle andere für `SelectInput` einen anderen Variablennamen.

Haben wir auch eine Konvention, dass wir bei Null-Checks `if (null == buchungsklasse)` schreiben, statt `if (buchungsklasse == null)`?
created_at: 2025-03-03T19:35:00Z
author_association: MEMBER
diff_hunk: @@ -180,7 +181,10 @@ public Object extract(ResultSet rs)
       if (Einstellungen.getEinstellung().getZusatzbetrag())
       {
         mitglieder.addChild(new MyItem(mitglieder, "Zusatzbetr�ge",
-            new StartViewAction(ZusatzbetraegelisteView.class),
+            new StartViewAction(ZusatzbetragListeView.class),
+            "euro-sign.png"));
+        mitglieder.addChild(new MyItem(mitglieder, "Zusatzbetr�ge-Vorlagen",
path: src/de/jost_net/JVerein/gui/navigation/MyExtension.java
user: login: lenilsas
body: Ich fände es besser, wenn die VorlagenListView über die ZusatzbetragListView zu erreichen ist und nicht über die Navigation. Sonst wird die Navigation sehr voll und so oft wird man das ja nicht brauchen.
created_at: 2025-03-03T19:38:37Z
author_association: MEMBER
diff_hunk: @@ -239,7 +239,7 @@ public Zahlungsweg getZahlungsweg() throws RemoteException
     Object o = getAttribute("zahlungsweg");
     if (o == null)
     {
-      return null;
+      return new Zahlungsweg(0);
path: src/de/jost_net/JVerein/server/ZusatzbetragVorlageImpl.java
user: login: lenilsas
body: Hier wäre die Konstante hilfreich
created_at: 2025-03-03T19:40:03Z
author_association: MEMBER
diff_hunk: @@ -180,7 +181,10 @@ public Object extract(ResultSet rs)
       if (Einstellungen.getEinstellung().getZusatzbetrag())
       {
         mitglieder.addChild(new MyItem(mitglieder, "Zusatzbetr�ge",
-            new StartViewAction(ZusatzbetraegelisteView.class),
+            new StartViewAction(ZusatzbetragListeView.class),
+            "euro-sign.png"));
+        mitglieder.addChild(new MyItem(mitglieder, "Zusatzbetr�ge-Vorlagen",
path: src/de/jost_net/JVerein/gui/navigation/MyExtension.java
user: login: tolot27
body: Darüber hatte ich zunächst auch nachgedacht, dann jedoch gesehen, dass die Mailvorlagen auch in der Navigation zu sehen sind. Daher bin ich etwas unschlüssig.
Dabei ist mir auch aufgefallen, dass die Unterpunkte unter Mitglieder nicht alphabetisch sortiert sind.
created_at: 2025-03-03T19:49:25Z
author_association: MEMBER
diff_hunk: @@ -180,7 +181,10 @@ public Object extract(ResultSet rs)
       if (Einstellungen.getEinstellung().getZusatzbetrag())
       {
         mitglieder.addChild(new MyItem(mitglieder, "Zusatzbetr�ge",
-            new StartViewAction(ZusatzbetraegelisteView.class),
+            new StartViewAction(ZusatzbetragListeView.class),
+            "euro-sign.png"));
+        mitglieder.addChild(new MyItem(mitglieder, "Zusatzbetr�ge-Vorlagen",
path: src/de/jost_net/JVerein/gui/navigation/MyExtension.java
user: login: JohannMaierhofer
body: Ja, ich hatte es auch so gemacht wie es bei den Mail war. Wenn man es ändert, soll man es dann wohl bei beiden machen.
Alphabetisch sortieren würde ich nicht. Das wichtigste sind doch die Mitglieder, die hätte ich schon gerne oben und die nächsten zwei gehören thematisch dazu.
Weiter unten kann man das ja evtl. dann machen. 
created_at: 2025-03-03T20:36:43Z
author_association: NONE
diff_hunk: @@ -239,7 +239,7 @@ public Zahlungsweg getZahlungsweg() throws RemoteException
     Object o = getAttribute("zahlungsweg");
     if (o == null)
     {
-      return null;
+      return new Zahlungsweg(0);
path: src/de/jost_net/JVerein/server/ZusatzbetragVorlageImpl.java
user: login: JohannMaierhofer
body: Ich habe das aus ZusatzbetragImpl übernommen. Wo soll dann die gemeinsame Konstande definiert werden. Jeweils in beiden getrennt der nur in einem global. 
created_at: 2025-03-03T20:41:02Z
author_association: NONE
diff_hunk: @@ -239,7 +239,7 @@ public Zahlungsweg getZahlungsweg() throws RemoteException
     Object o = getAttribute("zahlungsweg");
     if (o == null)
     {
-      return null;
+      return new Zahlungsweg(0);
path: src/de/jost_net/JVerein/server/ZusatzbetragVorlageImpl.java
user: login: lenilsas
body: ich meinte `Zahlungsweg.STANDARD` die ist ja schon vorhanden.
created_at: 2025-03-03T20:43:27Z
author_association: MEMBER
diff_hunk: @@ -206,10 +214,64 @@ public AbstractInput getBuchungsart() throws RemoteException
     buchungsart = new BuchungsartInput().getBuchungsartInput(buchungsart,
         getZusatzbetragVorlage().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 SelectInput getBuchungsklasse() throws RemoteException
+  {
+    if (buchungsklasse != null)
+    {
+      return buchungsklasse;
+    }
+    buchungsklasse = new BuchungsklasseInput().getBuchungsklasseInput(
+        buchungsklasse, getZusatzbetragVorlage().getBuchungsklasse());
+    return buchungsklasse;
+  }
+
+  public boolean isBuchungsklasseActive()
+  {
+    return buchungsklasse != null;
+  }
+
+  public Long getSelectedBuchungsKlasseId() throws ApplicationException
+  {
+    try
+    {
+      if (null == buchungsklasse)
+        return null;
+      Buchungsklasse buchungsKlasse = (Buchungsklasse) getBuchungsklasse()
+          .getValue();
+      if (null == buchungsKlasse)
+        return null;
path: src/de/jost_net/JVerein/gui/control/ZusatzbetragVorlageControl.java
user: login: JohannMaierhofer
body: Da die SelectInputs überall Buchungsklasse heißen nenne ich dann die Variablen um.
Die Konvention kenne ich nicht, habe aber gesehen, dass ganz selten die null auch vorne steht. Ist das besser? 
created_at: 2025-03-03T20:49:51Z
author_association: NONE
diff_hunk: @@ -206,10 +214,64 @@ public AbstractInput getBuchungsart() throws RemoteException
     buchungsart = new BuchungsartInput().getBuchungsartInput(buchungsart,
         getZusatzbetragVorlage().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 SelectInput getBuchungsklasse() throws RemoteException
+  {
+    if (buchungsklasse != null)
+    {
+      return buchungsklasse;
+    }
+    buchungsklasse = new BuchungsklasseInput().getBuchungsklasseInput(
+        buchungsklasse, getZusatzbetragVorlage().getBuchungsklasse());
+    return buchungsklasse;
+  }
+
+  public boolean isBuchungsklasseActive()
+  {
+    return buchungsklasse != null;
+  }
+
+  public Long getSelectedBuchungsKlasseId() throws ApplicationException
+  {
+    try
+    {
+      if (null == buchungsklasse)
+        return null;
+      Buchungsklasse buchungsKlasse = (Buchungsklasse) getBuchungsklasse()
+          .getValue();
+      if (null == buchungsKlasse)
+        return null;
path: src/de/jost_net/JVerein/gui/control/ZusatzbetragVorlageControl.java
user: login: tolot27
body: > Die Konvention kenne ich nicht, habe aber gesehen, dass ganz selten die null auch vorne steht. Ist das besser?

Ich finde die Notation `buchungsklasse == null` angenehmer, da üblicher, insbesondere bei mehreren Vergleichen.
created_at: 2025-03-03T20:55:30Z
author_association: MEMBER
diff_hunk: @@ -180,7 +181,10 @@ public Object extract(ResultSet rs)
       if (Einstellungen.getEinstellung().getZusatzbetrag())
       {
         mitglieder.addChild(new MyItem(mitglieder, "Zusatzbetr�ge",
-            new StartViewAction(ZusatzbetraegelisteView.class),
+            new StartViewAction(ZusatzbetragListeView.class),
+            "euro-sign.png"));
+        mitglieder.addChild(new MyItem(mitglieder, "Zusatzbetr�ge-Vorlagen",
path: src/de/jost_net/JVerein/gui/navigation/MyExtension.java
user: login: JohannMaierhofer
body: Ich habe es aus der Navigation entfernt
created_at: 2025-03-04T10:37:38Z
author_association: NONE
diff_hunk: @@ -239,7 +239,7 @@ public Zahlungsweg getZahlungsweg() throws RemoteException
     Object o = getAttribute("zahlungsweg");
     if (o == null)
     {
-      return null;
+      return new Zahlungsweg(0);
path: src/de/jost_net/JVerein/server/ZusatzbetragVorlageImpl.java
user: login: JohannMaierhofer
body: ist gemacht
created_at: 2025-03-04T10:37:54Z
author_association: NONE
diff_hunk: @@ -206,10 +214,64 @@ public AbstractInput getBuchungsart() throws RemoteException
     buchungsart = new BuchungsartInput().getBuchungsartInput(buchungsart,
         getZusatzbetragVorlage().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 SelectInput getBuchungsklasse() throws RemoteException
+  {
+    if (buchungsklasse != null)
+    {
+      return buchungsklasse;
+    }
+    buchungsklasse = new BuchungsklasseInput().getBuchungsklasseInput(
+        buchungsklasse, getZusatzbetragVorlage().getBuchungsklasse());
+    return buchungsklasse;
+  }
+
+  public boolean isBuchungsklasseActive()
+  {
+    return buchungsklasse != null;
+  }
+
+  public Long getSelectedBuchungsKlasseId() throws ApplicationException
+  {
+    try
+    {
+      if (null == buchungsklasse)
+        return null;
+      Buchungsklasse buchungsKlasse = (Buchungsklasse) getBuchungsklasse()
+          .getValue();
+      if (null == buchungsKlasse)
+        return null;
path: src/de/jost_net/JVerein/gui/control/ZusatzbetragVorlageControl.java
user: login: JohannMaierhofer
body: habe es umbenannt
created_at: 2025-03-04T10:38:18Z
author_association: NONE

PR comments:
user: login: JohannMaierhofer
created_at: 2025-02-27T15:53:10Z
body: Ich habe noch das Icon für Zusatzbeträge im Mitglieder Menü angepasst. Es ist jetzt das gleiche Icon wie im Navigationsbaum für Zusatzbeträge.
author_association: NONE
user: login: JohannMaierhofer
created_at: 2025-03-03T21:04:31Z
body: > Noch ein paar generelle Beobachtungen:
> - Wenn man bei einem Mitglied auf dem Reiter "Zusatzbeträge" einen neuen Zusatzbetrag erstellt, wird ein anderes Symbol auf dem Vorlagen-Button angezeigt, als an den anderen Stellen: 

Kann ich angleichen.

> - Wenn man auf den Vorlagen-Button klickt, werden die Vorlagen angezeigt. Hier kann man sie jedoch nicht via Kontextmenü löschen. Eigentlich könnte man das hier einbauen. Dann benötigt man es nicht extra im Navigator.

Da habe ich das Löschen weg gemacht, ich dachte, bei der Zuweisung will mann zuweisen und nicht bearbeiten. Wenn man da löschen kann will an wahrscheinlich dann auch bearbeiten. Und dann wird komplizierter, dann müsste ich hier aus dem Dialog in den View springen oder einen weiteren Dialog bauen. Das wäre irgendwie nicht konsistent. Dann kann man sich die Views auch gleich wieder sparen. 
Darum wollte ich das eigentlich trennen. Im View erzeugt, bearbeitet und löscht man und in den Zuweisung Dialogen ordnet man halt zu. 


> - Wenn man in der MitgliedListeView das Kontextmenü via Rechtsklick öffnet, wird "Zusatzbeträge hinzufügen" angezeigt. Das ist Plural im Vergleich zu "Neuer Zusatzbetrag" im Zusatzbeträge-Reiter der Mitglieder. Das könnte angeglichen werden.

Vermutlich kommt das daher, wenn man mehrere Mitglieder ausgewählt hat sind es halt mehrere die zugewiesen werden. Da müsste man dann den Text abhängig davon machen ob nur ein Mitglied oder mehrere ausgewählt wurden. 



author_association: NONE
user: login: JohannMaierhofer
created_at: 2025-03-04T10:33:50Z
body: Ich habe die Kommentare eingearbeitet:
* Habe den Vorlagen Eintrag aus der Navigation herausgenommen und in den Zusatzbeträge View verlegt. Bei Mails ist es etwas anders, weil dort die Vorlagen auch bei den Drucken Einträgen benutzt werden. Da sollte man sie nicht verstecken
* Menüeinträge umbenannt, Singular und zuordnen statt zuweisen weil es auch im Dialog so steht
![Bildschirmfoto_20250304_112939](https://github.com/user-attachments/assets/aacb3e0d-9138-4a63-9dfd-9cd1c9d4ead9)
* Im Dialog als Vorlage speichern eingebaut und die Buttons dem View angeglichen. Zudem das Icon verwendet welches auch bei Mail Vorlagen auswählen benutzt wird
![Bildschirmfoto_20250304_112828](https://github.com/user-attachments/assets/98e1305e-ba83-4724-8855-293e95971a4a)
Im View:
![Bildschirmfoto_20250304_114137](https://github.com/user-attachments/assets/290acf5b-2bb6-4266-b458-9f235221fdd3)



author_association: NONE
user: login: JohannMaierhofer
created_at: 2025-03-04T10:40:16Z
body: >     * Wenn man auf den Vorlagen-Button klickt, werden die Vorlagen angezeigt. Hier kann man sie jedoch nicht via Kontextmenü löschen. Eigentlich könnte man das hier einbauen. Dann benötigt man es nicht extra im Navigator.

Das habe ich jetzt nicht gemacht wie oben erleutert. Man sollte zwischen Zuweisen und Bearbeiten unterscheiden.

>     * Eventuell könnte man unter Administration/Einstellungen einen Eintrag "Vorlagen" hinzufügen und da die Mail-, Zusatzbeträge- und sonstige Vorlagen zentral verwalten.

Ganz so weit weg würde ich es nicht machen.


author_association: NONE
user: login: JohannMaierhofer
created_at: 2025-03-06T18:38:54Z
body: @tolot27 passt das für dich jetzt auch? 
author_association: NONE
user: login: JohannMaierhofer
created_at: 2025-03-09T18:56:15Z
body: Merge Konflikt behoben
author_association: NONE