Konzepte

Antragstellung

Der CustomerProcessor besitzt einen Id-Generator für ein Autoinkrement der Kundennummern auf Antrag erzeugt.

Diesem generateContractId wird entweder

  1. eine E-Mailadresse übergeben und er liefert dann eine Kundennummer zurück und versendet eine Verifikationsemail.
  2. oder es wird null übergeben, dann liefert er sofort eine gültige Kundennummer zurück

Im ersten Fall wird bei dem Aufruf createOrder, der zugesendete Verifikationscode übergeben und die Email vom Processor eingesetzt, falls der Code richtig ist. falls der Code nicht richtig ist, schlägt die Methode fehl.

Die zweite Version ist für interne Oberflächen gedacht, wenn die eingegebene E-Mail-Adresse von autorisiertem Personal verifiziert ist.

Methoden

Vertrag als Antrag erzeugen

generateContractId ( String userEmail ) : String

liefert eine Vertragsnummer zurück. Diese Methode macht einen Eintrag in der CustomerVerification - Tabelle. Dort wird ein im Accessor generierter Verifikationscode mit der angegebenen Email hinterlegt. Der Accessor versendet eine Systememail mit diesem Code an diese Email-Adresse. Beim späteren Aufruf der createOrder-Methode muss der Verifikationscode zu der dort zu speichernden Email-Adresse passen, damit die Methode nicht fehlschlägt.

Weborder hinterlegen

Signatur
createOrder (
  String itentis,
  String itoris,
  String description,
  String userEmail,
  String customerContractName,
  String code  ) : Boolean
Parameter

description Hier werden gesondert deffinierte JSON-codierte Daten übergeben, die alles wissenwertes beinhalten soll, dass die Qualität und Quantität der Bestellung im Internet betrifft. Das Datenbankformat ist text. Die Liste darf alsao sehr lang sein.

code Also code muss von Kunden ein 6-stelliger alphanumerischer Wert erfragt werden, den er via der von ihm angegebenen E-Mail erhalten hat.

userEmail Der Wert userEmail muss identisch sein mit der E-Mail, die zur Erzeugung der Kundennummer verwendet wurde und über die der Verifikationscode zugesandt worden ist.

customerContractName muss mit dem generierten Code aus der generateConstractId Anfrage identisch sein.

Bei der Durchführung der Speicherung wird geprüft ob code mit dem zugesandten 6-stelligem Code, userEmail mit der bei der Nummergenerierung angegebenen E-Mail und customerContractName mit dem Rückgabewert des korrespondierenden Aufrufs von generateCustomerId übereinstimmt.

Ist der Check erfolgreich wird keine weitere Prüfung der Angaben durchgeführt und die Anfrage gespeichert. Plausibilitätschecks sind also durch die Webapplikation durchzuführen.

Datenstruktur

CustomerTarriff

Domain:

String tariffName
String tariffDescription

Double factorFee
Double constantFee

boolean recurring
boolean usagebound
String	intervall
Double upperBound
Double lowerBound
tariffName

Eindeutiger Name, darf nicht null sein. Tariff hat keinen UUID-Key! Dh. der Name ist das Suchkriterium.

tariffDescription

Beschreibung der Tarifoption, die zB. auch auf Webformularen oder Rechnungen ausgewiesen werden kann. Dieser Wert sollte also nicht zu lang gewählt werden, aber ausdrucksstark sein. Keine zwingende Beschränkung auf 255 Byte.

static mapping = {
	tariffDescription type:'text'
}
factorFee & constantFee

Diese Werte stellen die Berechnungsgrundlage dar gemäß der Formel

y = factorFee * x + constantFee

Dazu muss aber ein Usage-Gewicht angegeben werden. (x). Sonst zählt nur der konstante Faktor.

recurring & usagebound

Diese Werte zeigen wie die Tariffoption angewendet wird:

recurring usagebound Interpretation
false false Einmalzahlung
true false Berechnung in fixen Abständen (siehe intervall)
false true Berechnung pro Verbrauchsquantum (x-Wert)
true true Berechnung in fixen Abständen mit Einbeziehung einer Quota
intervall

Textkonstante legt das zeitliche Wiederholungsschema fest.

Wert Bedeutung
d täglich
m monatlich
y jährlich
wt werktags - Mo-Sa
we Samstag und Sonntag
q Vierteljährlich

Methoden

createOrUpdateCustomer

Erzeugt einen Kundenadresseintrag mit folgenden Parametern:

String userKey
String contractKey
String productKey
String zoneKey

String customerKey
String customerType	
String description
Long cts_ts

String companyName
String departmentName

String surname
String forename
String title
String gender

String additionalInformation
String postbox
String streetName
String streetNumber
String city
String postalCode
String country

String telephoneNumber
String cellphoneNumber

String userEmail

String iban
String bic
String ustid
String separef
      Long mandate_grant_ts
      Long mandate_revoke_ts
	
String state

Dieser Kunde kann später Verträge in verschiedenen Zuständen zugeordnet bekommen.

return String (customerKey)

deleteCustomer

Das Löschen eines Kunden ist nur möglich, wenn keine Verträge zugeordnet sind. Als Parameter muss der customerKey angegeben werden.

return Boolean

retrieveCustomer

Mit Angabe des customerKey können die gesamten Kundendaten ausgelesen werden.

return Map

listCustomers

Liefert eine Liste an Schlüssel/Wert Paaren. Der Schlüssel ist der customerKey. Der Wert ist ein, für den Menschen bestimmter String mit Angaben aus den Daten.

Parameter:

offsetItems : Long
maxItems : Long

Offset und Max müssen immer angegeben werden.

companyName : String
surname : String

Dagegen sind companyName und surname optional. Werden Sie angegeben, werden alle Ergebnisse zurückgegeben, die zu diesen Strings passen. (Suchmodus)

Rückgabe:

return Map
createOrUpdateCustomerContract
retrieveCustomerContract
listCustomerContracts
listCustomerContractsByCustomer
deleteCustomerContract
listTariffsByContract
addTariff
removeTariff