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

Sollbuchungen zusammenfassen, Rechnung überarbeitet #547

Merged
merged 57 commits into from
Jan 20, 2025

Conversation

lenilsas
Copy link

Wie in #513 besprochen habe ich den Workflow bei den Rechnungen überarbeitet.

  • Bei der Abrechnung gibt es jetzt zusätzliche Optionen
    • "Sollbuchungen zusammenfassen". Hier werden alle Sollbuchungen zu einer zusammengefasst
    • "Rechnungen erstellen". Für jede Sollbuchung wird eine Rechnung erstellt
    • "Rechnung Formular". Das zu verwendende Rechnungsformular
    • "Rechnung Text". Bei Rechnungserstellung wird dieser Text für den Verwendungszweck der Sollbuchung verwendet
  • Es gibt eine neue Tabelle "Sollbuchungspositionen" in der alle Positionen (Zusatzbeträge, (Sekundäre-)Beiträge) zu einer Sollbuchung gespeichert werden.
  • Bei Lastschriften werden automatisch Splitbuchungen (Istbuchungen) für die Zusammengefassten Sollbuchungen erstellt.
  • Die RechnungMap habe ich überarbeitet.
    • Ist und Differenz ist nicht mehr auf Positionsebene sondern nur auf Rechnugsebene verwendbar
    • Zahlungsgrund1 und Zahlungsgrund2 habe ich entfernt, da identisch mit Verwendungszweck bzw. leer (Es wird trotzdem noch gefüllt, aber als deprecated markiert)
    • Die Mapeinträge habe ich von mitgliedskonto-... zu rechnung-... umbenannt, die alten sind noch als deprecated vorhanden
  • In der RechnungsView werden nun auch Ist, Differenz und Zahlungsweg angezeigt werden
  • Rechnungssuche habe ich auch für Namensteile erlaubt

Außerdem habe ein folgende Änderungen gemacht die nicht direkt mit der Rechnung zusammenhängen

  • Beim Buchung getAbrechnungslauf wurde immer der Cache neu generiet statt nur die ID zu holen
  • Beim Cache habe ich eint touch() hinzugefügt, da sonst der Cache immer neu erstellt wird wenn das Erstellen des Caches länger als 10Sekunden dauert

Ein Paar Änderungen fehlen noch

  • Im Abrechnugnsvew müssen die neuen Felder dissabled werden wenn nicht verwendbar. Es ist die Frage ob "kompakte Abbuchung" und "Sollbuchungen zusammenfassen" zu einer Option zusammengefasst werde sollen.
  • Das Manuelle erstellen von Rechnungen ist noch nicht möglich
  • Das Automatisch erstellen der Rechnungen muss aus der RechnungView entfernt werden, da das nichtmehr dem aktuellen vorgehen entspricht
  • Der Mitgliedskonto Export muss überarbeitet werden
  • Manche Informationen werden aktuell doppelt gespeichert in Sollbuchungen und in Rechnungen. Man könnte aus der Rechnung Mitglied, Betrag und Zahlungsweg entfernen. Aus der Sollbuchung könnten Buchungsart und Buchungsklasse enternt werden (Da schon in den Sollbuchungspositionen enthalten)
  • Der Zähler bei den Formularen ist nicht mehr wirklich nötig, zumindes für Rechnungen da hier die Rechnungsnummer verwendet werden kann
    -Die AbrechnungslaufView müssen noch die neuen Parameter angezeigt werden

Gerne würde ich von euch schon mal hören, was ihr von dem aktuellen Stand haltet

@JohannMaierhofer
Copy link

Ich finde diese Lösung gut.

Das automatisch erstellen der Rechnungen aus dem RechnungView könnte man lassen, aber so abändern, dass es Rechnungen erstellt für Sollbuchungen die noch keine Rechnung haben. Also ähnlich wie das manuelle erstellen der Rechnung, nur halt für alle die die Filterkriterien erfüllen und noch keine Rechnung haben.

Folgendes ist mir beim kurzen rumspielen aufgefallen:

  • In der Sollbuchung ist bei den Sollbuchungspositionen die Spalte Buchungsklasse sichtbar. Sie erscheint doppelt wenn man SKR42 aktiviert.
  • Bei Lastschriften ist der Betrag bei der Gegenbuchung immer 0.
  • Hat die Sollbuchung nur einen Eintrag wird in der generierten Buchung die Buchungsart und Buchungsklasse nicht gesetzt.
  • Bei den generierten Splitbuchungen denke ich baucht man die Haupt- und Gegenbuchung nicht der Sollbuchung zuzuweisen. Das irritiert im Kontoauszug.
  • Beim Verwendungszweck in den erzeugten Splitbuchungen würde ich nicht den Zweck aus der Sollbuchung setzen sondern den aus den Sollbuchungspositionen. Auf die bezieht sich ja die Buchung. Den aus der Sollbuchung könnte man nur bei Splitbuchungen für die Haupt- und Gegenbuchung setzen.
  • Die Buchungsart und Buchungsklasse bräuchte man eigentlich nicht mehr in der Sollbuchung da sie in den Sollbuchungspositionen ist. Die Frage ist höchstens ob man Sollbuchungen ohne Positionen unterstützen will, so wie es momentan ist, wenn man manuell eine Sollbuchung erzeugt. Soll das so bleiben oder wird es da eine Möglichkeit geben Sollbuchungspositionen zu erzeugen?
  • In die gleiche Richtung geht, wenn man eine Buchung einer Sollbuchung zuordnen will und im Dialog in der zweiten Lasche ein Mitglied auswählt. Dann wird eine Sollbuchung ohne Sollbuchungsposition erzeugt. Sollte hier auch eine Sollbuchungsposition erzeugt werden?
  • Bei der Zuordnung einer Buchung zu einer vorhandenen Sollbuchung wird heute die Buchungsart und Buchungsklasse von der Sollbuchung übernommen wenn sie noch nicht in der Buchung gesetzt ist. Wenn man jetzt bei Überweisung die einzelnen Splitbuchungen zuweist wird momentan aus der Sollbuchung kopiert. Da ist aber nach der Abrechnung nichts gesetzt und evtl. kommt es ja weg. Eigentlich müsste man jetzt bei der Zuweisung die Sollbuchungspositionen auswählen können um die richtigen Buchungsarten und Buchungsklassen zu kopieren. Oder wir lassen dieses Feature halt weg, wobei es aber praktisch war.

@JohannMaierhofer JohannMaierhofer changed the title Soolbuchungn zusammenfassen, Rechnung überarbeitet Sollbuchungen zusammenfassen, Rechnung überarbeitet Dec 21, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
@lenilsas
Copy link
Author

  • In der Sollbuchung ist bei den Sollbuchungspositionen die Spalte Buchungsklasse sichtbar. Sie erscheint doppelt wenn man SKR42 aktiviert.

entfernt

  • Bei Lastschriften ist der Betrag bei der Gegenbuchung immer 0.

behoben

  • Hat die Sollbuchung nur einen Eintrag wird in der generierten Buchung die Buchungsart und Buchungsklasse nicht gesetzt.

geändert

  • Bei den generierten Splitbuchungen denke ich baucht man die Haupt- und Gegenbuchung nicht der Sollbuchung zuzuweisen. Das irritiert im Kontoauszug.

geändert

  • Beim Verwendungszweck in den erzeugten Splitbuchungen würde ich nicht den Zweck aus der Sollbuchung setzen sondern den aus den Sollbuchungspositionen. Auf die bezieht sich ja die Buchung. Den aus der Sollbuchung könnte man nur bei Splitbuchungen für die Haupt- und Gegenbuchung setzen.

Ich habe es bisher so umgesetzt, dass die Splitbuchungen nach Buchungsart und Klasse gruppiert erstellt werden, also ggf. mehrere Sollbuchungspositonen eine Splitbuchung ergeben. Daher kann ich hier nicht den Zweck der einzelnen Sollbuchungsposition verwenden

  • Die Buchungsart und Buchungsklasse bräuchte man eigentlich nicht mehr in der Sollbuchung da sie in den Sollbuchungspositionen ist. Die Frage ist höchstens ob man Sollbuchungen ohne Positionen unterstützen will, so wie es momentan ist, wenn man manuell eine Sollbuchung erzeugt. Soll das so bleiben oder wird es da eine Möglichkeit geben Sollbuchungspositionen zu erzeugen?

Das ist die Frage ob man manuell Sollbuchungen und Sollbuchungspositionen erzeugen können soll, das haben wir ja auch schon wo anders diskutiert. Grundsätzlich denke ich sollten sie über den Abrechnungslauf erstellt werden und es ist kein manuelles erstellen nötig. Es kann jedoch fälle geben wo es sinnvoll wäre.

  • In die gleiche Richtung geht, wenn man eine Buchung einer Sollbuchung zuordnen will und im Dialog in der zweiten Lasche ein Mitglied auswählt. Dann wird eine Sollbuchung ohne Sollbuchungsposition erzeugt. Sollte hier auch eine Sollbuchungsposition erzeugt werden?

habe ich so umgesetzt das eine Sollbuchungsposition erzeugt wird.

  • Bei der Zuordnung einer Buchung zu einer vorhandenen Sollbuchung wird heute die Buchungsart und Buchungsklasse von der Sollbuchung übernommen wenn sie noch nicht in der Buchung gesetzt ist. Wenn man jetzt bei Überweisung die einzelnen Splitbuchungen zuweist wird momentan aus der Sollbuchung kopiert. Da ist aber nach der Abrechnung nichts gesetzt und evtl. kommt es ja weg. Eigentlich müsste man jetzt bei der Zuweisung die Sollbuchungspositionen auswählen können um die richtigen Buchungsarten und Buchungsklassen zu kopieren. Oder wir lassen dieses Feature halt weg, wobei es aber praktisch war.

Hier habe ich auch das automatische Spliten implementiert. Allerdings nur wenn eine Buchung einer Sollbuchung zugeordnet wird, bei allen SollbuchungsPositionen die Buchungsart gesetzt ist und die Beträge gleich sind.

@lenilsas lenilsas linked an issue Dec 27, 2024 that may be closed by this pull request
@JohannMaierhofer
Copy link

Ich bekomme jetzt eine Exception beim Abrechnungslauf:
[Sat Dec 28 10:33:01 CET 2024][ERROR][bg-task:][de.jost_net.JVerein.gui.control.AbrechnungSEPAControl$3.run] error during operation
java.lang.ClassCastException: class java.lang.Long cannot be cast to class java.lang.String (java.lang.Long and java.lang.String are in module java.base of loader 'bootstrap')
at de.jost_net.JVerein.server.SollbuchungPositionImpl.getBuchungsartId(SollbuchungPositionImpl.java:112)
at de.jost_net.JVerein.io.SplitbuchungsContainer.autoSplit(SplitbuchungsContainer.java:342)
at de.jost_net.JVerein.io.AbrechnungSEPA.writeSollbuchung(AbrechnungSEPA.java:1274)

Buchungsart und Buchungsklasse sollten ein Long sein so wie in MitgliedskontoImp.

@JohannMaierhofer
Copy link

Das ist die Frage ob man manuell Sollbuchungen und Sollbuchungspositionen erzeugen können soll, das haben wir ja auch schon wo anders diskutiert. Grundsätzlich denke ich sollten sie über den Abrechnungslauf erstellt werden und es ist kein manuelles erstellen nötig. Es kann jedoch fälle geben wo es sinnvoll wäre.

Ja, da sollten wir uns weitere Meinungen einholen.
Wenn es weiter gewünscht ist könnte ich das Erzeugen der Sollbuchungspositionen auch implementieren um dich zu entlasten.

@JohannMaierhofer
Copy link

Da bei der Sollbuchung die Buchungsart und Buchungsklasse noch bei alten Sollbuchungen ausgewertet wird müssen wir sie wohl belassen. Ich würde sie am GUI aber dann nur anzeigen wenn die Sollbuchung keine Sollbuchungspositionen hat.

@lenilsas
Copy link
Author

Buchungsart und Buchungsklasse sollten ein Long sein so wie in MitgliedskontoImp.

habe ich korrigiert, auch gleich beim JVereinZahler

@lenilsas
Copy link
Author

Da bei der Sollbuchung die Buchungsart und Buchungsklasse noch bei alten Sollbuchungen ausgewertet wird müssen wir sie wohl belassen. Ich würde sie am GUI aber dann nur anzeigen wenn die Sollbuchung keine Sollbuchungspositionen hat.

Ich überlege, ob ich per UpdateScript für alle bestehenden Sollbuchungen eine Sollbuchungsposition erstellen soll. Dan haben wir eine einheitliche Datengrundlage und müssen nicht die verschiedenen Versionen berücksichtigen. Das wäre dann allerdings ein Update das nicht rückgängig gemacht werden könnte (es sei den man lässt die Spalten vorerst in der DB bestehen ohne sie zu nutzen.)

@JohannMaierhofer
Copy link

Ich überlege, ob ich per UpdateScript für alle bestehenden Sollbuchungen eine Sollbuchungsposition erstellen soll. Dan haben wir eine einheitliche Datengrundlage und müssen nicht die verschiedenen Versionen berücksichtigen. Das wäre dann allerdings ein Update das nicht rückgängig gemacht werden könnte (es sei den man lässt die Spalten vorerst in der DB bestehen ohne sie zu nutzen.)

Ich habe das gleiche Problem mit der Anlagenkonto Checkbox beim Konto. Das boolean ist jetzt durch ein Integer ersetzt. Ich habe das boolean flag auch gelöscht. So kann man nicht mehr zurück. Ich müsste das Flag auch belassen.

Ich habe das in #482 kommentiert.

@JohannMaierhofer
Copy link

JohannMaierhofer commented Dec 29, 2024

Ich habe noch einige Probleme entdeckt:

  • Wenn ein Mitglied B im Familienverband bei Zahlung auf Vollzahler A konfiguriert ist werden alle Sollbuchungen bei A eingetragen. Das gilt aber nur für Lastschriften. Bei den Sollbuchungen müssen sie dem richtigen Mitglied zugeordnet werden. Die Gruppierung muss also bei Lastschriften anders sein als bei den Sollbuchungen. Wer eigentlich die Rechnung bekommen soll war ja noch offen. A würde halt zwei Rechnungen bekommen wenn man sie dem Zahler schickt. Da bräuchte man aber noch das Feature Spendenbescheinigung auf Zahler ausstellen #493. Ansonsten bekommt halt B die Rechnung.
  • Beim Zweck in der Lastschrift an A sieht man nur beim Beitrag dass er für B ist. Beim Zusatzbetrag fehlt die Info dass er für B ist.
  • Beim Autosplit beim Zuweisen einer Sollbuchung wird nicht geprüft ob die Buchung Teil einer Splitbuchung ist. In dem Fall dürfte man keine neue Splitbuchung erzeugen sondern müsste die Buchung durch die gesplitteten Buchungen innerhalb der vorhandenen Splitbuchung ersetzen. Momentan gibt es eine Exception. Das tritt ein wenn im Fall oben A und B per Überweisung bezahlen. Dann zahlt A die gesamte Summe. Diese muss ich splitten in den Teil für A und für B. Wenn ich dann die Sollbuchung den gesplitteten Beträgen zuweise versucht der AutoSplit wieder zu splitten wenn der gesplitte Betrag der Sollbuchung entspricht.

tolot27
tolot27 previously approved these changes Jan 18, 2025
@JohannMaierhofer
Copy link

JohannMaierhofer commented Jan 18, 2025

Es gibt noch einen Merge Konflikt. Aber dann haben wir es bald geschafft.

@tolot27 tolot27 dismissed stale reviews from JohannMaierhofer and themself via c9bf6a1 January 18, 2025 18:33
@tolot27
Copy link
Member

tolot27 commented Jan 18, 2025

Es gibt doch einen Merge Konflikt. Aber dann haben wir es bald geschafft.

Hab ich fix behoben.

Danke @lenilsas für diesen umfangreichen PR! 😄

@tolot27 tolot27 mentioned this pull request Jan 18, 2025
@tolot27
Copy link
Member

tolot27 commented Jan 18, 2025

@dippeal könntest du bitte approven? Durch meinen ergänzenden PR habe ich mich selbst als zweiten Reviewer rausgekickt.

@tolot27 tolot27 requested a review from dippeal January 18, 2025 21:47
@dippeal
Copy link
Member

dippeal commented Jan 19, 2025

@dippeal könntest du bitte approven? Durch meinen ergänzenden PR habe ich mich selbst als zweiten Reviewer rausgekickt.

Ich schaue es mir an.

@dippeal
Copy link
Member

dippeal commented Jan 19, 2025

@lenilsas Folgendes ist mir aufgefallen:

  1. Abrechnungslauf - Rechnung Text: Magst du dort alle Formular Variablen zulassen. Aktuell scheint nur $rechnung_nummer ersetzt zu werden
  2. Sollbuchungspositionen: Ist es gewollt, dass die Update Datei mit Nr Update0457 die Update0456 überspringt (ich musste die 0457 umbenennen, damit ich die Sollbuchungspositionen Tabelle bekomme) - Wird hier auf ein anderen PR gewartet? (Dann bitte label "blocked" verwenden)
  3. Ich weiß nicht genau ob die Familienbeträge mit Vollzahler und ggf. Sekundärbeitragsgruppe korrekt gerechnet werden. Irgendwie ergab sich nicht das erwartete. Vielleicht hatte ich aber auch ungünstige Kombinationen/Einstellungen. Bitte mal prüfen.

@lenilsas
Copy link
Author

@lenilsas Folgendes ist mir aufgefallen:

  1. Abrechnungslauf - Rechnung Text: Magst du dort alle Formular Variablen zulassen. Aktuell scheint nur $rechnung_nummer ersetzt zu werden

Es werden alle Variablen ersetzt:

          zweck = param.rechnungstext;
          boolean ohneLesefelder = !zweck.contains(Einstellungen.LESEFELD_PRE);
          Map<String, Object> map = new AllgemeineMap().getMap(null);
          map = new MitgliedMap().getMap((Mitglied) adress, map,
              ohneLesefelder);
          map = new RechnungMap().getMap(re, map);
          map = new AbrechnungsParameterMap().getMap(param, map);

Bei welchen funktioniert es bei dir nicht?

  1. Sollbuchungspositionen: Ist es gewollt, dass die Update Datei mit Nr Update0457 die Update0456 überspringt (ich musste die 0457 umbenennen, damit ich die Sollbuchungspositionen Tabelle bekomme) - Wird hier auf ein anderen PR gewartet? (Dann bitte label "blocked" verwenden)

Durch #561 existiert bereits das Update0456 in master, wenn wir diesen PR Mergen dann ist die Nummer fortlaufend.

  1. Ich weiß nicht genau ob die Familienbeträge mit Vollzahler und ggf. Sekundärbeitragsgruppe korrekt gerechnet werden. Irgendwie ergab sich nicht das erwartete. Vielleicht hatte ich aber auch ungünstige Kombinationen/Einstellungen. Bitte mal prüfen.

Ich habe es nochmal geprüft, meiner Meinung nach ist da alles richtig.

@dippeal
Copy link
Member

dippeal commented Jan 20, 2025

Bei mir werden die Variablen in der Sollbuchungen-Liste nicht ersetzt. Auch die Berechnung der Steuern fehlt nun:
image
image

Produktion (OpenJVerein 2.8.23):
image

@lenilsas
Copy link
Author

Beim ersetzen der Parameter ist es wie überall in JVerein dass diese nicht direkt danach ein Zeichen haben dürfen,sonst müssen sie in {} geschrieben werden. In deinem Fall müsstest du "RE$rechnung_nummer ${aktuellesjahr}-$zaehler" verwenden.
Das mit der Steuer schaue ich mir nochmal an. Ich dachte die wurde auch bisher nicht automatisch erstellt, ab da irre ich mich anscheinend.

@lenilsas
Copy link
Author

Jetzt Verstehe ich wo du die Steuer meinst. Ich habe ja geändert, dass die Sollbuchungen Sollbuchungspositionen enthalten, die Steuer wird nun bei der Sollbuchungsposition statt bei der Sollbuchung gespeichert, daher ist es in dieser View nicht zu sehen. Ich hatte jedoch vergessen die Spalten dort zu entfernen.

@lenilsas
Copy link
Author

Ich habe jetzt die spalten entfernt, außerdem habe ich das Sollbuchungsmenü hinzugefügt, so wie es auch bei der normalen SollbuchungView vorhanden ist.

@JohannMaierhofer
Copy link

Ich habe jetzt die spalten entfernt, außerdem habe ich das Sollbuchungsmenü hinzugefügt, so wie es auch bei der normalen SollbuchungView vorhanden ist.

Aber der doppelklick führt zum Mitglied und nicht zu Bearbeiten!

@JohannMaierhofer
Copy link

Ich habe jetzt die spalten entfernt,

Vielleicht sollte man die Spalten dann bei den Sollbuchungspositionen einbauen.

@lenilsas
Copy link
Author

Ich habe jetzt die spalten entfernt,

Vielleicht sollte man die Spalten dann bei den Sollbuchungspositionen einbauen.

Habe ich beides gemacht

@lenilsas lenilsas merged commit 22dd3d3 into openjverein:master Jan 20, 2025
2 checks passed
@lenilsas lenilsas deleted the rechnung_neu branch January 20, 2025 19:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Workflow Rechnungen OhneAbbucher Filter Handling bei Rechnungen
4 participants