From 3c2bcb3fb3ffac34dbe901c51b13b35f273cbeb4 Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 12 Sep 2019 17:30:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BE=D0=B4=D0=B8=D0=BD=D0=B0=D0=BA=D0=BE=D0=B2?= =?UTF-8?q?=D1=8B=D1=85=20=D1=82=D0=BE=D0=B2=D0=B0=D1=80=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B7=D0=B8=D1=86=D0=B8=D0=B9=20=D0=B2=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BA=D0=B0=D0=B7=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 + VERSION | 2 +- src/include/class-wc-retailcrm-history.php | 63 ++++++++++++++++++- .../order/class-wc-retailcrm-order-item.php | 5 +- src/readme.txt | 3 + src/retailcrm.php | 2 +- src/uninstall.php | 2 +- 7 files changed, 73 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8b4c81..1162db2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## 2019-09-11 3.5.4 +* Добавлена возможность обработки одинаковых товарных позиций + ## 2019-04-22 3.5.2 * Исправлен баг с выгрузкой заказов в retailCRM * Исправлена ошибка переводов diff --git a/VERSION b/VERSION index 444877d..65afb3b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.5.3 +3.5.4 diff --git a/src/include/class-wc-retailcrm-history.php b/src/include/class-wc-retailcrm-history.php index 6699d82..183fa7b 100644 --- a/src/include/class-wc-retailcrm-history.php +++ b/src/include/class-wc-retailcrm-history.php @@ -21,7 +21,8 @@ if ( ! class_exists( 'WC_Retailcrm_History' ) ) : protected $retailcrm; protected $order_methods = array(); protected $bind_field = 'externalId'; - + /** @var WC_Retailcrm_Order_Item */ + protected $order_item; /** * WC_Retailcrm_History constructor. * @param $retailcrm (default = false) @@ -328,6 +329,7 @@ if ( ! class_exists( 'WC_Retailcrm_History' ) ) : } if (array_key_exists('items', $order)) { + foreach ($order['items'] as $item) { if (!isset($item['offer'][$this->bind_field])) { continue; @@ -348,8 +350,12 @@ if ( ! class_exists( 'WC_Retailcrm_History' ) ) : $offer_id = $order_item['product_id']; } - if ($offer_id == $item['offer'][$this->bind_field]) { - $this->deleteOrUpdateOrderItem($item, $order_item, $order_item_id); + $itemExternalId = explode('_', $item['externalId']); + + if ($offer_id == $item['offer'][$this->bind_field] + && $itemExternalId[1] == $order_item->get_id() + ) { + $this->deleteOrUpdateOrderItem($item, $order_item, $itemExternalId[1]); } } } @@ -424,6 +430,20 @@ if ( ! class_exists( 'WC_Retailcrm_History' ) ) : $wc_order->save(); + $checkNewItem = false; + + foreach ($order['items'] as $item) { + if (!empty($item['externalId'])) { + continue; + } else { + $checkNewItem = true; + } + } + + if ($checkNewItem == true) { + $this->editOrder($this->retailcrm_settings, $wc_order, $order); + } + return $wc_order->get_id(); } @@ -584,11 +604,48 @@ if ( ! class_exists( 'WC_Retailcrm_History' ) ) : $wc_order->save(); + $this->editOrder($this->retailcrm_settings, $wc_order, $order); $this->retailcrm->ordersFixExternalIds($ids); return $wc_order->get_id(); } + /** + * @param $settings + * @param $wc_order + * @param $order + */ + protected function editOrder($settings, $wc_order, $order, $event = 'create') + { + $order_items = []; + $retailcrmOrderItem = new WC_Retailcrm_Order_Item($settings); + + foreach ($wc_order->get_items() as $key => $item) { + $order_items[$key] = $retailcrmOrderItem->build($item)->get_data(); + $retailcrmOrderItem->reset_data(); + + if ($event == 'update') { + foreach ($order['items'] as $itemCrm) { + if (isset($itemCrm['externalId']) && !empty($itemCrm['externalId'])) { + $test = explode('_' , $itemCrm['externalId']); + if ($order_items[$test[1]]) { + unset($order_items[$test[1]]); + } + } + } + } + } + + if (!empty($order_items)) { + $orderEdit = [ + 'id' => $order['id'], + 'items' => $order_items, + ]; + + $this->retailcrm->ordersEdit($orderEdit, 'id'); + } + } + /** * @param array $orderHistory * diff --git a/src/include/order/class-wc-retailcrm-order-item.php b/src/include/order/class-wc-retailcrm-order-item.php index d5f6334..029b878 100644 --- a/src/include/order/class-wc-retailcrm-order-item.php +++ b/src/include/order/class-wc-retailcrm-order-item.php @@ -51,6 +51,9 @@ class WC_Retailcrm_Order_Item extends WC_Retailcrm_Abstracts_Data $price = $this->calculate_price($item); $discount_price = $this->calculate_discount($item, $price); + $itemId = ($item['variation_id'] > 0) ? $item['variation_id'] : $item['product_id']; + + $data['externalId'] = $itemId . '_' . $item->get_id(); $data['productName'] = $item['name']; $data['initialPrice'] = (float)$price; $data['quantity'] = $item['qty']; @@ -74,7 +77,7 @@ 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'] ; + $uid = ($item['variation_id'] > 0) ? $item['variation_id'] : $item['product_id']; $offer = array('externalId' => $uid); $product = $item->get_product(); diff --git a/src/readme.txt b/src/readme.txt index 6efb257..ccea8b7 100644 --- a/src/readme.txt +++ b/src/readme.txt @@ -46,6 +46,9 @@ API-ключ должен быть для отдельного магазина == Changelog == += 3.5.4 = +* Добавлена возможность работы с одинаковыми позициями товаров в заказе + = 3.5.2 = * Исправлен баг с выгрузкой заказов в retailCRM diff --git a/src/retailcrm.php b/src/retailcrm.php index 2cfbd8f..49cb19a 100644 --- a/src/retailcrm.php +++ b/src/retailcrm.php @@ -1,6 +1,6 @@