1
0
mirror of synced 2024-11-25 14:56:09 +03:00

opt export DeliveryServices

This commit is contained in:
Grisha Pomadchin 2014-01-29 18:42:52 +04:00
parent 091d13b163
commit 2de2077055
5 changed files with 109 additions and 68 deletions

View File

@ -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))

View File

@ -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') {

View File

@ -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"] = "кг.";
?>

View File

@ -50,5 +50,4 @@ $MESS ['FLOOR'] = 'Этаж';
$MESS ['BLOCK'] = 'Подъезд';
$MESS ['HOUSE'] = 'Строение / корпус';
$MESS ['ADDRESS_SHORT'] = 'Краткий адрес';
$MESS ['ADDRESS_FULL'] = 'Детальный адрес';
$MESS ['ADDRESS_FULL'] = 'Детальный адрес';

View File

@ -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']));