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
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.
@binaermanufaktur Zu den Custom Line Items habe ich wahrscheinlich noch einen Bug gefunden. Wenn man das Line Item in den Warenkorb legt und durch den Checkout geht, dann verliert die Bestellung den Shipping Type. Kannst du das so nachvollziehen?
@binaermanufaktur Zu den Custom Line Items habe ich wahrscheinlich noch einen Bug gefunden. Wenn man das Line Item in den Warenkorb legt und durch den Checkout geht, dann verliert die Bestellung den Shipping Type. Kannst du das so nachvollziehen?
Da hat mir anscheinend nur die Delivery Information gefehlt.
ich versuche derzeit was ähnliches in meinem Controller, und zwar möchte ich einen Rabatt anhand einer vorigen Auswahl in den Warenkorb legen, wenn ich die Daten ausgebe, dann ist der Artikel zwar vorhanden, jedoch wird er nicht im Frontend ausgegeben.
Wäre über jede Hilfe dankbar
/**
*
* @Route("/checkout/addBonus", name="frontend.checkout.addBonus"), methods={"GET"})
*/
public function addBonus(Request $request, SalesChannelContext $context)
{
$data = $request->request;
$cart = $this->cartService->getCart($context->getToken(), $context);
$products = $this->findProducts($cart);
if ($products->count() === 0) {
return;
}
$discountLineItem = $this->createDiscount();
// declare price definition to define how this price is calculated
$definition = new AbsolutePriceDefinition("-" . $data->get("add_bonus_balance"), 2, null);
$discountLineItem->setPriceDefinition($definition);
// calculate price
$discountLineItem->setPrice($this->calculator->calculate(
$definition->getPrice(),
$cart->getLineItems()->getPrices(),
$context
));
// add discount to new cart
$this->cartService->add($cart, $discountLineItem, $context);
$this->cartService->recalculate($cart, $context);
return $this->forwardToRoute($data->get("redirectTo"));
}
private function findProducts(Cart $cart): LineItemCollection
{
return $cart->getLineItems()->filter(function (LineItem $item) {
if ($item->getType() !== LineItem::PRODUCT_LINE_ITEM_TYPE) {
return false;
}
return $item;
});
}
private function createDiscount(): LineItem
{
$discountLineItem = new LineItem(Uuid::randomHex(), 'aws-bonus-voucher', null, 1);
$discountLineItem->setLabel('Bonus');
$discountLineItem->setGood(false);
$discountLineItem->setStackable(false);
$discountLineItem->setRemovable(false);
return $discountLineItem;
}
so genau kann ich dir leider keine Antwort geben. Da liegt es wohl an folgender Zeile:
$discountLineItem = new LineItem(Uuid::randomHex(), ‚aws-bonus-voucher‘, null, 1);
Hier versuchst du ein Lineitem mit dem Type ‚aws-bonus-voucher‘ hinzuzufügen. Diesen Type gibt es jedoch nicht. Wie man diesen erstellt war mir auch noch unklar.