mfischermfischer MemberComments: 2 Received thanks: 0 Member since: February 13 edited February 13

Hallo Zusammen,

aktuell versuche ich einen Artikel in meinem Controller in den Warenkorb hinzuzufügen. Dabei gehe ich wie folgt vor:

$id = Uuid::randomHex();
$cart = $this->cartService->getCart($salesChannelContext->getToken(), $salesChannelContext);
$lineItem = new LineItem($id, "testitem", NULL, 1);
$lineItem->setLabel("TEST");
$lineItem->setGood(false);
$lineItem->setStackable(true);
$lineItem->setRemovable(true);
$price = new AbsolutePriceDefinition(10.00, $salesChannelContext->getContext()->getCurrencyPrecision());
$lineItem->setPriceDefinition($price);
$abcolutPrice = new CalculatedPrice( 10.00, 10.00, new CalculatedTaxCollection(), new TaxRuleCollection());
$lineItem->setPrice($abcolutPrice);
$cart->add($lineItem);

Wenn ich mir jetzt direkt danach die variable $cart mit einem print_r ausgebe, dann ist auch das Lineitem enthalten. Der Warenkorb im Frontend und in der Datenbank ist jedoch leer. Folgendes
$cart->getLineItems();

liefert ebenfalls das Item zurück, welches ich zuvor angelegt habe

Shopware\Core\Checkout\Cart\LineItem\LineItemCollection Object
(
    [elements:protected] => Array
        (
            [45f17ef07a204e35bf093ced862dc456] => Shopware\Core\Checkout\Cart\LineItem\LineItem Object
                (
                    [id:protected] => 45f17ef07a204e35bf093ced862dc456
                    [referencedId:protected] => 
                    [label:protected] => TEST
                    [quantity:protected] => 1
                    [type:protected] => testitem
                    [payload:protected] => Array
                        (
                        )

                    [priceDefinition:protected] => Shopware\Core\Checkout\Cart\Price\Struct\AbsolutePriceDefinition Object
                        (
                            [price:protected] => 10
                            [filter:protected] => 
                            [precision:protected] => 2
                            [extensions:protected] => Array
                                (
                                )

                        )

                    [price:protected] => Shopware\Core\Checkout\Cart\Price\Struct\CalculatedPrice Object
                        (
                            [unitPrice:protected] => 10
                            [quantity:protected] => 1
                            [totalPrice:protected] => 10
                            [calculatedTaxes:protected] => Shopware\Core\Checkout\Cart\Tax\Struct\CalculatedTaxCollection Object
                                (
                                    [elements:protected] => Array
                                        (
                                        )

                                    [extensions:protected] => Array
                                        (
                                        )

                                )

                            [taxRules:protected] => Shopware\Core\Checkout\Cart\Tax\Struct\TaxRuleCollection Object
                                (
                                    [elements:protected] => Array
                                        (
                                        )

                                    [extensions:protected] => Array
                                        (
                                        )

                                )

                            [referencePrice:protected] => 
                            [listPrice:protected] => 
                            [extensions:protected] => Array
                                (
                                )

                        )

                    [good:protected] => 
                    [description:protected] => 
                    [cover:protected] => 
                    [deliveryInformation:protected] => 
                    [children:protected] => Shopware\Core\Checkout\Cart\LineItem\LineItemCollection Object
                        (
                            [elements:protected] => Array
                                (
                                )

                            [extensions:protected] => Array
                                (
                                )

                        )

                    [requirement:protected] => 
                    [removable:protected] => 1
                    [stackable:protected] => 1
                    [quantityInformation:protected] => 
                    [modified:protected] => 
                    [extensions:protected] => Array
                        (
                        )

                )

        )

    [extensions:protected] => Array
        (
        )

)

Hat hier jemand eine Idee was ich Falsch mache?

Answers

  • mowlwurfmowlwurf MemberComments: 46 Received thanks: 12 Member since: April 2017

    Hi,

    Dir fehlt der persist in die Datenbank, Du fügst das Item nur einer ArrayCollection hinzu.

    Beispiel https://github.com/shopware/platform/blob/fb4bc791e185512bfde8cd0ea462b0cf527cf82f/src/Core/Checkout/Cart/SalesChannel/CartService.php#L236

  • mfischermfischer MemberComments: 2 Received thanks: 0 Member since: February 13

    @mowlwurf‍ schonmal vielen Dank für deine Antwort. Leider bringt das persist den Artikel auch nicht in den Warenkorb.
     

    $this->persister->save($cart, $salesChannelContext);

    Hast du noch eine Weitere Idee?

  • binaermanufakturbinaermanufaktur MemberComments: 11 Received thanks: 0 Member since: January 7

    Der Persister macht eine Order aus dem Cart... Du musst den Cart meiner Meinung nach processen:

    $cart = $this->cartProcessor->process($cart, $salesChannelContext, new CartBehavior());

    mit 

    Shopware\Core\Checkout\Cart\Processor
  • mfischermfischer MemberComments: 2 Received thanks: 0 Member since: February 13

    @binaermanufaktur‍ & @mowlwurf‍, ich konnte jetzt erfolgreich einen Artikel hinzufügen der bereits existiert.

    $cart = $this->cartService->getCart($context->getToken(), $context);
    $lineItem = new LineItem($productId, "product", NULL, 1);
    $lineItem->setLabel("TEST");
    $lineItem->setGood(false);
    $lineItem->setStackable(true);
    $lineItem->setRemovable(true);
    $lineItem->setReferencedId($productId);
    $cart->add($lineItem);
    $this->cartPersister->save($cart,$context);

    Was leider nicht funktioniert ist ein customType für ein LineItem. Gibt es eine Idee wie ich diesen hinzuzufügen kann? Ich würde gerne ein LineItem "on the fly erstellen" und das Hinzufügen unter einem anderem Type.

  • binaermanufakturbinaermanufaktur MemberComments: 11 Received thanks: 0 Member since: January 7

    Sorry, erst jetzt gelesen. ganz grob so:

    $lineItem = new LineItem(
                    Uuid::randomHex(),
                    'custom'
                );
                $lineItem->setStackable(true);
                $lineItem->setRemovable(true);
                $lineItem->setLabel($label);
                $lineItem->setPriceDefinition($quantityPriceDefinition);
                $lineItem->setQuantity($quantity);
                $lineItem->setDeliveryInformation(new DeliveryInformation(100, 10.0, false));
                $this->cartService->add($cart,$lineItem, $salesChannelContext);
                $this->cartService->recalculate($cart, $salesChannelContext);

    Wobei die quantityPriceDefinition auch eine andere Art der PriceDefinition sein kann.

    Aber problematisch ist leider zur Zeit, dass custom LineItems nicht richtig kalkuliert werden!

    https://issues.shopware.com/issues/NEXT-6936

Sign In or Register to comment.