Ablauf Verarbeitung Shop-Bestellungen

Bestellungen von externen Systemen werden immer über Import-Tabellen verarbeitet, es wird nie direkt in die aktiven Bestellungen geschrieben. Der Grund ist, dass die übermittelten Daten oft manuell validiert und ergänzt werden müssen. Neukunden müssen z.B. erst erfasst und mit evt. bereits vorhandenen Adressen abgeglichen werden.

Das empfohlene Vorgehen ist, die Bestellungen via der Warenkorb-Funktion zu übermitteln. In dem Fall übernimmt das System die Verteilung der Daten auf die verschiedenen Online-Tabellen.

Dieser Verarbeitungsprozess ist wie folgt:

Der Shop kann die ganze Verarbeitung über die mitgelieferte Bestell-ID verfolgen. 

Bestellung übermitteln

Eine Bestellung soll in einem Aufruf als Ganzes gespeichert werden, um die Datenkonsistenz zu gewährleisten (Der REST-Server verarbeitet jeden Aufruf in einer eigenen Transaktion). 

Die hier verwendenden Elemente sind:

  • OnlineAdressen (kann jederzeit auch ausserhalb einer Bestellung übermittelt werden)
  • OnlineBestellungen (oder OnlineBestellAdresse wenn Substruktur von OnlineAdresse)
  • OnlineBestellPositionen

Je nachdem ob die OnlineAdresse schon vorhanden ist oder nicht, sind folgende Übergabestrukturen möglich:

OnlineBestellung 
        OnlineBestellPositionen
 

OnlineBestellung
       OnlineAdresse
       OnlineBestellPositionen

Alle Entitäten können auch direkt über die normalen CRUD-Operationen manipuliert werden, was aber wegen der Datenkonsistenz nur für die OnlineAdresse empfohlen wird. 

Beispielaufruf

Bestellung mit vorhandener Adresse: POST auf ./OnlineBestellung mit folgenden Daten:

Format "compact"
{
  "Datum": "2016-10-10",
  "AdresseID": 1,
  "Hinweis": "Dies ist ein Hinweis",
  "OnlineBestellPosition": [
    {
      "ArtikelID": 16,
      "Anzahl": 8,
      "Preis": 8,
      "Total": 64,
      "PreisErmittlung": 50
    },{
      "ArtikelID": 14,
      "Anzahl": 5,
      "Preis": 5.52,
      "Total": 27.6,
      "PreisErmittlung": 50
    }
  ]
}

Format "fullmeta"
{
	"Datum": "2016-10-10",
	"AdresseID": 5753,
	"Hinweis": "Hallo Hinweis",
	"childlist": [{
		"meta": {
			"name": "OnlineBestellPosition",
			"parameters": [{
				"name": "ArtikelID"
			},
			{
				"name": "Anzahl"
			},
			{
				"name": "Preis"
			},
			{
				"name": "Total"
			},
			{
				"name": "PreisErmittlung"
			}]
		},
		"data": [
			[123, 3, 5.50, 16.50, 50],
			[124, 7, 7.95, 55.65, 50]
		]
	}]
}

Allfällige adhoc-Rechnungs-, Liefer- oder Bestell-Adresse [OnlineAdresse]

Eine Bestellung kann abweichende Liefer- und Rechnungsadressen haben. Falls diese noch nicht in VinX vorhanden sind, müssen diese zuerst angelegt werden, damit deren Referenzen in der Bestellung angegeben werden können.

Über OnlineAdresse können sämtliche Adressen verwaltet werden, die mit der Bestellung, der Lieferung und der Fakturierung von Online-Bestellungen zu tun haben.

Diese Online-Adressen sind getrennt vom regulären Adressstamm, und werden manuell bei Bedarf in den Adressstamm übernommen oder auf bestehende Adressen abgebildet.

Bitte beachten Sie, dass die Online-Adressen von VinX periodisch gelöscht werden. Eine permanente Abbildung der Adress-Strukturen eines Shops in den Online-Adressen ist somit nicht möglich! 

Aufruf 

URI
Methode

./OnlineAdresse

CRUD

Feldebeschreibung (nur die wichtigsten Felder)

Feld

DatentypOptional

Bemerkung

ID

keyna

PK, wird bei Inserts zurückgegeben, muss in Updates angegeben werden

AnredeID

refx

FK auf die Anreden (=> ./Anrede)

Name

string[50]x

Vorname

string[25]x

Strasse

string[40]x

Zusatz1

string[40]x

PLZ

string[10]x

Ort

string[30]x

LandID

refx

FK auf das Land (=> ./Land)

Sprache

string[2]

[DE, FR, IT, EN]

EMailstring[100]x
TelGstring[40]xTelefon Geschäft
TelPstring[40]xTelefon direkt
BereichIDrefxNur falls die Option "Bereiche" aktiv ist. FK auf die Bereiche (GET auf ./Bereich)

Beschreibung Beleg [OnlineBestellung]

Aufruf 

URI
Methode

./OnlineBestellung

(CRUD)

Feldebeschreibung (nur die wichtigsten Felder)

Feld

DatentypOptional

Bemerkung

ID

keyna

PK, wird bei Inserts zurückgegeben

Datum

date

Buchungsdatum

Hinweis

string[2k]x

Optional, Bemerkung

BereichID

refx

Nur falls die Option "Bereiche" aktiv ist. FK auf die Bereiche (=> ./Bereich)

ExterneIDstring[30]xID vom Shop vergeben, über die der Shop ein Tracking der Weiterverarbeitung machen kann.

AdresseID

ref(x)

FK, optional, ID der Rechnungsadresse aus dem Adressstamm (=> ./Adresse)

OnlineAdrID

ref(x)

Falls die OnlineBestellung als Sub-Struktur einer OnlineAdresse übergeben wird, wird dessen ID hier hineingeschrieben. In dem Fall das Feld nicht übermitteln.

FK, optional, ID der optional neu erfassten adhoc Rechnungsadresse (=> ./Onlineadresse)

LieferAdrID

refx

FK, optional, ID der Lieferadresse aus dem Adressstamm (=> ./Adresse)

OnlineLieferadresseID

refx

FK, optional, ID der erfassten adhoc Lieferadresse (=> ./OnlineAdresse)

Beschreibung Positionen [OnlineBestellPosition]

Aufruf 

In der Regel sollten nur Leseoperationen (GET) ausgeführt werden, da die Struktur mit der Bestellung übergeben werden soll, und nachträgliche Änderungen zu Inkonsistenzen führen können.

URI
Methode

./OnlineBestellPosition

(CRUD)

Feldebeschreibung (nur die wichtigsten Felder)

Feld

DatentypOptional

Bemerkung

ID

keyna

PK, wird bei Inserts zurückgegeben

BestID

ref

FK, ID auf OnlineBestellung, wird automatisch verwaltet falls Positionen mit der Bestellung übermittelt werden

ArtikelID

ref

FK, ID des gekauften Artikels (=> ./Artikel)

Bezeichnungstring[2k]xOptional, Artikelbezeichnung

Anzahl

num[12,4]

Anzahl des gekauften Artikels

Bei Reduktionen Menge als -1 liefern und den Betrag positiv

Preis

num[12,4]

Im Web kalkulierter Einheitspreis

Total

num[12,4]

Im Web kalkulierter Endpreis = Anzahl * Preis

PreisErmittlungnum[2]x

Art des Preises, kann je nach Systemeinstellung übernommen oder ignoriert werden. Gültig sind:

10        Spezialpreis
20        Aktionspreis
30        Preis aus Preisgruppe
40        Basispreis
50        Preis überschreiben 

55        Internetpreis (erst ab VinX Version 13, dann bervorzugt)