Skip to content

Commit

Permalink
issue Setono#261 fix, thanks to @TalkMarc
Browse files Browse the repository at this point in the history
  • Loading branch information
ehibes committed Oct 13, 2024
1 parent 2d16c50 commit 36e4fb4
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
18 changes: 16 additions & 2 deletions src/Api/CommandHandler/AddItemToCartHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,13 @@ public function __invoke(SyliusAddItemToCart $addItemToCart): OrderInterface
$cartItem = $this->cartItemFactory->createNew();
$cartItem->setVariant($productVariant);

if ($addItemToCart instanceof SetonoSyliusGiftCardAddItemToCart) {
if ($this->isGiftCard($addItemToCart, $productVariant)) {
/** @var ProductInterface $product */
$product = $productVariant->getProduct();
if ($product->isGiftCardAmountConfigurable()) {
/** @var SetonoSyliusGiftCardAddItemToCart $addItemToCart */
$addItemToCart = $addItemToCart;
/** @var int|null $giftCardAmount */
$giftCardAmount = $addItemToCart->getAmount();
Assert::notNull($giftCardAmount);
$cartItem->setUnitPrice($giftCardAmount);
Expand All @@ -57,10 +60,12 @@ public function __invoke(SyliusAddItemToCart $addItemToCart): OrderInterface
$this->orderItemQuantityModifier->modify($cartItem, $addItemToCart->quantity);
$this->orderModifier->addToOrder($cart, $cartItem);

if ($addItemToCart instanceof SetonoSyliusGiftCardAddItemToCart) {
if ($this->isGiftCard($addItemToCart, $productVariant)) {
/** @var OrderItemUnitInterface $unit */
foreach ($cartItem->getUnits() as $unit) {
$giftCard = $this->giftCardFactory->createFromOrderItemUnitAndCart($unit, $cart);
/** @var SetonoSyliusGiftCardAddItemToCart $addItemToCart */
$addItemToCart = $addItemToCart;
$giftCard->setCustomMessage($addItemToCart->getCustomMessage());

// As the common flow for any add to cart action will flush later. Do not flush here.
Expand All @@ -70,4 +75,13 @@ public function __invoke(SyliusAddItemToCart $addItemToCart): OrderInterface

return $cart;
}

private function isGiftCard(SyliusAddItemToCart $addItemToCart, ProductVariantInterface $productVariant): bool
{
$product = $productVariant->getProduct();

return $addItemToCart instanceof SetonoSyliusGiftCardAddItemToCart &&
$product instanceof ProductInterface &&
$product->isGiftCard();
}
}
1 change: 0 additions & 1 deletion tests/Unit/Api/CommandHandler/AddItemToCartHandlerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,6 @@ public function it_adds_simple_item_to_cart(): void
->createNew()
->willReturn($cartItem);

$productVariant->getProduct()->shouldNotBeCalled();

$orderItemQuantityModifier->modify($cartItem, 1)->shouldBeCalled();
$orderModifier->addToOrder($cart, $cartItem)->shouldBeCalled();
Expand Down

0 comments on commit 36e4fb4

Please sign in to comment.