diff --git a/events.xml b/events.xml index bae7bfa1cf5a8324f550f69c59049c47b8d80a08..7794d2b9ed6590fb6df889cd0f043705d09047d1 100644 --- a/events.xml +++ b/events.xml @@ -5,6 +5,9 @@ <event on="onQuiqqerOrderBasketToOrderEnd" fire="\QUI\ERP\Shipping\EventHandler::onQuiqqerOrderBasketToOrderEnd" /> + <event on="onQuiqqerOrderUpdateBegin" + fire="\QUI\ERP\Shipping\EventHandler::onQuiqqerOrderUpdateBegin" + /> <event on="onPackageSetup" fire="\QUI\ERP\Shipping\EventHandler::onPackageSetup" /> @@ -41,14 +44,12 @@ <event on="onHeaderLoaded" fire="\QUI\ERP\Shipping\EventHandler::onTemplateGetHeader" /> - <event on="onQuiqqer::frontend-users::user-address-top" fire="\QUI\ERP\Shipping\EventHandler::onFrontendUsersAddressTop" /> <event on="onQuiqqer::order::orderProcessCustomerDataEnd" fire="\QUI\ERP\Shipping\EventHandler::onOrderProcessCustomerDataEnd" /> - <event on="onQuiqqer::products::price::end" fire="\QUI\ERP\Shipping\EventHandler::onQuiqqerProductsPriceEnd" /> diff --git a/src/QUI/ERP/Shipping/EventHandler.php b/src/QUI/ERP/Shipping/EventHandler.php index 21a4e26c7ddf1f9e326b112e770ca76b8874991c..1815b8cb27ef3e6fac549d0eaf432e9da10c35a7 100644 --- a/src/QUI/ERP/Shipping/EventHandler.php +++ b/src/QUI/ERP/Shipping/EventHandler.php @@ -15,6 +15,7 @@ use function explode; use function json_decode; use function method_exists; +use function str_replace; use function strpos; /** @@ -554,4 +555,55 @@ public static function onQuiqqerOrderInit(QUI\ERP\Order\AbstractOrder $Order) { self::onQuiqqerOrderShippingOnEmpty($Order); } + + /** + * @param \QUI\ERP\Order\AbstractOrder $Order + * @return void + */ + public static function onQuiqqerOrderUpdateBegin( + QUI\ERP\Order\AbstractOrder $Order, + &$data = [] + ) { + $Articles = $Order->getArticles(); + $PriceFactors = $Articles->getPriceFactors(); + + if (!$PriceFactors->count()) { + return; + } + + // check if shipping factor exist + $shippingFactor = null; + $factors = $PriceFactors->toArray(); + $Shipping = $Order->getShipping(); + + if (!$Shipping) { + return; + } + + foreach ($factors as $index => $factor) { + if (strpos($factor['identifier'], 'shipping-pricefactor-') !== false) { + $shippingFactor = $factor; + break; + } + } + + $identifier = $shippingFactor['identifier']; + $identifier = str_replace($identifier, 'shipping-pricefactor-', ''); + $id = (int)$identifier; + + if ($id !== $Shipping->getId() && isset($index)) { + $Factor = $PriceFactors->getFactor($index); + $factor = $Factor->toArray(); + + $factor['identifier'] = 'shipping-pricefactor-' . $Shipping->getId(); + $factor['title'] = $Shipping->getTitle(); + + $PriceFactors->setFactor( + $index, + new QUI\ERP\Accounting\PriceFactors\Factor($factor) + ); + + $data['articles'] = $Articles->toJSON(); + } + } }