From 38c7bb9bc058c2aa7cbee28ebe131b3f751eca9e Mon Sep 17 00:00:00 2001 From: Ivana Nestorovic Date: Fri, 16 May 2025 17:37:05 +0200 Subject: [PATCH 1/2] Add rounding discount basket item ISSUE:MAIN-2277 --- Helper/Order.php | 47 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/Helper/Order.php b/Helper/Order.php index 955c69b..74a49e7 100644 --- a/Helper/Order.php +++ b/Helper/Order.php @@ -1,4 +1,5 @@ createBasket($order); $vatRate = 0; + $basketTotal = 0; if ($order->getShippingAmount() > 0) { - $basket->addBasketItem( - $this->createShippingItem($order) - ); + $shippingItem = $this->createShippingItem($order); + $basket->addBasketItem($shippingItem); + $basketTotal += $shippingItem->getAmountPerUnitGross(); } foreach ($order->getAllVisibleItems() as $orderItem) { @@ -141,18 +143,28 @@ public function createBasketForOrder(OrderModel $order): Basket continue; } - $basket->addBasketItem( - $this->createBasketItem($orderItem) - ); + $item = $this->createBasketItem($orderItem); + $basket->addBasketItem($item); - if($orderItem->getTaxPercent() !== null){ + if ($orderItem->getTaxPercent() !== null) { $vatRate = (float)$orderItem->getTaxPercent(); } + + $basketTotal += $item->getAmountPerUnitGross() * $item->getQuantity(); } if (abs($order->getBaseDiscountAmount()) > 0) { + $vaucherItem = $this->createVoucherItem($order, $vatRate); + $basket->addBasketItem($vaucherItem); + $basketTotal -= abs($vaucherItem->getAmountDiscountPerUnitGross()); + } + + $totalOrder = $order->getBaseGrandTotal(); + $difference = round($totalOrder - $basketTotal, 2); + + if (abs($difference) > 0) { $basket->addBasketItem( - $this->createVoucherItem($order, $vatRate) + $this->createRoundingItem($difference) ); } @@ -210,6 +222,25 @@ protected function createBasketItem(Item $orderItem): BasketItem return $basketItem; } + + private function createRoundingItem(float $amount): BasketItem + { + $item = new BasketItem(); + $item->setType(BasketItemTypes::VOUCHER); + $item->setTitle('Rounding Adjustment'); + $item->setQuantity(1); + $item->setVat(0.0); + + if ($amount < 0) { + $item->setAmountDiscountPerUnitGross(abs($amount)); + } + if ($amount > 0) { + $item->setAmountPerUnitGross($amount); + } + + return $item; + } + /** * Create Voucher Item * From 703d4528ed9bb1d81f7cec8773a12c9ec2c046ef Mon Sep 17 00:00:00 2001 From: Boljanovic Date: Wed, 21 May 2025 14:43:47 +0200 Subject: [PATCH 2/2] [Release 3.2.8 - 2025-05-22] --- CHANGELOG.md | 4 ++++ composer.json | 2 +- etc/module.xml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7ca09d..741f3a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [3.2.8](https://github.com/unzerdev/magento2/compare/3.2.7..3.2.8) +### Fixed +* Rounding issue in case of total amount mismatch + ## [3.2.7](https://github.com/unzerdev/magento2/compare/3.2.6..3.2.7) ### Added * Client's IP address in every request sent to Unzer API diff --git a/composer.json b/composer.json index 495efc3..d2d5133 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "unzerdev/magento2", "description": "This extension for Magento 2 provides a direct integration of the Unzer payment types to your Magento 2 shop via the Unzer Payment API (PAPI).", "type": "magento2-module", - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "require": { "php": "~7.4.0|~8.1.0|~8.2.0|~8.3.0", diff --git a/etc/module.xml b/etc/module.xml index 80a570e..82dcece 100644 --- a/etc/module.xml +++ b/etc/module.xml @@ -1,7 +1,7 @@ - +