From 149251642944040c66f355f01297004334b71bca Mon Sep 17 00:00:00 2001 From: Pavel Date: Fri, 14 Feb 2020 14:35:04 +0300 Subject: [PATCH] set item discount to zero if no discount applies --- src/include/class-wc-retailcrm-orders.php | 2 +- src/include/class-wc-retailcrm-plugin.php | 2 +- src/include/order/class-wc-retailcrm-order-item.php | 9 +++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/include/class-wc-retailcrm-orders.php b/src/include/class-wc-retailcrm-orders.php index f947071..0ad3064 100644 --- a/src/include/class-wc-retailcrm-orders.php +++ b/src/include/class-wc-retailcrm-orders.php @@ -483,7 +483,7 @@ if ( ! class_exists( 'WC_Retailcrm_Orders' ) ) : $this->order_payment->is_new = true; $order_data['payments'][] = $this->order_payment->build($order)->get_data(); } - + $this->order = apply_filters('retailcrm_process_order', WC_Retailcrm_Plugin::clearArray($order_data), $order); } diff --git a/src/include/class-wc-retailcrm-plugin.php b/src/include/class-wc-retailcrm-plugin.php index db0ffbd..8024d26 100644 --- a/src/include/class-wc-retailcrm-plugin.php +++ b/src/include/class-wc-retailcrm-plugin.php @@ -153,7 +153,7 @@ class WC_Retailcrm_Plugin { ? self::clearArray($node) : $node; - if ($result[$index] == '' + if ($result[$index] === '' || $result[$index] === null || (is_array($result[$index]) && count($result[$index]) < 1) ) { diff --git a/src/include/order/class-wc-retailcrm-order-item.php b/src/include/order/class-wc-retailcrm-order-item.php index 0392156..cb70cca 100644 --- a/src/include/order/class-wc-retailcrm-order-item.php +++ b/src/include/order/class-wc-retailcrm-order-item.php @@ -66,10 +66,10 @@ class WC_Retailcrm_Order_Item extends WC_Retailcrm_Abstracts_Data $this->set_data_fields($data); $this->set_offer($item); - if ($this->settings['api_version'] == 'v5' && round($discount_price, 2)) { - $this->set_data_field('discountManualAmount',round($discount_price, 2)); - } elseif ($this->settings['api_version'] == 'v4' && round($discount_price, 2)) { - $this->set_data_field('discount', round($discount_price, 2)); + if ($this->settings['api_version'] == 'v5') { + $this->set_data_field('discountManualAmount', (float) round($discount_price, 2)); + } elseif ($this->settings['api_version'] == 'v4') { + $this->set_data_field('discount', (float) round($discount_price, 2)); } return $this; @@ -114,6 +114,7 @@ class WC_Retailcrm_Order_Item extends WC_Retailcrm_Abstracts_Data * @param $price * * @return float|int + * @todo Rounding issues with prices in pennies / cents should be expected here. */ private function calculate_discount(WC_Order_Item_Product $item, $price) {