From 2de20770554a36086953756ea2f8fb7b409311ca Mon Sep 17 00:00:00 2001 From: Grisha Pomadchin Date: Wed, 29 Jan 2014 18:42:52 +0400 Subject: [PATCH] opt export DeliveryServices --- .../classes/general/ICrmOrderActions.php | 93 +++++++++---------- intaro.intarocrm/install/index.php | 1 + .../lang/ru/icml_export_setup.php | 17 +--- intaro.intarocrm/lang/ru/options.php | 3 +- intaro.intarocrm/options.php | 63 +++++++++++++ 5 files changed, 109 insertions(+), 68 deletions(-) diff --git a/intaro.intarocrm/classes/general/ICrmOrderActions.php b/intaro.intarocrm/classes/general/ICrmOrderActions.php index a0ada56b..004d859f 100755 --- a/intaro.intarocrm/classes/general/ICrmOrderActions.php +++ b/intaro.intarocrm/classes/general/ICrmOrderActions.php @@ -359,9 +359,6 @@ class ICrmOrderActions $optionsSites = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_SITES, 0)); $optionsOrderProps = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_PROPS, 0)); - //use email as login for new customers - $loginEmail = true; - $api = new IntaroCrm\RestApi($api_host, $api_key); $dateStart = COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_HISTORY_DATE, null); @@ -375,8 +372,6 @@ class ICrmOrderActions $dateStart = new \DateTime($dateStart); - echo json_encode($orderHistory); - // pushing existing orders foreach ($orderHistory as $order) { @@ -384,58 +379,56 @@ class ICrmOrderActions // we dont need new orders without any customers (can check only for externalId) if(!isset($order['customer']['externalId']) && !$order['customer']['externalId']) { - if($loginEmail) { - if (!$order['customer']['email']) { - $login = 'user_' . (microtime(true) * 100); - $server_name = 0 < strlen(SITE_SERVER_NAME)? - SITE_SERVER_NAME : 'server.com'; - $order['customer']['email'] = $login . '@' . $server_name; + if (!$order['customer']['email']) { + $login = 'user_' . (microtime(true) * 100); + $server_name = 0 < strlen(SITE_SERVER_NAME)? + SITE_SERVER_NAME : 'server.com'; + $order['customer']['email'] = $login . '@' . $server_name; + $registerNewUser = true; + } else { + // if email already used + $dbUser = CUser::GetList(($by = 'ID'), ($sort = 'ASC'), array('=EMAIL' => $order['email'])); + if ($dbUser->SelectedRowsCount() == 0) { + $login = $order['customer']['email']; $registerNewUser = true; + } elseif ($dbUser->SelectedRowsCount() == 1) { + $arUser = $dbUser->Fetch(); + $registeredUserID = $arUser['ID']; } else { - // if email already used - $dbUser = CUser::GetList(($by = 'ID'), ($sort = 'ASC'), array('=EMAIL' => $order['email'])); - if ($dbUser->SelectedRowsCount() == 0) { - $loginEmail ? $login = $order['customer']['email'] : $login = 'user_' . (microtime(true) * 100); - $registerNewUser = true; - } elseif ($dbUser->SelectedRowsCount() == 1) { - $arUser = $dbUser->Fetch(); - $registeredUserID = $arUser['ID']; - } else { - $login = 'user_' . (microtime(true) * 100); - $registerNewUser = true; - } + $login = 'user_' . (microtime(true) * 100); + $registerNewUser = true; } - - if($registerNewUser) { - $useCaptcha = COption::GetOptionString('main', 'captcha_registration', 'N'); - if ($useCaptcha == 'Y') - COption::SetOptionString('main', 'captcha_registration', 'N'); - $userPassword = randString(10); - $newUser = $USER->Register($login, $order['customer']['firstName'], $order['customer']['lastName'], - $userPassword, $userPassword, $order['customer']['email']); - if ($useCaptcha == 'Y') - COption::SetOptionString('main', 'captcha_registration', 'Y'); - if ($newUser['TYPE'] == 'ERROR') { - self::eventLog('ICrmOrderActions::orderHistory', 'CUser::Register', $newUser['MESSAGE']); - continue; - } else { - $registeredUserID = $USER->GetID(); - $USER->Logout(); - } + } + if($registerNewUser) { + $useCaptcha = COption::GetOptionString('main', 'captcha_registration', 'N'); + if ($useCaptcha == 'Y') + COption::SetOptionString('main', 'captcha_registration', 'N'); + $userPassword = randString(10); + $newUser = $USER->Register($login, $order['customer']['firstName'], $order['customer']['lastName'], + $userPassword, $userPassword, $order['customer']['email']); + if ($useCaptcha == 'Y') + COption::SetOptionString('main', 'captcha_registration', 'Y'); + if ($newUser['TYPE'] == 'ERROR') { + self::eventLog('ICrmOrderActions::orderHistory', 'CUser::Register', $newUser['MESSAGE']); + continue; + } else { + $registeredUserID = $USER->GetID(); + $USER->Logout(); } - - $order['customer']['externalId'] = $registeredUserID; } - $api->customerFixExternalIds(array(array('id' => $order['customer']['id'], 'externalId' => $order['customer']['externalId']))); - - if ($api->getStatusCode() != 200) { - //handle err - write log & continue - self::eventLog('ICrmOrderActions::orderHistory', 'IntaroCrm\RestApi::customerFixExternalIds', $api->getLastError()); - continue; - } + $order['customer']['externalId'] = $registeredUserID; } + $api->customerFixExternalIds(array(array('id' => $order['customer']['id'], 'externalId' => $order['customer']['externalId']))); + + if ($api->getStatusCode() != 200) { + //handle err - write log & continue + self::eventLog('ICrmOrderActions::orderHistory', 'IntaroCrm\RestApi::customerFixExternalIds', $api->getLastError()); + continue; + } + + // new order $newOrderFields = array( 'LID' => $defaultSiteId, @@ -1120,7 +1113,7 @@ class ICrmOrderActions * working with nested arrs * * @param array $arr - * @return boolean + * @return array */ public static function clearArr($arr) { if(!$arr || !is_array($arr)) diff --git a/intaro.intarocrm/install/index.php b/intaro.intarocrm/install/index.php index e09548ab..2163f70f 100755 --- a/intaro.intarocrm/install/index.php +++ b/intaro.intarocrm/install/index.php @@ -668,6 +668,7 @@ class intaro_intarocrm extends CModule { do { //auto delivery types $deliveryTypesArr[$arDeliveryServicesList['SID']] = htmlspecialchars(trim($_POST['delivery-type-' . $arDeliveryServicesList['SID']])); + } while ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch()); } } elseif (htmlspecialchars(trim($_POST['delivery-types-export'])) == 'true') { diff --git a/intaro.intarocrm/lang/ru/icml_export_setup.php b/intaro.intarocrm/lang/ru/icml_export_setup.php index 4b2983b6..7dc07010 100644 --- a/intaro.intarocrm/lang/ru/icml_export_setup.php +++ b/intaro.intarocrm/lang/ru/icml_export_setup.php @@ -23,21 +23,6 @@ $MESS["PROPERTY_OFFER_HEADER_NAME"] = "Свойство торгового пр $MESS["PROPERTY_ARTICLE_HEADER_NAME"] = "Артикул"; $MESS["PROPERTY_MANUFACTURER_HEADER_NAME"] = "Производитель"; $MESS["PROPERTY_COLOR_HEADER_NAME"] = "Цвет"; -$MESS["PROPERTY_WEIGHT_HEADER_NAME"] = "Вес (габариты)"; -$MESS["PROPERTY_LENGTH_HEADER_NAME"] = "Длина (габариты)"; -$MESS["PROPERTY_WIDTH_HEADER_NAME"] = "Ширина (габариты)"; -$MESS["PROPERTY_HEIGHT_HEADER_NAME"] = "Высота (габариты)"; +$MESS["PROPERTY_WEIGHT_HEADER_NAME"] = "Вес"; $MESS["PROPERTY_SIZE_HEADER_NAME"] = "Размер"; -$MESS["SELECT_FIELD_NAME"] = "Поле"; -$MESS["SELECT_PROPERTY_NAME"] = "Свойства"; -$MESS["SELECT_WEIGHT_PROPERTY_NAME"] = "Вec (грамм)"; -$MESS["SELECT_LENGTH_PROPERTY_NAME"] = "Длина (мм.)"; -$MESS["SELECT_WIDTH_PROPERTY_NAME"] = "Ширина (мм.)"; -$MESS["SELECT_HEIGHT_PROPERTY_NAME"] = "Высота (мм.)"; -$MESS["UNIT_MEASUREMENT_MM"] = "мм."; -$MESS["UNIT_MEASUREMENT_CM"] = "см."; -$MESS["UNIT_MEASUREMENT_M"] = "м."; -$MESS["UNIT_MEASUREMENT_MG"] = "мг."; -$MESS["UNIT_MEASUREMENT_G"] = "г."; -$MESS["UNIT_MEASUREMENT_KG"] = "кг."; ?> \ No newline at end of file diff --git a/intaro.intarocrm/lang/ru/options.php b/intaro.intarocrm/lang/ru/options.php index cfee84b5..0eed5b14 100755 --- a/intaro.intarocrm/lang/ru/options.php +++ b/intaro.intarocrm/lang/ru/options.php @@ -50,5 +50,4 @@ $MESS ['FLOOR'] = 'Этаж'; $MESS ['BLOCK'] = 'Подъезд'; $MESS ['HOUSE'] = 'Строение / корпус'; $MESS ['ADDRESS_SHORT'] = 'Краткий адрес'; -$MESS ['ADDRESS_FULL'] = 'Детальный адрес'; - +$MESS ['ADDRESS_FULL'] = 'Детальный адрес'; \ No newline at end of file diff --git a/intaro.intarocrm/options.php b/intaro.intarocrm/options.php index 8965a4ac..fcc7a5a8 100755 --- a/intaro.intarocrm/options.php +++ b/intaro.intarocrm/options.php @@ -92,6 +92,69 @@ $arResult['orderProps'] = array( ) ); +//ajax update deliveryServices +if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') && isset($_POST['ajax']) && ($_POST['ajax'] == 1)) { + $result = array(); + + $api_host = COption::GetOptionString($mid, $CRM_API_HOST_OPTION, 0); + $api_key = COption::GetOptionString($mid, $CRM_API_KEY_OPTION, 0); + + $api = new IntaroCrm\RestApi($api_host, $api_key); + + //check connection & apiKey valid + if ((int) $api->getStatusCode() != 200) { + $APPLICATION->RestartBuffer(); + header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); + die(json_encode(array('success' => false, 'errMsg' => $api->getStatusCode()))); + } + + $optionsDelivTypes = unserialize(COption::GetOptionString($mid, $CRM_DELIVERY_TYPES_ARR, 0)); + + // bitrix deliveryServicesList + $dbDeliveryServicesList = CSaleDeliveryHandler::GetList( + array( + 'SORT' => 'ASC', + 'NAME' => 'ASC' + ), + array( + 'ACTIVE' => 'Y' + ) + ); + + if ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch()) { + do { + + if(!$optionsDelivTypes[$arDeliveryServicesList['SID']]) { + self::eventLog('options.php', 'No delivery type relations established', $arDeliveryServicesList['SID'] . ':' . $id); + continue; + } + + foreach($arDeliveryServicesList['PROFILES'] as $id => $profile) { + + // send to crm + $this->INTARO_CRM_API->deliveryServiceEdit(ICrmOrderActions::clearArr(array( + 'code' => $arDeliveryServicesList['SID'] . '-' . $id, + 'name' => ICrmOrderActions::toJSON($profile['TITLE']), + 'deliveryType' => $arDeliveryServicesList['SID'] + ))); + + // error pushing dt + if ($this->INTARO_CRM_API->getStatusCode() != 200) { + if ($this->INTARO_CRM_API->getStatusCode() != 201) { + //handle err + self::eventLog('options.php', 'IntaroCrm\RestApi::deliveryServiceEdit', $this->INTARO_CRM_API->getLastError()); + } + } + } + + } while ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch()); + } + + $APPLICATION->RestartBuffer(); + header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); + die(json_encode(array('success' => true))); +} + //update connection settings if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) { $api_host = htmlspecialchars(trim($_POST['api_host']));