Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature/automatische verbuchung von steuern #65

20 changes: 16 additions & 4 deletions src/de/jost_net/JVerein/gui/action/BuchungDeleteAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import java.rmi.RemoteException;

import de.jost_net.JVerein.Messaging.BuchungMessage;
import de.jost_net.JVerein.io.SplitbuchungsContainer;
import de.jost_net.JVerein.rmi.Buchung;
import de.jost_net.JVerein.rmi.Jahresabschluss;
import de.jost_net.JVerein.util.JVDateFormatTTMMJJJJ;
Expand Down Expand Up @@ -107,15 +108,26 @@ else if (context instanceof Buchung[])
}
else if (splitbuchung)
{
bu.setDelete(true);
Application.getMessagingFactory().sendMessage(new BuchungMessage(bu));
count++;
if (bu.getDependencyId() == -1) {
bu.setDelete(true);
Application.getMessagingFactory().sendMessage(new BuchungMessage(bu));
count++;
}
else {
for (Buchung buchung_tmp : SplitbuchungsContainer.get()) {
if (buchung_tmp.getDependencyId() == bu.getDependencyId()) {
buchung_tmp.setDelete(true);
Application.getMessagingFactory().sendMessage(new BuchungMessage(buchung_tmp));
count++;
}
}
}
}
}
if (count > 0)
{
GUI.getStatusBar().setSuccessText(
String.format("%d Buchung" + (b.length != 1 ? "en" : "")
String.format("%d Buchung" + (count != 1 ? "en" : "")
+ " gel�scht.", count));
}
else
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/**********************************************************************
* 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.action;

import java.util.Date;

import de.jost_net.JVerein.gui.dialogs.BuchungenMitgliedskontenZuordnungDialog;
import de.willuhn.jameica.gui.Action;
import de.willuhn.jameica.gui.GUI;
import de.willuhn.jameica.gui.input.DateInput;
import de.willuhn.jameica.system.OperationCanceledException;
import de.willuhn.logging.Logger;
import de.willuhn.util.ApplicationException;

public class BuchungMitgliedskontoZuordnungAutomatischAction implements Action
{
private DateInput vondatum;
private DateInput bisdatum;

public BuchungMitgliedskontoZuordnungAutomatischAction(DateInput vondatum, DateInput bisdatum) {
this.vondatum = vondatum;
this.bisdatum = bisdatum;
}

/**
* @see de.willuhn.jameica.gui.Action#handleAction(java.lang.Object)
*/
@Override
public void handleAction(Object context) throws ApplicationException
{
try
{
BuchungenMitgliedskontenZuordnungDialog d = new BuchungenMitgliedskontenZuordnungDialog((Date)vondatum.getValue(), (Date)bisdatum.getValue());
d.open();
}
catch (OperationCanceledException oce)
{
Logger.info(oce.getMessage());
}
catch (ApplicationException ae)
{
throw ae;
}
catch (Exception e)
{
Logger.error("error while assign transfers to members", e);
GUI.getStatusBar().setErrorText("Fehler beim Zuordnen von Buchungen zu Mitgliedskonten");
}
}

}
130 changes: 112 additions & 18 deletions src/de/jost_net/JVerein/gui/control/BuchungsControl.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package de.jost_net.JVerein.gui.control;

import java.io.File;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.rmi.RemoteException;
import java.text.ParseException;
import java.util.ArrayList;
Expand All @@ -37,6 +39,7 @@
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.BuchungMitgliedskontoZuordnungAutomatischAction;
import de.jost_net.JVerein.gui.dialogs.BuchungsjournalSortDialog;
import de.jost_net.JVerein.gui.dialogs.SammelueberweisungAuswahlDialog;
import de.jost_net.JVerein.gui.formatter.BuchungsartFormatter;
Expand All @@ -54,8 +57,10 @@
import de.jost_net.JVerein.io.BuchungsjournalPDF;
import de.jost_net.JVerein.io.SplitbuchungsContainer;
import de.jost_net.JVerein.io.Adressbuch.Adressaufbereitung;
import de.jost_net.JVerein.keys.ArtBuchungsart;
import de.jost_net.JVerein.keys.BuchungsartSort;
import de.jost_net.JVerein.keys.SplitbuchungTyp;
import de.jost_net.JVerein.keys.SteuersatzBuchungsart;
import de.jost_net.JVerein.keys.Zahlungsweg;
import de.jost_net.JVerein.rmi.Buchung;
import de.jost_net.JVerein.rmi.Buchungsart;
Expand Down Expand Up @@ -163,6 +168,8 @@ public class BuchungsControl extends AbstractControl

private Buchung buchung;

private ArrayList<Buchung> dependent_buchungen;

private Button sammelueberweisungButton;

private BuchungQuery query;
Expand Down Expand Up @@ -197,6 +204,58 @@ public Buchung getBuchung() throws RemoteException
return buchung;
}

public void fillBuchung(Buchung b) throws ApplicationException, RemoteException
{
b.setBuchungsart(getSelectedBuchungsArtId());
b.setProjektID(getSelectedProjektId());
b.setKonto(getSelectedKonto());
b.setAuszugsnummer(getAuszugsnummerWert());
b.setBlattnummer(getBlattnummerWert());
b.setName((String) getName().getValue());
if (getBetrag().getValue() != null)
{
b.setBetrag((Double) getBetrag().getValue());
}
b.setZweck((String) getZweck().getValue());
b.setDatum((Date) getDatum().getValue());
b.setArt((String) getArt().getValue());
b.setVerzicht((Boolean) getVerzicht().getValue());
b.setMitgliedskonto(getSelectedMitgliedsKonto(b));
b.setKommentar((String) getKommentar().getValue());
}

public ArrayList<Buchung> getDependentBuchungen() throws RemoteException
{
if (dependent_buchungen != null)
{
return dependent_buchungen;
}

// Falls noch nichts erzeugt wurde, neue Liste erzeugen und DependencyId setzen!
dependent_buchungen = new ArrayList<Buchung>();
if (getBuchung().getDependencyId() == -1) {
Buchung new_dependent_buchung = (Buchung) Einstellungen.getDBService()
.createObject(Buchung.class, null);
getBuchung().setDependencyId(SplitbuchungsContainer.getNewDependencyId());
new_dependent_buchung.setDependencyId(getBuchung().getDependencyId());
dependent_buchungen.add(new_dependent_buchung);
}
// Falls DependencyId vorhanden ist, alle anderen Elemente mit gleicher Id raussuchen
else {
int pos_b = SplitbuchungsContainer.get().indexOf(getBuchung());
for (Buchung b_tmp : SplitbuchungsContainer.get()) {
if (b_tmp.getDependencyId() == getBuchung().getDependencyId() &&
SplitbuchungsContainer.get().indexOf(b_tmp) != pos_b) {
dependent_buchungen.add(b_tmp);
}
}
}
if (dependent_buchungen.size() == 0) {
throw new RemoteException("Buchungen mit Id " + getBuchung().getDependencyId() + " konnten nicht gefunden werden!");
}
return dependent_buchungen;
}

public Input getID() throws RemoteException
{
if (id != null)
Expand Down Expand Up @@ -726,6 +785,13 @@ public void handleAction(Object context)
return b;
}

public Button getStarteBuchungMitgliedskontoZuordnungAutomatischButton()
{
Button b = new Button("Zuordnung", new BuchungMitgliedskontoZuordnungAutomatischAction(getVondatum(), getBisdatum()), null, false,
"user-friends.png");
return b;
}

public Button getStartAuswertungBuchungsjournalButton()
{
Button b = new Button("PDF Buchungsjournal", new Action()
Expand All @@ -745,23 +811,7 @@ private void handleStore() throws ApplicationException
try
{
Buchung b = getBuchung();

b.setBuchungsart(getSelectedBuchungsArtId());
b.setProjektID(getSelectedProjektId());
b.setKonto(getSelectedKonto());
b.setAuszugsnummer(getAuszugsnummerWert());
b.setBlattnummer(getBlattnummerWert());
b.setName((String) getName().getValue());
if (getBetrag().getValue() != null)
{
b.setBetrag((Double) getBetrag().getValue());
}
b.setZweck((String) getZweck().getValue());
b.setDatum((Date) getDatum().getValue());
b.setArt((String) getArt().getValue());
b.setVerzicht((Boolean) getVerzicht().getValue());
b.setMitgliedskonto(getSelectedMitgliedsKonto(b));
b.setKommentar((String) getKommentar().getValue());
fillBuchung(b);

if (b.getSpeicherung())
{
Expand All @@ -771,7 +821,50 @@ private void handleStore() throws ApplicationException
}
else
{
SplitbuchungsContainer.add(b);
Buchungsart b_art = b.getBuchungsart();
if (b_art.getSteuersatz() > 0) {
Buchung b_steuer = getDependentBuchungen().get(0);
fillBuchung(b_steuer);

BigDecimal steuer = new BigDecimal(
Double.toString(b.getBetrag() * b_art.getSteuersatz() / 100))
.setScale(2, RoundingMode.HALF_UP);
String zweck_postfix = " - " + SteuersatzBuchungsart.get(b_art.getSteuersatz());
switch (b_art.getArt()) {
case ArtBuchungsart.AUSGABE:
zweck_postfix += " VSt.";
break;
case ArtBuchungsart.EINNAHME:
zweck_postfix += " MwSt.";
break;
default:
zweck_postfix += " USt.";
break;
}

b_steuer.setBuchungsart(new Long(b_art.getSteuerBuchungsart().getID()));
b_steuer.setBetrag(steuer.doubleValue());
b_steuer.setZweck(b.getZweck() + zweck_postfix);
b_steuer.setSplitId(b.getSplitId());
b_steuer.setSplitTyp(SplitbuchungTyp.SPLIT);

SplitbuchungsContainer.add(b);
SplitbuchungsContainer.add(b_steuer);
}
else {
// Falls vorher abh�ngige Buchungen erzeugt wurden, nun dies aber durch �ndern der Buchungsart o.�. aufgehoben wird,
// alle abh�ngigen Buchungen l�schen und Abh�ngigkeit resetten
if (b.getDependencyId() != -1) {
for (Buchung b_tmp : getDependentBuchungen()) {
b_tmp.setDependencyId(-1);
b_tmp.setDelete(true);
Application.getMessagingFactory().sendMessage(new BuchungMessage(b_tmp));
}
b.setDependencyId(-1);
}
SplitbuchungsContainer.add(b);
}

refreshSplitbuchungen();
GUI.getStatusBar().setSuccessText("Buchung �bernommen");
}
Expand Down Expand Up @@ -1007,6 +1100,7 @@ public String format(Object o)
buchungsList.addColumn("Blatt", "blattnummer");

buchungsList.addColumn("Name", "name");
buchungsList.addColumn("IBAN oder Kontonummer", "iban");
buchungsList.addColumn("Verwendungszweck", "zweck", new Formatter()
{
@Override
Expand Down
Loading