# LineItem-Children und Warenkorbpreis

**URL:** <https://forum.shopware.com/t/lineitem-children-und-warenkorbpreis/67572>\
**Category:** Programmierung\
**Created:** [10. Juni 2020 um 09:24 UTC](https://forum.shopware.com/t/lineitem-children-und-warenkorbpreis/67572 "2020-06-10T09:24:42Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![mediaciety](https://avatars.discourse-cdn.com/v4/letter/m/ba9def/32.png) [@mediaciety](https://forum.shopware.com/u/mediaciety)\
**Post date:** [10. Juni 2020 um 09:24 UTC](https://forum.shopware.com/t/lineitem-children-und-warenkorbpreis/67572/1 "2020-06-10T09:24:42Z")

</div>

Moin,

&nbsp;

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?

 ![](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/2X/8/898c75b1ca2cc4c41d7e24435bc927334aa72d96.png) ![](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/2X/4/4bf4328e5eec17d83b3000a5b31a56faf785ac47.png)

---

<div class="post-metadata">

**Author:** ![claudio](https://avatars.discourse-cdn.com/v4/letter/c/7cd45c/32.png) [@claudio](https://forum.shopware.com/u/claudio)\
**Post date:** [10. Juni 2020 um 14:39 UTC](https://forum.shopware.com/t/lineitem-children-und-warenkorbpreis/67572/2 "2020-06-10T14:39:47Z")

</div>

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](https://github.com/shopware/swag-docs-bundle-example/blob/master/src/Core/Checkout/Bundle/Cart/BundleCartProcessor.php#L110)

---

<div class="post-metadata">

**Author:** ![mediaciety](https://avatars.discourse-cdn.com/v4/letter/m/ba9def/32.png) [@mediaciety](https://forum.shopware.com/u/mediaciety)\
**Post date:** [10. Juni 2020 um 16:34 UTC](https://forum.shopware.com/t/lineitem-children-und-warenkorbpreis/67572/3 "2020-06-10T16:34:52Z")

</div>

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