Ich habe es jetzt hinbekommen, dass ein Artikel angelegt wird. Der Code sieht so aus:
private function createArticle($name,$ordernumber,$price){
$artExist = Shopware()->Db()->fetchOne('Select count(id) from s_articles_details WHERE ordernumber="'.$ordernumber.'"');
if(!$artExist){
$params = array(
'name' => $name,
'taxId' => 1,
'supplierId' => 1,
'description' => '',
'descriptionLong' => '',
'active' => 1,
'metaTitle' => '',
'keywords' => '',
'filterGroupId' => 1,
'mainDetail' => array(
'number' => $ordernumber,
'supplierNumber' => '',
'additionalText' => '',
'stockmin' => 0,
'stockMin' => 0,
'inStock' => 100,
'weight' => 0,
'ean' => '',
'unitId' => 9,
'purchaseUnit' => 1,
'referenceUnit' => 1,
'packUnit' => '',
'shippingTime' => '',
'prices' => array(
array(
'customerGroupKey' => 'EK',
'from' => 1,
'to' => 'beliebig',
'price' => $price,
'pseudoPrice' => 0,
'basePrice' => 0,
'percent' => 0,
),
),
),
'categories' => array(
array(
'id' => 7
),
),
);
$sArticle = \Shopware\Components\Api\Manager::getResource("Article");
$sArticle->create($params);
// Diese folgende Zeile, siehe Beschreibung unten:
Shopware()->Db()->update('s_articles_details', array('active' => 1),array('ordernumber IN(?)'=>array($ordernumber)));
}
}
Leider funktioniert es noch nicht ganz. Im Bereich „Kasse“ kommt dann die Meldung, wennd er neue Artikel im Warenkorb ist.
Der Artikel wird auch ordnungsgemäß im Backend angezeigt. Öffnet man ihn dort und klickt auf Speichern, ist das Problem weg und alles funktioniert. Natürlich möchte ich das nicht machen müssen. Ich habe herausgefunden, dass „active“ in der Datenbank in der Tabelle s_articles_details den Wert 0 hat, obwohl ich im oben angegeben code active explizit auf 1 setze. Öffnet man den Artikel im Backend, wird dieser sowohl in der Übersicht als auch in der Detailansicht als Aktiv dargestellt (der grüne Haken ist da). Nach dem erneuten Speichern ist der Wert allerdings erst in der Tabelle s_articles_details auf 1 gesetzt. Woran liegt das?
Ich kann durch Verwendung der letzten Zeile Code diesen Effekt verhindern, aber das ist doch wirklich seltsam, oder?