Skip to content

Commit

Permalink
Implementiert Issue #105 (#153)
Browse files Browse the repository at this point in the history
* zwischenstand

* zwischenstand2

* Implementiert Issue #105

* Update Text

* Update

* Zwischenstand

* Update SplitBuchungView.java

* Unnötiges if() entfernt und Icon gesetzt
  • Loading branch information
JohannMaierhofer authored Feb 17, 2024
1 parent f72c03c commit 534e045
Show file tree
Hide file tree
Showing 4 changed files with 217 additions and 39 deletions.
56 changes: 38 additions & 18 deletions src/de/jost_net/JVerein/gui/action/SplitBuchungAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,38 +34,58 @@ public class SplitBuchungAction implements Action
@Override
public void handleAction(Object context) throws ApplicationException
{
Buchung b = null;

if (context != null && (context instanceof Buchung))
if (context == null
|| (!(context instanceof Buchung) && !(context instanceof Buchung[])))
{
throw new ApplicationException("Keine Buchung(en) ausgewählt");
}
Buchung[] bl = null;
try
{
b = (Buchung) context;
try
if (context instanceof Buchung)
{
bl = new Buchung[1];
bl[0] = (Buchung) context;
}
if (context instanceof Buchung[])
{
bl = (Buchung[]) context;
}
if (bl == null)
{
return;
}
if (bl.length == 0)
{
return;
}
if (bl[0].isNewObject())
{
return;
}

for (Buchung bu : bl)
{
Jahresabschluss ja = b.getJahresabschluss();
Jahresabschluss ja = bu.getJahresabschluss();
if (ja != null)
{
throw new ApplicationException(String.format(
"Buchung wurde bereits am %s von %s abgeschlossen.",
new JVDateFormatTTMMJJJJ().format(ja.getDatum()), ja.getName()));
}
if (b.getBuchungsart() == null)
if (bu.getBuchungsart() == null)
{
throw new ApplicationException(
"Der Buchung muss zunächst eine Buchungsart zugeordnet werden.");
"Allen Buchungen muss zunächst eine Buchungsart zugeordnet werden.");
}
b.setSplitTyp(SplitbuchungTyp.HAUPT);
SplitbuchungsContainer.init(b);
}
catch (RemoteException e)
{
throw new ApplicationException(e.getMessage());
}
bl[0].setSplitTyp(SplitbuchungTyp.HAUPT);
SplitbuchungsContainer.init(bl);
}
else
catch (RemoteException e)
{
throw new ApplicationException(
"Programmfehler! Splitbuchung muss mit einer existierenden Buchung aufgerufen werden");
throw new ApplicationException(e.getMessage());
}
GUI.startView(SplitBuchungView.class.getName(), b);
GUI.startView(SplitBuchungView.class.getName(), bl[0]);
}
}
39 changes: 38 additions & 1 deletion src/de/jost_net/JVerein/gui/menu/BuchungMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public BuchungMenu(BuchungsControl control)
"edit-copy.png"));
addItem(new SingleGegenBuchungItem("Gegenbuchung", new BuchungGegenbuchungAction(),
"edit-copy.png"));
addItem(new SingleBuchungItem("Splitbuchung", new SplitBuchungAction(),
addItem(new SplitBuchungItem("Splitbuchung", new SplitBuchungAction(),
"edit-copy.png"));
addItem(new CheckedContextMenuItem("Buchungsart zuordnen",
new BuchungBuchungsartZuordnungAction(control), "view-refresh.png"));
Expand Down Expand Up @@ -167,4 +167,41 @@ public boolean isEnabledFor(Object o)
}
}

private static class SplitBuchungItem extends CheckedContextMenuItem
{
private SplitBuchungItem(String text, Action action, String icon)
{
super(text, action, icon);
}

@Override
public boolean isEnabledFor(Object o)
{
try
{
if (o instanceof Buchung)
{
return ((Buchung) o).getSplitId() == null;
}
if (o instanceof Buchung[])
{
Double betrag = ((Buchung[]) o)[0].getBetrag();
for (Buchung bu : ((Buchung[]) o))
{
if ((bu.getSplitId() != null) || (bu.getBetrag() != betrag))
{
return false;
}
}
return true;
}
}
catch (RemoteException e)
{
Logger.error("Fehler", e);
}
return false;
}
}

}
11 changes: 9 additions & 2 deletions src/de/jost_net/JVerein/gui/view/SplitBuchungView.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import de.willuhn.jameica.gui.Action;
import de.willuhn.jameica.gui.GUI;
import de.willuhn.jameica.gui.parts.ButtonArea;
import de.willuhn.jameica.gui.parts.InfoPanel;

public class SplitBuchungView extends AbstractView
{
Expand All @@ -35,7 +36,11 @@ public void bind() throws Exception
GUI.getView().setTitle("Splitbuchungen");

final BuchungsControl control = new BuchungsControl(this);

InfoPanel info = new InfoPanel();
info.setText(SplitbuchungsContainer.getText());
info.setTitle("Info");
info.setIcon("gtk-info.png");
info.paint(getParent());
control.getSplitBuchungsList().paint(getParent());
ButtonArea buttons = new ButtonArea();
buttons.addButton("Hilfe", new DokumentationAction(),
Expand All @@ -54,7 +59,9 @@ public void handleAction(Object context)
try
{
SplitbuchungsContainer.store();
GUI.getStatusBar().setSuccessText("Splitbuchungen gespeichert");
control.refreshSplitbuchungen();
GUI.getStatusBar().setSuccessText(String.format
("%s Splitbuchungen gespeichert", SplitbuchungsContainer.getAnzahl()));
}
catch (Exception e)
{
Expand Down
150 changes: 132 additions & 18 deletions src/de/jost_net/JVerein/io/SplitbuchungsContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,59 @@
package de.jost_net.JVerein.io;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.rmi.RemoteException;
import java.util.ArrayList;

import de.jost_net.JVerein.Einstellungen;
import de.jost_net.JVerein.DBTools.DBTransaction;
import de.jost_net.JVerein.keys.SplitbuchungTyp;
import de.jost_net.JVerein.rmi.Buchung;
import de.jost_net.JVerein.rmi.Buchungsart;
import de.willuhn.datasource.rmi.DBIterator;
import de.willuhn.jameica.gui.GUI;
import de.willuhn.util.ApplicationException;

public class SplitbuchungsContainer
{
private static ArrayList<Buchung> splitbuchungen = null;

private static int dependencyid = 0;

private static Buchung[] buchungen = null;

private static int anzahl = 0;

private static String text = null;

public static void init(Buchung[] bl)
throws RemoteException, ApplicationException
{
anzahl = bl.length;
if (anzahl == 1)
{
buchungen = null;
text = "Es wird eine Splitbuchung erzeugt.";
}
else
{
buchungen = bl;
text = String.format("Es werden %s Splitbuchungen erzeugt.", anzahl);
}
initiate(bl[0]);
}

public static void init(Buchung b)
throws RemoteException, ApplicationException
{
buchungen = null;
anzahl = 1;
text = "Es wird eine Splitbuchung erzeugt.";
initiate(b);
}

public static void initiate(Buchung b)
throws RemoteException, ApplicationException
{
splitbuchungen = new ArrayList<>();
dependencyid = 0;
Expand All @@ -48,7 +83,7 @@ public static void init(Buchung b)
}
else
{
b.setSplitId(new Long(b.getID()));
b.setSplitId(Long.valueOf(b.getID()));
SplitbuchungsContainer.add(b);
}
DBIterator<Buchung> it = Einstellungen.getDBService()
Expand All @@ -59,22 +94,7 @@ public static void init(Buchung b)
{
// Wenn keine Buchung gefunden wurde, gibt es auch keine Gegenbuchung.
// Dann wird die jetzt erstellt.
Buchung b2 = (Buchung) Einstellungen.getDBService()
.createObject(Buchung.class, null);
b2.setArt(b.getArt());
b2.setAuszugsnummer(b.getAuszugsnummer());
b2.setBetrag(b.getBetrag() * -1);
b2.setBlattnummer(b.getBlattnummer());
b2.setBuchungsart(b.getBuchungsartId());
b2.setDatum(b.getDatum());
b2.setKommentar(b.getKommentar());
b2.setKonto(b.getKonto());
b2.setMitgliedskonto(b.getMitgliedskonto());
b2.setName(b.getName());
b2.setSplitId(new Long(b.getID()));
b2.setUmsatzid(b.getUmsatzid());
b2.setZweck(b.getZweck());
b2.setSplitTyp(SplitbuchungTyp.GEGEN);
Buchung b2 = getGegenbuchung(b);
SplitbuchungsContainer.add(b2);
}
while (it.hasNext())
Expand Down Expand Up @@ -120,7 +140,7 @@ public static BigDecimal getSumme(Integer typ) throws RemoteException
if (b.getSplitTyp().equals(typ) && !b.isToDelete())
{
summe = summe.add(new BigDecimal(b.getBetrag()).setScale(2,
BigDecimal.ROUND_HALF_UP));
RoundingMode.HALF_UP));
}
}
return summe;
Expand Down Expand Up @@ -196,6 +216,22 @@ public static void store() throws RemoteException, ApplicationException
throw new RemoteException(
"Buchungsarten bei Haupt- und Gegenbuchung müssen identisch sein");
}
try
{
DBTransaction.starten();
handleStore();
DBTransaction.commit();
}
catch (Exception ex)
{
DBTransaction.rollback();
GUI.getStatusBar().setErrorText(ex.getMessage());
throw ex;
}
}

public static void handleStore() throws RemoteException, ApplicationException
{
for (Buchung b : get())
{
if (b.isToDelete())
Expand All @@ -207,9 +243,87 @@ public static void store() throws RemoteException, ApplicationException
b.store();
}
}
if (buchungen != null)
{
Buchung master = null;
Buchung gegen = null;
Buchung split = null;
for (int i = 1; i < anzahl; i++)
{
master = buchungen[i];
master.setSplitTyp(SplitbuchungTyp.HAUPT);
master.setSplitId(Long.valueOf(master.getID()));
master.store();
gegen = getGegenbuchung(master);
gegen.store();
for (Buchung b : get())
{
if (!b.isToDelete() && (b.getSplitTyp() == SplitbuchungTyp.SPLIT))
{
split = getSplitbuchung(master, b);
split.store();
}
}
}
buchungen = null;
splitbuchungen.clear();
}
}

public static int getNewDependencyId() {
return ++dependencyid;
}

public static String getText() {
return text;
}

private static Buchung getGegenbuchung(Buchung b) throws RemoteException
{
Buchung buch = (Buchung) Einstellungen.getDBService()
.createObject(Buchung.class, null);
buch.setArt(b.getArt());
buch.setAuszugsnummer(b.getAuszugsnummer());
buch.setBetrag(b.getBetrag() * -1);
buch.setBlattnummer(b.getBlattnummer());
buch.setBuchungsart(b.getBuchungsartId());
buch.setDatum(b.getDatum());
buch.setKommentar(b.getKommentar());
buch.setKonto(b.getKonto());
buch.setMitgliedskonto(b.getMitgliedskonto());
buch.setName(b.getName());
buch.setProjekt(b.getProjekt());
buch.setSplitId(Long.valueOf(b.getID()));
buch.setUmsatzid(b.getUmsatzid());
buch.setZweck(b.getZweck());
buch.setSplitTyp(SplitbuchungTyp.GEGEN);
return buch;
}

private static Buchung getSplitbuchung(Buchung master, Buchung origin) throws RemoteException
{
Buchung buch = (Buchung) Einstellungen.getDBService().createObject(Buchung.class,
null);
buch.setAuszugsnummer(master.getAuszugsnummer());
buch.setBetrag(origin.getBetrag());
buch.setBlattnummer(master.getBlattnummer());
buch.setBuchungsart(origin.getBuchungsartId());
buch.setDatum(master.getDatum());
buch.setKommentar(origin.getKommentar());
buch.setKonto(master.getKonto());
buch.setMitgliedskonto(master.getMitgliedskonto());
buch.setName(master.getName());
buch.setProjekt(master.getProjekt());
buch.setSplitId(Long.valueOf(master.getID()));
buch.setUmsatzid(master.getUmsatzid());
buch.setZweck(origin.getZweck());
buch.setDependencyId(origin.getDependencyId());
buch.setSplitTyp(SplitbuchungTyp.SPLIT);
return buch;
}

public static int getAnzahl()
{
return anzahl;
}
}

0 comments on commit 534e045

Please sign in to comment.