LineItem-Children und Warenkorbpreis

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?

Sowas ähnliches mache ich auch gerade. Ich glaub wir verstehen das mit den Children anders, als es gemeint ist ;).

In dem Bundle Beispiel ist es so, dass erst alle Kind-Preise selber berechent werden und am Ende dem Eltern-Element die Summe der Kindpreise als Preis gesetzt wird.

Also im besten Fall fehlt bei dir vielleicht einfach sowas wie:

            $bundleLineItem->setPrice(
                $bundleLineItem->getChildren()->getPrices()->sum()
            );

Vgl.:

https://github.com/shopware/swag-docs-bundle-example/blob/master/src/Core/Checkout/Bundle/Cart/BundleCartProcessor.php#L110

1 „Gefällt mir“

ja, da hast du wohl recht :smiley: … dann fehlt wohl doch der Processor. das wird lustig, da sich der preis des elternelements dann auch noch dynamisch berechnet. nun denn…