ansgaransgar MemberComments: 23 Received thanks: 5 Member since: February 2020

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

Answers

  • ansgaransgar MemberComments: 23 Received thanks: 5 edited March 2020 Member since: February 2020

    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]]
            ]);
    }
    

     

  • ansgaransgar MemberComments: 23 Received thanks: 5 Member since: February 2020

    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")

  • hanshuckebeinhanshuckebein MemberComments: 2 Received thanks: 1 Member since: June 2020

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

  • ReimersReimers MemberComments: 10 Received thanks: 0 Member since: September 2020

    Mich wundert, dass ".../ship" der richtige Wert ist.

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

    <?php declare(strict_types=1);
    
    namespace Shopware\Core\Checkout\Order\Aggregate\OrderDelivery;
    
    final class OrderDeliveryStates
    {
        public const STATE_MACHINE = 'order_delivery.state';
        public const STATE_OPEN = 'open';
        public const STATE_PARTIALLY_SHIPPED = 'shipped_partially';
        public const STATE_SHIPPED = 'shipped';
        public const STATE_RETURNED = 'returned';
        public const STATE_PARTIALLY_RETURNED = 'returned_partially';
        public const STATE_CANCELLED = 'cancelled';
    }

     

  • hanshuckebeinhanshuckebein MemberComments: 2 Received thanks: 1 Member since: June 2020

    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).    

    Thanked by 1Reimers
Sign In or Register to comment.