====== Konzepte ====== ===== Antragstellung ===== Der **CustomerProcessor** besitzt einen Id-Generator für ein Autoinkrement der Kundennummern auf Antrag erzeugt. Diesem **generateContractId** wird entweder - eine E-Mailadresse übergeben und er liefert dann eine Kundennummer zurück und versendet eine Verifikationsemail. - 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 ====== {{:system:tempest:customerbasemodel.png?nolink |}} === 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 ==