From f209a96df50bcc002b65c4d936f1e957758e059a Mon Sep 17 00:00:00 2001 From: Henning Leutz <leutz@pcsg.de> Date: Mon, 5 Aug 2019 10:46:34 +0200 Subject: [PATCH] fix: shipping validation if no shipping entry is valid --- .../controls/shippingRules/RuleWindow.js | 1 + .../Methods/Standard/ShippingType.php | 9 +++++-- src/QUI/ERP/Shipping/Order/Shipping.php | 4 ++- src/QUI/ERP/Shipping/Rules/ShippingRule.php | 27 +++++++++---------- src/QUI/ERP/Shipping/Types/ShippingEntry.php | 27 +++++++++++++++++++ 5 files changed, 51 insertions(+), 17 deletions(-) diff --git a/bin/backend/controls/shippingRules/RuleWindow.js b/bin/backend/controls/shippingRules/RuleWindow.js index 55ad69f..536ab85 100644 --- a/bin/backend/controls/shippingRules/RuleWindow.js +++ b/bin/backend/controls/shippingRules/RuleWindow.js @@ -83,6 +83,7 @@ define('package/quiqqer/shipping/bin/backend/controls/shippingRules/RuleWindow', this.$Rule.update().then(function () { self.Loader.hide(); self.fireEvent('updateEnd', [self]); + self.close(); }); } }); diff --git a/src/QUI/ERP/Shipping/Methods/Standard/ShippingType.php b/src/QUI/ERP/Shipping/Methods/Standard/ShippingType.php index a2784b9..7a44b06 100644 --- a/src/QUI/ERP/Shipping/Methods/Standard/ShippingType.php +++ b/src/QUI/ERP/Shipping/Methods/Standard/ShippingType.php @@ -40,17 +40,22 @@ public function getIcon() /** * @param QUI\ERP\Order\OrderInterface $Order - * @param QUI\ERP\Shipping\Api\ShippingInterface $ShippingEntry + * @param QUI\ERP\Shipping\Types\ShippingEntry $ShippingEntry * @return bool */ public function canUsedInOrder( QUI\ERP\Order\OrderInterface $Order, - QUI\ERP\Shipping\Api\ShippingInterface $ShippingEntry + QUI\ERP\Shipping\Types\ShippingEntry $ShippingEntry ) { if ($ShippingEntry->isActive() === false) { return false; } + if (!$ShippingEntry->isValid()) { + return false; + } + + // assignment $articles = $ShippingEntry->getAttribute('articles'); $categories = $ShippingEntry->getAttribute('categories'); diff --git a/src/QUI/ERP/Shipping/Order/Shipping.php b/src/QUI/ERP/Shipping/Order/Shipping.php index fe86603..e176b48 100644 --- a/src/QUI/ERP/Shipping/Order/Shipping.php +++ b/src/QUI/ERP/Shipping/Order/Shipping.php @@ -66,7 +66,9 @@ public function getBody() foreach ($userShipping as $ShippingEntry) { $ShippingEntry->setOrder($Order); - if ($ShippingEntry->canUsedInOrder($Order) && $ShippingEntry->canUsedBy($User)) { + if ($ShippingEntry->isValid() + && $ShippingEntry->canUsedInOrder($Order) + && $ShippingEntry->canUsedBy($User)) { $shippingList[] = $ShippingEntry; } } diff --git a/src/QUI/ERP/Shipping/Rules/ShippingRule.php b/src/QUI/ERP/Shipping/Rules/ShippingRule.php index 00f897c..b9c5311 100644 --- a/src/QUI/ERP/Shipping/Rules/ShippingRule.php +++ b/src/QUI/ERP/Shipping/Rules/ShippingRule.php @@ -89,20 +89,19 @@ public function __construct($id, Factory $Factory) } // purchase - if (empty($attributes['purchase_quantity_from'])) { - $attributes['purchase_quantity_from'] = null; - } - - if (empty($attributes['purchase_quantity_to'])) { - $attributes['purchase_quantity_until'] = null; - } - - if (empty($attributes['purchase_value_to'])) { - $attributes['purchase_value_until'] = null; - } - - if (empty($attributes['purchase_value_to'])) { - $attributes['purchase_value_until'] = null; + $nullEmpty = [ + 'purchase_quantity_from', + 'purchase_quantity_until', + 'purchase_value_from', + 'purchase_value_until', + 'unit_value', + 'unit' + ]; + + foreach ($nullEmpty as $k) { + if (empty($attributes[$k])) { + $attributes[$k] = null; + } } // update for saving diff --git a/src/QUI/ERP/Shipping/Types/ShippingEntry.php b/src/QUI/ERP/Shipping/Types/ShippingEntry.php index 27d2bed..5183de1 100644 --- a/src/QUI/ERP/Shipping/Types/ShippingEntry.php +++ b/src/QUI/ERP/Shipping/Types/ShippingEntry.php @@ -594,6 +594,33 @@ public function getShippingRules() return $result; } + /** + * Can the shipping be used basically? + * + * @return bool + */ + public function isValid() + { + if (!$this->isActive()) { + return false; + } + + $shippingRules = $this->getAttribute('shipping_rules'); + $shippingRules = \json_decode($shippingRules, true); + + if (!\is_array($shippingRules)) { + return true; + } + + $rules = $this->getShippingRules(); + + if (empty($rules)) { + return false; + } + + return true; + } + //endregion /** -- GitLab