diff --git a/CHANGELOG.md b/CHANGELOG.md index b8bd3fc..78a65e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## v2.2.9 +* Добавлена выгрузка габаритов в специальный тег dimensions +* Добавлена выгрузка остатков из CRM +* Добавлена передача номера заказа +* Добавлена настройка Daemon Collector + ## v2.2.8 * Добавлена выгрузка картинок категорий товаров в ICML @@ -8,11 +14,13 @@ ## v2.2.6 * Добавлена активация модуля в маркетплейсе retailCRM -## v2.2.5 -* Добавлена передача страны при создании заказа для пользователя и заказа -* Добавлен метод сохранения сущностей с обработкой исключений +## v.2.2.5 +* Добавлена передача страны при создании заказа для заказа и покупателя +* Добавлен метод для загрузки сущностей с перехватом исключений +* Для версии 1.7 добавлена передача адреса при заполнении его на стороне сайта. +* Получение адреса и телефона вынесено в отдельные методы. -## v2.2.4 +## v.2.2.4 * Добавлена установка дефолтной валюты для оплаты при получении истории * Добавлено получение суммы оплаты из заказа в CMS, если она не передается по истории diff --git a/README.md b/README.md index 60b891f..37c66c4 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,14 @@ Add to cron: */7 * * * * /usr/bin/php /path/to/your/site/modules/retailcrm/job/sync.php ``` +#### Receiving balances from retailCRM + +Add to cron: + +``` +*/15 * * * * /usr/bin/php /path/to/your/site/modules/retailcrm/job/inventories.php +``` + #### Single orders archive export to retailCRM ``` diff --git a/README.ru.md b/README.ru.md index d7a5e80..978ebb9 100644 --- a/README.ru.md +++ b/README.ru.md @@ -29,6 +29,14 @@ Prestashop module */7 * * * * /usr/bin/php /path/to/your/site/modules/retailcrm/job/sync.php ``` +#### Получение остатков из retailCRM + +Добавьте в крон запись вида + +``` +*/15 * * * * /usr/bin/php /path/to/your/site/modules/retailcrm/job/inventories.php +``` + #### Единоразовая выгрузка архива клиентов и заказов в retailCRM ``` diff --git a/VERSION b/VERSION index 23a63f5..72d132f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.2.8 +2.2.9 \ No newline at end of file diff --git a/retailcrm/job/inventories.php b/retailcrm/job/inventories.php new file mode 100644 index 0000000..04a992b --- /dev/null +++ b/retailcrm/job/inventories.php @@ -0,0 +1,28 @@ + $vendor, 'article' => $article, 'weight' => $weight, - 'size' => $size + 'dimensions' => $dimensions ); if (!empty($combinations)) { @@ -210,7 +206,7 @@ class RetailcrmCatalog 'vendor' => $vendor, 'article' => $article, 'weight' => $weight, - 'size' => $size + 'dimensions' => $dimensions ); $items[] = $item; diff --git a/retailcrm/lib/RetailcrmDaemonCollector.php b/retailcrm/lib/RetailcrmDaemonCollector.php new file mode 100644 index 0000000..42e6d6e --- /dev/null +++ b/retailcrm/lib/RetailcrmDaemonCollector.php @@ -0,0 +1,52 @@ + + (function(_,r,e,t,a,i,l){_['retailCRMObject']=a;_[a]=_[a]||function(){(_[a].q=_[a].q||[]).push(arguments)};_[a].l=1*new Date();l=r.getElementsByTagName(e)[0];i=r.createElement(e);i.async=!0;i.src=t;l.parentNode.insertBefore(i,l)})(window,document,'script','https://collector.retailcrm.pro/w.js','_rc'); + {{ code }} + _rc('send', 'pageView'); + +EOT; + + public function __construct($customer, $siteKey) + { + $this->customer = $customer; + $this->siteKey = $siteKey; + } + + /** + * @return string + */ + public function getJs() + { + return $this->js; + } + + /** + * @return $this + */ + public function buildScript() + { + $params = array(); + + if ($this->customer->id) { + $params['customerId'] = $this->customer->id; + } + + $this->js = preg_replace( + '/{{ code }}/', + sprintf( + "\t_rc('create', '%s', %s);\n", + $this->siteKey, + json_encode((object) $params) + ), + $this->template + ); + + return $this; + } +} diff --git a/retailcrm/lib/RetailcrmHistory.php b/retailcrm/lib/RetailcrmHistory.php index aa53a7d..7339e03 100644 --- a/retailcrm/lib/RetailcrmHistory.php +++ b/retailcrm/lib/RetailcrmHistory.php @@ -53,6 +53,7 @@ class RetailcrmHistory if (self::loadInCMS($customer, 'update') === false) { continue; } + } else { $customer = new Customer(); diff --git a/retailcrm/lib/RetailcrmIcml.php b/retailcrm/lib/RetailcrmIcml.php index 77b7f84..ab7c9ed 100644 --- a/retailcrm/lib/RetailcrmIcml.php +++ b/retailcrm/lib/RetailcrmIcml.php @@ -24,14 +24,14 @@ class RetailcrmIcml 'picture', 'url', 'xmlId', - 'productActivity' + 'productActivity', + 'dimensions' ); $this->params = array( 'article' => 'Артикул', 'color' => 'Цвет', 'weight' => 'Вес', - 'size' => 'Размер', 'tax' => 'Наценка' ); } @@ -94,7 +94,6 @@ class RetailcrmIcml private function addOffers($offers) { foreach ($offers as $offer) { - $e = $this->eOffers->appendChild( $this->dd->createElement('offer') ); diff --git a/retailcrm/lib/RetailcrmInventories.php b/retailcrm/lib/RetailcrmInventories.php new file mode 100644 index 0000000..a8c2486 --- /dev/null +++ b/retailcrm/lib/RetailcrmInventories.php @@ -0,0 +1,44 @@ +storeInventories(array(), $page, 250); + + if ($result === false) { + return $result; + } + + foreach ($result['offers'] as $offer) { + self::setQuantityOffer($offer); + } + + $totalPageCount = $result['pagination']['totalPageCount']; + $page++; + } while ($page <= $totalPageCount); + } + + private static function setQuantityOffer($offer) + { + if (isset($offer['externalId'])) { + $invOffer = explode('#', $offer['externalId']); + + if (isset($invOffer[1])) { + StockAvailable::setQuantity($invOffer[0], $invOffer[1], $offer['quantity']); + } else { + StockAvailable::setQuantity($offer['externalId'], 0, $offer['quantity']); + } + } + } +} diff --git a/retailcrm/retailcrm.php b/retailcrm/retailcrm.php index f8b45d3..248952c 100644 --- a/retailcrm/retailcrm.php +++ b/retailcrm/retailcrm.php @@ -3,7 +3,7 @@ * @author Retail Driver LCC * @copyright RetailCRM * @license GPL - * @version 2.2.6 + * @version 2.2.9 * @link https://retailcrm.ru * */ @@ -38,7 +38,7 @@ class RetailCRM extends Module { $this->name = 'retailcrm'; $this->tab = 'export'; - $this->version = '2.2.6'; + $this->version = '2.2.9'; $this->author = 'Retail Driver LCC'; $this->displayName = $this->l('RetailCRM'); $this->description = $this->l('Integration module for RetailCRM'); @@ -76,10 +76,26 @@ class RetailCRM extends Module $this->registerHook('actionPaymentConfirmation') && $this->registerHook('actionCustomerAccountAdd') && $this->registerHook('actionOrderEdited') && - ($this->use_new_hooks ? $this->registerHook('actionCustomerAccountUpdate') : true) + $this->registerHook('header') && + ($this->use_new_hooks ? $this->registerHook('actionCustomerAccountUpdate') : true) && + ($this->use_new_hooks ? $this->registerHook('actionValidateCustomerAddressForm') : true) ); } + public function hookHeader() + { + if (Configuration::get('RETAILCRM_DAEMON_COLLECTOR_ACTIVE') + && Configuration::get('RETAILCRM_DAEMON_COLLECTOR_KEY') + ) { + $collector = new RetailcrmDaemonCollector( + $this->context->customer, + Configuration::get('RETAILCRM_DAEMON_COLLECTOR_KEY') + ); + + return $collector->buildScript()->getJs(); + } + } + public function uninstall() { $api = new RetailcrmProxy( @@ -120,7 +136,10 @@ class RetailCRM extends Module $deliveryDefault = json_encode(Tools::getValue('RETAILCRM_API_DELIVERY_DEFAULT')); $paymentDefault = json_encode(Tools::getValue('RETAILCRM_API_PAYMENT_DEFAULT')); $statusExport = (string)(Tools::getValue('RETAILCRM_STATUS_EXPORT')); + $collectorActive = (Tools::getValue('RETAILCRM_DAEMON_COLLECTOR_ACTIVE_1')); + $collectorKey = (string)(Tools::getValue('RETAILCRM_DAEMON_COLLECTOR_KEY')); $clientId = Configuration::get('RETAILCRM_CLIENT_ID'); + $settings = array( 'address' => $address, 'token' => $token, @@ -140,6 +159,8 @@ class RetailCRM extends Module Configuration::updateValue('RETAILCRM_API_DELIVERY_DEFAULT', $deliveryDefault); Configuration::updateValue('RETAILCRM_API_PAYMENT_DEFAULT', $paymentDefault); Configuration::updateValue('RETAILCRM_STATUS_EXPORT', $statusExport); + Configuration::updateValue('RETAILCRM_DAEMON_COLLECTOR_ACTIVE', $collectorActive); + Configuration::updateValue('RETAILCRM_DAEMON_COLLECTOR_KEY', $collectorKey); $output .= $this->displayConfirmation($this->l('Settings updated')); } @@ -169,7 +190,6 @@ class RetailCRM extends Module public function displayForm() { - $this->displayConfirmation($this->l('Settings updated')); $default_lang = $this->default_lang; @@ -189,7 +209,7 @@ class RetailCRM extends Module /* * Network connection form */ - $fields_form[0]['form'] = array( + $fields_form[]['form'] = array( 'legend' => array( 'title' => $this->l('Network connection'), ), @@ -199,9 +219,9 @@ class RetailCRM extends Module 'name' => 'RETAILCRM_API_VERSION', 'label' => $this->l('API version'), 'options' => array( - 'query' => $apiVersions, - 'id' => 'option_id', - 'name' => 'name' + 'query' => $apiVersions, + 'id' => 'option_id', + 'name' => 'name' ) ), array( @@ -225,12 +245,41 @@ class RetailCRM extends Module ) ); + /* + * Daemon Collector + */ + $fields_form[]['form'] = array( + 'legend' => array('title' => $this->l('Daemon Collector')), + 'input' => array( + array( + 'type' => 'checkbox', + 'label' => $this->l('Activate'), + 'name' => 'RETAILCRM_DAEMON_COLLECTOR_ACTIVE', + 'values' => array( + 'query' => array( + array( + 'id_option' => 1, + ) + ), + 'id' => 'id_option', + 'name' => 'name' + ) + ), + array( + 'type' => 'text', + 'label' => $this->l('Site key'), + 'name' => 'RETAILCRM_DAEMON_COLLECTOR_KEY', + 'size' => 20, + 'required' => false + ) + ) + ); if ($this->api) { /* * Delivery */ - $fields_form[1]['form'] = array( + $fields_form[]['form'] = array( 'legend' => array('title' => $this->l('Delivery')), 'input' => $this->reference->getDeliveryTypes(), ); @@ -238,7 +287,7 @@ class RetailCRM extends Module /* * Order status */ - $fields_form[2]['form'] = array( + $fields_form[]['form'] = array( 'legend' => array('title' => $this->l('Order statuses')), 'input' => $this->reference->getStatuses(), ); @@ -246,7 +295,7 @@ class RetailCRM extends Module /* * Payment */ - $fields_form[3]['form'] = array( + $fields_form[]['form'] = array( 'legend' => array('title' => $this->l('Payment types')), 'input' => $this->reference->getPaymentTypes(), ); @@ -254,7 +303,7 @@ class RetailCRM extends Module /* * Default */ - $fields_form[4]['form'] = array( + $fields_form[]['form'] = array( 'legend' => array('title' => $this->l('Default')), 'input' => $this->reference->getPaymentAndDeliveryForDefault( array($this->l('Delivery method'), $this->l('Payment type')) @@ -264,16 +313,16 @@ class RetailCRM extends Module /* * Status in export */ - $fields_form[5]['form'] = array( + $fields_form[]['form'] = array( 'legend' => array('title' => $this->l('Default status')), 'input' => array(array( 'type' => 'select', 'name' => 'RETAILCRM_STATUS_EXPORT', 'label' => $this->l('Default status in export'), 'options' => array( - 'query' => $this->reference->getStatuseDefaultExport(), - 'id' => 'id_option', - 'name' => 'name' + 'query' => $this->reference->getStatuseDefaultExport(), + 'id' => 'id_option', + 'name' => 'name' ) )), ); @@ -319,6 +368,8 @@ class RetailCRM extends Module $helper->fields_value['RETAILCRM_API_TOKEN'] = Configuration::get('RETAILCRM_API_TOKEN'); $helper->fields_value['RETAILCRM_API_VERSION'] = Configuration::get('RETAILCRM_API_VERSION'); $helper->fields_value['RETAILCRM_STATUS_EXPORT'] = Configuration::get('RETAILCRM_STATUS_EXPORT'); + $helper->fields_value['RETAILCRM_DAEMON_COLLECTOR_ACTIVE_1'] = Configuration::get('RETAILCRM_DAEMON_COLLECTOR_ACTIVE'); + $helper->fields_value['RETAILCRM_DAEMON_COLLECTOR_KEY'] = Configuration::get('RETAILCRM_DAEMON_COLLECTOR_KEY'); $deliverySettings = Configuration::get('RETAILCRM_API_DELIVERY'); if (isset($deliverySettings) && $deliverySettings != '') { @@ -418,11 +469,27 @@ class RetailCRM extends Module $customerSend = array_merge($customerSend, $address['customer']); } + if (isset($params['cart'])){ + $address = $this->addressParse($params['cart']); + $customerSend = array_merge($customerSend, $address['customer']); + } + + $customerSend = array_merge($customerSend, $address['customer']); + $this->api->customersEdit($customerSend); return $customerSend; } + // this hook added in 1.7 + public function hookActionValidateCustomerAddressForm($params) + { + $customer = new Customer($params['cart']->id_customer); + $customerAddress = array('customer' => $customer, 'cart' => $params['cart']); + + return $this->hookActionCustomerAccountUpdate($customerAddress); + } + public function hookNewOrder($params) { return $this->hookActionOrderStatusPostUpdate($params); @@ -444,7 +511,6 @@ class RetailCRM extends Module public function hookActionOrderEdited($params) { - $order = array( 'externalId' => $params['order']->id, 'firstName' => $params['customer']->firstname, @@ -490,6 +556,65 @@ class RetailCRM extends Module return $order; } + private function addressParse($address) + { + if ($address instanceof Address) { + $postcode = $address->postcode; + $city = $address->city; + $addres_line = sprintf("%s %s", $address->address1, $address->address2); + $countryIso = CountryCore::getIsoById($address->id_country); + } + + if (!empty($postcode)) { + $customer['address']['index'] = $postcode; + $order['delivery']['address']['index'] = $postcode; + } + + if (!empty($city)) { + $customer['address']['city'] = $city; + $order['delivery']['address']['city'] = $city; + } + + if (!empty($addres_line)) { + $customer['address']['text'] = $addres_line; + $order['delivery']['address']['text'] = $addres_line; + } + + if (!empty($countryIso)) { + $order['countryIso'] = $countryIso; + $customer['address']['countryIso'] = $countryIso; + } + + $phones = $this->getPhone($address); + $order = array_merge($order, $phones['order']); + $customer = array_merge($customer, $phones['customer']); + $addressArray = array('order' => $order, 'customer' => $customer); + + return $addressArray; + } + + private function getPhone($address) + { + if (!empty($address->phone_mobile)){ + $order['phone'] = $address->phone_mobile; + $customer['phones'][] = array('number'=> $address->phone_mobile); + } + + if (!empty($address->phone)){ + $order['additionalPhone'] = $address->phone; + $customer['phones'][] = array('number'=> $address->phone); + } + + if (!isset($order['phone']) && !empty($order['additionalPhone'])){ + $order['phone'] = $order['additionalPhone']; + unset($order['additionalPhone']); + } + + $phonesArray = array('customer' => $customer, 'order' => $order); + + return $phonesArray; + } + public function hookActionOrderStatusPostUpdate($params) { $delivery = json_decode(Configuration::get('RETAILCRM_API_DELIVERY'), true); @@ -521,9 +646,11 @@ class RetailCRM extends Module } $cart = $params['cart']; + $addressCollection = $cart->getAddressCollection(); $address = array_shift($addressCollection); $address = $this->addressParse($address); + $customer = array_merge($customer, $address['customer']); $order = array_merge($order, $address['order']); $comment = $params['order']->getFirstMessage(); @@ -754,74 +881,6 @@ class RetailCRM extends Module return $output; } - private function addressParse($address) - { - - if ($address instanceof Address) { - $postcode = $address->postcode; - $city = $address->city; - $addres_line = sprintf("%s %s", $address->address1, $address->address2); - $countryIso = CountryCore::getIsoById($address->id_country); - } - - if (!empty($postcode)) { - $customer['address']['index'] = $postcode; - $order['delivery']['address']['index'] = $postcode; - } - - if (!empty($city)) { - $customer['address']['city'] = $city; - $order['delivery']['address']['city'] = $city; - } - - if (!empty($addres_line)) { - $customer['address']['text'] = $addres_line; - $order['delivery']['address']['text'] = $addres_line; - } - - if (!empty($countryIso)) { - $order['countryIso'] = $countryIso; - $customer['address']['countryIso'] = $countryIso; - } - - $phones = $this->getPhone($address); - - if ($phones !== false) { - $order = array_merge($order, $phones['order']); - $customer = array_merge($customer, $phones['customer']); - } - - $addressArray = array('order' => $order, 'customer' => $customer); - - return $addressArray; - } - - private function getPhone($address) - { - if (!empty($address->phone_mobile)){ - $order['phone'] = $address->phone_mobile; - $customer['phones'][] = array('number'=> $address->phone_mobile); - } - - if (!empty($address->phone)){ - $order['additionalPhone'] = $address->phone; - $customer['phones'][] = array('number'=> $address->phone); - } - - if (!isset($order['phone']) && !empty($order['additionalPhone'])){ - $order['phone'] = $order['additionalPhone']; - unset($order['additionalPhone']); - } - if (!empty($customer) && !empty($order)) { - $phonesArray = array('customer' => $customer, 'order' => $order); - - return $phonesArray; - } else { - - return false; - } - } - /** * Activate/deactivate module in marketplace retailCRM * diff --git a/retailcrm/translations/es.php b/retailcrm/translations/es.php index d5a5466..16d63e5 100644 --- a/retailcrm/translations/es.php +++ b/retailcrm/translations/es.php @@ -15,6 +15,9 @@ $_MODULE['<{retailcrm}prestashop>retailcrm_c888438d14855d7d96a2724ee9c306bd'] = $_MODULE['<{retailcrm}prestashop>retailcrm_51af428aa0dcceb5230acb267ecb91c5'] = 'La configuración de la conexión'; $_MODULE['<{retailcrm}prestashop>retailcrm_4cbd5dbeeef7392e50358b1bc00dd592'] = 'URL CRM'; $_MODULE['<{retailcrm}prestashop>retailcrm_7f775042e08eddee6bbfd8fbe0add4a3'] = 'La clave API'; +$_MODULE['<{retailcrm}prestashop>retailcrm_52a13123e134b8b72b6299bc14a36aad'] = 'Daemon Collector'; +$_MODULE['<{retailcrm}prestashop>retailcrm_a13367a8e2a3f3bf4f3409079e3fdf87'] = 'Active'; +$_MODULE['<{retailcrm}prestashop>retailcrm_f75d8fa5c89351544d372cf90528ccf2'] = 'Clave de la página web'; $_MODULE['<{retailcrm}prestashop>retailcrm_c9cc8cce247e49bae79f15173ce97354'] = 'Guardar'; $_MODULE['<{retailcrm}prestashop>retailcrm_065ab3a28ca4f16f55f103adc7d0226f'] = 'Los métodos del envío'; $_MODULE['<{retailcrm}prestashop>retailcrm_33af8066d3c83110d4bd897f687cedd2'] = 'Los estados de pedidos'; diff --git a/retailcrm/translations/ru.php b/retailcrm/translations/ru.php index 4bb08b2..9c20f00 100644 --- a/retailcrm/translations/ru.php +++ b/retailcrm/translations/ru.php @@ -15,6 +15,9 @@ $_MODULE['<{retailcrm}prestashop>retailcrm_c888438d14855d7d96a2724ee9c306bd'] = $_MODULE['<{retailcrm}prestashop>retailcrm_51af428aa0dcceb5230acb267ecb91c5'] = 'Настройка соединения'; $_MODULE['<{retailcrm}prestashop>retailcrm_4cbd5dbeeef7392e50358b1bc00dd592'] = 'URL адрес CRM'; $_MODULE['<{retailcrm}prestashop>retailcrm_7f775042e08eddee6bbfd8fbe0add4a3'] = 'API ключ'; +$_MODULE['<{retailcrm}prestashop>retailcrm_52a13123e134b8b72b6299bc14a36aad'] = 'Daemon Collector'; +$_MODULE['<{retailcrm}prestashop>retailcrm_a13367a8e2a3f3bf4f3409079e3fdf87'] = 'Активировать'; +$_MODULE['<{retailcrm}prestashop>retailcrm_f75d8fa5c89351544d372cf90528ccf2'] = 'Ключ сайта'; $_MODULE['<{retailcrm}prestashop>retailcrm_c9cc8cce247e49bae79f15173ce97354'] = 'Сохранить'; $_MODULE['<{retailcrm}prestashop>retailcrm_065ab3a28ca4f16f55f103adc7d0226f'] = 'Способы доставки'; $_MODULE['<{retailcrm}prestashop>retailcrm_33af8066d3c83110d4bd897f687cedd2'] = 'Статусы заказов'; diff --git a/tests/phpunit/RetailcrmDaemonCollectorTest.php b/tests/phpunit/RetailcrmDaemonCollectorTest.php new file mode 100644 index 0000000..1df7f36 --- /dev/null +++ b/tests/phpunit/RetailcrmDaemonCollectorTest.php @@ -0,0 +1,40 @@ +id = self::ID; + + $collector = new RetailcrmDaemonCollector( + $customer, + self::KEY + ); + + $js = $collector->buildScript()->getJs(); + + $this->assertContains('customerId', $js); + $this->assertContains('assertContains('', $js); + } + + public function testBuildJsWithoutCustomer() + { + $customer = new Customer; + + $collector = new RetailcrmDaemonCollector( + $customer, + self::KEY + ); + + $js = $collector->buildScript()->getJs(); + + $this->assertNotContains('customerId', $js); + $this->assertContains('assertContains('', $js); + } +} diff --git a/tests/phpunit/RetailcrmInventoriesTest.php b/tests/phpunit/RetailcrmInventoriesTest.php new file mode 100644 index 0000000..8e720ee --- /dev/null +++ b/tests/phpunit/RetailcrmInventoriesTest.php @@ -0,0 +1,136 @@ +apiMock = $this->getMockBuilder('RetailcrmProxy') + ->disableOriginalConstructor() + ->setMethods( + array( + 'storeInventories' + ) + ) + ->getMock(); + + $catalog = new RetailcrmCatalog(); + $data = $catalog->getData(); + + $this->product1 = $data[1][0]; + $this->product2 = $data[1][1]; + } + + /** + * @param $apiVersion + * @param $response + * + * @dataProvider dataProviderLoadStocks + */ + public function testLoadStocks($apiVersion, $response) + { + if ($response['success'] == true) { + $this->apiMock->expects($this->any()) + ->method('storeInventories') + ->willReturn( + new RetailcrmApiResponse( + '200', + json_encode( + $this->getApiInventories() + ) + ) + ); + } else { + $this->apiMock->expects($this->any()) + ->method('storeInventories') + ->willReturn($response); + } + + RetailcrmInventories::$api = $this->apiMock; + + RetailcrmInventories::loadStocks(); + + $product1Id = explode('#', $this->product1['id']); + $product2Id = explode('#', $this->product2['id']); + + if (isset($product1Id[1])){ + $prod1Quantity = StockAvailable::getQuantityAvailableByProduct($product1Id[0], $product1Id[1]); + } else { + $prod1Quantity = StockAvailable::getQuantityAvailableByProduct($product1Id[0], 0); + } + + if (isset($product2Id[1])){ + $prod2Quantity = StockAvailable::getQuantityAvailableByProduct($product2Id[0], $product2Id[1]); + } else { + $prod2Quantity = StockAvailable::getQuantityAvailableByProduct($product2Id[0], 0); + } + + $this->assertEquals(self::PRODUCT1_QUANTITY, $prod1Quantity); + $this->assertEquals(self::PRODUCT2_QUANTITY, $prod2Quantity); + } + + public function dataProviderLoadStocks() + { + $response = $this->getResponseData(); + + return array( + array( + 'api_version' => 4, + 'response' => $response['true'], + ), + array( + 'api_version' => 5, + 'response' => $response['true'] + ), + array( + 'api_version' => 4, + 'response' => $response['false'] + ), + array( + 'api_version' => 5, + 'response' => $response['false'] + ) + ); + } + + private function getResponseData() + { + return array( + 'true' => $this->getApiInventories(), + 'false' => false + ); + } + + private function getApiInventories() + { + return array( + "success" => true, + "pagination"=> array( + "limit"=> 250, + "totalCount"=> 1, + "currentPage"=> 1, + "totalPageCount"=> 1 + ), + "offers" => array( + array( + 'externalId' => $this->product1['id'], + 'xmlId' => 'xmlId', + 'quantity' => self::PRODUCT1_QUANTITY, + ), + array( + 'externalId' => $this->product2['id'], + 'xmlId' => 'xmlId', + 'quantity' => self::PRODUCT2_QUANTITY, + ) + ) + ); + } +} diff --git a/tests/phpunit/RetailcrmTest.php b/tests/phpunit/RetailcrmTest.php index c3cabb0..d3fd4d6 100644 --- a/tests/phpunit/RetailcrmTest.php +++ b/tests/phpunit/RetailcrmTest.php @@ -48,6 +48,7 @@ class RetailCRMTest extends RetailcrmTestCase public function testHookActionCustomerAccountUpdate() { $customer = new Customer(1); + $params = array('customer' => $customer); $customer = $this->retailcrmModule->hookActionCustomerAccountUpdate($params); @@ -125,6 +126,11 @@ class RetailCRMTest extends RetailcrmTestCase $this->assertArrayHasKey('lastName', $result); $this->assertArrayHasKey('email', $result); $this->assertArrayHasKey('delivery', $result); + $this->assertArrayHasKey('address', $result['delivery']); + $this->assertArrayHasKey('city', $result['delivery']['address']); + $this->assertArrayHasKey('text', $result['delivery']['address']); + $this->assertArrayHasKey('index', $result['delivery']['address']); + $this->assertArrayHasKey('countryIso', $result); $this->assertArrayHasKey('items', $result); $this->assertArrayHasKey('customer', $result); $this->assertArrayHasKey('externalId', $result['customer']);