diff --git a/intaro.retailcrm/classes/general/RestApi.php b/intaro.retailcrm/classes/general/RestApi.php deleted file mode 100644 index e7502aff..00000000 --- a/intaro.retailcrm/classes/general/RestApi.php +++ /dev/null @@ -1,746 +0,0 @@ -url = $url; -// $this->defaultParameters = array('apiKey' => $apiKey); -// $this->siteCode = $site; -// } -// -// /* Методы для работы с заказами */ -// /** -// * Получение заказа по id -// * -// * @param string $id - идентификатор заказа -// * @param string $by - поиск заказа по id или externalId -// * @param string $site - символьный код сайта -// * @return ApiResponse - информация о заказе -// */ -// public function ordersGet($id, $by = 'externalId', $site = null) -// { -// $this->checkIdParameter($by); -// -// return $this->makeRequest("/orders/$id", self::METHOD_GET, $this->fillSite($site, array( -// 'by' => $by -// ))); -// } -// -// /** -// * Получение списка заказов, удовлетворяющих заданному фильтру -// * -// * @param array $filter - фильтры -// * @param int $page - страница -// * @param int $limit - ограничение на размер выборки -// * @return ApiResponse - информация о заказах -// */ -// public function ordersList(array $filter = array(), $page = null, $limit = null) -// { -// $parameters = array(); -// if (sizeof($filter)) { -// $parameters['filter'] = $filter; -// } -// if (null !== $page) { -// $parameters['page'] = (int) $page; -// } -// if (null !== $limit) { -// $parameters['limit'] = (int) $limit; -// } -// return $this->makeRequest('/orders', self::METHOD_GET, $parameters); -// } -// -// /** -// * Создание заказа -// * -// * @param array $order - информация о заказе -// * @param string $site - символьный код сайта -// * @return ApiResponse -// */ -// public function ordersCreate($order, $site = null) -// { -// if (!sizeof($order)) { -// throw new \InvalidArgumentException('Parameter `order` must contains a data'); -// } -// -// return $this->makeRequest("/orders/create", self::METHOD_POST, $this->fillSite($site, array( -// 'order' => json_encode($order) -// ))); -// } -// -// /** -// * Изменение заказа -// * -// * @param array $order - информация о заказе -// * @param string $by - изменение заказа по id или externalId -// * @param string $site - символьный код сайта -// * @return ApiResponse -// */ -// public function orderEdit($order, $by = 'externalId', $site = null) -// { -// if (!sizeof($order)) { -// throw new \InvalidArgumentException('Parameter `order` must contains a data'); -// } -// -// $this->checkIdParameter($by); -// -// if (!isset($order[$by])) { -// throw new \InvalidArgumentException(sprintf('Order array must contain the "%s" parameter.', $by)); -// } -// -// return $this->makeRequest( -// "/orders/" . $order[$by] . "/edit", -// self::METHOD_POST, -// $this->fillSite($site, array( -// 'order' => json_encode($order), -// 'by' => $by, -// )) -// ); -// } -// -// /** -// * Пакетная загрузка заказов -// * -// * @param array $orders - массив заказов -// * @param string $site - символьный код сайта -// * @return ApiResponse -// */ -// public function orderUpload($orders, $site = null) -// { -// if (!sizeof($orders)) { -// throw new \InvalidArgumentException('Parameter `orders` must contains array of the orders'); -// } -// -// return $this->makeRequest("/orders/upload", self::METHOD_POST, $this->fillSite($site, array( -// 'orders' => json_encode($orders), -// ))); -// } -// -// /** -// * Обновление externalId у заказов с переданными id -// * -// * @param array $order - массив, содержащий id и externalId заказа -// * @return ApiResponse -// */ -// public function orderFixExternalIds($order) -// { -// if (!sizeof($order)) { -// throw new \InvalidArgumentException('Method parameter must contains at least one IDs pair'); -// } -// -// return $this->makeRequest("/orders/fix-external-ids", self::METHOD_POST, array( -// 'orders' => json_encode($order), -// )); -// } -// -// /** -// * Получение последних измененных заказов -// * -// * @param \DateTime|string|int $startDate - начальная дата и время выборки (Y-m-d H:i:s) -// * @param \DateTime|string|int $endDate - конечная дата и время выборки (Y-m-d H:i:s) -// * @param int $limit - ограничение на размер выборки -// * @param int $offset - сдвиг -// * @param bool $skipMyChanges -// * @return ApiResponse -// */ -// public function orderHistory( -// $startDate = null, -// $endDate = null, -// $limit = 100, -// $offset = 0, -// $skipMyChanges = true -// ) { -// $parameters = array(); -// -// if ($startDate) { -// $parameters['startDate'] = $this->ensureDateTime($startDate); -// } -// if ($endDate) { -// $parameters['endDate'] = $this->ensureDateTime($endDate); -// } -// if ($limit) { -// $parameters['limit'] = (int) $limit; -// } -// if ($offset) { -// $parameters['offset'] = (int) $offset; -// } -// if ($skipMyChanges) { -// $parameters['skipMyChanges'] = (bool) $skipMyChanges; -// } -// -// return $this->makeRequest('/orders/history', self::METHOD_GET, $parameters); -// } -// -// /* Методы для работы с клиентами */ -// /** -// * Получение клиента по id -// * -// * @param string $id - идентификатор -// * @param string $by - поиск заказа по id или externalId -// * @param string $site - символьный код сайта -// * @return array - информация о клиенте -// */ -// public function customerGet($id, $by = 'externalId', $site = null) -// { -// $this->checkIdParameter($by); -// -// return $this->makeRequest("/customers/$id", self::METHOD_GET, $this->fillSite($site, array( -// 'by' => $by -// ))); -// } -// -// /** -// * Получение списка клиентов в соответсвии с запросом -// * -// * @param array $filter - фильтры -// * @param int $page - страница -// * @param int $limit - ограничение на размер выборки -// * @return ApiResponse -// */ -// public function customersList(array $filter = array(), $page = null, $limit = null) -// { -// $parameters = array(); -// -// if (sizeof($filter)) { -// $parameters['filter'] = $filter; -// } -// -// if (null !== $page) { -// $parameters['page'] = (int) $page; -// } -// -// if (null !== $limit) { -// $parameters['limit'] = (int) $limit; -// } -// -// return $this->makeRequest('/customers', self::METHOD_GET, $parameters); -// } -// -// /** -// * Создание клиента -// * -// * @param array $customer - информация о клиенте -// * @param string $site - символьный код сайта -// * @return ApiResponse -// */ -// public function customersCreate(array $customer, $site = null) -// { -// if (!sizeof($customer)) { -// throw new \InvalidArgumentException('Parameter `customer` must contains a data'); -// } -// -// return $this->makeRequest("/customers/create", self::METHOD_POST, $this->fillSite($site, array( -// 'customer' => json_encode($customer) -// ))); -// } -// -// /** -// * Редактирование клиента -// * -// * @param array $customer - информация о клиенте -// * @param string $by - изменение клиента по id или externalId -// * @param string $site - символьный код сайта -// * @return ApiResponse -// */ -// public function customerEdit($customer, $by = 'externalId', $site = null) -// { -// if (!sizeof($customer)) { -// throw new \InvalidArgumentException('Parameter `customer` must contains a data'); -// } -// -// $this->checkIdParameter($by); -// -// if (!isset($customer[$by])) { -// throw new \InvalidArgumentException(sprintf('Customer array must contain the "%s" parameter.', $by)); -// } -// -// return $this->makeRequest( -// "/customers/" . $customer[$by] . "/edit", -// self::METHOD_POST, -// $this->fillSite($site, array( -// 'customer' => json_encode($customer), -// 'by' => $by, -// ) -// )); -// } -// -// /** -// * Пакетная загрузка клиентов -// * -// * @param array $customers - массив клиентов -// * @param string $site - символьный код сайта -// * @return ApiResponse -// */ -// public function customerUpload($customers, $site = null) -// { -// if (!sizeof($customers)) { -// throw new \InvalidArgumentException('Parameter `customers` must contains array of the customers'); -// } -// -// return $this->makeRequest("/customers/upload", self::METHOD_POST, $this->fillSite($site, array( -// 'customers' => json_encode($customers), -// ))); -// } -// -// /** -// * Обновление externalId у клиентов с переданными id -// * -// * @param array $customers - массив, содержащий id и externalId заказа -// * @return array -// */ -// public function customerFixExternalIds($customers) -// { -// if (!sizeof($customers)) { -// throw new \InvalidArgumentException('Method parameter must contains at least one IDs pair'); -// } -// -// return $this->makeRequest("/customers/fix-external-ids", self::METHOD_POST, array( -// 'customers' => json_encode($customers), -// )); -// } -// -// /* Методы для работы со справочниками */ -// -// /** -// * Получение списка типов доставки -// * -// * @return ApiResponse -// */ -// public function deliveryTypesList() -// { -// return $this->makeRequest('/reference/delivery-types', self::METHOD_GET); -// } -// -// /** -// * Редактирование типа доставки -// * -// * @param array $delivery - информация о типе доставки -// * @return ApiResponse -// */ -// public function deliveryTypeEdit($delivery) -// { -// if (!isset($delivery['code'])) { -// throw new \InvalidArgumentException('Data must contain "code" parameter.'); -// } -// -// return $this->makeRequest( -// '/reference/delivery-types/' . $delivery['code'] . '/edit', -// self::METHOD_POST, -// array( -// 'deliveryType' => json_encode($delivery) -// ) -// ); -// } -// -// /** -// * Получение списка служб доставки -// * -// * @return ApiResponse -// */ -// public function deliveryServicesList() -// { -// return $this->makeRequest('/reference/delivery-services', self::METHOD_GET); -// } -// -// /** -// * Редактирование службы доставки -// * -// * @param array $delivery - информация о типе доставки -// * @return ApiResponse -// */ -// public function deliveryServiceEdit($delivery) -// { -// if (!isset($delivery['code'])) { -// throw new \InvalidArgumentException('Data must contain "code" parameter.'); -// } -// -// return $this->makeRequest( -// '/reference/delivery-services/' . $delivery['code'] . '/edit', -// self::METHOD_POST, -// array( -// 'deliveryService' => json_encode($delivery) -// ) -// ); -// } -// -// -// /** -// * Получение списка типов оплаты -// * -// * @return ApiResponse -// */ -// public function paymentTypesList() -// { -// return $this->makeRequest('/reference/payment-types', self::METHOD_GET); -// } -// -// /** -// * Редактирование типа оплаты -// * -// * @param array $paymentType - информация о типе оплаты -// * @return ApiResponse -// */ -// public function paymentTypesEdit($paymentType) -// { -// if (!isset($paymentType['code'])) { -// throw new \InvalidArgumentException('Data must contain "code" parameter.'); -// } -// -// return $this->makeRequest( -// '/reference/payment-types/' . $paymentType['code'] . '/edit', -// self::METHOD_POST, -// array( -// 'paymentType' => json_encode($paymentType) -// ) -// ); -// } -// -// -// /** -// * Получение списка статусов оплаты -// * -// * @return ApiResponse -// */ -// public function paymentStatusesList() -// { -// return $this->makeRequest('/reference/payment-statuses', self::METHOD_GET); -// } -// -// /** -// * Редактирование статуса оплаты -// * -// * @param array $paymentStatus - информация о статусе оплаты -// * @return ApiResponse -// */ -// public function paymentStatusesEdit($paymentStatus) -// { -// if (!isset($paymentStatus['code'])) { -// throw new \InvalidArgumentException('Data must contain "code" parameter.'); -// } -// -// return $this->makeRequest( -// '/reference/payment-statuses/' . $paymentStatus['code'] . '/edit', -// self::METHOD_POST, -// array( -// 'paymentStatus' => json_encode($paymentStatus) -// ) -// ); -// } -// -// -// /** -// * Получение списка типов заказа -// * -// * @return ApiResponse -// */ -// public function orderTypesList() -// { -// return $this->makeRequest('/reference/order-types', self::METHOD_GET); -// } -// -// /** -// * Редактирование типа заказа -// * -// * @param array $orderType - информация о типе заказа -// * @return ApiResponse -// */ -// public function orderTypesEdit($orderType) -// { -// if (!isset($orderType['code'])) { -// throw new \InvalidArgumentException('Data must contain "code" parameter.'); -// } -// -// return $this->makeRequest( -// '/reference/order-types/' . $orderType['code'] . '/edit', -// self::METHOD_POST, -// array( -// 'orderType' => json_encode($orderType) -// ) -// ); -// } -// -// -// /** -// * Получение списка способов оформления заказа -// * -// * @return ApiResponse -// */ -// public function orderMethodsList() -// { -// return $this->makeRequest('/reference/order-methods', self::METHOD_GET); -// } -// -// /** -// * Редактирование способа оформления заказа -// * -// * @param array $orderMethod - информация о способе оформления заказа -// * @return ApiResponse -// */ -// public function orderMethodsEdit($orderMethod) -// { -// if (!isset($orderMethod['code'])) { -// throw new \InvalidArgumentException('Data must contain "code" parameter.'); -// } -// -// return $this->makeRequest( -// '/reference/order-methods/' . $orderMethod['code'] . '/edit', -// self::METHOD_POST, -// array( -// 'orderMethod' => json_encode($orderMethod) -// ) -// ); -// } -// -// /** -// * Получение списка статусов заказа -// * -// * @return ApiResponse -// */ -// public function orderStatusesList() -// { -// return $this->makeRequest('/reference/statuses', self::METHOD_GET); -// } -// -// /** -// * Получение списка сайтов -// * -// * @return ApiResponse -// */ -// public function sitesList() -// { -// return $this->makeRequest('/reference/sites', self::METHOD_GET); -// } -// -// /** -// * Редактирование статуса заказа -// * -// * @param array $status - информация о статусе заказа -// * @return ApiResponse -// */ -// public function orderStatusEdit($status) -// { -// if (!isset($status['code'])) { -// throw new \InvalidArgumentException('Data must contain "code" parameter.'); -// } -// -// return $this->makeRequest( -// '/reference/statuses/' . $status['code'] . '/edit', -// self::METHOD_POST, -// array( -// 'status' => json_encode($status) -// ) -// ); -// } -// -// -// /** -// * Получение списка групп статусов заказа -// * -// * @return ApiResponse -// */ -// public function orderStatusGroupsList() -// { -// return $this->makeRequest('/reference/status-groups', self::METHOD_GET); -// } -// -// /** -// * Обновление статистики -// * -// * @return ApiResponse -// */ -// public function statisticUpdate() -// { -// return $this->makeRequest('/statistic/update', self::METHOD_GET); -// } -// -// /** -// * Обновление остатков -// * -// * @return ApiResponse -// */ -// public function storeUpload($data, $site) -// { -// if (!sizeof($data)) { -// throw new \InvalidArgumentException('Parameter `site` must contains array of the customers'); -// } -// -// return $this->makeRequest('/store/inventories/upload', self::METHOD_POST, $this->fillSite($site, array('offers' => json_encode($data)))); -// } -// -// /** -// * Редактирование сведений о складе -// * -// * @return ApiResponse -// */ -// public function storesEdit($data) -// { -// if (!isset($data['code'])) { -// throw new \InvalidArgumentException('Data must contain "code" parameter.'); -// } -// -// return $this->makeRequest( -// '/reference/stores/' . $data['code'] . '/edit', -// self::METHOD_POST, -// array( -// 'store' => json_encode($data) -// ) -// ); -// } -// -// /** -// * @return \DateTime -// */ -// public function getGeneratedAt() -// { -// return $this->generatedAt; -// } -// -// protected function ensureDateTime($value) -// { -// if ($value instanceof \DateTime) { -// return $value->format('Y-m-d H:i:s'); -// } elseif (is_int($value)) { -// return date('Y-m-d H:i:s', $value); -// } -// -// return $value; -// } -// -// /** -// * Check ID parameter -// * -// * @param string $by -// * @return bool -// */ -// protected function checkIdParameter($by) -// { -// $allowedForBy = array('externalId', 'id'); -// if (!in_array($by, $allowedForBy)) { -// throw new \InvalidArgumentException(sprintf( -// 'Value "%s" for parameter "by" is not valid. Allowed values are %s.', -// $by, -// implode(', ', $allowedForBy) -// )); -// } -// return true; -// } -// -// /** -// * Fill params by site value -// * -// * @param string $site -// * @param array $params -// * @return array -// */ -// protected function fillSite($site, array $params) -// { -// if ($site) { -// $params['site'] = $site; -// } elseif ($this->siteCode) { -// $params['site'] = $this->siteCode; -// } -// -// return $params; -// } -// -// /** -// * Make HTTP request -// * -// * @param string $path -// * @param string $method (default: 'GET') -// * @param array $parameters (default: array()) -// * @param int $timeout -// * @return ApiResponse -// */ -// public function makeRequest($path, $method, $parameters = array(), $timeout = 30) -// { -// $allowedMethods = array(self::METHOD_GET, self::METHOD_POST); -// if (!in_array($method, $allowedMethods)) { -// throw new \InvalidArgumentException(sprintf( -// 'Method "%s" is not valid. Allowed methods are %s', -// $method, -// implode(', ', $allowedMethods) -// )); -// } -// -// $parameters = array_merge($this->defaultParameters, $parameters); -// -// $path = $this->url . $path; -// if (self::METHOD_GET === $method && sizeof($parameters)) { -// $path .= '?' . http_build_query($parameters); -// } -// -// $ch = curl_init(); -// curl_setopt($ch, CURLOPT_URL, $path); -// curl_setopt($ch, CURLOPT_FAILONERROR, false); -// curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable -// curl_setopt($ch, CURLOPT_TIMEOUT, (int) $timeout); // times out after 30s -// // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); -// // curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // allow redirects -// -// if (self::METHOD_POST === $method) { -// curl_setopt($ch, CURLOPT_POST, true); -// curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters); -// } -// -// $responseBody = curl_exec($ch); -// $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); -// -// $errno = curl_errno($ch); -// $error = curl_error($ch); -// curl_close($ch); -// -// if ($errno) { -// throw new CurlException($error, $errno); -// } -// -// $result = json_decode($responseBody, true); -// -// if (isset($result['generatedAt'])) { -// $this->generatedAt = new \DateTime($result['generatedAt']); -// unset($result['generatedAt']); -// } -// -// return new ApiResponse($statusCode, $responseBody); -// } -//} diff --git a/intaro.retailcrm/install/index.php b/intaro.retailcrm/install/index.php index 35c42cc4..b89cf461 100644 --- a/intaro.retailcrm/install/index.php +++ b/intaro.retailcrm/install/index.php @@ -91,18 +91,12 @@ class intaro_retailcrm extends CModule { include($this->INSTALL_PATH . '/../classes/general/ApiClient.php'); include($this->INSTALL_PATH . '/../classes/general/Http/Client.php'); include($this->INSTALL_PATH . '/../classes/general/Response/ApiResponse.php'); -<<<<<<< HEAD:intaro.intarocrm/install/index.php - include($this->INSTALL_PATH . '/../classes/general/ICrmOrderActions.php'); - include($this->INSTALL_PATH . '/../classes/general/ICMLLoader.php'); - include($this->INSTALL_PATH . '/../classes/general/Logger.php'); -======= include($this->INSTALL_PATH . '/../classes/general/RCrmActions.php'); include($this->INSTALL_PATH . '/../classes/general/user/RetailCrmUser.php'); include($this->INSTALL_PATH . '/../classes/general/order/RetailCrmOrder.php'); include($this->INSTALL_PATH . '/../classes/general/history/RetailCrmHistory.php'); include($this->INSTALL_PATH . '/../classes/general/events/RetailCrmEvent.php'); include($this->INSTALL_PATH . '/../classes/general/icml/RetailCrmICML.php'); ->>>>>>> upstream/master:intaro.retailcrm/install/index.php include($this->INSTALL_PATH . '/../classes/general/Exception/InvalidJsonException.php'); include($this->INSTALL_PATH . '/../classes/general/Exception/CurlException.php'); include($this->INSTALL_PATH . '/../classes/general/RestNormalizer.php'); @@ -793,6 +787,7 @@ class intaro_retailcrm extends CModule { } //order upload if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') && isset($_POST['ajax']) && ($_POST['ajax'] == 1)) { + $historyTime = Date(''); RetailCrmOrder::uploadOrders(); // each 50 $lastUpOrderId = COption::GetOptionString($this->MODULE_ID, $this->CRM_ORDER_LAST_ID, 0); @@ -1289,13 +1284,6 @@ class intaro_retailcrm extends CModule { } function GetProfileSetupVars($iblocks, $propertiesProduct, $propertiesUnitProduct, $propertiesSKU, $propertiesUnitSKU, $filename) { - // Get string like IBLOCK_EXPORT[0]=3& - // IBLOCK_EXPORT[1]=6& - // IBLOCK_PROPERTY_ARTICLE[0]=ARTICLE& - // IBLOCK_PROPERTY_ARTICLE[1]=ARTNUMBER& - // SETUP_FILE_NAME=%2Fbitrix%2Fcatalog_export%2Ftestintarocrm.xml - - //$arProfileFields = explode(",", $SETUP_FIELDS_LIST); $strVars = ""; foreach ($iblocks as $key => $val) $strVars .= 'IBLOCK_EXPORT[' . $key . ']=' . $val . '&'; @@ -1318,10 +1306,12 @@ class intaro_retailcrm extends CModule { } function historyLoad($api, $method){ - $historyFilter = array(); + $page = null; + $i = 0; while(true){ + $i++; try { - $history = $api->$method($historyFilter); + $history = $api->$method(array(), $page); } catch (\RetailCrm\Exception\CurlException $e) { RCrmActions::eventLog( 'RetailCrmHistory::' . $method, 'RetailCrm\RestApi::' . $method . '::CurlException', @@ -1348,11 +1338,11 @@ class intaro_retailcrm extends CModule { break; } - if($history['pagination']['totalPageCount'] == 1){ + if($history['pagination']['totalPageCount'] == $history['pagination']['currentPage']){ break; } - $historyFilter['sinceId'] = $end['id']; + $page = $history['pagination']['totalPageCount']; } return $end['id'];