From ed1c428130aea88baa5e43807179deb183faa887 Mon Sep 17 00:00:00 2001 From: Mario Ramundo Date: Tue, 8 Jun 2021 23:20:01 +0200 Subject: [PATCH] Handle cart price rule adjustments Fix quantity to 1 & set quantity in name to avoid divisions of adjustments --- .../Provider/LineItemProvider.php | 25 ++++++++++++++++--- .../Provider/LinetItemNameProvider.php | 2 +- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/CoreShop/Payum/StripeBundle/Provider/LineItemProvider.php b/src/CoreShop/Payum/StripeBundle/Provider/LineItemProvider.php index 82905dc..fc8c105 100644 --- a/src/CoreShop/Payum/StripeBundle/Provider/LineItemProvider.php +++ b/src/CoreShop/Payum/StripeBundle/Provider/LineItemProvider.php @@ -16,6 +16,7 @@ use CoreShop\Component\Core\Model\OrderInterface; use CoreShop\Component\Core\Model\OrderItemInterface; +use CoreShop\Component\Order\Model\AdjustmentInterface; final class LineItemProvider implements LineItemProviderInterface { @@ -38,16 +39,34 @@ public function getLineItem(OrderItemInterface $orderItem): ?array /** @var OrderInterface|null $order */ $order = $orderItem->getOrder(); - if (null === $order || $orderItem->getItemPrice() < 1) { + if (null === $order) { + return null; + } + + $itemAmount = $this->getLineItemAmount($orderItem); + + if ($itemAmount < 1) { return null; } return [ - 'amount' => $orderItem->getItemPrice(), + 'amount' => $itemAmount, 'currency' => $order->getCurrency()->getIsoCode(), 'name' => $this->lineItemNameProvider->getItemName($orderItem), - 'quantity' => $orderItem->getQuantity(), + 'quantity' => 1, 'images' => $this->lineItemImagesProvider->getImageUrls($orderItem), ]; } + + private function getLineItemAmount(OrderItemInterface $orderItem): int + { + $totalCartPriceRuleAdjustments = 0; + foreach ($orderItem->getAdjustments(AdjustmentInterface::CART_PRICE_RULE) as $adjustment) { + if ($adjustment->getNeutral()) { + $totalCartPriceRuleAdjustments += $adjustment->getAmount(); + } + } + + return $orderItem->getTotal() + $totalCartPriceRuleAdjustments; + } } diff --git a/src/CoreShop/Payum/StripeBundle/Provider/LinetItemNameProvider.php b/src/CoreShop/Payum/StripeBundle/Provider/LinetItemNameProvider.php index e951bf9..c95a4cf 100644 --- a/src/CoreShop/Payum/StripeBundle/Provider/LinetItemNameProvider.php +++ b/src/CoreShop/Payum/StripeBundle/Provider/LinetItemNameProvider.php @@ -29,6 +29,6 @@ public function getItemName(OrderItemInterface $orderItem): string ); } - return $itemName; + return sprintf('%sx - %s', $orderItem->getQuantity(), $itemName); } }