From fa32395161b73e389ad91bd9226e6be59fa0dcb8 Mon Sep 17 00:00:00 2001 From: Dima Uryvskiy Date: Thu, 24 Feb 2022 18:45:17 +0300 Subject: [PATCH] Fix the error of using xmlId field to link products in orders --- src/include/class-wc-retailcrm-history.php | 10 ++++++++-- src/include/order/class-wc-retailcrm-order-item.php | 13 ++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/include/class-wc-retailcrm-history.php b/src/include/class-wc-retailcrm-history.php index 3cd9812..15a850d 100644 --- a/src/include/class-wc-retailcrm-history.php +++ b/src/include/class-wc-retailcrm-history.php @@ -405,8 +405,8 @@ if (!class_exists('WC_Retailcrm_History')) : } if (isset($item['create']) && $item['create'] == true) { - $arItemsNew = array(); - $arItemsOld = array(); + $arItemsNew = []; + $arItemsOld = []; $product = retailcrm_get_wc_product( $item['offer'][$this->bindField], $this->retailcrmSettings @@ -562,15 +562,21 @@ if (!class_exists('WC_Retailcrm_History')) : } else { if (isset($item['quantity']) && $item['quantity']) { $orderItem->set_quantity($item['quantity']); + $product = retailcrm_get_wc_product($item['offer'][$this->bindField], $this->retailcrmSettings); + $orderItem->set_subtotal($product->get_price()); + $dataStore = $orderItem->get_data_store(); + $dataStore->update($orderItem); } if (isset($item['summ']) && $item['summ']) { $orderItem->set_total($item['summ']); + $dataStore = $orderItem->get_data_store(); + $dataStore->update($orderItem); } } diff --git a/src/include/order/class-wc-retailcrm-order-item.php b/src/include/order/class-wc-retailcrm-order-item.php index 35e0339..635bac0 100644 --- a/src/include/order/class-wc-retailcrm-order-item.php +++ b/src/include/order/class-wc-retailcrm-order-item.php @@ -73,16 +73,19 @@ class WC_Retailcrm_Order_Item extends WC_Retailcrm_Abstracts_Data */ private function set_offer(WC_Order_Item_Product $item) { - $uid = ($item['variation_id'] > 0) ? $item['variation_id'] : $item['product_id'] ; - $offer = array('externalId' => $uid); + $uid = $item['variation_id'] > 0 ? $item['variation_id'] : $item['product_id'] ; + $offer = ['externalId' => $uid]; $product = $item->get_product(); - if (!empty($product) && - isset($this->settings['bind_by_sku']) && - $this->settings['bind_by_sku'] == WC_Retailcrm_Base::YES + if ( + !empty($product) + && isset($this->settings['bind_by_sku']) + && $this->settings['bind_by_sku'] == WC_Retailcrm_Base::YES ) { $offer['xmlId'] = $product->get_sku(); + + unset($offer['externalId']); } $this->set_data_field('offer', $offer);