Per API Lieferstatus einer Bestellung ändern

Hallo,

per Admin API kann ich bereits eine Paket-Sendungsnummer aus unserer Warenwirtschaft speichern:
PATCH auf /api/v1/order-delivery/xyz mit PostField trackingCodes=[123]

Ich möchte nun auch den Lieferstatus von „open“ auf „shipped“ patchen, was aber nicht gelingt wenn ich einfach ein PostField „stateId“:xyz anhänge. Hierbei bekomme ich den Fehler „This field is write protected“.

Wie kann ich per API den Lieferstatus einer Bestellung von „open“ auf „shipped“ ändern?

Danke für Vorschläge!
Ansgar

Mein bisheriger Code funktioniert nur für trackingCodes, nicht aber für den Lieferstatus:

$statesShipped = $api->get('/api/v1/state-machine-state?filter[technicalName]=shipped');
$shippedStateId = $statesShipped->data[0]->id ?? null;

$deliv = $api->get('/api/v1/order-delivery?filter[orderId]=xyz');
foreach($deliv->data as $d) {
    $api->patch('/api/v1/order-delivery/'.$d->id,
        [
            'trackingCodes' => ['helloFoo12345'],
            //'stateId' => $shippedStateId <= "This field is write protected"
            //'relationships.stateMachineState.id' => $shippedStateId <= funzt auch nicht
            'relationships'=>['stateMachineState'=>['id' => $shippedStateId]]
        ]);
}

 

Konnte das durch die Untersuchung der XHR Aufrufe im Admin-Bereich herausfinden:

$api->post('/api/v1/_action/order_delivery/'.$delivery->id.'/state/ship');

Daraufhin wird auch die zugehörige Mail an den Kunden verschickt („Bestellung bei xyz wurde ausgeliefert“)

2 „Gefällt mir“

Danke. Es ist m. E. aber ein bisschen traurig, dass man solche Basics mit detektivischen Mitteln herausfinden muss…

1 „Gefällt mir“

Mich wundert, dass “…/ship” der richtige Wert ist.

Laut OrderDeliveryStates.php wäre das doch “shipped”, oder verstehe ich das falsch?

 

In der Tabelle state_machine_transition sind vier wesentliche Werte gespeichert: action_name (hier: ship), from_state_id (die gegenwärtige stateId), to_state_id (die stateId, die nach Ausführung der Aktion für die jeweilige Status-Rubrik state_machine_id (in Tabelle state_machine zu finden, enthält IDs für Bestellstatus, Zahlungsstatus, Lieferstatus) eingetragen wird).    

1 „Gefällt mir“