From 638386b92f1581e36f3754f04115ce2beaf758a4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Patrick=20M=C3=BCller?= <p.mueller@pcsg.de>
Date: Thu, 29 Jul 2021 13:57:36 +0200
Subject: [PATCH] fix: possible fix for quiqqer/shipping#35

---
 events.xml                            |  3 ++
 src/QUI/ERP/Shipping/EventHandler.php | 46 ++++++++++++++++++++++++++-
 2 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/events.xml b/events.xml
index a1ff2d3..4b4e976 100644
--- a/events.xml
+++ b/events.xml
@@ -12,6 +12,9 @@
     <event on="onQuiqqerOrderCustomerDataSave"
            fire="\QUI\ERP\Shipping\EventHandler::onQuiqqerOrderCustomerDataSave"
     />
+    <event on="onQuiqqerOrderOrderProcessCheckoutOutput"
+           fire="\QUI\ERP\Shipping\EventHandler::onQuiqqerOrderOrderProcessCheckoutOutput"
+    />
     <event on="onUserSaveBegin"
            fire="\QUI\ERP\Shipping\EventHandler::onUserSaveBegin"
     />
diff --git a/src/QUI/ERP/Shipping/EventHandler.php b/src/QUI/ERP/Shipping/EventHandler.php
index 3fe98ca..fe90ad8 100644
--- a/src/QUI/ERP/Shipping/EventHandler.php
+++ b/src/QUI/ERP/Shipping/EventHandler.php
@@ -8,7 +8,7 @@
 
 use QUI;
 use QUI\ERP\Products\Handler\Fields as ProductFields;
-use QUI\ERP\Shipping\ShippingStatus\Handler;
+use QUI\ERP\Order\Controls\OrderProcess\Checkout as OrderCheckoutStepControl;
 use \Quiqqer\Engine\Collector;
 
 /**
@@ -210,6 +210,50 @@ public static function onOrderProcessCustomerDataEnd(
         $Collector->append($Control->create());
     }
 
+    /**
+     * quiqqer/order: onQuiqqerOrderOrderProcessCheckoutOutput
+     *
+     * @param OrderCheckoutStepControl $Checkout
+     * @param string $text
+     * @return void
+     */
+    public static function onQuiqqerOrderOrderProcessCheckoutOutput(OrderCheckoutStepControl $Checkout, string $text)
+    {
+        if (Shipping::getInstance()->shippingDisabled()) {
+            return;
+        }
+
+        $Order = $Checkout->getOrder();
+
+        if (!$Order) {
+            return;
+        }
+
+        $DeliveryAddress = $Order->getDeliveryAddress();
+
+        if ($DeliveryAddress->getId() === 0) {
+            $customerId = $Order->getCustomer()->getId();
+            $Customer   = QUI::getUsers()->get($customerId);
+
+            $deliveryAddressId = $Customer->getAttribute('quiqqer.delivery.address');
+
+            if (!empty($deliveryAddressId)) {
+                try {
+                    $DeliveryAddress   = $Customer->getAddress($deliveryAddressId);
+                    $ErpDeliveryAddres = new QUI\ERP\Address(
+                        \json_decode($DeliveryAddress->toJSON(), true),
+                        $Order->getCustomer()
+                    );
+
+                    $Order->setDeliveryAddress($ErpDeliveryAddres);
+                    $Order->save(QUI::getUsers()->getSystemUser());
+                } catch (\Exception $Exception) {
+                    QUI\System\Log::writeException($Exception);
+                }
+            }
+        }
+    }
+
     /**
      * @param QUI\ERP\Order\Controls\OrderProcess\CustomerData $CustomerData
      *
-- 
GitLab