Ich versuche, den Bestellstatus einer Bestellung über die REST-Api zu ändern. Mit folgendem Snippet müsste es gehen, stattdessen fliegt ne Exception: $orderResource = \Shopware\Components\Api\Manager::getResource('Order'); $orderResource-\>update(65, array( 'orderStatusId' =\> 1, ));
Das Resultat: The identifier id is missing for a query of Shopware\Models\User\User in Doctrine/ORM/ORMException.php on line 150 Stack trace: #0 Doctrine/ORM/EntityRepository.php(116): Doctrine\ORM\ORMException::missingIdentifierField('Shopware\Models...', 'id') #1 Shopware/Components/Model/ModelRepository.php(164): Doctrine\ORM\EntityRepository-\>find(NULL, 0, NULL) #2 Doctrine/ORM/EntityManager.php(371): Shopware\Components\Model\ModelRepository-\>find(NULL, 0, NULL) #3 Shopware/Models/Order/Order.php(1074): Doctrine\ORM\EntityManager-\>find('Shopware\Models...', NULL) #4 Doctrine/ORM/Mapping/ClassMetadataInfo.php(1880): Shopware\Models\Order\Order-\>beforeUpdate() #5 Doctrine/ORM/UnitOfWork.php(940): Doctrine\ORM\Mapping\ClassMetadataInfo-\>invokeLifecycleCallbacks('postUpdate', Object(Shopware\Models\Order\Order)) #6 Doctrine/ORM/UnitOfWork.php(310): Doctrine\ORM\UnitOfWork-\>executeUpdates(Object(Doctrine\ORM\Mapping\ClassMetadata)) #7 Doctrine/ORM/EntityManager.php(355): Doctrine\ORM\UnitOfWork-\>commit(NULL) #8 Shopware/Components/Api/Resource/Resource.php(196): Doctrine\ORM\EntityManager-\>flush(NULL) #9 Shopware/Components/Api/Resource/Order.php(185): Shopware\Components\Api\Resource\Resource-\>flush() #10 Shopware\Components\Api\Resource\Order-\>update(65, Array)
Wenn man stattdessen das Status-Objekt direkt reinschreibt: $orderResource = \Shopware\Components\Api\Manager::getResource('Order'); $state = Shopware()-\>Models()-\>getRepository('Shopware\Models\Order\Status')-\>findOneBy(array( 'id' =\> 1, 'group' =\> 'state', )); $orderResource-\>update(65, array( 'orderStatus' =\> $state, ));
… dann scheint zwar alles zu funktionieren (keine Exception, das order-object wird returned), allerdings wurde der Status nicht aktualisiert: ... ["orderStatus"] =\> &array(5) { ["id"] =\> int(0) ["description"] =\> string(5) "Offen" ["position"] =\> int(1) ["group"] =\> string(5) "state" ["sendMail"] =\> int(1) } ...
getestet mit Shopware 4.0.3
Hallo Oli, schuld an diesem Verhalten ist ein PostUpdate-Event im Order-Model. Dort wird eine Backend-Session/Backend Benutzer erwartet. Dies wird mit dem nächsten Minor Release gelöst werden. Bis dahin kann ich dir folgenden Fix anbieten: Datei: /engine/Shopware/Models/Order/Order.php Zeile 1074 folgende Codezeilen: $user = Shopware()-\>Models()-\>find('Shopware\Models\User\User', Shopware()-\>Auth()-\>getIdentity()-\>id); $history-\>setUser($user);
durch diese ersetzen: if (Shopware()-\>Auth()-\>getIdentity()) { $user = Shopware()-\>Models()-\>find('Shopware\Models\User\User', Shopware()-\>Auth()-\>getIdentity()-\>id); $history-\>setUser($user); }
Viele Grüße Benjamin Cremer :shopware:
Ich knuepfe hier einmal an, da wir uns im selben Kontext bewegen. Wir koennen Order und aehnliches muehelos aufrufen und fuer unsere Logistikschnittstelle verwenden. Die Formulierung fuer PUT Bestellstatus, analog den devleoper’s infos gibt uns folgendes zurueck:
Tue Mar 22 16:59:36 CET 2016:DEBUG:>> "PUT /api/orders/20003?useNumberAsId=true HTTP/1.1[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:>> "Accept-Encoding: gzip,deflate[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:>> "Content-Type: application/json[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:>> "Content-Length: 36[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:>> "Host: shopware.p289761.webspaceconfig.de[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:>> "Connection: Keep-Alive[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:>> "User-Agent: Apache-HttpClient/4.1.1 (java 1.5)[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:>> "Authorization: Digest username="
Tue Mar 22 16:59:36 CET 2016:DEBUG:>> "[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:>> "{[\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:>> ""data":[{[\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:>> ""orderStatusId":"8"}[\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:>> "]}[\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:<< "HTTP/1.1 200 OK[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:<< "Date: Tue, 22 Mar 2016 15:59:32 GMT[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:<< "Server: Apache[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:<< "X-Powered-By: PHP/5.6.10-pl0[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:<< "Cache-Control: nocache, private[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:<< "Keep-Alive: timeout=5, max=99[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:<< "Connection: Keep-Alive[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:<< "Transfer-Encoding: chunked[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:<< "Content-Type: application/json[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:<< "[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:<< "69[\r][\n]"
Tue Mar 22 16:59:36 CET 2016:DEBUG:<< "{"success":true,"data":{"id":3,"location":"http:\/\/shopware.p289761.webspaceconfig.de\/api\/orders\/3"}}"
Tue Mar 22 16:59:36 CET 2016:DEBUG:<< "[\r][\n]"
Der Status wird dabei jedoch nicht geaendert. Woher kommt der „success:true“ (welche Info wurde geputted) und wie koennen wir die orderstatusid aendern?
Danke
Shopware 5.1.2
wäre auch an einer Lösung interessiert,. Viele WaWi-Plugins, bzw. die Hersteller, bieten keine interne Möglichkeit den Bestellstatus zurück zuschreiben. Dabei ist das ein wirklich wichtiges Feature im Prozess…