Merge pull request #114 from Evgeniy-Goroh/master
Поддержка передачи одинаковых товаров в заказе как разных товарных по…
This commit is contained in:
commit
6fa5e3d511
@ -1,3 +1,6 @@
|
||||
## 2019-10-07 3.5.4
|
||||
* Добавлена возможность обработки одинаковых товарных позиций
|
||||
|
||||
## 2019-04-22 3.5.2
|
||||
* Исправлен баг с выгрузкой заказов в retailCRM
|
||||
* Исправлена ошибка переводов
|
||||
|
@ -22,6 +22,9 @@ if ( ! class_exists( 'WC_Retailcrm_History' ) ) :
|
||||
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,7 +331,8 @@ if ( ! class_exists( 'WC_Retailcrm_History' ) ) :
|
||||
}
|
||||
|
||||
if (array_key_exists('items', $order)) {
|
||||
foreach ($order['items'] as $item) {
|
||||
foreach ($order['items'] as $key => $item) {
|
||||
|
||||
if (!isset($item['offer'][$this->bind_field])) {
|
||||
continue;
|
||||
}
|
||||
@ -339,18 +343,45 @@ if ( ! class_exists( 'WC_Retailcrm_History' ) ) :
|
||||
$this->retailcrm_settings
|
||||
);
|
||||
|
||||
foreach ($wc_order->get_items() as $order_item_id => $order_item) {
|
||||
$arItemsOld[$order_item_id] = $order_item_id;
|
||||
}
|
||||
|
||||
$wc_order->add_product($product, $item['quantity']);
|
||||
|
||||
foreach ($wc_order->get_items() as $order_item_id => $order_item) {
|
||||
$arItemsNew[$order_item_id] = $order_item_id;
|
||||
}
|
||||
|
||||
$result = end(array_diff($arItemsNew, $arItemsOld));
|
||||
$order['items'][$key]['woocomerceId'] = $result;
|
||||
} else {
|
||||
foreach ($wc_order->get_items() as $order_item_id => $order_item) {
|
||||
|
||||
|
||||
|
||||
if ($order_item['variation_id'] != 0 ) {
|
||||
$offer_id = $order_item['variation_id'];
|
||||
} else {
|
||||
$offer_id = $order_item['product_id'];
|
||||
}
|
||||
|
||||
if ($offer_id == $item['offer'][$this->bind_field]) {
|
||||
$this->deleteOrUpdateOrderItem($item, $order_item, $order_item_id);
|
||||
if (isset($item['externalIds'])) {
|
||||
foreach ($item['externalIds'] as $externalId) {
|
||||
if ($externalId['code'] == 'woocomerce') {
|
||||
$itemExternalId = explode('_', $externalId['value']);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$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 +455,19 @@ if ( ! class_exists( 'WC_Retailcrm_History' ) ) :
|
||||
|
||||
$wc_order->save();
|
||||
|
||||
$checkNewItem = false;
|
||||
foreach ($order['items'] as $item) {
|
||||
if (!empty($item['externalIds'])) {
|
||||
continue;
|
||||
} else {
|
||||
$checkNewItem = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ($checkNewItem == true) {
|
||||
$this->editOrder($this->retailcrm_settings, $wc_order, $order,'update');
|
||||
}
|
||||
|
||||
return $wc_order->get_id();
|
||||
}
|
||||
|
||||
@ -440,11 +484,16 @@ if ( ! class_exists( 'WC_Retailcrm_History' ) ) :
|
||||
if (isset($item['quantity']) && $item['quantity']) {
|
||||
$order_item->set_quantity($item['quantity']);
|
||||
$product = retailcrm_get_wc_product($item['offer'][$this->bind_field], $this->retailcrm_settings);
|
||||
$order_item->set_total($product->get_price() * $item['quantity']);
|
||||
$order_item->set_subtotal($product->get_price());
|
||||
$data_store = $order_item->get_data_store();
|
||||
$data_store->update($order_item);
|
||||
}
|
||||
|
||||
if (isset($item['summ']) && $item['summ']) {
|
||||
$order_item->set_total($item['summ']);
|
||||
$data_store = $order_item->get_data_store();
|
||||
$data_store->update($order_item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -536,11 +585,33 @@ if ( ! class_exists( 'WC_Retailcrm_History' ) ) :
|
||||
$product_data = isset($order['items']) ? $order['items'] : array();
|
||||
|
||||
if ($product_data) {
|
||||
foreach ($product_data as $product) {
|
||||
foreach ($product_data as $key => $product) {
|
||||
$item = retailcrm_get_wc_product($product['offer'][$this->bind_field], $this->retailcrm_settings);
|
||||
if ($product['discountTotal'] > 0) {
|
||||
$item->set_price($product['initialPrice'] - $product['discountTotal']);
|
||||
}
|
||||
|
||||
foreach ($wc_order->get_items() as $order_item_id => $order_item) {
|
||||
$arItemsOld[$order_item_id] = $order_item_id;
|
||||
}
|
||||
|
||||
$wc_order->add_product(
|
||||
retailcrm_get_wc_product($product['offer'][$this->bind_field], $this->retailcrm_settings),
|
||||
$item,
|
||||
$product['quantity']
|
||||
);
|
||||
|
||||
foreach ($wc_order->get_items() as $order_item_id => $order_item) {
|
||||
$arItemsNew[$order_item_id] = $order_item_id;
|
||||
}
|
||||
|
||||
if (!empty($arItemsOld)) {
|
||||
$result = end(array_diff($arItemsNew, $arItemsOld));
|
||||
} else {
|
||||
$result = end($arItemsNew);
|
||||
}
|
||||
|
||||
$order['items'][$key]['woocomerceId'] = $result;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -586,9 +657,60 @@ if ( ! class_exists( 'WC_Retailcrm_History' ) ) :
|
||||
|
||||
$this->retailcrm->ordersFixExternalIds($ids);
|
||||
|
||||
$this->editOrder($this->retailcrm_settings, $wc_order, $order);
|
||||
|
||||
return $wc_order->get_id();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $settings
|
||||
* @param $wc_order
|
||||
* @param $order
|
||||
* @param string $event
|
||||
*/
|
||||
protected function editOrder($settings, $wc_order, $order, $event = 'create')
|
||||
{
|
||||
$order_items = [];
|
||||
if ($event == 'update') {
|
||||
$result = $this->retailcrm->ordersGet($order['externalId']);
|
||||
if ($result->isSuccessful()) {
|
||||
$orderCrm = $result['order'];
|
||||
}
|
||||
$data = $orderCrm;
|
||||
}
|
||||
|
||||
if ($event == 'create') {
|
||||
$data = $order;
|
||||
}
|
||||
|
||||
foreach ($data['items'] as $id => $item) {
|
||||
$order_items[$id]['id'] = $item['id'];
|
||||
$order_items[$id]['offer'] = array('id' => $item['offer']['id']);
|
||||
$externalIds = array(
|
||||
array(
|
||||
'code' => 'woocomerce',
|
||||
'value' => $item['offer']['externalId'] . '_' . $order['items'][$item['id']]['woocomerceId'],
|
||||
)
|
||||
);
|
||||
|
||||
if ($item['externalIds']) {
|
||||
$order_items[$id]['externalIds'] = $item['externalIds'];
|
||||
$order_items[$id]['externalIds'][] = $externalIds;
|
||||
} else {
|
||||
$order_items[$id]['externalIds'] = $externalIds;
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($order_items)) {
|
||||
$orderEdit = [
|
||||
'id' => $order['id'],
|
||||
'items' => $order_items,
|
||||
];
|
||||
|
||||
$this->retailcrm->ordersEdit($orderEdit, 'id');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $orderHistory
|
||||
*
|
||||
|
@ -55,6 +55,14 @@ class WC_Retailcrm_Order_Item extends WC_Retailcrm_Abstracts_Data
|
||||
$data['initialPrice'] = (float)$price;
|
||||
$data['quantity'] = (double)$item['qty'];
|
||||
|
||||
$itemId = ($item['variation_id'] > 0) ? $item['variation_id'] : $item['product_id'];
|
||||
$data['externalIds'] = array(
|
||||
array(
|
||||
'code' =>'woocomerce',
|
||||
'value' => $itemId . '_' . $item->get_id(),
|
||||
)
|
||||
);
|
||||
|
||||
$this->set_data_fields($data);
|
||||
$this->set_offer($item);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* Version: 3.5.2
|
||||
* Version: 3.5.4
|
||||
* WC requires at least: 3.0
|
||||
* WC tested up to: 3.5.5
|
||||
* Plugin Name: WooCommerce RetailCRM
|
||||
|
@ -15,7 +15,7 @@
|
||||
*
|
||||
*
|
||||
* @link https://wordpress.org/plugins/woo-retailcrm/
|
||||
* @version 3.5.2
|
||||
* @version 3.5.4
|
||||
*
|
||||
* @package RetailCRM
|
||||
*/
|
||||
|
@ -72,26 +72,38 @@ class WC_Retailcrm_History_Test extends WC_Retailcrm_Test_Case_Helper
|
||||
$order_added_item = reset($order_added_items);
|
||||
$shipping_address = $order_added->get_address('shipping');
|
||||
$billing_address = $order_added->get_address('billing');
|
||||
|
||||
$options = get_option(\WC_Retailcrm_Base::$option_key);
|
||||
|
||||
$this->assertEquals(self::STATUS_1, $options[$order_added->get_status()]);
|
||||
$this->assertEquals($product->get_id(), $order_added_item->get_product()->get_id());
|
||||
|
||||
if (is_object($order_added_item)) {
|
||||
$this->assertEquals($product->get_id(), $order_added_item->get_product()->get_id());
|
||||
}
|
||||
|
||||
$this->assertNotEmpty($shipping_address['first_name']);
|
||||
$this->assertNotEmpty($shipping_address['last_name']);
|
||||
$this->assertNotEmpty($shipping_address['postcode']);
|
||||
$this->assertNotEmpty($shipping_address['city']);
|
||||
$this->assertNotEmpty($shipping_address['country']);
|
||||
$this->assertNotEmpty($shipping_address['state']);
|
||||
$this->assertNotEmpty($billing_address['phone']);
|
||||
$this->assertNotEmpty($billing_address['email']);
|
||||
|
||||
if (isset($billing_address['phone'])) {
|
||||
$this->assertNotEmpty($billing_address['phone']);
|
||||
}
|
||||
|
||||
if (isset($billing_address['email'])) {
|
||||
$this->assertNotEmpty($billing_address['email']);
|
||||
}
|
||||
|
||||
$this->assertNotEmpty($billing_address['first_name']);
|
||||
$this->assertNotEmpty($billing_address['last_name']);
|
||||
$this->assertNotEmpty($billing_address['postcode']);
|
||||
$this->assertNotEmpty($billing_address['city']);
|
||||
$this->assertNotEmpty($billing_address['country']);
|
||||
$this->assertNotEmpty($billing_address['state']);
|
||||
$this->assertEquals('payment4', $options[$order_added->get_payment_method()]);
|
||||
|
||||
if ($order_added->get_payment_method()) {
|
||||
$this->assertEquals('payment4', $options[$order_added->get_payment_method()]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -281,6 +293,12 @@ class WC_Retailcrm_History_Test extends WC_Retailcrm_Test_Case_Helper
|
||||
'createdAt' => '2018-01-01 00:00:00',
|
||||
'quantity' => 1,
|
||||
'status' => 'new',
|
||||
'externalIds' =>array(
|
||||
array(
|
||||
'code' =>'woocomerce',
|
||||
'value' =>"160_".$product_create_id
|
||||
)
|
||||
),
|
||||
'offer' => array(
|
||||
'id' => 1,
|
||||
'externalId' => $product_create_id,
|
||||
@ -348,6 +366,12 @@ class WC_Retailcrm_History_Test extends WC_Retailcrm_Test_Case_Helper
|
||||
'createdAt' => '2018-01-01 00:02:00',
|
||||
'quantity' => 2,
|
||||
'status' => self::STATUS_1,
|
||||
'externalIds' =>array(
|
||||
array(
|
||||
'code' =>'woocomerce',
|
||||
'value' =>"160_".$product_add_id
|
||||
)
|
||||
),
|
||||
'offer' => array(
|
||||
'id' => 2,
|
||||
'externalId' => $product_add_id,
|
||||
|
Loading…
x
Reference in New Issue
Block a user