Warenkorbberechnung
Für Shopanbindungen kann ein ganzer Warenkorb gerechnet, und mit derselben Schnittstelle auch als Bestellung übermittelt werden. die Datenstruktur sieht wie folgt aus:
Als Wurzelelement steht der Warenkorb, dem die Positionen und die Verträge (mit wiederum Positionen) angehängt sind (grüne Tabellen). Optional können diverse Adressen mitgegeben werden, wobei immer die Online*-Adressen verwendet werden sollen (blaue Tabellen). In die gelben Adress-Tabellen sollte geschrieben werden, wenn dies im Projekt explizit so definiert wird.
Im Folgenden wird auf den Warenkorb und die angehängten Positionen und Verträge eingegangen. Die diversen Adressen verhalten sich gem. REST-Standard und haben keinen Einfluss auf die Berechnung haben.
Ein einfacher Warenkorb mit einer Onlinelieferadresse und einem Vertrag mit separater Teilnehmeradresse sieht folgendermaßen aus:
Die Antwort ist dann:
Warenkorb
Der Warenkorb ist eine temporäre Struktur, die nicht abgespeichert werden kann. Sie wird für das Berechnen der Preise und die Umwandlung in eine Bestellung verwendet (= Verteilung der übermittelten Daten auf die diversen Online-Tabellen). In Folge ist nur ein POST möglich: Kann leer gelassen werden, falls nicht mit Bereichen gearbeitet wird Ref nach ../BereichAufruf
./Warenkorb POST Warenkorb vervollständigt mit den angehängten Objekten Daten
id Id des Warenkorbes, wird in der Antwort unverändert zurückgegeben. Kann zu Steuerzwecken verwendet werden. I key InklMWST Gibt an, ob der Kunde MWSt-pflichtig ist. O boolean Alle Preise verstehen sich immer ohne MWSt.
Ausnahme sind einige berechnete (Komfort)Felder in der Ausgabe.BereichID Id des Bereichs, in dem der Warenkorb gerechnet werden soll I key AdresseID ID der Bestelladresse, ist massgebend für die Preisfindung (Preisgruppe, Rabatte etc.) I key Ref nach ../Adresse LieferAdresseID ID der Lieferadresse I key Ref nach ../Adresse RechnungsAdresseID ID der Rechnungsadresse I key Ref nach ../Adresse ExterneID Id/Schlüssel des Warenkorbes im Shop. Wird bei der Speicherung in die Folgetabellen weitergereicht. I string[30] Über diese ID kann der Shop ein Tracking der Weiterverarbeitung der Bestellung machen, indem er in den Online-Tabellen die generierte Bestellung sucht und weiterverfolgt. FremdsystemID Id des Shopsystems, muss im VinX/PerformX angelegt und mitgeteilt werden. Dient der Unterscheidung der angebundenen Systeme. I key z.B. 1=Test, 2=Prod, 3=QS PreisgruppeID Zu verwendende Preisgruppe. Wenn leer gelassen findet eine Preisgruppenfindung statt, I/O key Ref nach ../Preisgruppe WarenkorbAktion Auszuführende Aktion:
10: nur rechnen
20: rechnen und als Bestellung speichern I integer ZahlungswegKarteID Falls im Shop bezahlt wird muss hier der verwendetet Zahlweg angegeben werden I key Ref nach ../Zahlungsweg SaferPayBetrag Bezahlter Betrag falls im Shop bezahlt I number[20,4]
WarenkorbPosition / WarenkorbVertragPosition
Die Warenkorbpositionen sind immer an den Warenkorb oder an den WarenkorbVertrag gebunden und sind als Unterelemente mitzugeben (siehe auch Beispiel-Aufruf oben).
Daten Ref nach ../Artikel Art des Preises, kann je nach Systemeinstellung übernommen oder ignoriert werden. Gültig sind: 10 SpezialpreisRichtung id Id der Position, muss eindeutig sein I key Anzahl Bestellmenge I number[20,4] ArtikelID Id des Bestellartikels I key Bezeichnung Artikelbezeichnung O string[40] EinzelPreisExkl Wird bei Preisermittlung = [50, 55] übernommen, ansonsten ignoriert und ausgegeben I/O float Vorgabe Exkl-Preis hat gegenüber Inkl-Preis Vorrang, falls beide angegeben werden EinzelPreisInkl Wird bei Preisermittlung = [50, 55] übernommen, ansonsten ignoriert und ausgegeben I/O float Preise gelten immer vor Rabatt. Dieser wird im Total-Block separat ausgewiesen MWSTProzentArtikel MWSt-Satz, der dem Artikel zugrunde liegt O number[20,4] MWSTProzentInPreis MWSt-Satz, der zur Anwendung kommt (Export = 0) O number[20,4] PreisErmittlung
20 Aktionspreis
30 Preis aus Preisgruppe
40 Basispreis
50 Preis überschreiben I/O integer PreisgruppeID Zu verwendende Preisgruppe, wenn 0 oder nicht übermittelt findet eine Preisgruppenfindung statt I/O key Ref nach ../Preisgruppe TotalBetragNettoExkl Total Nettobetrag der Position exkl MWSt O number[20,4] = Anzahl * EinzelPreis - TotalRabatte TotalBetragNettoInkl dito inkl. O number[20,4] TotalRabattExkl Total der Rabatte der Position exkl. MWSt O number[20,4] TotalRabattInkl dito inkl. O number[20,4]
WarenkorbVertrag
Die Warenkorbverträge sind immer an den Warenkorb gebunden und sind als Unterelemente mitzugeben (siehe auch Beispiel-Aufruf oben).
Verträge haben intern eine Artikelliste, die die Bestandteile abbilden (z.B. Übernachtung, Kurskosten, Unterlagen). Diese bilden die Berechnungsgrundlage und werden in der Antwort ausgegeben. Übersteuerungen können und Ergänzungen können damit aber auch mitgegeben werden. In diesem Fall werden die WarenkorbVertragPositionen mit der hinterlegten Stückliste verglichen. Wird derselbe Artikel gefunden, übersteuert die mitgegebene Position die vorgegebene Menge und die Preisfindung, analog zu den Bestellpositionen. Damit können z.B. Rabatte mitgegeben werden.
Daten
Es werden wiederum nur diejenigen Felder beschrieben, die irgendeine Logik hinterlegt haben, oder Einfluss auf die Berechnung haben. Die vollständige Beschreibung der Tabelle kan über die Metadaten abgefragt werden.
Feld | Funktion | Richtung | Format | Bemerkungen |
---|---|---|---|---|
id | Id der Position, muss eindeutig sein | I | key | |
Anzahl | Anzahl Personen oder Abos, Lizenzen etc., wird als Multiplikator bei der Preisberechnung verwendet | I | integer | |
AdresseID | Id der Teilnehmeradresse. Wenn leer gelassen, wird bei Abos diejenige des Warenkorbes verwendet. | I | key | Ref nach ../Adresse |
KundenkonditionID | Zu verwendende Kundenkondition. Wenn leer gelassen findet eine Konditionenfindung statt und der gefunden Wert wird ausgegeben. | I/O | key | Ref nach ../Kundenkondition |
MWSTProzent | MWSt-Prozent (= gewichteter Durchschnitt aus den einzelnen Positionen eines Vertrages) | O | number[20,4] | |
PreisgruppeID | Zu verwendende Preisgruppe. Wenn leer gelassen findet eine Preisgruppenfindung statt und der gefunden Wert wird ausgegeben. | I/O | key | Ref nach ../Presigruppe |
TarifstufeID | Zu verwendende Tarifstufe. Wenn leer gelassen findet eine Tarifstufenfindung statt und der gefunden Wert wird ausgegeben. | I/O | key | Ref nach ../TarifstufeID |
VertragDefID | Id des Ereignisses/Kurses/Anlass/Abo etc. | I | key | Ref nach ../VertragDef |
Warteliste | Anmeldung auf Warteliste | I/O | boolean |