Ziel dieses Schrittes ist, das tatsächlich im Zielnuclet verwendeten Businessobjekt an den Java-Code des SEPA-Nuclets anzubinden. Dazu wird der Ansatz verfolgt, Nuclet-unabhängige Wrapper-Klassen zu verwenden – anstelle der zu den Businessobjekten generierten Businessobjekt-Klassen.
Zu den technischen Hintergründen lesen Sie dazu bitte auch den Artikel "Schnittstellen in Java-Regeln".
Dieser Integrationsschritt kann erst durchgeführt werden, sobald die Vorbedingungen aus Abschnitt 3 erfüllt sind – d.h. sobald entsprechende Attribute in den genutzten Businessobjekten existieren. |
Bei der Anbindung des SEPA-Nuclets sind Wrapper-Klassen für Debitoren (Kunden, o.ä.), Referenzen (Rechnungen, Belege, o.ä.) und Zahlungsreferenzen (Forderungen, Rechnungspositionen, o.ä.) anzupassen.
Wrapper-Klasse | Funktion | Java-Package | Anzupassende Methoden/Konstruktoren |
---|---|---|---|
DebitorWrapper | Anbindung an verwendete Debitoren, Kunden, o.ä. | org.nuclet.sepa.wrapper |
|
ReferenceWrapper | Anbindung an genutzte Referenzobjekte (Rechnungen,o.ä.) | org.nuclet.sepa.wrapper |
|
PaymentReferenceWrapper | Anbindung an verwendete Zahlungsreferenzobjekte (Forderungen, Rechnungspositionen, etc.) | org.nuclet.mt940.wrapper |
|
Tabelle 4.8.1: Übersicht Nuclet-Schnittstellen
Die Klasse CurrencyWrapper dient als Nuclet-Schnittstelle zur tatsächlich genutzten Währungsbusinessobjekt.
Der Konstruktor der Klasse und die Methode getIso4217Code() sind mit anwendungsspezifischem Verhalten zu befüllen. Letztere Methode sollte den ISO-4217-Währungscode (siehe dazu Wikipedia) des Währunsobjektes zurückliefern.
Methode | Funktion | Anpassung optional? |
---|---|---|
CurrencyWrapper | Zuordnung des tatsächlich genutzten Businessobjektes | nein |
getIso4217Code() | liefert den dreistelligen ISO-4217-Code der Währung (z.B. "EUR", "USD", "GBP") | nein |
Tabelle 4.7.1.1: Anpassungen in CurrencyWrapper
Beispiele dazu sind in Kommentarblöcken angegeben; diese Beispiele sind bei der Integration also an die tatsächlich genutzte Währungsbusinessobjekt (bzw. deren BusinessObject-Klasse) anzupassen.
package org.nuclet.sepa.wrapper; import java.math.BigDecimal; import java.util.Date; import java.util.List; import org.nuclos.api.businessobject.BusinessObject; import org.nuclos.api.businessobject.facade.Modifiable; import org.nuclos.api.businessobject.facade.Stateful; import de.bffs.Person; /** * Wrapper implementation for debitors * * @version 1.0 * @date 21.03.2014 * @nuclet org.nuclet.SEPA * @nucletversion 1.0.0 * @sincenucletversion 1.0.0 * @since 21.03.2014 * * @author frank.lehmann@nuclos.de * */ public class DebitorWrapper extends AbstractDebitorWrapper { public DebitorWrapper(final Modifiable reference) { // @replace! Bitte bei Nuclet-Integration mit eigenem Code ersetzen! // // Beispiel: // if (reference instanceof Person) { this.businessObject = reference; } } /** * Liefert den Namen des Debitors * */ public String getName() { return ((Person)this.businessObject).getName(); } /** * Liefert die SEPA-Mandatskennung */ public String getSEPAMandateIdentification() { return ((Person)this.businessObject).getSepaMandatskennung(); } /** * Liefert das Ausstellungsdatum des SEPA-Mandats */ public Date getDateOfSEPAMandateSignature() { return ((Person)this.businessObject).getDatumSepaMandatsausstellung(); } /** * Liefert Informationen darüber, ob sich das SEPA-Mandat auf Debitorenseite * geändert hat */ public Boolean getHasSEPAMandateChanged() { return ((Person)this.businessObject).getSepaMandatsaenderung(); } /** * Setzt die Informationen darüber, ob sich das SEPA-Mandat auf Debitorenseite * geändert hat */ public void setHasSEPAMandateChanged(final Boolean blnHasSEPAMandateChanged) { ((Person)this.businessObject).setSepaMandatsaenderung(blnHasSEPAMandateChanged); } /** * Liefert Informationen darüber, ob sich das Kreditinstitut auf Debitorenseite * gewechselt wurde */ public Boolean getIsNewDebitorAgent() { return ((Person)this.businessObject).getBicVeraendert(); } /** * Setzt die Informationen darüber, ob sich das Kreditinstitut auf Debitorenseite * gewechselt wurde */ public void setIsNewDebitorAgent(final Boolean blnIsNewDebitorAgent) { ((Person)this.businessObject).setBicVeraendert(blnIsNewDebitorAgent); } /** * Liefert die Datenbank-ID der SEPA-Laufzeit * */ public Long getSEPASequenceTypeId() { return ((Person)this.businessObject).getSepaLaufzeitId(); } /** * Setzt die Datenbank-ID der SEPA-Laufzeit * */ public void setSEPASequenceTypeId(final Long lngSEPASequenceTypeId) { ((Person)this.businessObject).setSepaLaufzeitId(lngSEPASequenceTypeId); } /** * Liefert den BIC für SEPA-Zahlungen * */ public String getBic() { return ((Person)this.businessObject).getBic(); } /** * Liefert den IBAN für SEPA-Zahlungen * */ public String getIban() { return ((Person)this.businessObject).getIban(); } /** * Liefert die alte IBAN bei SEPA-Mandatsänderungen * */ public String getOriginalDebitorAccount() { return ((Person)this.businessObject).getIbanAlt(); } /** * Setzt die alte IBAN bei SEPA-Mandatsänderungen * */ public void setOriginalDebitorAccount(final String strOriginalDebitorAccount) { ((Person)this.businessObject).setIbanAlt(strOriginalDebitorAccount); } /** * Setzt den Benutzerkontext * */ public void setUserContext(final String strUserContext) { ((Person)this.businessObject).setBenutzerkontext(strUserContext); } } |
Die Klasse ConditionsOfPaymentWrapper dient als Nuclet-Schnittstelle für tatsächlich genutzte Zahlungsbedingungen.
Die Anpassungen sind optional: Werden keine Zahlungs- und Skontobedingungen verwendet, dann muss dieser Abschnitt nicht berücksichtigt werden.
Werden Skontobedingungen verwendet, dann sind die Getter-Methoden für Skontosatz und Skontofrist anzupassen.
Methode | Funktion | Anpassung optional? |
---|---|---|
ConditionsOfPaymentWrapper | Zuordnung des tatsächlich genutzten Businessobjektes | ja |
getCashDiscount() | liefert den Skontosatz | ja |
getCashDiscountPeriod() | liefert die Skontofrist (in Tagen) | ja |
getExtendedCashDiscount() | liefert den Skontosatz bei erweiterter Skontofrist | ja |
getExtendedCashDiscountPeriod() | liefert die erweiterte Skontofrist (in Tagen) | ja |
getCashDiscountExGratiaDays() | liefert die Kulanz (in Tagen) | ja |
Tabelle 4.7.1.2: Anpassungen in ReferenceWrapper
Beispiele dazu sind in Kommentarblöcken angegeben; diese Beispiele sind bei der Integration also an das tatsächlich genutzte Businessobjekt (bzw. deren BusinessObject-Klasse) anzupassen.
package org.nuclet.sepa.wrapper; import java.math.BigDecimal; import java.util.Date; import java.util.List; import org.nuclos.api.businessobject.BusinessObject; import org.nuclos.api.businessobject.facade.Modifiable; import org.nuclos.api.businessobject.facade.Stateful; import de.bffs.Rechnung; /** * Abstract wrapper class for debitors (client billings, invoices, etc.) * * @version 1.0 * @date 21.03.2014 * @nuclet org.nuclet.SEPA * @nucletversion 1.0.0 * @sincenucletversion 1.0.0 * @since 21.03.2014 * * @author frank.lehmann@nuclos.de * */ public class ReferenceWrapper extends AbstractReferenceWrapper { public ReferenceWrapper(final Modifiable reference) { // @replace! Bitte bei Nuclet-Integration mit eigenem Code ersetzen! // // Beispiel: // if (reference instanceof Rechnung) { this.businessObject = reference; } } /** * Liefert die Datenbank-ID des Debitoren * */ public Long getDebitorId() { return ((Rechnung)this.businessObject).getMitgliedId(); } /** * Liefert das Identifizierungsmerkmal für Lastschriften (z.B. die Rechnungsnummer) * */ public String getDirectDebitReference() { return ((Rechnung)this.businessObject).getRechnungsnummer(); } /** * Liefert ein Referenzdatum (bspw. das Rechnungsdatum) * */ public Date getReferenceDate() { return ((Rechnung)this.businessObject).getRechnungsdatum(); } } |
Die Klasse ReferenceWrapper dient als Nuclet-Schnittstelle zum tatsächlich genutzten Referenz-Businessobjekt.
Anzupassen sind der Konstruktor der Klasse sowie die folgenden Methoden:
Methode | Funktion | Anpassung optional? |
---|---|---|
ReferenceWrapper() | Zuordnung des tatsächlich genutzten Businessobjektes | nein |
getAcceptFirstIncomingPayment() | Liefert die Information darüber, ob die erste eingehende Zahlung den Statuswechsel m Referenzobjekt auslösen soll, d.h. den Statusübergang in Richtung "Bezahlt", "Beglichen", o.ä. | ja |
getBankTransactionRef() | Liefert alle zugeordneten Bankumsätze, indirekt über die Zwischenbusinessobjek "BankTransactionRef", d.h. es sollten alle Einträge des entsprechenden Unterformulars zurückgegeben werden. | nein |
getConditionsOfPayment() | Liefert die tatsächlich genutzten Zahlungsbedingungen als "gewrapptes" Objekt. | ja |
getDateOfInvoice() | Liefert das Zahlungsdatum. | ja |
getTotalAmountGross() | Liefert den Bruttogesamtbetrag des Referenzobjektes, d.h. den über eingehende Zahlung auszugleichenden Betrag. | nein |
setPaymentDate() | Setzt das "Payment Date" (Zahlungsdatum, Bezahlt am, o.ä.) im Referenzobjekt. | ja |
Tabelle 4.7.1.3: Anpassungen in ReferenceWrapper
Beispiele dazu sind in Kommentarblöcken angegeben; diese Beispiele sind bei der Integration also an das tatsächlich genutzte Businessobjekt (bzw. deren BusinessObject-Klasse) anzupassen.
package org.nuclet.mt940.wrapper; import java.math.BigDecimal; import java.util.Date; import java.util.List; import org.nuclos.api.businessobject.BusinessObject; import org.nuclos.api.businessobject.facade.Stateful; import org.nuclos.api.provider.QueryProvider; import org.nuclet.mt940.BankTransactionRef; import org.nuclet.mt940.wrapper.ConditionsOfPaymentWrapper; import org.nuclet.mt940.wrapper.AbstractConditionsOfPaymentWrapper; // @replace! // // mit eigenem Code zu ersetzen, Beispiel: // // import org.nuclet.businessnuclet.ClientBilling; // import org.nuclet.businessnuclet.ConditionsOfPayment; /** * Konkrete Wrapper-Klasse für Referenzobjekte (Rechnungen, o.ä.) * * @version 1.1 * @date 20.02.2014 * @nuclet org.nuclet.MT940 * @nucletversion 1.4.0 * @sincenucletversion 1.2.0 * @since 20.09.2013 * * @author frank.lehmann@nuclos.de */ public class ReferenceWrapper extends AbstractReferenceWrapper { public ReferenceWrapper(final BusinessObject reference) { // @replace! Bitte bei Nuclet-Integration mit eigenem Code ersetzen! // // Beispiel: // // if (reference instanceof ClientBilling) { // this.businessObject = reference; // } } /** * Liefert die Referenz-Nummer, anhand derer der Datensatz eindeutig * zu identifizieren ist */ public String getReferenceNumber() { // @replace! Bitte bei Nuclet-Integration mit eigenem Code ersetzen! // // Beispiel: // // return ((ClientBilling)this.businessObject).getBillingNumber(); return null; } /** * Liefert die Information darüber, ob die erste eingehende Zahlung den Statuswechsel * im Referenzobjekt auslösen soll, d.h. den Statusübergang in Richtung "Bezahlt", * "Beglichen", o.ä. */ public Boolean getAcceptFirstIncomingPayment() { // @replace! Bitte bei Nuclet-Integration mit eigenem Code ersetzen! // // Beispiel: // // return ((ClientBilling)this.businessObject).getAcceptFirstIncomingPayment(); return Boolean.FALSE; } /** * Liefert alle zugeordneten Bankumsätze, indirekt über die Zwischenentität "BankTransactionRef", * d.h. es sollten alle Einträge des entsprechenden Unterformulars zurückgegeben werden. * */ public List<BankTransactionRef> getBankTransactionRef() { // @replace! Bitte bei Nuclet-Integration mit eigenem Code ersetzen! // // Beispiel: // // ((ClientBilling)this.businessObject).getBankTransactionRef(); return null; } /** * Liefert die tatsächlich genutzten Zahlungsbedingungen als "gewrapptes" Objekt. * */ public AbstractConditionsOfPaymentWrapper getConditionsOfPayment() { // @replace! Bitte bei Nuclet-Integration mit eigenem Code ersetzen! // // Beispiel: // // final Long lngConditionsOfPaymentId = ((ClientBilling)this.businessObject).getConditionsOfPaymentId(); // final ConditionsOfPayment boConditionsOfPayment = QueryProvider.getById(ConditionsOfPayment.class, lngConditionsOfPaymentId); // // return new ConditionsOfPaymentWrapper(boConditionsOfPayment); return null; } /** * Liefert das Zahlungsdatum. * */ public Date getDateOfInvoice() { // @replace Bitte bei Nuclet-Integration mit eigenem Code ersetzen! // // Beispiel: // // return ((ClientBilling)this.businessObject).getBillingDate(); return null; } /** * Liefert den Bruttogesamtbetrag des Referenzobjektes, d.h. den über eingehende * Zahlung auszugleichenden Betrag. * */ public BigDecimal getTotalAmountGross() { // @replace! Bitte bei Nuclet-Integration mit eigenem Code ersetzen! // // Beispiel: // // return ((ClientBilling)this.businessObject).getTotalAmountGross(); return BigDecimal.ZERO; } /** * Setzt das "Payment Date" (Zahlungsdatum, Bezahlt am, o.ä.) im Referenzobjekt. * * @param datPaymentDate * */ public void setPaymentDate(final Date datPaymentDate) { // @replace! Bitte bei Nuclet-Integration mit eigenem Code ersetzen! // // Beispiel: // // ((ClientBilling)this.businessObject).setPaymentDate(datPaymentDate); } } |