REST API Fehler bei Customer

Hallo,

mir ist ein Fehler in der REST-API aufgefallen, dieser lässt einen nicht das Bundesland setzen.

Beispiel:

$Customer = $api->GET('customers/'.$Cust['id']);
$update = $api->PUT('customers/'.$Cust['id'], $Customer['data']);

API: No Success: 1111 Error message: Unrecognized identifier fields: 'countryId', 'position', 'name', 'shortCode', 'active' are not present on class 'Shopware\Models\Country\State'.

Also ein 1zu1 führt zu einem Fehler.
Wenn man state entfernt geht es. Allerdings kann man so natürlich nicht das Bundesland setzen.

 

Zusätzlich ist mir aufgefallen, wenn man z.b. die Firma entfernen möchte, geht dies nicht. Wenn man das Feld leert oder entfernt, bleibt der alte Wert erhalten.
Das natürlich etwas nervig. da man so z.b. auch die UstID nicht entfernen kann, wenn der Kunde eine ungültige hinterlegt hat und man diese entfernen möchte.

 

Beste Grüße

Hallo Kadis,

 

also via API lässt sich das Bundesland sehrwohl ändern.

Das Bundesland ist ja Teil der Rechnungs- bzw. Lieferadresse.

In der Customer Resource ist folgende Funktion für das setzen von Land und Bundesland verantwortlich:

private function prepareAddressData(array $data, $filter = false)
    {

        $data['country'] = !empty($data['country']) ? $this->getContainer()->get('models')->find(CountryModel::class, (int) $data['country']) : null;
        $data['state'] = !empty($data['state']) ? $this->getContainer()->get('models')->find(StateModel::class, $data['state']) : null;

        return $filter ? array_filter($data) : $data;
    }

Wie Du siehst, muss hier lediglich die id des States gesetzt werden (Zweiter Parameter in der find Funktion):

$customer = array(
   'billing'=> array(
       'state'=>3 // z.B. für NRW
   )
);
$client->put("customers/1", $customer);

Das keine leeren Strings für company und vatId gesetzt werden können, liegt ebenfalls an der Funktion prepareAddressData.
Denn die array_filter Funktion entfernt false,null und leider auch einen leeren String aus der Rückgabe.

Ein Workaround wäre hier mit dem String ‘NULL’ zu arbeiten.
Dann müsstest Du Dich um das Update allerdings selbst kümmern.

Via Plugin einen Handler auf das Event  ‘Enlight_Controller_Action_PostDispatch_Api_Customers’ registrieren, und die relevanten Werte auf (string) ‘NULL’ prüfen und ggbf. updaten…

 

Hallo MrMDeluxe,

danke für die Info, ich denke dann muss ich hier per SQL manuell nachhelfen.

@Shopware Denke aber schon das es teilweise eine Bug ist, gerade was das leeren von Feldern angeht :wink: