From a5f3b8e5056fb2d3a43086397e92661728de4588 Mon Sep 17 00:00:00 2001
From: Henning <leutz@pcsg.de>
Date: Sun, 23 Feb 2025 08:50:36 +0100
Subject: [PATCH] fix(phpstan): update abstractorder and other files for
 consistent function behaviour

Updated AbstractOrder.php to return null instead of false in getShippingStatus() when the shipping
status is not set. This makes the method's behaviour more consistent.

Updated Search.php to add a condition check for class existence before retrieving shipping status.
This ensures that the code will not fail if the class is not defined.

Modified DataLayer.php to add a condition check for class existence before retrieving shipping.

Added @phpstan-ignore-next-line in Utils.php to silence phpstan for the next line of code.

Related: quiqqer/order#172
---
 src/QUI/ERP/Order/AbstractOrder.php   |  8 ++++----
 src/QUI/ERP/Order/Search.php          | 14 ++++++++------
 src/QUI/ERP/Order/Utils/DataLayer.php |  2 +-
 src/QUI/ERP/Order/Utils/Utils.php     |  1 +
 4 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/src/QUI/ERP/Order/AbstractOrder.php b/src/QUI/ERP/Order/AbstractOrder.php
index c3a3f472..01915c29 100644
--- a/src/QUI/ERP/Order/AbstractOrder.php
+++ b/src/QUI/ERP/Order/AbstractOrder.php
@@ -2228,15 +2228,15 @@ public function setProcessingStatus(ProcessingStatus\Status|int $status): void
      * Return the shipping status
      * -> This method only works if shipping is installed
      *
-     * @return bool|QUI\ERP\Shipping\ShippingStatus\Status|null
+     * @return QUI\ERP\Shipping\ShippingStatus\Status|null
      */
-    public function getShippingStatus(): bool|QUI\ERP\Shipping\ShippingStatus\Status|null
+    public function getShippingStatus(): QUI\ERP\Shipping\ShippingStatus\Status|null
     {
         if (
             !QUI::getPackageManager()->isInstalled('quiqqer/shipping')
             || !class_exists('QUI\ERP\Shipping\ShippingStatus\Handler')
         ) {
-            return false;
+            return null;
         }
 
         if ($this->ShippingStatus !== null) {
@@ -2251,7 +2251,7 @@ public function getShippingStatus(): bool|QUI\ERP\Shipping\ShippingStatus\Status
 
         // use default status
         if ($this->ShippingStatus === null) {
-            return false;
+            return null;
         }
 
         return $this->ShippingStatus;
diff --git a/src/QUI/ERP/Order/Search.php b/src/QUI/ERP/Order/Search.php
index 49e8269f..bc493279 100644
--- a/src/QUI/ERP/Order/Search.php
+++ b/src/QUI/ERP/Order/Search.php
@@ -527,7 +527,7 @@ protected function parseListForGrid(array $data): array
             } catch (QUI\Exception $Exception) {
                 QUI\System\Log::writeException($Exception);
 
-                $result[] = $fillFields($entry);
+                $fillFields($entry);
                 continue;
             }
 
@@ -604,12 +604,14 @@ protected function parseListForGrid(array $data): array
                 $orderData['shipping_status_title'] = Handler::EMPTY_VALUE;
                 $orderData['shipping_status_color'] = '';
 
-                $ShippingStatus = $Order->getShippingStatus();
+                if (class_exists('QUI\ERP\Shipping\ShippingStatus\Status')) {
+                    $ShippingStatus = $Order->getShippingStatus();
 
-                if ($ShippingStatus) {
-                    $orderData['shipping_status_id'] = $ShippingStatus->getId();
-                    $orderData['shipping_status_title'] = $ShippingStatus->getTitle();
-                    $orderData['shipping_status_color'] = $ShippingStatus->getColor();
+                    if ($ShippingStatus) {
+                        $orderData['shipping_status_id'] = $ShippingStatus->getId();
+                        $orderData['shipping_status_title'] = $ShippingStatus->getTitle();
+                        $orderData['shipping_status_color'] = $ShippingStatus->getColor();
+                    }
                 }
             }
 
diff --git a/src/QUI/ERP/Order/Utils/DataLayer.php b/src/QUI/ERP/Order/Utils/DataLayer.php
index 6759f73e..e6c54efb 100644
--- a/src/QUI/ERP/Order/Utils/DataLayer.php
+++ b/src/QUI/ERP/Order/Utils/DataLayer.php
@@ -119,7 +119,7 @@ public static function parseOrder(QUI\ERP\Order\OrderInterface $Order, null | QU
             'tax' => $tax
         ];
 
-        if ($Order->getShipping()) {
+        if (class_exists('QUI\ERP\Shipping\Types\ShippingEntry') && $Order->getShipping()) {
             $order['shipping'] = $Order->getShipping()->getPrice();
         }
 
diff --git a/src/QUI/ERP/Order/Utils/Utils.php b/src/QUI/ERP/Order/Utils/Utils.php
index c972f67e..ee5cfce6 100644
--- a/src/QUI/ERP/Order/Utils/Utils.php
+++ b/src/QUI/ERP/Order/Utils/Utils.php
@@ -429,6 +429,7 @@ public static function getMergedProductList($products): array
     {
         $newProductList = [];
         $getProductIndex = function ($product) use (&$newProductList) {
+            // @phpstan-ignore-next-line
             foreach ($newProductList as $index => $p) {
                 $p1 = serialize(self::getCompareProductArray($product));
                 $p2 = serialize(self::getCompareProductArray($p));
-- 
GitLab