1
0
mirror of synced 2024-11-29 16:56:07 +03:00

Merge branch 'origin/master'

This commit is contained in:
m.korolev 2014-01-30 15:59:36 +04:00
commit ffc5c8c3b4
10 changed files with 421 additions and 40 deletions

View File

@ -20,6 +20,7 @@ class ICrmOrderActions
/** /**
* Mass order uploading, without repeating; always returns true, but writes error log * Mass order uploading, without repeating; always returns true, but writes error log
* @param $pSize
* @param $failed -- flag to export failed orders * @param $failed -- flag to export failed orders
* @return boolean * @return boolean
*/ */
@ -362,19 +363,71 @@ class ICrmOrderActions
$dateStart = COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_HISTORY_DATE, null); $dateStart = COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_HISTORY_DATE, null);
if(!$dateStart) {
$dateStart = new \DateTime();
$dateStart = $dateStart->format('Y-m-d H:i:s');
}
$orderHistory = $api->orderHistory($dateStart); $orderHistory = $api->orderHistory($dateStart);
if($dateStart)
$dateStart = new \DateTime($dateStart); $dateStart = new \DateTime($dateStart);
// pushing existing orders // pushing existing orders
foreach ($orderHistory as $order) { foreach ($orderHistory as $order) {
if(!isset($order['externalId']) && !$order['externalId']) { if(!isset($order['externalId']) || !$order['externalId']) {
// we dont need new orders without any customers (can check only for externalId) // we dont need new orders without any customers (can check only for externalId)
if(!isset($order['customer']['externalId']) && !$order['customer']['externalId']) if(!isset($order['customer']['externalId']) && !$order['customer']['externalId']) {
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 {
$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; 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;
}
// new order // new order
$newOrderFields = array( $newOrderFields = array(
@ -446,7 +499,7 @@ class ICrmOrderActions
break; break;
} }
if (count($optionsOrderProps[$arFields['PERSON_TYPE_ID']] > 4)) { if (count($optionsOrderProps[$arFields['PERSON_TYPE_ID']]) > 4) {
switch ($ar['CODE']) { switch ($ar['CODE']) {
/* case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['country']: $resOrderDeliveryAddress['country'] = self::toJSON($ar['VALUE']); /* case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['country']: $resOrderDeliveryAddress['country'] = self::toJSON($ar['VALUE']);
break; break;
@ -515,7 +568,7 @@ class ICrmOrderActions
if (isset($order['deliveryAddress']['text'])) if (isset($order['deliveryAddress']['text']))
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['text'], self::fromJSON($order['deliveryAddress']['text']), $order['externalId']); self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['text'], self::fromJSON($order['deliveryAddress']['text']), $order['externalId']);
if (count($optionsOrderProps[$arFields['PERSON_TYPE_ID']] > 4)) { if (count($optionsOrderProps[$arFields['PERSON_TYPE_ID']]) > 4) {
if (isset($order['deliveryAddress']['street'])) if (isset($order['deliveryAddress']['street']))
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['street'], self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['street'],
self::fromJSON($order['deliveryAddress']['street']), $order['externalId']); self::fromJSON($order['deliveryAddress']['street']), $order['externalId']);
@ -710,6 +763,16 @@ class ICrmOrderActions
if($arFields['CANCELED'] == 'Y') if($arFields['CANCELED'] == 'Y')
$wasCanaceled = true; $wasCanaceled = true;
$resultDeliveryTypeId = $optionsDelivTypes[$order['deliveryType']];
if(isset($order['deliveryService']) && !empty($order['deliveryService'])) {
if (strpos($order['deliveryService']['code'], "-") !== false)
$deliveryServiceCode = explode("-", $order['deliveryService']['code'], 2);
if ($deliveryServiceCode)
$resultDeliveryTypeId = $resultDeliveryTypeId . ':' . $deliveryServiceCode[1];
}
// orderUpdate // orderUpdate
$arFields = self::clearArr(array( $arFields = self::clearArr(array(
'PRICE_DELIVERY' => $order['deliveryCost'], 'PRICE_DELIVERY' => $order['deliveryCost'],
@ -719,7 +782,7 @@ class ICrmOrderActions
'PAY_SYSTEM_ID' => $optionsPayTypes[$order['paymentType']], 'PAY_SYSTEM_ID' => $optionsPayTypes[$order['paymentType']],
//'PAYED' => $optionsPayment[$order['paymentStatus']], //'PAYED' => $optionsPayment[$order['paymentStatus']],
//'PERSON_TYPE_ID' => $optionsOrderTypes[$order['orderType']], //'PERSON_TYPE_ID' => $optionsOrderTypes[$order['orderType']],
'DELIVERY_ID' => $optionsDelivTypes[$order['deliveryType']], 'DELIVERY_ID' => $resultDeliveryTypeId,
'STATUS_ID' => $optionsPayStatuses[$order['status']], 'STATUS_ID' => $optionsPayStatuses[$order['status']],
'REASON_CANCELED' => $order['statusComment'], 'REASON_CANCELED' => $order['statusComment'],
'USER_DESCRIPTION' => $order['customerComment'], 'USER_DESCRIPTION' => $order['customerComment'],
@ -807,10 +870,10 @@ class ICrmOrderActions
* *
* creates order or returns array of order and customer for mass upload * creates order or returns array of order and customer for mass upload
* *
* @param type $orderId * @param array $arFields
* @param type $api * @param $api
* @param type $arParams * @param $arParams
* @param type $send * @param $send
* @return boolean * @return boolean
* @return array - array('order' = $order, 'customer' => $customer) * @return array - array('order' = $order, 'customer' => $customer)
*/ */
@ -884,6 +947,22 @@ class ICrmOrderActions
else else
$resultDeliveryTypeId = $arFields['DELIVERY_ID']; $resultDeliveryTypeId = $arFields['DELIVERY_ID'];
// deliveryService
$deliveryService = array();
if(count($arId) > 1) {
$dbDeliveryType = CSaleDeliveryHandler::GetBySID($arId[0]);
if ($arDeliveryType = $dbDeliveryType->GetNext()) {
foreach($arDeliveryType['PROFILES'] as $id => $profile) {
if($id == $arId[1]) {
$deliveryService = array(
'code' => $arId[0] . '-' . $id,
'name' => $profile['TITLE']
);
}
}
}
}
$resOrder = array(); $resOrder = array();
$resOrderDeliveryAddress = array(); $resOrderDeliveryAddress = array();
@ -993,6 +1072,7 @@ class ICrmOrderActions
'paymentStatus' => $arParams['optionsPayment'][$arFields['PAYED']], 'paymentStatus' => $arParams['optionsPayment'][$arFields['PAYED']],
'orderType' => $arParams['optionsOrderTypes'][$arFields['PERSON_TYPE_ID']], 'orderType' => $arParams['optionsOrderTypes'][$arFields['PERSON_TYPE_ID']],
'deliveryType' => $arParams['optionsDelivTypes'][$resultDeliveryTypeId], 'deliveryType' => $arParams['optionsDelivTypes'][$resultDeliveryTypeId],
'deliveryService' => $deliveryService,
'status' => $arParams['optionsPayStatuses'][$arFields['STATUS_ID']], 'status' => $arParams['optionsPayStatuses'][$arFields['STATUS_ID']],
'statusComment' => $arFields['REASON_CANCELED'], 'statusComment' => $arFields['REASON_CANCELED'],
'customerComment' => $arFields['USER_DESCRIPTION'], 'customerComment' => $arFields['USER_DESCRIPTION'],
@ -1032,8 +1112,8 @@ class ICrmOrderActions
* removes all empty fields from arrays * removes all empty fields from arrays
* working with nested arrs * working with nested arrs
* *
* @param type $arr * @param array $arr
* @return boolean * @return array
*/ */
public static function clearArr($arr) { public static function clearArr($arr) {
if(!$arr || !is_array($arr)) if(!$arr || !is_array($arr))
@ -1052,9 +1132,9 @@ class ICrmOrderActions
/** /**
* *
* @global type $APPLICATION * @global $APPLICATION
* @param type $str in SITE_CHARSET * @param $str in SITE_CHARSET
* @return type $str in utf-8 * @return $str in utf-8
*/ */
public static function toJSON($str) { public static function toJSON($str) {
global $APPLICATION; global $APPLICATION;
@ -1064,9 +1144,9 @@ class ICrmOrderActions
/** /**
* *
* @global type $APPLICATION * @global $APPLICATION
* @param type $str in utf-8 * @param $str in utf-8
* @return type $str in SITE_CHARSET * @return $str in SITE_CHARSET
*/ */
public static function fromJSON($str) { public static function fromJSON($str) {
global $APPLICATION; global $APPLICATION;

View File

@ -125,9 +125,9 @@ class RestApi
* @param array $orders - массив, содержащий id и externalId заказа * @param array $orders - массив, содержащий id и externalId заказа
* @return array * @return array
*/ */
public function orderFixExternalIds($order) public function orderFixExternalIds($orders)
{ {
$dataJson = json_encode($order); $dataJson = json_encode($orders);
$this->parameters['orders'] = $dataJson; $this->parameters['orders'] = $dataJson;
$url = $this->apiUrl.'orders/fix-external-ids'; $url = $this->apiUrl.'orders/fix-external-ids';
@ -241,6 +241,22 @@ class RestApi
return $result; return $result;
} }
/**
* Обновление externalId у клиентов с переданными id
*
* @param array $customers- массив, содержащий id и externalId заказа
* @return array
*/
public function customerFixExternalIds($customers)
{
$dataJson = json_encode($customers);
$this->parameters['customers'] = $dataJson;
$url = $this->apiUrl.'customers/fix-external-ids';
$result = $this->curlRequest($url, 'POST');
return $result;
}
/** /**
* Удаление клиента * Удаление клиента
* *
@ -313,6 +329,34 @@ class RestApi
return $result; return $result;
} }
/**
* Получение списка служб доставки
*
* @return array - массив типов доставки
*/
public function deliveryServicesList()
{
$url = $this->apiUrl.'reference/delivery-services';
$result = $this->curlRequest($url);
return $result;
}
/**
* Редактирование службы доставки
*
* @param array $deliveryService - информация о типе доставки
* @return array
*/
public function deliveryServiceEdit($deliveryService)
{
$dataJson = json_encode($deliveryService);
$this->parameters['deliveryService'] = $dataJson;
$url = $this->apiUrl.'reference/delivery-services/'.$deliveryService['code'].'/edit';
$result = $this->curlRequest($url, 'POST');
return $result;
}
/** /**
* Получение списка типов оплаты * Получение списка типов оплаты

View File

@ -75,7 +75,9 @@ class ICrmOrderEvent {
/** /**
* writeDataOnOrderCreate via api * writeDataOnOrderCreate via api
* *
* @param integer $ID - Order Id * @param $ID - Order Id
* @param array $arFields
* @return boolean
*/ */
function writeDataOnOrderCreate($ID, $arFields) { function writeDataOnOrderCreate($ID, $arFields) {

View File

@ -26,6 +26,7 @@ class intaro_intarocrm extends CModule {
var $CRM_API_KEY_OPTION = 'api_key'; var $CRM_API_KEY_OPTION = 'api_key';
var $CRM_ORDER_TYPES_ARR = 'order_types_arr'; var $CRM_ORDER_TYPES_ARR = 'order_types_arr';
var $CRM_DELIVERY_TYPES_ARR = 'deliv_types_arr'; var $CRM_DELIVERY_TYPES_ARR = 'deliv_types_arr';
var $CRM_DELIVERY_SERVICES_ARR = 'deliv_services_arr';
var $CRM_PAYMENT_TYPES = 'pay_types_arr'; var $CRM_PAYMENT_TYPES = 'pay_types_arr';
var $CRM_PAYMENT_STATUSES = 'pay_statuses_arr'; var $CRM_PAYMENT_STATUSES = 'pay_statuses_arr';
var $CRM_PAYMENT = 'payment_arr'; //order payment Y/N var $CRM_PAYMENT = 'payment_arr'; //order payment Y/N
@ -204,6 +205,7 @@ class intaro_intarocrm extends CModule {
} }
$arResult['deliveryTypesList'] = $this->INTARO_CRM_API->deliveryTypesList(); $arResult['deliveryTypesList'] = $this->INTARO_CRM_API->deliveryTypesList();
$arResult['deliveryServicesList'] = $this->INTARO_CRM_API->deliveryServicesList();
$arResult['paymentTypesList'] = $this->INTARO_CRM_API->paymentTypesList(); $arResult['paymentTypesList'] = $this->INTARO_CRM_API->paymentTypesList();
$arResult['paymentStatusesList'] = $this->INTARO_CRM_API->paymentStatusesList(); // --statuses $arResult['paymentStatusesList'] = $this->INTARO_CRM_API->paymentStatusesList(); // --statuses
$arResult['paymentList'] = $this->INTARO_CRM_API->orderStatusesList(); $arResult['paymentList'] = $this->INTARO_CRM_API->orderStatusesList();
@ -247,6 +249,25 @@ class intaro_intarocrm extends CModule {
} while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()); } while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch());
} }
//bitrix deliveryServicesList
$dbDeliveryServicesList = CSaleDeliveryHandler::GetList(
array(
'SORT' => 'ASC',
'NAME' => 'ASC'
),
array(
'ACTIVE' => 'Y'
)
);
//form delivery services ids arr
if ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch()) {
do {
//auto delivery types
$deliveryTypesArr[$arDeliveryServicesList['SID']] = htmlspecialchars(trim($_POST['delivery-type-' . $arDeliveryServicesList['SID']]));
} while ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch());
}
//bitrix paymentTypesList //bitrix paymentTypesList
$dbPaymentTypesList = CSalePaySystem::GetList( $dbPaymentTypesList = CSalePaySystem::GetList(
array( array(
@ -425,6 +446,8 @@ class intaro_intarocrm extends CModule {
$input['order-type-' . $bitrixOrderType['ID']] .= '</select>'; $input['order-type-' . $bitrixOrderType['ID']] .= '</select>';
} }
$APPLICATION->RestartBuffer(); $APPLICATION->RestartBuffer();
header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET);
die(json_encode(array("success" => true, "result" => $input))); die(json_encode(array("success" => true, "result" => $input)));
@ -476,10 +499,12 @@ class intaro_intarocrm extends CModule {
//prepare crm lists //prepare crm lists
$arResult['orderTypesList'] = $this->INTARO_CRM_API->orderTypesList(); $arResult['orderTypesList'] = $this->INTARO_CRM_API->orderTypesList();
$arResult['deliveryTypesList'] = $this->INTARO_CRM_API->deliveryTypesList(); $arResult['deliveryTypesList'] = $this->INTARO_CRM_API->deliveryTypesList();
$arResult['deliveryServicesList'] = $this->INTARO_CRM_API->deliveryServicesList();
$arResult['paymentTypesList'] = $this->INTARO_CRM_API->paymentTypesList(); $arResult['paymentTypesList'] = $this->INTARO_CRM_API->paymentTypesList();
$arResult['paymentStatusesList'] = $this->INTARO_CRM_API->paymentStatusesList(); // --statuses $arResult['paymentStatusesList'] = $this->INTARO_CRM_API->paymentStatusesList(); // --statuses
$arResult['paymentList'] = $this->INTARO_CRM_API->orderStatusesList(); $arResult['paymentList'] = $this->INTARO_CRM_API->orderStatusesList();
$arResult['paymentGroupList'] = $this->INTARO_CRM_API->orderStatusGroupsList(); // -- statuses groups $arResult['paymentGroupList'] = $this->INTARO_CRM_API->orderStatusGroupsList(); // -- statuses groups
//bitrix orderTypesList -- personTypes //bitrix orderTypesList -- personTypes
$dbOrderTypesList = CSalePersonType::GetList( $dbOrderTypesList = CSalePersonType::GetList(
array( array(
@ -512,6 +537,23 @@ class intaro_intarocrm extends CModule {
} while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()); } while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch());
} }
// bitrix deliveryServicesList
$dbDeliveryServicesList = CSaleDeliveryHandler::GetList(
array(
'SORT' => 'ASC',
'NAME' => 'ASC'
),
array(
'ACTIVE' => 'Y'
)
);
if ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch()) {
do {
$arResult['bitrixDeliveryTypesList'][] = array('ID' => $arDeliveryServicesList['SID'], 'NAME' => $arDeliveryServicesList['NAME']);
} while ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch());
}
//bitrix paymentTypesList //bitrix paymentTypesList
$dbPaymentTypesList = CSalePaySystem::GetList( $dbPaymentTypesList = CSalePaySystem::GetList(
array( array(
@ -601,7 +643,18 @@ class intaro_intarocrm extends CModule {
), false, false, array() ), false, false, array()
); );
//form delivery types ids arr //bitrix deliveryServicesList
$dbDeliveryServicesList = CSaleDeliveryHandler::GetList(
array(
'SORT' => 'ASC',
'NAME' => 'ASC'
),
array(
'ACTIVE' => 'Y'
)
);
//form delivery types / services ids arr
$deliveryTypesArr = array(); $deliveryTypesArr = array();
if (htmlspecialchars(trim($_POST['delivery-types-export'])) == 'false') { if (htmlspecialchars(trim($_POST['delivery-types-export'])) == 'false') {
@ -610,8 +663,16 @@ class intaro_intarocrm extends CModule {
$deliveryTypesArr[$arDeliveryTypesList['ID']] = htmlspecialchars(trim($_POST['delivery-type-' . $arDeliveryTypesList['ID']])); $deliveryTypesArr[$arDeliveryTypesList['ID']] = htmlspecialchars(trim($_POST['delivery-type-' . $arDeliveryTypesList['ID']]));
} while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()); } while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch());
} }
if ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch()) {
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') { } elseif (htmlspecialchars(trim($_POST['delivery-types-export'])) == 'true') {
// send to intaro crm and save // send to intaro crm and save delivery types!
if ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()) { if ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()) {
do { do {
// parse id // parse id
@ -636,7 +697,7 @@ class intaro_intarocrm extends CModule {
'paymentTypes' => '' 'paymentTypes' => ''
))); )));
// error pushing customer // error pushing dt
if ($this->INTARO_CRM_API->getStatusCode() != 200) { if ($this->INTARO_CRM_API->getStatusCode() != 200) {
if ($this->INTARO_CRM_API->getStatusCode() != 201) { if ($this->INTARO_CRM_API->getStatusCode() != 201) {
//handle err //handle err
@ -645,6 +706,49 @@ class intaro_intarocrm extends CModule {
} }
} while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()); } while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch());
} }
if ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch()) {
do {
$deliveryTypesArr[$arDeliveryServicesList['SID']] = $arDeliveryServicesList['SID'];
// send to crm
$this->INTARO_CRM_API->deliveryTypeEdit(ICrmOrderActions::clearArr(array(
'code' => $arDeliveryServicesList['SID'],
'name' => ICrmOrderActions::toJSON($arDeliveryServicesList['NAME']),
'defaultCost' => 0,
'description' => ICrmOrderActions::toJSON($arDeliveryTypesList['DESCRIPTION']),
'paymentTypes' => ''
)));
// error pushing dt
if ($this->INTARO_CRM_API->getStatusCode() != 200) {
if ($this->INTARO_CRM_API->getStatusCode() != 201) {
//handle err
ICrmOrderActions::eventLog('install/index.php', 'IntaroCrm\RestApi::deliveryTypeEdit', $this->INTARO_CRM_API->getLastError());
}
}
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
ICrmOrderActions::eventLog('install/index.php', 'IntaroCrm\RestApi::deliveryServiceEdit', $this->INTARO_CRM_API->getLastError());
}
}
}
} while ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch());
}
} }
//bitrix paymentTypesList //bitrix paymentTypesList
@ -704,7 +808,6 @@ class intaro_intarocrm extends CModule {
COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_LAST_ID, 0); COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_LAST_ID, 0);
COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_DISCHARGE, 1); COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_DISCHARGE, 1);
COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_FAILED_IDS, serialize(array())); COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_FAILED_IDS, serialize(array()));
COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_HISTORY_DATE, date('Y-m-d H:i:s'));
$APPLICATION->IncludeAdminFile( $APPLICATION->IncludeAdminFile(
GetMessage('MODULE_INSTALL_TITLE'), GetMessage('MODULE_INSTALL_TITLE'),
@ -715,6 +818,13 @@ class intaro_intarocrm extends CModule {
//handler //handler
} }
if (isset($_POST['back']) && $_POST['back']) {
$APPLICATION->IncludeAdminFile(
GetMessage('MODULE_INSTALL_TITLE'),
$_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step2.php'
);
}
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
&& isset($_POST['ajax']) && ($_POST['ajax'] == 1)) { && isset($_POST['ajax']) && ($_POST['ajax'] == 1)) {
ICrmOrderActions::uploadOrders(); // each 50 ICrmOrderActions::uploadOrders(); // each 50
@ -1049,6 +1159,9 @@ class intaro_intarocrm extends CModule {
$this->INTARO_CRM_API = new \IntaroCrm\RestApi($api_host, $api_key); $this->INTARO_CRM_API = new \IntaroCrm\RestApi($api_host, $api_key);
$this->INTARO_CRM_API->statisticUpdate(); $this->INTARO_CRM_API->statisticUpdate();
// in fin order
COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_HISTORY_DATE, date('Y-m-d H:i:s'));
$APPLICATION->IncludeAdminFile( $APPLICATION->IncludeAdminFile(
GetMessage('MODULE_INSTALL_TITLE'), GetMessage('MODULE_INSTALL_TITLE'),
$_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step6.php' $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step6.php'

View File

@ -97,8 +97,7 @@ $defaultPayment = array(
if($(this).val() === 'true') if($(this).val() === 'true')
$('tr.delivery-types').hide('slow'); $('tr.delivery-types').hide('slow');
else if($(this).val() === 'false') else if($(this).val() === 'false')
$('tr.delivery-types').show('show'); $('tr.delivery-types').show('slow');
}); });
}); });
</script> </script>

View File

@ -96,7 +96,7 @@ $defaultOrderProps = array(
<input type="submit" name="inst" value="<?php echo GetMessage("MOD_NEXT_STEP"); ?>" class="adm-btn-save"> <input type="submit" name="inst" value="<?php echo GetMessage("MOD_NEXT_STEP"); ?>" class="adm-btn-save">
</div> </div>
<div align="left" style="float:right; width:50%; position:relative; visible: none;"> <div align="left" style="float:right; width:50%; position:relative; visible: none;">
<input type="submit" name="start" value="<?php echo GetMessage("MOD_PREV_STEP"); ?>" class="adm-btn-save"> <input type="submit" name="back" value="<?php echo GetMessage("MOD_PREV_STEP"); ?>" class="adm-btn-save">
</div> </div>
</div> </div>
</form> </form>

View File

@ -1,5 +1,5 @@
<? <?
$arModuleVersion = array( $arModuleVersion = array(
"VERSION" => "0.5.2", "VERSION" => "0.5.3",
"VERSION_DATE" => "2013-12-26 00:40:00", "VERSION_DATE" => "2014-01-28 12:55:00",
); );

View File

@ -40,4 +40,3 @@ $MESS["UNIT_MEASUREMENT_M"] = "м.";
$MESS["UNIT_MEASUREMENT_MG"] = "мг."; $MESS["UNIT_MEASUREMENT_MG"] = "мг.";
$MESS["UNIT_MEASUREMENT_G"] = "г."; $MESS["UNIT_MEASUREMENT_G"] = "г.";
$MESS["UNIT_MEASUREMENT_KG"] = "кг."; $MESS["UNIT_MEASUREMENT_KG"] = "кг.";
?>

View File

@ -52,4 +52,8 @@ $MESS ['HOUSE'] = 'Строение / корпус';
$MESS ['ADDRESS_SHORT'] = 'Краткий адрес'; $MESS ['ADDRESS_SHORT'] = 'Краткий адрес';
$MESS ['ADDRESS_FULL'] = 'Детальный адрес'; $MESS ['ADDRESS_FULL'] = 'Детальный адрес';
$MESS ['ORDER_TYPE_INFO'] = 'Тип заказа:'; $MESS ['UPDATE_DELIVERY_SERVICES'] = 'Выгрузка служб доставок';
$MESS ['MESS_1'] = 'Произошла ошибка при выгрузке одной или нескольких служб доставок, попробуйте еще раз. Если проблема повторилась, обратитесь в Интаро Софт.';
$MESS ['MESS_2'] = 'Произошла ошибка сервера, обратитесь в Интаро Софт.';

View File

@ -7,6 +7,7 @@ $CRM_API_HOST_OPTION = 'api_host';
$CRM_API_KEY_OPTION = 'api_key'; $CRM_API_KEY_OPTION = 'api_key';
$CRM_ORDER_TYPES_ARR = 'order_types_arr'; $CRM_ORDER_TYPES_ARR = 'order_types_arr';
$CRM_DELIVERY_TYPES_ARR = 'deliv_types_arr'; $CRM_DELIVERY_TYPES_ARR = 'deliv_types_arr';
$CRM_DELIVERY_SERVICES_ARR = 'deliv_services_arr';
$CRM_PAYMENT_TYPES = 'pay_types_arr'; $CRM_PAYMENT_TYPES = 'pay_types_arr';
$CRM_PAYMENT_STATUSES = 'pay_statuses_arr'; $CRM_PAYMENT_STATUSES = 'pay_statuses_arr';
$CRM_PAYMENT = 'payment_arr'; //order payment Y/N $CRM_PAYMENT = 'payment_arr'; //order payment Y/N
@ -91,6 +92,71 @@ $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);
$api->paymentStatusesList();
//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']]) {
ICrmOrderActions::eventLog('options.php', 'No delivery type relations established', $arDeliveryServicesList['SID'] . ':' . $id);
continue;
}
foreach($arDeliveryServicesList['PROFILES'] as $id => $profile) {
// send to crm
$api->deliveryServiceEdit(ICrmOrderActions::clearArr(array(
'code' => $arDeliveryServicesList['SID'] . '-' . $id,
'name' => ICrmOrderActions::toJSON($profile['TITLE']),
'deliveryType' => $arDeliveryServicesList['SID']
)));
// error pushing dt
if ($api->getStatusCode() != 200) {
if ($api->getStatusCode() != 201) {
//handle err
ICrmOrderActions::eventLog('options.php', 'IntaroCrm\RestApi::deliveryServiceEdit', $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 //update connection settings
if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) { if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) {
$api_host = htmlspecialchars(trim($_POST['api_host'])); $api_host = htmlspecialchars(trim($_POST['api_host']));
@ -163,6 +229,25 @@ if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) {
} while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()); } while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch());
} }
//bitrix deliveryServicesList
$dbDeliveryServicesList = CSaleDeliveryHandler::GetList(
array(
'SORT' => 'ASC',
'NAME' => 'ASC'
),
array(
'ACTIVE' => 'Y'
)
);
//form delivery services ids arr
if ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch()) {
do {
//auto delivery types
$deliveryTypesArr[$arDeliveryServicesList['SID']] = htmlspecialchars(trim($_POST['delivery-type-' . $arDeliveryServicesList['SID']]));
} while ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch());
}
//bitrix paymentTypesList //bitrix paymentTypesList
$dbPaymentTypesList = CSalePaySystem::GetList( $dbPaymentTypesList = CSalePaySystem::GetList(
array( array(
@ -266,6 +351,7 @@ if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) {
//prepare crm lists //prepare crm lists
$arResult['orderTypesList'] = $api->orderTypesList(); $arResult['orderTypesList'] = $api->orderTypesList();
$arResult['deliveryTypesList'] = $api->deliveryTypesList(); $arResult['deliveryTypesList'] = $api->deliveryTypesList();
$arResult['deliveryServicesList'] = $api->deliveryServicesList();
$arResult['paymentTypesList'] = $api->paymentTypesList(); $arResult['paymentTypesList'] = $api->paymentTypesList();
$arResult['paymentStatusesList'] = $api->paymentStatusesList(); // --statuses $arResult['paymentStatusesList'] = $api->paymentStatusesList(); // --statuses
$arResult['paymentList'] = $api->orderStatusesList(); $arResult['paymentList'] = $api->orderStatusesList();
@ -315,6 +401,23 @@ if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) {
} while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()); } while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch());
} }
// bitrix deliveryServicesList
$dbDeliveryServicesList = CSaleDeliveryHandler::GetList(
array(
'SORT' => 'ASC',
'NAME' => 'ASC'
),
array(
'ACTIVE' => 'Y'
)
);
if ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch()) {
do {
$arResult['bitrixDeliveryTypesList'][] = array('ID' => $arDeliveryServicesList['SID'], 'NAME' => $arDeliveryServicesList['NAME']);
} while ($arDeliveryServicesList = $dbDeliveryServicesList->Fetch());
}
//bitrix paymentTypesList //bitrix paymentTypesList
$dbPaymentTypesList = CSalePaySystem::GetList( $dbPaymentTypesList = CSalePaySystem::GetList(
array( array(
@ -417,6 +520,38 @@ if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) {
$('tr.address-detail-' + orderType).hide('slow'); $('tr.address-detail-' + orderType).hide('slow');
}); });
}); });
$('input[name="update-delivery-services"]').live('click', function() {
BX.showWait();
var updButton = this;
// hide next step button
$(updButton).css('opacity', '0.5').attr('disabled', 'disabled');
var handlerUrl = $(this).parents('form').attr('action');
var data = 'ajax=1';
$.ajax({
type: 'POST',
url: handlerUrl,
data: data,
dataType: 'json',
success: function(response) {
BX.closeWait();
$(updButton).css('opacity', '1').removeAttr('disabled');
if(!response.success)
alert('<?php echo GetMessage('MESS_1'); ?>');
},
error: function () {
BX.closeWait();
$(updButton).css('opacity', '1').removeAttr('disabled');
alert('<?php echo GetMessage('MESS_2'); ?>');
}
});
return false;
});
</script> </script>
<form method="POST" action="<?php echo $uri; ?>" id="FORMACTION"> <form method="POST" action="<?php echo $uri; ?>" id="FORMACTION">
@ -471,6 +606,11 @@ if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) {
</td> </td>
</tr> </tr>
<?php endforeach; ?> <?php endforeach; ?>
<tr class="heading">
<td colspan="2">
<input type="submit" name="update-delivery-services" value="<?php echo GetMessage('UPDATE_DELIVERY_SERVICES'); ?>" class="adm-btn-save">
</td>
</tr>
<tr class="heading"> <tr class="heading">
<td colspan="2"><b><?php echo GetMessage('PAYMENT_TYPES_LIST'); ?></b></td> <td colspan="2"><b><?php echo GetMessage('PAYMENT_TYPES_LIST'); ?></b></td>
</tr> </tr>