Moin,
Ich habe hier so 'ne Art Bundle-Geschichte, also ein LineItem, der unter gewissen Voraussetzungen noch Children bekommen soll - das klappt soweit auch ganz ok, wenn man mal von der Neuberechnung des Warenkorb-Gesamtpreises absieht.
alternativ kann ich die eigentlichen children zwar auch als eigenen item in den cart legen und habe dann einen Gesamtpreis, aber hier werden die einzelpreise dann „falsch“ berechnet.
Bsp: ItemX kostet pro Stück 700€ und wird 5x in den Korb gelegt. wären nach adam riese 3500€, angezeigt werden 3740€…
Bisschen Code:
public function onLineItemAdded(LineItemAddedEvent $addedEvent){
$item = $addedEvent->getLineItem();
$cartService = $this->container->get(CartService::class);
$test = $this->getProduct($item->getId());
$cart = $cartService->getCart($addedEvent->getCart()->getToken(), $addedEvent->getContext());
$bundleId = $this->hasBundle($test);
if($bundleId){
$bItems = $this->getBundleItems($bundleId);
foreach($bItems as $key => $bItem){
$product = $this->getProduct($bItem['productId']);
$totalAmount = $bItem['itemAmount'] * $item->getQuantity();
$lItem = new LineItem($bItem['productId'], 'product', $bItem['productId'], $totalAmount);
$lItem->setRemovable(true);
$lItem->setStackable(true);
$price = current($product->getPrice()->getElements());
$calcPrice = new CalculatedPrice(
$price->getGross(),
$price->getGross() * ($lItem->getQuantity() * $item->getQuantity()),
new CalculatedTaxCollection(),
new TaxRuleCollection(),
$lItem->getQuantity()
);
$lItem->setPrice($calcPrice);
$item->addChild($lItem);
//$cartService->add($cart, $lItem, $addedEvent->getContext());
}
$cartService->recalculate($cart, $addedEvent->getContext());
}
Brauche ich jetzt für die Variante mit den Children nen eigenen CartProcessor, oder habe ich einfach nur was anderes übersehen?