Hallo,
ich würde gerne die menge einer bestellposition via skript/dal ändern.
Der Datensatz für eine Bestellposition einer Bestellung (order_line_item) enthält 4 Felder die sich auf die bestellte Menge, bzw den Preis beziehen.
quantity / total_price
price_definition
price
Ich habe meinen eigenen Controller erstellt der vom AbstractController erbt. Folgend mein Code um die Bestellposition anzupassen:
/** @var EntityRepositoryInterface $orderLineItemRepository */
$orderLineItemRepository = $this->container->get(‘order_line_item.repository’);
$orderedProducts = $this->oiUtils->getOrderedProducts($orderLineItemRepository, $orderID, $context); // $orderID wird vorher abgefragt und ist die UUID der entsprechenden Bestellung
Meine eigene Klasse oiUtils hat die Funktion getOrderedProducts. Diese gibt ein Array mit allen Bestellpositionen (order line items) der jeweiligen Bestellung zurück.
Dieses Array durchlaufe ich in einer Schleife und vergleiche den “quantity” Wert mit einem anderen Wert aus anderer Quelle. Sofern sich die Werte unterscheiden will ich die Bestellposition dahingehend anpassen, dass der neue Wert für die Anzahl übernommen wird, natürlich soll im Zuge dessen auch der Preis angepasst werden.
Direkt über die DAL ist dies leider nicht möglich, ich kann lediglich die Anzahl ändern, nicht jedoch das Feld für den Komplettpreis der Position.
$orderLineItemRepository->update(
[
[‘id’ => $orderLineItem->getId(), ‘quantity’ => $reportedAmount],
],
Context::createDefaultContext()
);
Dieser Befehl ändert zwar die Anzahl des bestellten Produkts, allerdings kann das Feld “total_price” nicht auf gleiche Art und Weise überschrieben werden.
$orderLineItemRepository->update(
[
[‘id’ => $orderLineItem->getId(), ‘quantity’ => $reportedAmount, ‘totalPrice’ => $newTotal],
],
Context::createDefaultContext()
);
Ändert nichts ausser der “quantity”
Ich glaube, dass ich irgend eine spezielle Funktion aufrufen muss, allerdings findet sich hierzu inder Dokumentation kein Hinweis. Sofern ich nur die “quantity” anpasse und danach in der Administration die Bestellung anrufe, Bearbeite und ohne etwas zu ändern bestätige wird der Preis korrekt angepasst.