Hallo zusammen,
wir haben folgendes Probelm. Immer wenn wir eine Bestellung über die API abrufen (REST API - Examples using the order resource) bekommen wir beim Konten „details“ ja immer in „price“ entweder Brutto- oder Nettopreise, jenachdem wie die Kundengruppe des jeweiligen Shops eingestellt ist.
Nun ist es so das wir sehr viele SubShop und Kundengruppen haben. Ich würde gerne in dem Abruf noch zusätzlich für jeden Artikel(in der Bestellung) den jeweiligen Nettopreis der jeweiligen Kundengruppe haben.
Ich habe mich an das Beispiel der Doku. orientiert. (Extend a REST API resource)
Hier meine Order.php:
Container()->get('dbal_connection');
$sOrder = "SELECT * FROM `s_order` WHERE `id` LIKE '$id'";
$resultOnline = $connection->query($sOrder)->fetch();
$userID = $resultOnline['userID'];
$sUser = "SELECT * FROM `s_user` WHERE `id` LIKE '$userID'";
$resultsuser = $connection->query($sUser)->fetch();
$userGroup = $resultsuser['customergroup'];
/* Aufruf ganze Bestellung */
$filters = [['property' => 'orders.id', 'expression' => '=', 'value' => $id]];
$builder = $this->getRepository()->getOrdersQueryBuilder($filters);
$sql = $builder->getQuery()->getOneOrNullResult($this->getResultMode());
$articleNumber = $sql['details'][0]['articleNumber'];
for($i = 0; $i < count($sql['details']); ++$i){
$availData = $sql['details'][$i]['articleId'];
}
$result = parent::getOne($id);
foreach($result['details'] as &$order) {
foreach ($sql['details'] as $key){
$newarticleNumber = $sql['details']['id'].$key['articleNumber'];
}
$order['articleNumberNew1'] = $newarticleNumber;
$order['articleIdnew'] = $availData;
$order['userGroup'] = $userGroup;
$order['userID'] = $userID;
}
return $result;
}
}
Mein JSON sieht da im „details“ so aus:
"details": [
{
"id": 341511,
"orderId": 283300,
"articleId": 10218,
"taxId": 1,
"taxRate": 19,
"statusId": 0,
"number": "38860",
"articleNumber": "693662",
"price": 644.77,
"quantity": 1,
"articleName": "Apple iPhone 8, gold 64 GB",
"shipped": 0,
"shippedGroup": 0,
"releaseDate": "-0001-11-30T00:00:00+0100",
"mode": 0,
"esdArticle": 0,
"config": "",
"ean": "0190198451699",
"unit": "",
"packUnit": "",
"attribute": {
"id": 257134,
"orderDetailId": 341511,
"attribute1": "",
"attribute2": null,
"attribute3": null,
"attribute4": null,
"attribute5": null,
"attribute6": null,
"wcomDiscountPercent": null,
"wcomDiscountPercentVat": null,
"wcomDiscountAbsolut": null,
"wcomDiscountAbsolutNetto": null,
"wcomDiscountAbsolutVat": null,
"swagBonus": false,
"emzdeliverytime": "lieferbar in 1-3 Werktagen"
},
"articleNumberNew1": "692868",
"articleIdnew": 9829,
"userGroup": "HRD",
"userID": "22130"
},
{
"id": 341512,
"orderId": 283300,
"articleId": 9829,
"taxId": 1,
"taxRate": 19,
"statusId": 0,
"number": "38860",
"articleNumber": "692868",
"price": 2262.92,
"quantity": 1,
"articleName": "Apple MacBook Pro 15“, Touch Bar, silber (Modell 2017) 3,1 GHz Quad‑Core Intel Core i7 Prozessor, Turbo Boost bis zu 4,1 GHz 256 GB SSD Speicher Radeon Pro 555 mit 2 GB Speicher Deutsch",
"shipped": 0,
"shippedGroup": 0,
"releaseDate": "-0001-11-30T00:00:00+0100",
"mode": 0,
"esdArticle": 0,
"config": "",
"ean": "",
"unit": "",
"packUnit": "",
"attribute": {
"id": 257135,
"orderDetailId": 341512,
"attribute1": "",
"attribute2": null,
"attribute3": null,
"attribute4": null,
"attribute5": null,
"attribute6": null,
"wcomDiscountPercent": null,
"wcomDiscountPercentVat": null,
"wcomDiscountAbsolut": null,
"wcomDiscountAbsolutNetto": null,
"wcomDiscountAbsolutVat": null,
"swagBonus": false,
"emzdeliverytime": "lieferbar in ca. 2-3 Wochen"
},
"articleNumberNew1": "692868",
"articleIdnew": 9829,
"userGroup": "HRD",
"userID": "22130"
}
],
Ich hänge gerade an der foreach Schleife. Der obere Wert wird vom unteren ersetzt. Ich brauche an der Stelle die „articleNumber“. Damit würde ich „SELECT * FROM s_articles_details
WHERE ordernumber
LIKE ‚693662‘“ machen und mir die ID holen. Danach mit SELECT * FROM s_articles_prices
WHERE pricegroup
LIKE ‚HRD‘ AND articledetailsID
= 22224 und Bingo ich sollte das Array bekommen an der Stelle ‚price‘ der Netto steht. (Mein Gott…warum macht Shopware das so kompliziert!!!)
Kann man das nachvollziehen? Oder ist das der falsche Ansatz? Vll. gibts einen viel einfacheren Weg?
Viele Grüße!
und Danke!