Wie kann ich eine Bestellung ausführen?

Ein shoppingcart wird mit createOrder in eine Bestellung überführt. upsertExpectedReceiptDateTime und upsertStore legen Lieferzeitraum und Filiale / Lager fest. Dann folgen beginCheckout und finishOrder.

createOrder

mutation m1 {
createOrder(orders:[{
shoppingCartId: "<shoppingCartId>"
expectedReceiptDateTime: {
type: DELIVERY
from: "2037-12-24T00:00:00Z",
to: "2037-12-24T00:00:00Z"
timeFrame: "0-24"
}
constructionSite: {
code: "<code>"
} }]) {
orderId
shoppingCartId
status {
status
message
subStatus {
warning
}
}
}
}

Die mutation createOrder  erstellt eine oder mehrere Bestellung,

Jeder order muss eine shoppingCartId und eine constructionSite mitgegeben werden.

Für jede angelegte order wird eine orderId erzeugt. Der Status einer neuen Bestellung ist NEW.

upsertExpectedReceiptDateTime

mutation m2 {
upsertExpectedReceiptDateTime(
orderIds: ["<orderId>"]
expectedReceiptDateTime: {
type: DELIVERY
from: "2037-12-24T00:00:00Z"
to: "2037-12-24T00:00:00Z"
timeFrame: "0-24"
}
) {
orderId
}
}

Die mutation upsertExpectedReceiptDateTime muss ausgeführt werden, bevor die Bestellung eingeleitet werden kann. Es wird der Abhol- oder Lieferzeitpunkt angegeben.

Wenn das Lieferdatum unbekannt ist, wird als Standard "2037-12-24"  verwendet.

timeFrame 0-24 bedeutet im Laufe des Tages.

upsertStore

mutation m3 {
upsertStore(orderIds: ["<orderId>"], store: {code: "<code>"}) {
orderId
}
}

Mit der mutation upsertStore wird festgelegt, in welcher Filiale bestellt  / auf welches Lager  gebucht wird. Die Information lässt aus der query getUser abfragen.

beginCheckout

mutation m3 {
beginCheckout(orderIds: ["<orderId>"]) {
status {
status
}
}
}

Durch Ausführen der mutation beginCheckout  wird der Bestellprozess eingeleitet.Dafür werden die orderIds übergegben. Der Status (status.status) der Bestellung ist dann IN_CHECKOUT.

Wenn die Bestellung geändert wird, durch Hinzufügen oder entfernen von Produkten, wird der Status der Bestellung auf NEW zurückgesetzt.

finishOrder

mutation m4 {
finishOrder(orderIds: ["<orderId>"]) {
status {
status
}
}
}

Die mutation finishOrder kann nur ausgeführt werden, wenn der Status der Bestellung IN_CHECKOUT ist.

Der neue Status der Bestellung ist dann FINISHING. Das bedeutet, unsere System haben die Bestellung erhalten, sie wird an das Warenwirtschaftssystem des Händlers übermittelt

Um zu prüfen, ob die Bestellung erfolgreich war, kann die query orders in bestimmten Zeitabständen ausgeführt werden, bis sich der Status der Bestellung zu FINISHED ändert. Dann steht auch auch die externalOrderNumber zur Verfügung, also die Bestellnummer beim Händler.