diff --git a/src/de/jost_net/JVerein/gui/action/MitgliedLastschriftAction.java b/src/de/jost_net/JVerein/gui/action/MitgliedLastschriftAction.java index 1b7dbfe10..cfcee8c16 100644 --- a/src/de/jost_net/JVerein/gui/action/MitgliedLastschriftAction.java +++ b/src/de/jost_net/JVerein/gui/action/MitgliedLastschriftAction.java @@ -24,7 +24,6 @@ import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.io.Adressbuch.Adressaufbereitung; -import de.jost_net.JVerein.keys.ArtBeitragsart; import de.jost_net.JVerein.keys.Zahlungsweg; import de.jost_net.JVerein.rmi.Mitglied; import de.willuhn.jameica.gui.Action; @@ -45,7 +44,7 @@ public void handleAction(Object context) throws ApplicationException { if (context == null || !(context instanceof Mitglied)) { - throw new ApplicationException("kein Mitglied ausgewählt"); + throw new ApplicationException("Kein Mitglied ausgewählt"); } Mitglied m = null; // Mitglied Mitglied mZ = null; // Zahler @@ -55,8 +54,7 @@ public void handleAction(Object context) throws ApplicationException m = (Mitglied) context; // pruefe wer der Zahler ist - if (m.getBeitragsgruppe() != null - && m.getBeitragsgruppe().getBeitragsArt() == ArtBeitragsart.FAMILIE_ANGEHOERIGER) + if (m.getZahlungsweg() == Zahlungsweg.VOLLZAHLER && m.getZahlerID() != null) { // Mitglied ist Familienangehoeriger, hat also anderen Zahler mZ = (Mitglied) Einstellungen.getDBService().createObject( diff --git a/src/de/jost_net/JVerein/gui/action/PersonalbogenAction.java b/src/de/jost_net/JVerein/gui/action/PersonalbogenAction.java index 1c18421d9..b08252fec 100644 --- a/src/de/jost_net/JVerein/gui/action/PersonalbogenAction.java +++ b/src/de/jost_net/JVerein/gui/action/PersonalbogenAction.java @@ -323,12 +323,12 @@ private void generiereMitglied(Reporter rpt, Mitglied m) } } if (m.getBeitragsgruppe() - .getBeitragsArt() == ArtBeitragsart.FAMILIE_ZAHLER) + .getBeitragsArt() != ArtBeitragsart.FAMILIE_ANGEHOERIGER) { DBIterator itbg = Einstellungen.getDBService() .createList(Mitglied.class); itbg.addFilter("zahlerid = ?", m.getID()); - rpt.addColumn("Zahler für", Element.ALIGN_LEFT); + rpt.addColumn("Vollzahler mit Angehörigen", Element.ALIGN_LEFT); String zahltfuer = ""; while (itbg.hasNext()) { @@ -346,7 +346,7 @@ else if (m.getBeitragsgruppe() { Mitglied mfa = (Mitglied) Einstellungen.getDBService() .createObject(Mitglied.class, m.getZahlerID() + ""); - rpt.addColumn("Zahler", Element.ALIGN_LEFT); + rpt.addColumn("Vollzahlendes Familienmitglied", Element.ALIGN_LEFT); rpt.addColumn(Adressaufbereitung.getNameVorname(mfa), Element.ALIGN_LEFT); } diff --git a/src/de/jost_net/JVerein/gui/boxes/MitgliedNextBGruppeChecker.java b/src/de/jost_net/JVerein/gui/boxes/MitgliedNextBGruppeChecker.java index 9d577ff25..bc9860d3d 100644 --- a/src/de/jost_net/JVerein/gui/boxes/MitgliedNextBGruppeChecker.java +++ b/src/de/jost_net/JVerein/gui/boxes/MitgliedNextBGruppeChecker.java @@ -22,6 +22,8 @@ import org.eclipse.swt.widgets.Composite; import de.jost_net.JVerein.Einstellungen; +import de.jost_net.JVerein.keys.ArtBeitragsart; +import de.jost_net.JVerein.keys.Zahlungsweg; import de.jost_net.JVerein.rmi.Beitragsgruppe; import de.jost_net.JVerein.rmi.Mitglied; import de.jost_net.JVerein.rmi.MitgliedNextBGruppe; @@ -289,6 +291,14 @@ private void aenderBeitragsGruppe(MitgliedNextBGruppe mitgliedBeitraege) { Mitglied mitglied = mitgliedBeitraege.getMitglied(); Beitragsgruppe beitragsGruppe = mitgliedBeitraege.getBeitragsgruppe(); + //Wenn es bisher ein angehöriger war und jetzt nicht mehr zahlerid entfernen + if(mitglied.getBeitragsgruppe().getBeitragsArt() == ArtBeitragsart.FAMILIE_ANGEHOERIGER && beitragsGruppe.getBeitragsArt() != ArtBeitragsart.FAMILIE_ANGEHOERIGER) + { + mitglied.setZahlerID(null); + //Bei Zahlung über Vollzahler Zahlungsweg umstellen + if(mitglied.getZahlungsweg() == Zahlungsweg.VOLLZAHLER) + mitglied.setZahlungsweg(Einstellungen.getEinstellung().getZahlungsweg()); + } mitglied.setBeitragsgruppe(Integer.valueOf(beitragsGruppe.getID())); mitglied.store(); mitgliedBeitraege.delete(); diff --git a/src/de/jost_net/JVerein/gui/control/FamilienbeitragNode.java b/src/de/jost_net/JVerein/gui/control/FamilienbeitragNode.java index bf9c2f435..d69c4b155 100644 --- a/src/de/jost_net/JVerein/gui/control/FamilienbeitragNode.java +++ b/src/de/jost_net/JVerein/gui/control/FamilienbeitragNode.java @@ -19,6 +19,8 @@ import java.rmi.RemoteException; import java.util.ArrayList; import java.util.Date; +import java.util.HashSet; +import java.util.Set; import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.io.Adressbuch.Adressaufbereitung; @@ -62,8 +64,25 @@ public FamilienbeitragNode(Input status) throws RemoteException this.children = new ArrayList<>(); DBIterator it = Einstellungen.getDBService() .createList(Beitragsgruppe.class); - it.addFilter("beitragsart = ?", - new Object[] { ArtBeitragsart.FAMILIE_ZAHLER.getKey() }); + it.addFilter("beitragsart != ?", + new Object[] { ArtBeitragsart.FAMILIE_ANGEHOERIGER.getKey() }); + + Set set = new HashSet(); + DBIterator angIt = Einstellungen.getDBService() + .createList(Mitglied.class); + angIt.addFilter("zahlerid is not null and zahlerid != 0"); + if (status.getValue().equals("Angemeldet")) + angIt.addFilter("austritt is null"); + if (status.getValue().equals("Abgemeldet")) + angIt.addFilter("austritt is not null"); + while(angIt.hasNext()) + { + Mitglied a = angIt.next(); + if(!set.contains(a.getZahlerID().toString())) + { + set.add(a.getZahlerID().toString()); + } + } while (it.hasNext()) { Beitragsgruppe bg = it.next(); @@ -78,6 +97,9 @@ public FamilienbeitragNode(Input status) throws RemoteException while (it2.hasNext()) { Mitglied m = it2.next(); + //nur anzeigen wenn es angehörige gibt + if(!set.contains(m.getID())) + continue; FamilienbeitragNode fbn = new FamilienbeitragNode(this, m); children.add(fbn); } diff --git a/src/de/jost_net/JVerein/gui/control/MitgliedControl.java b/src/de/jost_net/JVerein/gui/control/MitgliedControl.java index 3b4b0611c..d33a3dbc5 100644 --- a/src/de/jost_net/JVerein/gui/control/MitgliedControl.java +++ b/src/de/jost_net/JVerein/gui/control/MitgliedControl.java @@ -567,14 +567,21 @@ public SelectInput getZahlungsweg() throws RemoteException { return zahlungsweg; } + ArrayList weg = Zahlungsweg.getArray(); + if(beitragsgruppe != null) + { + Beitragsgruppe bg = (Beitragsgruppe) beitragsgruppe.getValue(); + if(bg != null && bg.getBeitragsArt() != ArtBeitragsart.FAMILIE_ANGEHOERIGER) + weg.remove(new Zahlungsweg(Zahlungsweg.VOLLZAHLER)); + } if (getMitglied().getZahlungsweg() != null) { - zahlungsweg = new SelectInput(Zahlungsweg.getArray(), + zahlungsweg = new SelectInput(weg, new Zahlungsweg(getMitglied().getZahlungsweg().intValue())); } else { - zahlungsweg = new SelectInput(Zahlungsweg.getArray(), + zahlungsweg = new SelectInput(weg, new Zahlungsweg(Einstellungen.getEinstellung().getZahlungsweg())); } zahlungsweg.setName("Zahlungsweg"); @@ -625,6 +632,17 @@ public void handleEvent(Event event) }); return zahlungsweg; } + + private void refreshZahlungsweg() throws RemoteException + { + if(beitragsgruppe == null || zahlungsweg == null) + return; + ArrayList weg = Zahlungsweg.getArray(); + Beitragsgruppe bg = (Beitragsgruppe) beitragsgruppe.getValue(); + if(bg != null && bg.getBeitragsArt() != ArtBeitragsart.FAMILIE_ANGEHOERIGER) + weg.remove(new Zahlungsweg(Zahlungsweg.VOLLZAHLER)); + zahlungsweg.setList(weg); + } // Lösche alle Daten aus der Bankverbindungsmaske private void deleteBankverbindung() @@ -1073,7 +1091,7 @@ public void handleEvent(Event event) } } else if (bg != null - && bg.getBeitragsArt() == ArtBeitragsart.FAMILIE_ZAHLER) + && bg.getBeitragsArt() != ArtBeitragsart.FAMILIE_ANGEHOERIGER) { boolean ist_neu = getMitglied().getID() == null; getFamilienverband().setVisible(!ist_neu); @@ -1105,8 +1123,8 @@ else if (bg != null getZukuenftigeBeitraegeView().setVisible(true); } } - refreshFamilienangehoerigeTable(); + refreshZahlungsweg(); } catch (RemoteException e) @@ -1258,7 +1276,7 @@ public Input getZahler(boolean force) throws RemoteException // Beitragsgruppen ermitteln, die Zahler für andere Mitglieder sind DBIterator bg = Einstellungen.getDBService() .createList(Beitragsgruppe.class); - bg.addFilter("beitragsart = ?", ArtBeitragsart.FAMILIE_ZAHLER.getKey()); + bg.addFilter("beitragsart != ?", ArtBeitragsart.FAMILIE_ANGEHOERIGER.getKey()); while (bg.hasNext()) { if (cond.length() > 0) @@ -1271,7 +1289,8 @@ public Input getZahler(boolean force) throws RemoteException } DBIterator zhl = Einstellungen.getDBService() .createList(Mitglied.class); - zhl.addFilter(cond.toString()); + zhl.addFilter("(" + cond.toString() + ")"); + zhl.addFilter("id != ?",getMitglied().getID()); MitgliedUtils.setNurAktive(zhl); MitgliedUtils.setMitglied(zhl); zhl.setOrder("ORDER BY name, vorname"); @@ -1300,7 +1319,7 @@ public void handleEvent(Event event) try { Mitglied m = (Mitglied) zahler.getValue(); - if (m.getID() != null) + if (m != null && m.getID() != null) { getMitglied().setZahlerID(Long.valueOf(m.getID())); } @@ -1638,13 +1657,13 @@ public Part getFamilienangehoerigenTable() throws RemoteException public String format(Object o) { // Alle Familienmitglieder, die eine Zahler-ID eingetragen haben, sind - // nicht selbst das zahlende Mitglied. - // Der Eintrag ohne zahlerid ist also das zahlende Mitglied. + // nicht selbst das vollzahlende Mitglied. + // Der Eintrag ohne zahlerid ist also das vollzahlende Mitglied. Long m = (Long) o; if (m == null) return ""; else - return "beitragsbefreites Familienmitglied"; + return "Familienmitglied"; } }); diff --git a/src/de/jost_net/JVerein/gui/control/MitgliedNextBGruppeControl.java b/src/de/jost_net/JVerein/gui/control/MitgliedNextBGruppeControl.java index 7648d8e5c..f02f4430c 100644 --- a/src/de/jost_net/JVerein/gui/control/MitgliedNextBGruppeControl.java +++ b/src/de/jost_net/JVerein/gui/control/MitgliedNextBGruppeControl.java @@ -161,7 +161,7 @@ private boolean isFamilienMitglied() throws RemoteException { Mitglied mitglied = getMitglied(); Beitragsgruppe beitragsGruppe = mitglied.getBeitragsgruppe(); - return (beitragsGruppe.getBeitragsArt() == ArtBeitragsart.FAMILIE_ZAHLER); + return (beitragsGruppe.getBeitragsArt() == ArtBeitragsart.FAMILIE_ANGEHOERIGER); } public Input getBeitragsgruppeInput() throws RemoteException @@ -173,15 +173,10 @@ public Input getBeitragsgruppeInput() throws RemoteException DBIterator list = Einstellungen.getDBService() .createList(Beitragsgruppe.class); list.setOrder("ORDER BY bezeichnung"); - if (isFamilienMitglied()) + list.addFilter("sekundaer = 0"); + if (!isFamilienMitglied()) { - list.addFilter("beitragsart is not null"); - list.addFilter("beitragsart = ?", ArtBeitragsart.FAMILIE_ZAHLER.getKey()); - } - else - { - list.addFilter("beitragsart is null or beitragsart not in (?,?)", - ArtBeitragsart.FAMILIE_ZAHLER.getKey(), + list.addFilter("(beitragsart is null or beitragsart != ?)", ArtBeitragsart.FAMILIE_ANGEHOERIGER.getKey()); } beitragsgruppe = new SelectInput(list != null ? PseudoIterator.asList(list) : null, diff --git a/src/de/jost_net/JVerein/gui/dialogs/FamilienmitgliedEntfernenDialog.java b/src/de/jost_net/JVerein/gui/dialogs/FamilienmitgliedEntfernenDialog.java index decce5474..08025e385 100644 --- a/src/de/jost_net/JVerein/gui/dialogs/FamilienmitgliedEntfernenDialog.java +++ b/src/de/jost_net/JVerein/gui/dialogs/FamilienmitgliedEntfernenDialog.java @@ -25,6 +25,7 @@ import de.jost_net.JVerein.Messaging.FamilienbeitragMessage; import de.jost_net.JVerein.gui.control.FamilienbeitragNode; import de.jost_net.JVerein.gui.control.MitgliedControl; +import de.jost_net.JVerein.keys.Zahlungsweg; import de.jost_net.JVerein.rmi.Beitragsgruppe; import de.jost_net.JVerein.rmi.Mitglied; import de.willuhn.jameica.gui.Action; @@ -81,6 +82,8 @@ protected void paint(Composite parent) throws Exception LabelGroup lgBank = new LabelGroup(parent, "Bankverbindung"); lgBank.addLabelPair("IBAN", control.getIban()); lgBank.addLabelPair("BIC", control.getBic()); + LabelGroup lgZahlungsweg = new LabelGroup(parent, "Zahlungsweg"); + lgZahlungsweg.addLabelPair("Zahlungsweg", control.getZahlungsweg()); // lgBank.addLabelPair("Kontoinhaber", control.getKontoinhaber()); ButtonArea b = new ButtonArea(); b.addButton("Weiter", new Action() @@ -102,6 +105,9 @@ public void handleAction(Object context) // m.setKontoinhaber((String) control.getKontoinhaber().getValue()); m.setZahlerID(null); m.setLetzteAenderung(); + m.setIban(control.getIban().getValue().toString()); + m.setBic(control.getBic().getValue().toString()); + m.setZahlungsweg(((Zahlungsweg)control.getZahlungsweg().getValue()).getKey()); m.store(); Application.getMessagingFactory().sendMessage( new FamilienbeitragMessage(m)); diff --git a/src/de/jost_net/JVerein/gui/navigation/MyExtension.java b/src/de/jost_net/JVerein/gui/navigation/MyExtension.java index 3bc46df88..e9dbcf509 100644 --- a/src/de/jost_net/JVerein/gui/navigation/MyExtension.java +++ b/src/de/jost_net/JVerein/gui/navigation/MyExtension.java @@ -125,7 +125,7 @@ public void extend(Extendable extendable) DBIterator it = Einstellungen.getDBService() .createList(Beitragsgruppe.class); it.addFilter("beitragsart = ?", - new Object[] { ArtBeitragsart.FAMILIE_ZAHLER.getKey() }); + new Object[] { ArtBeitragsart.FAMILIE_ANGEHOERIGER.getKey() }); if (it.size() > 0) { mitglieder.addChild(new MyItem(mitglieder, "Familienbeitrag", diff --git a/src/de/jost_net/JVerein/gui/parts/Familienverband.java b/src/de/jost_net/JVerein/gui/parts/Familienverband.java index a384ca4bd..f6be32159 100644 --- a/src/de/jost_net/JVerein/gui/parts/Familienverband.java +++ b/src/de/jost_net/JVerein/gui/parts/Familienverband.java @@ -95,11 +95,11 @@ public void paint(Composite parent) throws RemoteException tab.setLayoutData(g); TabGroup tg1 = new TabGroup(tab, "Familienverband"); control.getFamilienangehoerigenTable().paint(tg1.getComposite()); - TabGroup tg2 = new TabGroup(tab, "Zahlendes Familienmitglied"); + TabGroup tg2 = new TabGroup(tab, "Vollzahlendes Familienmitglied"); // erstelle neuen zahler: (force == true) control.getZahler(true).setComment( - "Nur für Beitragsgruppenart: \"Familie: Angehörige\""); - tg2.addLabelPair("Zahler", control.getZahler()); + "Nur für Beitragsgruppenart: \"Familienangehörige\""); + tg2.addLabelPair("Vollzahler", control.getZahler()); if (gruppe != null) { @@ -132,7 +132,7 @@ public void setBeitragsgruppe(Beitragsgruppe gruppe) return; try { - if (gruppe.getBeitragsArt() == ArtBeitragsart.FAMILIE_ZAHLER) + if (gruppe.getBeitragsArt() != ArtBeitragsart.FAMILIE_ANGEHOERIGER) tab.setSelection(0); else if (gruppe.getBeitragsArt() == ArtBeitragsart.FAMILIE_ANGEHOERIGER) tab.setSelection(1); diff --git a/src/de/jost_net/JVerein/gui/view/AbstractMitgliedDetailView.java b/src/de/jost_net/JVerein/gui/view/AbstractMitgliedDetailView.java index 03ea911e7..7e117cebb 100644 --- a/src/de/jost_net/JVerein/gui/view/AbstractMitgliedDetailView.java +++ b/src/de/jost_net/JVerein/gui/view/AbstractMitgliedDetailView.java @@ -585,55 +585,25 @@ private void zeichneMitgliedschaft(Composite parentComposite, } // Wenn es mindestens eine Beitragsgruppe mit Beitragsart - // "Familie: Zahler" - // oder "Familie: Angehöriger" gibt, zeige Familienverband-Part. + // "Familienangehöriger" gibt, zeige Familienverband-Part. // Dieser Familien-Part soll über die komplette Breite angezeigt werden, // kann daher nicht im SimpleVerticalContainer angezeigt werden. DBIterator it = Einstellungen.getDBService() .createList(Beitragsgruppe.class); - it.addFilter("beitragsart = ? or beitragsart = ?", - ArtBeitragsart.FAMILIE_ZAHLER.getKey(), + it.addFilter("beitragsart = ?", ArtBeitragsart.FAMILIE_ANGEHOERIGER.getKey()); if (it.hasNext()) { - // Verstecke Familienverband wenn aktuelles Mitglied nicht Teil einer - // Familie ist. - if (isBeitragsGruppeFuerFamilieAktiv() == false) - { - control.getFamilienverband().setVisible(false); - } // Container lässt nur das Hinzufügen von Parts zu. // Aus diesem Grund ist Part Familienverband dynamisch: // Entweder wird der Familienverband angezeigt (setShow(true)) // oder ein leeres Composite (setShow(false)) container.addPart(control.getFamilienverband()); } - if (isBeitragsGruppeFuerZahlerAktiv() == false) - control.getZukuenftigeBeitraegeView().setVisible(false); container.addPart(control.getZukuenftigeBeitraegeView()); } } - private boolean isBeitragsGruppeFuerZahlerAktiv() throws RemoteException - { - Beitragsgruppe gruppe = control.getMitglied().getBeitragsgruppe(); - if (null == gruppe) - return false; - if (gruppe.getBeitragsArt() == ArtBeitragsart.FAMILIE_ANGEHOERIGER) - return false; - return true; - } - - private boolean isBeitragsGruppeFuerFamilieAktiv() throws RemoteException - { - Beitragsgruppe gruppe = control.getMitglied().getBeitragsgruppe(); - if (null == gruppe) - return false; - if (gruppe.getBeitragsArt() == ArtBeitragsart.NORMAL) - return false; - return true; - } - /** * Zeichnet GUI-Felder für Stammdaten. Wenn Kommunikationsdaten aktiviert * sind, werden drei Spalten angezeigt, ansonsten zwei. diff --git a/src/de/jost_net/JVerein/io/AbrechnungSEPA.java b/src/de/jost_net/JVerein/io/AbrechnungSEPA.java index 5aa265fd5..fe9ddd33b 100644 --- a/src/de/jost_net/JVerein/io/AbrechnungSEPA.java +++ b/src/de/jost_net/JVerein/io/AbrechnungSEPA.java @@ -42,7 +42,6 @@ import de.jost_net.JVerein.io.Adressbuch.Adressaufbereitung; import de.jost_net.JVerein.keys.Abrechnungsausgabe; import de.jost_net.JVerein.keys.Abrechnungsmodi; -import de.jost_net.JVerein.keys.ArtBeitragsart; import de.jost_net.JVerein.keys.Beitragsmodel; import de.jost_net.JVerein.keys.IntervallZusatzzahlung; import de.jost_net.JVerein.keys.Zahlungsrhythmus; @@ -341,7 +340,7 @@ private void abrechnenMitglieder(AbrechnungSEPAParam param, } } - list.setOrder("ORDER BY name, vorname"); + list.setOrder("ORDER BY zahlungsweg, name, vorname"); // Sätze im Resultset int count = 0; @@ -387,11 +386,19 @@ private JVereinZahler abrechnungMitgliederSub(AbrechnungSEPAParam param, Progres { Double betr = 0d; JVereinZahler zahler = null; + Mitglied mZahler = m; + if(m.getZahlungsweg() == Zahlungsweg.VOLLZAHLER) + { + if(m.getZahlerID() == null) + throw new ApplicationException( + "Kein Vollzahler vorhanden: " + m.getName() + ", " + m.getVorname()); + mZahler = Einstellungen.getDBService().createObject(Mitglied.class, m.getZahlerID().toString()); + } if (Einstellungen.getEinstellung() .getBeitragsmodel() == Beitragsmodel.FLEXIBEL) { - if (m.getZahlungstermin() != null - && !m.getZahlungstermin().isAbzurechnen(param.abrechnungsmonat)) + if (mZahler.getZahlungstermin() != null + && !mZahler.getZahlungstermin().isAbzurechnen(param.abrechnungsmonat)) { return zahler; } @@ -401,7 +408,7 @@ private JVereinZahler abrechnungMitgliederSub(AbrechnungSEPAParam param, Progres { betr = BeitragsUtil.getBeitrag( Einstellungen.getEinstellung().getBeitragsmodel(), - m.getZahlungstermin(), m.getZahlungsrhythmus().getKey(), bg, + mZahler.getZahlungstermin(), mZahler.getZahlungsrhythmus().getKey(), bg, param.stichtag, m.getEintritt(), m.getAustritt()); } catch (NullPointerException e) @@ -421,7 +428,7 @@ private JVereinZahler abrechnungMitgliederSub(AbrechnungSEPAParam param, Progres { return zahler; } - if (!checkSEPA(m, monitor)) + if (!checkSEPA(mZahler, monitor)) { return zahler; } @@ -441,54 +448,38 @@ private JVereinZahler abrechnungMitgliederSub(AbrechnungSEPAParam param, Progres writeMitgliedskonto(m, param.faelligkeit, primaer ? vzweck : bg.getBezeichnung(), betr, abrl, - m.getZahlungsweg() == Zahlungsweg.BASISLASTSCHRIFT, konto, + mZahler.getZahlungsweg() == Zahlungsweg.BASISLASTSCHRIFT, konto, bg.getBuchungsart()); - if (m.getZahlungsweg() == Zahlungsweg.BASISLASTSCHRIFT) + if (mZahler.getZahlungsweg() == Zahlungsweg.BASISLASTSCHRIFT) { try { zahler = new JVereinZahler(); - zahler.setPersonId(m.getID()); + zahler.setPersonId(mZahler.getID()); zahler.setPersonTyp(JVereinZahlerTyp.MITGLIED); zahler.setBetrag( BigDecimal.valueOf(betr).setScale(2, RoundingMode.HALF_UP)); - new BIC(m.getBic()); // Prüfung des BIC - zahler.setBic(m.getBic()); - new IBAN(m.getIban()); // Prüfung der IBAN - zahler.setIban(m.getIban()); - zahler.setMandatid(m.getMandatID()); - zahler.setMandatdatum(m.getMandatDatum()); + new BIC(mZahler.getBic()); // Prüfung des BIC + zahler.setBic(mZahler.getBic()); + new IBAN(mZahler.getIban()); // Prüfung der IBAN + zahler.setIban(mZahler.getIban()); + zahler.setMandatid(mZahler.getMandatID()); + zahler.setMandatdatum(mZahler.getMandatDatum()); zahler.setMandatsequence(MandatSequence.RCUR); zahler.setFaelligkeit(param.faelligkeit); - if (primaer) + if (primaer && m.getZahlungsweg() != Zahlungsweg.VOLLZAHLER) { - zahler.setVerwendungszweck(getVerwendungszweck2(m) + " " + vzweck); + zahler.setVerwendungszweck(getVerwendungszweck2(mZahler) + " " + vzweck); } else { zahler.setVerwendungszweck(bg.getBezeichnung()); } - if (m.getBeitragsgruppe() - .getBeitragsArt() == ArtBeitragsart.FAMILIE_ZAHLER) + if(m.getZahlungsweg() == Zahlungsweg.VOLLZAHLER) { - DBIterator angeh = Einstellungen.getDBService() - .createList(Mitglied.class); - angeh.addFilter("zahlerid = ?", m.getID()); - String an = ""; - int i = 0; - while (angeh.hasNext()) - { - Mitglied a = (Mitglied) angeh.next(); - if (i > 0) - { - an += ", "; - } - i++; - an += a.getVorname(); - } - zahler.setVerwendungszweck(zahler.getVerwendungszweck() + " " + an); + zahler.setVerwendungszweck(zahler.getVerwendungszweck() + " " + m.getVorname()); } - zahler.setName(m.getKontoinhaber(1)); + zahler.setName(mZahler.getKontoinhaber(1)); } catch (Exception e) { @@ -521,7 +512,12 @@ private void abbuchenZusatzbetraege(AbrechnungSEPAParam param, { continue; } - if (!checkSEPA(m, monitor)) + Mitglied mZahler = m; + if(m.getZahlungsweg() == Zahlungsweg.VOLLZAHLER) + { + mZahler = Einstellungen.getDBService().createObject(Mitglied.class, m.getZahlerID().toString()); + } + if (!checkSEPA(mZahler, monitor)) { continue; } @@ -538,24 +534,24 @@ private void abbuchenZusatzbetraege(AbrechnungSEPAParam param, { Logger.error("Fehler bei der Aufbereitung der Variablen", e); } - if (m.getZahlungsweg() == Zahlungsweg.BASISLASTSCHRIFT) + if (mZahler.getZahlungsweg() == Zahlungsweg.BASISLASTSCHRIFT) { try { JVereinZahler zahler = new JVereinZahler(); - zahler.setPersonId(m.getID()); + zahler.setPersonId(mZahler.getID()); zahler.setPersonTyp(JVereinZahlerTyp.MITGLIED); zahler.setBetrag(BigDecimal.valueOf(z.getBetrag()).setScale(2, RoundingMode.HALF_UP)); - new BIC(m.getBic()); - new IBAN(m.getIban()); - zahler.setBic(m.getBic()); - zahler.setIban(m.getIban()); - zahler.setMandatid(m.getMandatID()); - zahler.setMandatdatum(m.getMandatDatum()); + new BIC(mZahler.getBic()); + new IBAN(mZahler.getIban()); + zahler.setBic(mZahler.getBic()); + zahler.setIban(mZahler.getIban()); + zahler.setMandatid(mZahler.getMandatID()); + zahler.setMandatdatum(mZahler.getMandatDatum()); zahler.setMandatsequence(MandatSequence.RCUR); zahler.setFaelligkeit(param.faelligkeit); - zahler.setName(m.getKontoinhaber(1)); + zahler.setName(mZahler.getKontoinhaber(1)); zahler.setVerwendungszweck(vzweck); lastschrift.add(zahler); } @@ -600,7 +596,7 @@ private void abbuchenZusatzbetraege(AbrechnungSEPAParam param, writeMitgliedskonto(m, param.faelligkeit, vzweck, z.getBetrag(), abrl, - m.getZahlungsweg() == Zahlungsweg.BASISLASTSCHRIFT, konto, + mZahler.getZahlungsweg() == Zahlungsweg.BASISLASTSCHRIFT, konto, z.getBuchungsart()); } } diff --git a/src/de/jost_net/JVerein/keys/ArtBeitragsart.java b/src/de/jost_net/JVerein/keys/ArtBeitragsart.java index 5ea2e30da..773a04fb3 100644 --- a/src/de/jost_net/JVerein/keys/ArtBeitragsart.java +++ b/src/de/jost_net/JVerein/keys/ArtBeitragsart.java @@ -23,8 +23,8 @@ public enum ArtBeitragsart { - NORMAL(0, "Normal"), FAMILIE_ZAHLER(1, "Familie: Zahler"), FAMILIE_ANGEHOERIGER( - 2, "Familie: Angehöriger"); + NORMAL(0, "Normal"), FAMILIE_ANGEHOERIGER( + 2, "Familienangehöriger"); private final String text; private final int key; diff --git a/src/de/jost_net/JVerein/keys/Zahlungsweg.java b/src/de/jost_net/JVerein/keys/Zahlungsweg.java index db06bb8eb..3fe02e8f3 100644 --- a/src/de/jost_net/JVerein/keys/Zahlungsweg.java +++ b/src/de/jost_net/JVerein/keys/Zahlungsweg.java @@ -29,6 +29,8 @@ public class Zahlungsweg public static final int ÜBERWEISUNG = 2; public static final int BARZAHLUNG = 3; + + public static final int VOLLZAHLER = 4; private int zahlungsweg; @@ -57,6 +59,8 @@ public static String get(int key) return "Überweisung"; case BARZAHLUNG: return "Barzahlung"; + case VOLLZAHLER: + return "Durch Vollzahler"; default: return null; } @@ -68,6 +72,7 @@ public static ArrayList getArray() ret.add(new Zahlungsweg(BASISLASTSCHRIFT)); ret.add(new Zahlungsweg(ÜBERWEISUNG)); ret.add(new Zahlungsweg(BARZAHLUNG)); + ret.add(new Zahlungsweg(VOLLZAHLER)); return ret; } diff --git a/src/de/jost_net/JVerein/server/BeitragsgruppeImpl.java b/src/de/jost_net/JVerein/server/BeitragsgruppeImpl.java index 2db92aaf7..3abf07dae 100644 --- a/src/de/jost_net/JVerein/server/BeitragsgruppeImpl.java +++ b/src/de/jost_net/JVerein/server/BeitragsgruppeImpl.java @@ -22,7 +22,10 @@ import de.jost_net.JVerein.keys.ArtBeitragsart; import de.jost_net.JVerein.rmi.Beitragsgruppe; import de.jost_net.JVerein.rmi.Buchungsart; +import de.jost_net.JVerein.rmi.Mitglied; +import de.jost_net.JVerein.rmi.SekundaereBeitragsgruppe; import de.willuhn.datasource.db.AbstractDBObject; +import de.willuhn.datasource.rmi.DBIterator; import de.willuhn.logging.Logger; import de.willuhn.util.ApplicationException; @@ -72,12 +75,6 @@ protected void insertCheck() throws ApplicationException { throw new ApplicationException("Betrag nicht gültig"); } - if (getBeitragsArt() == ArtBeitragsart.FAMILIE_ANGEHOERIGER - && getBetrag() != 0) - { - throw new ApplicationException( - "Familien-Angehörige sind beitragsbefreit. Bitte als Betrag 0,00 eingeben."); - } break; case FLEXIBEL: @@ -86,22 +83,60 @@ && getBetrag() != 0) { throw new ApplicationException("Betrag nicht gültig"); } - if (getBeitragsArt() == ArtBeitragsart.FAMILIE_ANGEHOERIGER - && (getBetragMonatlich() != 0 || getBetragVierteljaehrlich() != 0 - || getBetragHalbjaehrlich() != 0 || getBetragJaehrlich() != 0)) - { - throw new ApplicationException( - "Familien-Angehörige sind beitragsbefreit. Bitte als Betrag 0,00 eingeben."); - } break; } + Beitragsgruppe gruppeAlt = (Beitragsgruppe) Einstellungen.getDBService().createObject(Beitragsgruppe.class,getID()); + if(getBeitragsArt() != null) { + //Dases die Beitragsart ZAHLER nicht mehr gibt sie aber noch in der Datenbank stehen kann, müssen wir auf null prüfen + ArtBeitragsart artAlt = gruppeAlt.getBeitragsArt(); + if(artAlt == null) + artAlt = ArtBeitragsart.NORMAL; + if(gruppeAlt != null && artAlt.getKey() != getBeitragsArt().getKey()) { + DBIterator list = Einstellungen.getDBService() + .createList(Mitglied.class); + list.addFilter("beitragsgruppe = ?", getID()); + if(list.hasNext()) { + throw new ApplicationException("Es existieren Mitglieder mit diesem Beitrag, Beitragsart kann nicht geändert werden!"); + } + } + if(getSekundaer() && getBeitragsArt().getKey() == ArtBeitragsart.FAMILIE_ANGEHOERIGER.getKey()) + { + throw new ApplicationException("Sekundäre Beitragsgrupe kann nicht Beitragsart Familienangehöriger haben!"); + } + } + if(getSekundaer() != null) { + if(gruppeAlt != null && gruppeAlt.getSekundaer() != getSekundaer()) { + if(gruppeAlt.getSekundaer()) + { + DBIterator list = Einstellungen.getDBService() + .createList(SekundaereBeitragsgruppe.class); + list.addFilter("beitragsgruppe = ?", getID()); + if(list.hasNext()) { + throw new ApplicationException("Es existieren Mitglieder mit diesem sekundären Beitrag, Sekundär kann nicht geändert werden!"); + } + } + else + { + DBIterator list = Einstellungen.getDBService() + .createList(Mitglied.class); + list.addFilter("beitragsgruppe = ?", getID()); + if(list.hasNext()) { + throw new ApplicationException("Es existieren Mitglieder mit diesem Beitrag, Sekundär kann nicht geändert werden!"); + } + } + } + if(getSekundaer() && getBeitragsArt().getKey() == ArtBeitragsart.FAMILIE_ANGEHOERIGER.getKey()) + { + throw new ApplicationException("Sekundäre Beitragsgrupe kann nicht Beitragsart Angehöriger haben!"); + } + } } catch (RemoteException e) { - Logger.error("insert check of mitglied failed", e); + Logger.error("insert check of beitragsgruppe failed", e); throw new ApplicationException( - "Mitglied kann nicht gespeichert werden. Siehe system log"); + "Beitragsgruppe kann nicht gespeichert werden. Siehe system log"); } } diff --git a/src/de/jost_net/JVerein/server/MitgliedImpl.java b/src/de/jost_net/JVerein/server/MitgliedImpl.java index 0e62ce8f0..2e62eb7e8 100644 --- a/src/de/jost_net/JVerein/server/MitgliedImpl.java +++ b/src/de/jost_net/JVerein/server/MitgliedImpl.java @@ -234,50 +234,55 @@ && getZahlungsweg() == Zahlungsweg.BASISLASTSCHRIFT if (getAustritt() != null) { // Person ist ausgetreten - // Hat das Mitglied für andere gezahlt? - if (getBeitragsgruppe().getBeitragsArt() == ArtBeitragsart.FAMILIE_ZAHLER) + // Ist das Mitglied Vollzahler in einem Familienverband? + if (getBeitragsgruppe() != null && getBeitragsgruppe().getBeitragsArt() != ArtBeitragsart.FAMILIE_ANGEHOERIGER) { - // ja DBIterator famang = Einstellungen.getDBService() .createList(Mitglied.class); famang.addFilter("zahlerid = " + getID()); - famang.addFilter("austritt is null"); + famang.addFilter("(austritt is null or austritt > ?)",getAustritt()); if (famang.hasNext()) { throw new ApplicationException( - "Dieses Mitglied zahlt noch für andere Mitglieder. Zunächst Beitragsart der Angehörigen ändern!"); + "Dieses Mitglied ist Vollzahler für andere. Zunächst Beitragsart der Angehörigen ändern!"); } } } - if (getAustritt() == null) + // Ist das Mitglied Teil eines Familienverbandes? + if (getBeitragsgruppe() != null && getBeitragsgruppe().getBeitragsArt() == ArtBeitragsart.FAMILIE_ANGEHOERIGER + && getZahlerID() != null) { - // Person ist eingetreten - // Zahlt jemand anderes für das Mitglied? - if (getBeitragsgruppe() != null && getBeitragsgruppe().getBeitragsArt() == ArtBeitragsart.FAMILIE_ANGEHOERIGER - && getZahlerID() != null) + // ja, suche Vollzahler. Er darf nicht, bzw nicht früher, ausgetreten sein! + DBIterator zahler = Einstellungen.getDBService() + .createList(Mitglied.class); + zahler.addFilter("id = " + getZahlerID()); + if(getAustritt() != null) + zahler.addFilter("(austritt is not null and austritt < ?)",getAustritt()); + Mitglied z = null; + if(zahler.hasNext()) + z = zahler.next(); + if (z != null && ((Mitglied) z).getAustritt() != null) { - // ja, suche Familien Zahler. Er darf nicht ausgetreten sein! - DBIterator zahler = Einstellungen.getDBService() - .createList(Mitglied.class); - zahler.addFilter("id = " + getZahlerID()); - if (zahler.hasNext() && ((Mitglied) zahler.next()).getAustritt() != null) - { - throw new ApplicationException( - "Der ausgewählte Zahler ist ausgetreten. Bitte anderen Zahler wählen!"); - } + throw new ApplicationException( + "Der ausgewählte Vollzahler ist ausgetreten zu " + z.getAustritt() + ". Bitte anderen Vollzahler wählen!"); + } + if(z != null && ((Mitglied)z).getEintritt().after(new Date()) && ((Mitglied)z).getEintritt().after(getEintritt())) + { + throw new ApplicationException( + "Der ausgewählte Vollzahler tritt erst ein zu " + z.getEintritt() + ". Bitte anderen Vollzahler wählen!"); } } - // Check ob Beitragsart evtl. vorher FAMILIE_ZAHLER war und für andere gezahlt hat - if (getBeitragsgruppe() != null && getBeitragsgruppe().getBeitragsArt() != ArtBeitragsart.FAMILIE_ZAHLER) + // Check ob das Mitglied vorher ein Vollzahler eines Familienverbandes war + if (getBeitragsgruppe() != null && getBeitragsgruppe().getBeitragsArt() == ArtBeitragsart.FAMILIE_ANGEHOERIGER) { - // Kein FAMILIE_ZAHLER und darf damit für niemanden zahlen + // Es darf keine Familienangehörigen geben DBIterator famang = Einstellungen.getDBService() .createList(Mitglied.class); famang.addFilter("zahlerid = " + getID()); if (famang.hasNext()) { throw new ApplicationException( - "Dieses Mitglied zahlt noch für andere Mitglieder. Zunächst Beitragsart der Angehörigen ändern!"); + "Dieses Mitglied ist Vollzahler in einem Familienverband.. Zunächst Beitragsart der Angehörigen ändern!"); } } if (getBeitragsgruppe() != null @@ -285,7 +290,7 @@ && getBeitragsgruppe() .getBeitragsArt() == ArtBeitragsart.FAMILIE_ANGEHOERIGER && getZahlerID() == null) { - throw new ApplicationException("Bitte Zahler auswählen!"); + throw new ApplicationException("Bitte Vollzahler auswählen!"); } // Individueller Beitrag darf nicht kleiner als 0 sein