Skip to content

Commit

Permalink
Buchungsliste View Update (#313)
Browse files Browse the repository at this point in the history
* Zwischenstand

* fix mitglied

* Such nach Buchungsnummer

* Fix id und Suche auch nach Vorname
  • Loading branch information
JohannMaierhofer authored Sep 8, 2024
1 parent 5855aa8 commit 43827a8
Show file tree
Hide file tree
Showing 3 changed files with 185 additions and 13 deletions.
48 changes: 36 additions & 12 deletions src/de/jost_net/JVerein/Queries/BuchungQuery.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ public class BuchungQuery
public String text;

public String betrag;

private String mitglied;

private List<Buchung> ergebnis;

Expand Down Expand Up @@ -74,7 +76,7 @@ private void SortHashMap() {

public BuchungQuery(Date datumvon, Date datumbis, Konto konto,
Buchungsart buchungsart, Projekt projekt, String text, String betrag,
Boolean hasMitglied)
Boolean hasMitglied, String mitglied)
{
this.datumvon = datumvon;
this.datumbis = datumbis;
Expand All @@ -84,6 +86,7 @@ public BuchungQuery(Date datumvon, Date datumbis, Konto konto,
this.text = text;
this.betrag = betrag;
this.hasMitglied = hasMitglied;
this.mitglied = mitglied;
}

public String getOrder(String value) {
Expand Down Expand Up @@ -150,10 +153,21 @@ public String getText()
public List<Buchung> get() throws RemoteException
{
final DBService service = Einstellungen.getDBService();

DBIterator<Buchung> it = service.createList(Buchung.class);
it.addFilter("datum >= ? ", datumvon);
it.addFilter("datum <= ? ", datumbis);

if (mitglied != null && !mitglied.isEmpty())
{
String mitgliedsuche = "%" + mitglied.toLowerCase() + "%";
it.join("mitgliedskonto");
it.addFilter("mitgliedskonto.id = mitgliedskonto");
it.join("mitglied");
it.addFilter("mitglied.id = mitgliedskonto.mitglied");
it.addFilter("(lower(mitglied.name) like ? or lower(mitglied.vorname) like ?)",
new Object[] { mitgliedsuche, mitgliedsuche });
}

it.addFilter("buchung.datum >= ? ", datumvon);
it.addFilter("buchung.datum <= ? ", datumbis);

if (konto != null)
{
Expand Down Expand Up @@ -204,30 +218,30 @@ else if (buchungart.getNummer() >= 0)
{
case GLEICH:
{
it.addFilter("betrag = ?", suchbetrag.getBetrag());
it.addFilter("buchung.betrag = ?", suchbetrag.getBetrag());
break;
}
case GRÖSSER:
{
it.addFilter("betrag > ?", suchbetrag.getBetrag());
it.addFilter("buchung.betrag > ?", suchbetrag.getBetrag());
break;
}
case GRÖSSERGLEICH:
{
it.addFilter("betrag >= ?", suchbetrag.getBetrag());
it.addFilter("buchung.betrag >= ?", suchbetrag.getBetrag());
break;
}
case BEREICH:
it.addFilter("betrag >= ? AND betrag <= ?", suchbetrag.getBetrag(),
it.addFilter("buchung.betrag >= ? AND buchung.betrag <= ?", suchbetrag.getBetrag(),
suchbetrag.getBetrag2());
break;
case KEINE:
break;
case KLEINER:
it.addFilter("betrag < ?", suchbetrag.getBetrag());
it.addFilter("buchung.betrag < ?", suchbetrag.getBetrag());
break;
case KLEINERGLEICH:
it.addFilter("betrag <= ?", suchbetrag.getBetrag());
it.addFilter("buchung.betrag <= ?", suchbetrag.getBetrag());
break;
default:
break;
Expand All @@ -241,11 +255,21 @@ else if (buchungart.getNummer() >= 0)

if (text.length() > 0)
{
Long id = 0L;
try
{
id = Long.parseLong(text);
}
catch (Exception e)
{
;
}
String ttext = text.toUpperCase();
ttext = "%" + ttext + "%";
it.addFilter(
"(upper(name) like ? or upper(zweck) like ? or upper(kommentar) like ?) ",
ttext, ttext, ttext);
"(upper(buchung.name) like ? or upper(buchung.zweck) like ? "
+ "or upper(buchung.kommentar) like ? or buchung.id = ?) ",
ttext, ttext, ttext, id);
}

// 20220823: sbuer: Neue Sortierfelder
Expand Down
147 changes: 146 additions & 1 deletion src/de/jost_net/JVerein/gui/control/BuchungsControl.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
Expand Down Expand Up @@ -171,6 +174,8 @@ public class BuchungsControl extends AbstractControl
private TextInput suchtext = null;

private TextInput suchbetrag = null;

private TextInput mitglied = null;

private CheckboxInput verzicht;

Expand All @@ -193,6 +198,13 @@ public class BuchungsControl extends AbstractControl
private Vector<Listener> changeKontoListener = new Vector<>();

private int unterdrueckunglaenge = 0;

private Calendar calendar = Calendar.getInstance();

private enum RANGE
{
MONAT, TAG
}

public BuchungsControl(AbstractView view)
{
Expand Down Expand Up @@ -444,6 +456,16 @@ public TextInput getSuchBetrag() throws RemoteException
suchbetrag = new TextInput(settings.getString("suchbetrag", ""));
return suchbetrag;
}

public TextInput getMitglied()
{
if (mitglied != null)
{
return mitglied;
}
mitglied = new TextInput(settings.getString("mitglied", ""), 35);
return mitglied;
}

public CheckboxInput getVerzicht() throws RemoteException
{
Expand Down Expand Up @@ -1129,7 +1151,8 @@ public Part getBuchungsList() throws RemoteException
settings.setAttribute("suchbetrag", (String) getSuchBetrag().getValue());

query = new BuchungQuery(dv, db, k, b, p, (String) getSuchtext().getValue(),
(String) getSuchBetrag().getValue(), m.getValue());
(String) getSuchBetrag().getValue(), m.getValue(),
(String) getMitglied().getValue());
if (buchungsList == null)
{
buchungsList = new BuchungListTablePart(query.get(),
Expand Down Expand Up @@ -2062,11 +2085,133 @@ public void resetFilter()
calendar.add(Calendar.DAY_OF_MONTH, -1);
bisdatum.setValue(calendar.getTime());
suchtext.setValue("");
mitglied.setValue("");
refreshBuchungsList();
}
catch (Exception ex)
{
Logger.error("Error filter reset", ex);
}
}

public Button getZurueckButton()
{
return new Button("", new Action()
{
@Override
public void handleAction(Object context) throws ApplicationException
{
Date von = (Date) getVondatum().getValue();
Date bis = (Date) getBisdatum().getValue();
if (getRangeTyp(von, bis) == RANGE.TAG)
{
int delta = (int) ChronoUnit.DAYS.between(von.toInstant(), bis.toInstant());
delta++;
calendar.setTime(von);
calendar.add(Calendar.DAY_OF_MONTH, -delta);
getVondatum().setValue(calendar.getTime());
calendar.setTime(bis);
calendar.add(Calendar.DAY_OF_MONTH, -delta);
getBisdatum().setValue(calendar.getTime());
}
else
{
LocalDate lvon = von.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate lbis = bis.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int delta = (int) ChronoUnit.MONTHS.between(lvon, lbis);
delta++;
calendar.setTime(von);
calendar.add(Calendar.MONTH, -delta);
getVondatum().setValue(calendar.getTime());
calendar.add(Calendar.MONTH, delta);
calendar.add(Calendar.DAY_OF_MONTH, -1);
getBisdatum().setValue(calendar.getTime());
}
try
{
getBuchungsList();
}
catch (RemoteException ex)
{
throw new ApplicationException(ex.getMessage());
}
}
}, null, false, "go-previous.png");
}

public Button getVorButton()
{
return new Button("", new Action()
{
@Override
public void handleAction(Object context) throws ApplicationException
{
Date von = (Date) getVondatum().getValue();
Date bis = (Date) getBisdatum().getValue();
if (getRangeTyp(von, bis) == RANGE.TAG)
{
int delta = (int) ChronoUnit.DAYS.between(von.toInstant(), bis.toInstant());
delta++;
calendar.setTime(von);
calendar.add(Calendar.DAY_OF_MONTH, delta);
getVondatum().setValue(calendar.getTime());
calendar.setTime(bis);
calendar.add(Calendar.DAY_OF_MONTH, delta);
getBisdatum().setValue(calendar.getTime());
}
else
{
LocalDate lvon = von.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate lbis = bis.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int delta = (int) ChronoUnit.MONTHS.between(lvon, lbis);
delta++;
calendar.setTime(von);
calendar.add(Calendar.MONTH, delta);
getVondatum().setValue(calendar.getTime());
calendar.add(Calendar.MONTH, delta);
calendar.add(Calendar.DAY_OF_MONTH, -1);
getBisdatum().setValue(calendar.getTime());
}
try
{
getBuchungsList();
}
catch (RemoteException ex)
{
throw new ApplicationException(ex.getMessage());
}
}
}, null, false, "go-next.png");
}

private RANGE getRangeTyp(Date von, Date bis) throws ApplicationException
{
checkDate();
calendar.setTime(von);
if (calendar.get(Calendar.DAY_OF_MONTH) != 1)
return RANGE.TAG;
calendar.setTime(bis);
calendar.add(Calendar.DAY_OF_MONTH, 1);
if (calendar.get(Calendar.DAY_OF_MONTH) != 1)
return RANGE.TAG;
return RANGE.MONAT;
}

private void checkDate() throws ApplicationException
{
Date von = (Date) getVondatum().getValue();
Date bis = (Date) getBisdatum().getValue();
if (von == null)
{
throw new ApplicationException("Bitte Von Datum eingeben!");
}
if (bis == null)
{
throw new ApplicationException("Bitte Bis Datum eingeben!");
}
if (von.after(bis))
{
throw new ApplicationException("Von Datum ist nach Bis Datum!");
}
}
}
3 changes: 3 additions & 0 deletions src/de/jost_net/JVerein/gui/view/BuchungslisteView.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,11 @@ public void bind() throws Exception
right.addLabelPair("Von Datum", control.getVondatum());
right.addLabelPair("Bis Datum", control.getBisdatum());
right.addLabelPair("Enthaltener Text", control.getSuchtext());
right.addLabelPair("Mitglied Name", control.getMitglied());

ButtonArea buttons1 = new ButtonArea();
buttons1.addButton(control.getZurueckButton());
buttons1.addButton(control.getVorButton());
Button reset = new Button("Filter-Reset", new Action()
{
@Override
Expand Down

0 comments on commit 43827a8

Please sign in to comment.