1
0
mirror of synced 2025-02-23 02:13:13 +03:00

v.1.0.16 - update agent && users

This commit is contained in:
Dmitry Mamontov 2015-02-12 17:18:46 +03:00
parent 80ab0cb4c6
commit 7bdf5ebea6
3 changed files with 205 additions and 244 deletions

6
CHANGELOG.md Normal file
View File

@ -0,0 +1,6 @@
## 2015-02-12 v.1.0.16
* Исправлен агент
..* Исправлены ошибки с запоминанием пользователя
..* Исправленна ошибка с выходом пользователя из системы
* Исправлены проблема с fix-external-ids
* Добавлена возможность получения скидки из CRM в Битрикс

View File

@ -357,62 +357,21 @@ class ICrmOrderActions
*/ */
public static function orderHistory() { public static function orderHistory() {
global $USER; global $USER;
if (is_object($USER) == false) {
if(isset($_SESSION["SESS_AUTH"]["USER_ID"]) && $_SESSION["SESS_AUTH"]["USER_ID"]) {
$realUser = $USER->GetID();
$USER->Logout();
} else { // for agent; to add order User
// find similar login! (email / name can be used as login, due to settings diff)
$rsUser = CUser::GetList(($by='ID'), ($order='DESC'), array('LOGIN' => '%intarocrm%'));
if($arUser = $rsUser->Fetch()) {
$USER = new CUser; $USER = new CUser;
$USER->Authorize($arUser['ID']);
} else {
$login = 'intarocrm';
$serverName = 0 < strlen(SITE_SERVER_NAME)? SITE_SERVER_NAME : 'server.com';
$email = $login . '@' . $serverName;
$userPassword = randString(10);
$user = new CUser;
$arFields = array(
"NAME" => $login,
"LAST_NAME" => $login,
"EMAIL" => $email,
"LOGIN" => $login,
"LID" => "ru",
"ACTIVE" => "Y",
"GROUP_ID" => array(2),
"PASSWORD" => $userPassword,
"CONFIRM_PASSWORD" => $userPassword
);
$id = $user->Add($arFields);
if (!$id) {
self::eventLog('ICrmOrderActions::orderHistory', 'USER', $user->LAST_ERROR);
return;
}
$USER = new CUser;
$USER->Authorize($id);
}
} }
if (!CModule::IncludeModule("iblock")) { if (!CModule::IncludeModule("iblock")) {
//handle err
self::eventLog('ICrmOrderActions::orderHistory', 'iblock', 'module not found'); self::eventLog('ICrmOrderActions::orderHistory', 'iblock', 'module not found');
return true; return true;
} }
if (!CModule::IncludeModule("sale")) { if (!CModule::IncludeModule("sale")) {
//handle err
self::eventLog('ICrmOrderActions::orderHistory', 'sale', 'module not found'); self::eventLog('ICrmOrderActions::orderHistory', 'sale', 'module not found');
return true; return true;
} }
if (!CModule::IncludeModule("catalog")) { if (!CModule::IncludeModule("catalog")) {
//handle err
self::eventLog('ICrmOrderActions::orderHistory', 'catalog', 'module not found'); self::eventLog('ICrmOrderActions::orderHistory', 'catalog', 'module not found');
return true; return true;
} }
@ -486,76 +445,80 @@ class ICrmOrderActions
$defaultOrderType = $arOrderTypesList['ID']; $defaultOrderType = $arOrderTypesList['ID'];
// apiv3 ! // apiv3 !
if(!$dateFinish) $dateFinish = new \DateTime(); if (!$dateFinish) {
$dateFinish = new \DateTime();
}
$GLOBALS['INTARO_CRM_FROM_HISTORY'] = true; $GLOBALS['INTARO_CRM_FROM_HISTORY'] = true;
// clear intarocrm user basket
CSaleBasket::DeleteAll($USER->GetID());
// pushing existing orders // pushing existing orders
foreach ($orderHistory as $order) { foreach ($orderHistory as $order) {
if(function_exists('intarocrm_order_pre_persist')) { if(function_exists('intarocrm_order_pre_persist')) {
$order = intarocrm_order_pre_persist($order); $order = intarocrm_order_pre_persist($order);
} }
if(!isset($order['externalId']) || !$order['externalId']) { if (!isset($order['externalId'])) {
// custom orderType function // custom orderType function
if (function_exists('intarocrm_set_order_type')) { if (function_exists('intarocrm_set_order_type')) {
$orderType = intarocrm_set_order_type($order); $orderType = intarocrm_set_order_type($order);
if($orderType) if ($orderType) {
$optionsOrderTypes[$order['orderType']] = $orderType; $optionsOrderTypes[$order['orderType']] = $orderType;
else } else {
$optionsOrderTypes[$order['orderType']] = $defaultOrderType; $optionsOrderTypes[$order['orderType']] = $defaultOrderType;
} }
}
// 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'])) {
if(!isset($order['customer']['id']) || !$order['customer']['id']) continue; // if no id then skip if (!isset($order['customer']['id'])) {
if (!$order['customer']['email']) { continue;
$login = 'user_' . (microtime(true) * 10000) . mt_rand(1, 1000); }
$server_name = 0 < strlen(SITE_SERVER_NAME)?
SITE_SERVER_NAME : 'server.com';
$order['customer']['email'] = $login . '@' . $server_name;
$registerNewUser = true; $registerNewUser = true;
if (!isset($order['customer']['email'])) {
$login = $order['customer']['email'] = uniqid('user_' . time()) . '@retaicrm.com';
} else { } else {
// if email already used
$dbUser = CUser::GetList(($by = 'ID'), ($sort = 'ASC'), array('=EMAIL' => $order['email'])); $dbUser = CUser::GetList(($by = 'ID'), ($sort = 'ASC'), array('=EMAIL' => $order['email']));
if ($dbUser->SelectedRowsCount() == 0) { switch ($dbUser->SelectedRowsCount()) {
case 0:
$login = $order['customer']['email']; $login = $order['customer']['email'];
$registerNewUser = true; break;
} elseif ($dbUser->SelectedRowsCount() == 1) { case 1:
$arUser = $dbUser->Fetch(); $arUser = $dbUser->Fetch();
$registeredUserID = $arUser['ID']; $registeredUserID = $arUser['ID'];
} else { $registerNewUser = false;
$login = 'user_' . (microtime(true) * 10000) . mt_rand(1, 1000); break;
$registerNewUser = true; default:
} $login = uniqid('user_' . time()) . '@retaicrm.com';
}
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, self::fromJSON($order['customer']['firstName']), self::fromJSON($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; if ($registerNewUser === true) {
$userPassword = uniqid();
$newUser = new CUser;
$arFields = array(
"NAME" => self::fromJSON($order['customer']['firstName']),
"LAST_NAME" => self::fromJSON($order['customer']['lastName']),
"EMAIL" => $order['customer']['email'],
"LOGIN" => $login,
"LID" => "ru",
"ACTIVE" => "Y",
"PASSWORD" => $userPassword,
"CONFIRM_PASSWORD" => $userPassword
);
$registeredUserID = $newUser->Add($arFields);
if ($registeredUserID === false) {
self::eventLog('ICrmOrderActions::orderHistory', 'CUser::Register', 'Error register user');
continue;
} }
try { try {
$api->customerFixExternalIds(array(array('id' => $order['customer']['id'], 'externalId' => $order['customer']['externalId']))); $api->customerFixExternalIds(array(array('id' => $order['customer']['id'], 'externalId' => $registeredUserID)));
} catch (\IntaroCrm\Exception\ApiException $e) { } catch (\IntaroCrm\Exception\ApiException $e) {
self::eventLog( self::eventLog(
'ICrmOrderActions::orderHistory', 'IntaroCrm\RestApi::customerFixExternalIds', 'ICrmOrderActions::orderHistory', 'IntaroCrm\RestApi::customerFixExternalIds',
@ -571,6 +534,10 @@ class ICrmOrderActions
continue; continue;
} }
}
$order['customer']['externalId'] = $registeredUserID;
}
// new order // new order
$newOrderFields = array( $newOrderFields = array(
@ -589,16 +556,10 @@ class ICrmOrderActions
'USER_DESCRIPTION' => '' 'USER_DESCRIPTION' => ''
); );
if(isset($order['number']) && $order['number']) $externalId = CSaleOrder::Add($newOrderFields);
$GLOBALS['ICRM_ACCOUNT_NUMBER'] = $order['number']; if (!isset($order['externalId'])) {
$order['externalId'] = CSaleOrder::Add($newOrderFields);
if(isset($GLOBALS['ICRM_ACCOUNT_NUMBER']))
unset($GLOBALS['ICRM_ACCOUNT_NUMBER']);
try { try {
$api->orderFixExternalIds(array(array('id' => $order['id'], 'externalId' => $order['externalId']))); $api->orderFixExternalIds(array(array('id' => $order['id'], 'externalId' => $externalId)));
} catch (\IntaroCrm\Exception\ApiException $e) { } catch (\IntaroCrm\Exception\ApiException $e) {
self::eventLog( self::eventLog(
'ICrmOrderActions::orderHistory', 'IntaroCrm\RestApi::orderFixExternalIds', 'ICrmOrderActions::orderHistory', 'IntaroCrm\RestApi::orderFixExternalIds',
@ -615,45 +576,54 @@ class ICrmOrderActions
continue; continue;
} }
} }
$order['externalId'] = $externalId;
}
if (isset($order['externalId']) && $order['externalId']) { if (isset($order['externalId']) && $order['externalId']) {
// custom orderType function // custom orderType function
if (function_exists('intarocrm_set_order_type')) { if (function_exists('intarocrm_set_order_type')) {
$orderType = intarocrm_set_order_type($order); $orderType = intarocrm_set_order_type($order);
if($orderType) if ($orderType) {
$optionsOrderTypes[$order['orderType']] = $orderType; $optionsOrderTypes[$order['orderType']] = $orderType;
else } else {
$optionsOrderTypes[$order['orderType']] = $defaultOrderType; $optionsOrderTypes[$order['orderType']] = $defaultOrderType;
} }
}
$arFields = CSaleOrder::GetById($order['externalId']); $arFields = CSaleOrder::GetById($order['externalId']);
// incorrect order // incorrect order
if(!$arFields || empty($arFields)) if ($arFields === false || empty($arFields)) {
continue; continue;
}
$LID = $arFields['LID']; $LID = $arFields['LID'];
$userId = $arFields['USER_ID']; $userId = $arFields['USER_ID'];
if(isset($order['customer']['externalId']) && $order['customer']['externalId']) if(isset($order['customer']['externalId']) && !is_null($order['customer']['externalId'])) {
$userId = $order['customer']['externalId']; $userId = $order['customer']['externalId'];
}
$rsOrderProps = CSaleOrderPropsValue::GetList(array(), array('ORDER_ID' => $arFields['ID'])); $rsOrderProps = CSaleOrderPropsValue::GetList(array(), array('ORDER_ID' => $arFields['ID']));
while ($ar = $rsOrderProps->Fetch()) { while ($ar = $rsOrderProps->Fetch()) {
if (isset($order['delivery']) && isset($order['delivery']['address']) && $order['delivery']['address']) { if (isset($order['delivery']) && isset($order['delivery']['address']) && $order['delivery']['address']) {
switch ($ar['CODE']) { switch ($ar['CODE']) {
case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['index']: if (isset($order['delivery']['address']['index'])) case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['index']:
if (isset($order['delivery']['address']['index'])) {
CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => self::fromJSON($order['delivery']['address']['index']))); CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => self::fromJSON($order['delivery']['address']['index'])));
}
break; break;
case ($ar['CODE'] == 'CITY') or ($ar['CODE'] == 'LOCATION'): if (isset($order['delivery']['address']['city'])) { case ($ar['CODE'] == 'CITY') || ($ar['CODE'] == 'LOCATION'):
if (isset($order['delivery']['address']['city'])) {
$prop = CSaleOrderProps::GetByID($ar['ORDER_PROPS_ID']); $prop = CSaleOrderProps::GetByID($ar['ORDER_PROPS_ID']);
if($prop['TYPE'] == 'LOCATION') { if($prop['TYPE'] == 'LOCATION') {
$cityId = self::getLocationCityId(self::fromJSON($order['delivery']['address']['city'])); $cityId = self::getLocationCityId(self::fromJSON($order['delivery']['address']['city']));
if (!$cityId) if (!$cityId) {
break; break;
}
CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => $cityId)); CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => $cityId));
break; break;
@ -662,19 +632,15 @@ class ICrmOrderActions
CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => self::fromJSON($order['delivery']['address']['city']))); CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => self::fromJSON($order['delivery']['address']['city'])));
} }
break; break;
case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['text']: if (isset($order['delivery']['address']['text'])) case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['text']:
if (isset($order['delivery']['address']['text'])) {
CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => self::fromJSON($order['delivery']['address']['text']))); CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => self::fromJSON($order['delivery']['address']['text'])));
}
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']);
break;
case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['region']: $resOrderDeliveryAddress['region'] = self::toJSON($ar['VALUE']);
break;
case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['city']: $resOrderDeliveryAddress['city'] = self::toJSON($ar['VALUE']);
break; */
case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['street']: if (isset($order['delivery']['address']['street'])) case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['street']: if (isset($order['delivery']['address']['street']))
CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => self::fromJSON($order['delivery']['address']['street']))); CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => self::fromJSON($order['delivery']['address']['street'])));
break; break;
@ -703,98 +669,120 @@ class ICrmOrderActions
switch ($ar['CODE']) { switch ($ar['CODE']) {
case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['fio']: case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['fio']:
$contactName = array(); // cleanup $contactName = array(); // cleanup
if (isset($order['lastName'])) if (isset($order['lastName'])) {
$contactName['lastName'] = self::fromJSON($order['lastName']); $contactName['lastName'] = self::fromJSON($order['lastName']);
if (isset($order['firstName'])) }
if (isset($order['firstName'])) {
$contactName['firstName'] = self::fromJSON($order['firstName']); $contactName['firstName'] = self::fromJSON($order['firstName']);
if (isset($order['patronymic'])) }
if (isset($order['patronymic'])) {
$contactName['patronymic'] = self::fromJSON($order['patronymic']); $contactName['patronymic'] = self::fromJSON($order['patronymic']);
}
if (!isset($contactName) || empty($contactName)) if (!isset($contactName) || empty($contactName)) {
break; break;
}
CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => implode(" ", $contactName))); CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => implode(" ", $contactName)));
break; break;
case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['phone']: if (isset($order['phone'])) case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['phone']:
if (isset($order['phone'])) {
CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => self::fromJSON($order['phone']))); CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => self::fromJSON($order['phone'])));
}
break; break;
case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['email']: if (isset($order['email'])) case $optionsOrderProps[$arFields['PERSON_TYPE_ID']]['email']:
if (isset($order['email'])) {
CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => self::fromJSON($order['email']))); CSaleOrderPropsValue::Update($ar['ID'], array('VALUE' => self::fromJSON($order['email'])));
}
break; break;
} }
} }
// here check if smth wasnt added or new propetties // here check if smth wasnt added or new propetties
if (isset($order['delivery']) && isset($order['delivery']['address']) && $order['delivery']['address']) { if (isset($order['delivery']) && isset($order['delivery']['address']) && count($order['delivery']['address']) > 0) {
if (isset($order['delivery']['address']['index'])) if (isset($order['delivery']['address']['index'])) {
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['index'], self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['index'],
self::fromJSON($order['delivery']['address']['index']), $order['externalId']); self::fromJSON($order['delivery']['address']['index']), $order['externalId']);
}
if (isset($order['delivery']['address']['city'])) { if (isset($order['delivery']['address']['city'])) {
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['city'], self::fromJSON($order['delivery']['address']['city']), $order['externalId']); self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['city'], self::fromJSON($order['delivery']['address']['city']), $order['externalId']);
self::addOrderProperty('CITY', self::fromJSON($order['delivery']['address']['city']), $order['externalId']); self::addOrderProperty('CITY', self::fromJSON($order['delivery']['address']['city']), $order['externalId']);
$cityId = self::getLocationCityId(self::fromJSON($order['delivery']['address']['city'])); $cityId = self::getLocationCityId(self::fromJSON($order['delivery']['address']['city']));
if ($cityId) if ($cityId) {
self::addOrderProperty('LOCATION', $cityId, $order['externalId']); self::addOrderProperty('LOCATION', $cityId, $order['externalId']);
else } else {
self::addOrderProperty('LOCATION', 0, $order['externalId']); self::addOrderProperty('LOCATION', 0, $order['externalId']);
} }
}
if (isset($order['delivery']['address']['text'])) if (isset($order['delivery']['address']['text'])) {
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['text'], self::fromJSON($order['delivery']['address']['text']), $order['externalId']); self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['text'], self::fromJSON($order['delivery']['address']['text']), $order['externalId']);
}
if (count($optionsOrderProps[$arFields['PERSON_TYPE_ID']]) > 4) { if (count($optionsOrderProps[$arFields['PERSON_TYPE_ID']]) > 4) {
if (isset($order['delivery']['address']['street'])) if (isset($order['delivery']['address']['street'])) {
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['street'], self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['street'],
self::fromJSON($order['delivery']['address']['street']), $order['externalId']); self::fromJSON($order['delivery']['address']['street']), $order['externalId']);
}
if (isset($order['delivery']['address']['building'])) if (isset($order['delivery']['address']['building'])) {
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['building'], self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['building'],
self::fromJSON($order['delivery']['address']['bulding']), $order['externalId']); self::fromJSON($order['delivery']['address']['bulding']), $order['externalId']);
}
if (isset($order['delivery']['address']['flat'])) if (isset($order['delivery']['address']['flat'])) {
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['flat'], self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['flat'],
self::fromJSON($order['delivery']['address']['flat']), $order['externalId']); self::fromJSON($order['delivery']['address']['flat']), $order['externalId']);
}
if (isset($order['delivery']['address']['intercomcode'])) if (isset($order['delivery']['address']['intercomcode'])) {
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['intercomcode'], self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['intercomcode'],
self::fromJSON($order['delivery']['address']['intercomcode']), $order['externalId']); self::fromJSON($order['delivery']['address']['intercomcode']), $order['externalId']);
}
if (isset($order['delivery']['address']['floor'])) if (isset($order['delivery']['address']['floor'])) {
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['floor'], self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['floor'],
self::fromJSON($order['delivery']['address']['floor']), $order['externalId']); self::fromJSON($order['delivery']['address']['floor']), $order['externalId']);
}
if (isset($order['delivery']['address']['block'])) if (isset($order['delivery']['address']['block'])) {
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['block'], self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['block'],
self::fromJSON($order['delivery']['address']['block']), $order['externalId']); self::fromJSON($order['delivery']['address']['block']), $order['externalId']);
}
if (isset($order['delivery']['address']['house'])) if (isset($order['delivery']['address']['house'])) {
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['house'], self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['house'],
self::fromJSON($order['delivery']['address']['house']), $order['externalId']); self::fromJSON($order['delivery']['address']['house']), $order['externalId']);
} }
} }
}
if (isset($order['phone'])) if (isset($order['phone'])) {
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['phone'], self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['phone'],
self::fromJSON($order['phone']), $order['externalId']); self::fromJSON($order['phone']), $order['externalId']);
}
if (isset($order['email'])) if (isset($order['email']))
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['email'], self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['email'],
self::fromJSON($order['email']), $order['externalId']); self::fromJSON($order['email']), $order['externalId']);
$contactName = array(); // cleanup $contactName = array(); // cleanup
if (isset($order['firstName'])) if (isset($order['firstName'])) {
$contactName['firstName'] = self::fromJSON($order['firstName']); $contactName['firstName'] = self::fromJSON($order['firstName']);
if (isset($order['lastName'])) }
if (isset($order['lastName'])) {
$contactName['lastName'] = self::fromJSON($order['lastName']); $contactName['lastName'] = self::fromJSON($order['lastName']);
if (isset($order['patronymic'])) }
if (isset($order['patronymic'])) {
$contactName['patronymic'] = self::fromJSON($order['patronymic']); $contactName['patronymic'] = self::fromJSON($order['patronymic']);
}
if (isset($contactName) && !empty($contactName)) if (isset($contactName) && !empty($contactName)) {
self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['fio'], self::addOrderProperty($optionsOrderProps[$arFields['PERSON_TYPE_ID']]['fio'],
implode(" ", $contactName), $order['externalId']); implode(" ", $contactName), $order['externalId']);
}
foreach($order['items'] as $item) { foreach($order['items'] as $item) {
// del from basket // del from basket
@ -803,14 +791,16 @@ class ICrmOrderActions
array('PRODUCT_ID' => 'ASC'), array('PRODUCT_ID' => 'ASC'),
array('ORDER_ID' => $order['externalId'], 'PRODUCT_ID' => $item['id']))->Fetch(); array('ORDER_ID' => $order['externalId'], 'PRODUCT_ID' => $item['id']))->Fetch();
if($p) if ($p) {
CSaleBasket::Delete($p['ID']); CSaleBasket::Delete($p['ID']);
}
continue; continue;
} }
if(!isset($item['offer']) && !$item['offer']['externalId']) if (!isset($item['offer']) && !isset($item['offer']['externalId'])) {
continue; continue;
}
$p = CSaleBasket::GetList( $p = CSaleBasket::GetList(
array('PRODUCT_ID' => 'ASC'), array('PRODUCT_ID' => 'ASC'),
@ -825,8 +815,7 @@ class ICrmOrderActions
// product field XML_ID is called PRODUCT_XML_ID in basket // product field XML_ID is called PRODUCT_XML_ID in basket
$p['PRODUCT_XML_ID'] = $p['XML_ID']; $p['PRODUCT_XML_ID'] = $p['XML_ID'];
unset($p['XML_ID']); unset($p['XML_ID']);
} } else {
else {
//for basket props updating (in props we save cancel status) //for basket props updating (in props we save cancel status)
$propResult = CSaleBasket::GetPropsList( $propResult = CSaleBasket::GetPropsList(
array(''), array(''),
@ -869,8 +858,9 @@ class ICrmOrderActions
'CUSTOM_PRICE' => 'Y' 'CUSTOM_PRICE' => 'Y'
); );
if (isset($item['initialPrice']) && $item['initialPrice']) if (isset($item['initialPrice']) && $item['initialPrice']) {
$arProduct['PRICE'] = (double) $item['initialPrice']; $arProduct['PRICE'] = (double) $item['initialPrice'];
}
if (isset($item['discount'])) { if (isset($item['discount'])) {
$arProduct['DISCOUNT_PRICE'] = $item['discount']; $arProduct['DISCOUNT_PRICE'] = $item['discount'];
@ -882,11 +872,13 @@ class ICrmOrderActions
$arProduct['DISCOUNT_PRICE'] = $arProduct['DISCOUNT_PRICE'] + $arProduct['PRICE'] - $newPrice; $arProduct['DISCOUNT_PRICE'] = $arProduct['DISCOUNT_PRICE'] + $arProduct['PRICE'] - $newPrice;
} }
if(isset($item['discount']) || isset($item['discountPercent'])) if(isset($item['discount']) || isset($item['discountPercent'])) {
$arProduct['PRICE'] -= $arProduct['DISCOUNT_PRICE']; $arProduct['PRICE'] -= $arProduct['DISCOUNT_PRICE'];
}
if (isset($item['offer']['name']) && $item['offer']['name']) if (isset($item['offer']['name']) && $item['offer']['name']) {
$arProduct['NAME'] = self::fromJSON($item['offer']['name']); $arProduct['NAME'] = self::fromJSON($item['offer']['name']);
}
if (isset($item['isCanceled'])) { if (isset($item['isCanceled'])) {
//for product excluding from order //for product excluding from order
@ -902,8 +894,9 @@ class ICrmOrderActions
if (!isset($item['isCanceled'])) { if (!isset($item['isCanceled'])) {
// update old // update old
if (isset($item['initialPrice']) && $item['initialPrice']) if (isset($item['initialPrice']) && $item['initialPrice']) {
$arProduct['PRICE'] = (double) $item['initialPrice']; $arProduct['PRICE'] = (double) $item['initialPrice'];
}
if (isset($item['discount'])) { if (isset($item['discount'])) {
$arProduct['DISCOUNT_PRICE'] = $item['discount']; $arProduct['DISCOUNT_PRICE'] = $item['discount'];
@ -915,37 +908,39 @@ class ICrmOrderActions
$arProduct['DISCOUNT_PRICE'] = $arProduct['DISCOUNT_PRICE'] + $arProduct['PRICE'] - $newPrice; $arProduct['DISCOUNT_PRICE'] = $arProduct['DISCOUNT_PRICE'] + $arProduct['PRICE'] - $newPrice;
} }
if(isset($item['discount']) || isset($item['discountPercent'])) if(isset($item['discount']) || isset($item['discountPercent'])) {
$arProduct['PRICE'] -= $arProduct['DISCOUNT_PRICE']; $arProduct['PRICE'] -= $arProduct['DISCOUNT_PRICE'];
}
$arProduct = self::updateCancelProp($arProduct, 0); $arProduct = self::updateCancelProp($arProduct, 0);
} } else {
else {
//for product excluding from order //for product excluding from order
$arProduct['PRICE'] = 0; $arProduct['PRICE'] = 0;
$arProduct = self::updateCancelProp($arProduct, 1); $arProduct = self::updateCancelProp($arProduct, 1);
} }
if (isset($item['quantity']) && $item['quantity']) if (isset($item['quantity']) && $item['quantity']) {
$arProduct['QUANTITY'] = $item['quantity']; $arProduct['QUANTITY'] = $item['quantity'];
}
if (isset($item['offer']['name']) && $item['offer']['name']) if (isset($item['offer']['name']) && $item['offer']['name']) {
$arProduct['NAME'] = self::fromJSON($item['offer']['name']); $arProduct['NAME'] = self::fromJSON($item['offer']['name']);
}
CSaleBasket::Update($p['ID'], $arProduct); CSaleBasket::Update($p['ID'], $arProduct);
CSaleBasket::DeleteAll($userId); CSaleBasket::DeleteAll($userId);
} }
if(!isset($order['delivery']) || !isset($order['delivery']['cost'])) if (!isset($order['delivery']) || !isset($order['delivery']['cost'])) {
$order['delivery']['cost'] = $arFields['PRICE_DELIVERY']; $order['delivery']['cost'] = $arFields['PRICE_DELIVERY'];
}
if(!isset($order['summ']) || (isset($order['summ']) && !$order['summ'] && $order['summ'] !== 0)) if (!isset($order['summ']) || (isset($order['summ']) && !$order['summ'] && $order['summ'] !== 0)) {
$order['summ'] = $arFields['PRICE'] - $arFields['PRICE_DELIVERY']; $order['summ'] = $arFields['PRICE'] - $arFields['PRICE_DELIVERY'];
}
$wasCanaceled = false; $wasCanaceled = $arFields['CANCELED'] == 'Y' ? true : false;
if($arFields['CANCELED'] == 'Y')
$wasCanaceled = true;
$resultDeliveryTypeId = $optionsDelivTypes[$order['delivery']['code']]; $resultDeliveryTypeId = $optionsDelivTypes[$order['delivery']['code']];
@ -971,10 +966,8 @@ class ICrmOrderActions
'PRICE_DELIVERY' => $order['delivery']['cost'], 'PRICE_DELIVERY' => $order['delivery']['cost'],
'PRICE' => $order['summ'] + (double) $order['delivery']['cost'], 'PRICE' => $order['summ'] + (double) $order['delivery']['cost'],
'DATE_MARKED' => $order['markDatetime'], 'DATE_MARKED' => $order['markDatetime'],
'USER_ID' => $userId, //$order['customer'] 'USER_ID' => $userId,
'PAY_SYSTEM_ID' => $optionsPayTypes[$order['paymentType']], 'PAY_SYSTEM_ID' => $optionsPayTypes[$order['paymentType']],
//'PAYED' => $optionsPayment[$order['paymentStatus']],
//'PERSON_TYPE_ID' => $optionsOrderTypes[$order['orderType']],
'DELIVERY_ID' => $resultDeliveryTypeId, 'DELIVERY_ID' => $resultDeliveryTypeId,
'STATUS_ID' => $optionsPayStatuses[$order['status']], 'STATUS_ID' => $optionsPayStatuses[$order['status']],
'REASON_CANCELED' => self::fromJSON($order['statusComment']), 'REASON_CANCELED' => self::fromJSON($order['statusComment']),
@ -982,8 +975,14 @@ class ICrmOrderActions
'COMMENTS' => self::fromJSON($order['managerComment']) 'COMMENTS' => self::fromJSON($order['managerComment'])
)); ));
if(!empty($arFields)) if (isset($order['discount'])) {
$arFields['DISCOUNT_VALUE'] = $order['discount'];
$arFields['PRICE'] -= $order['discount'];
}
if(!empty($arFields)) {
CSaleOrder::Update($order['externalId'], $arFields); CSaleOrder::Update($order['externalId'], $arFields);
}
if(isset($order['status']) && $order['status']) { if(isset($order['status']) && $order['status']) {
if(isset($optionsPayStatuses[$order['status']]) && $optionsPayStatuses[$order['status']]) { if(isset($optionsPayStatuses[$order['status']]) && $optionsPayStatuses[$order['status']]) {
@ -991,18 +990,21 @@ class ICrmOrderActions
CSaleOrder::StatusOrder($order['externalId'], $optionsPayStatuses[$order['status']]); CSaleOrder::StatusOrder($order['externalId'], $optionsPayStatuses[$order['status']]);
// uncancel order // uncancel order
if($wasCanaceled && ($optionsPayStatuses[$order['status']] != 'YY')) if($wasCanaceled && ($optionsPayStatuses[$order['status']] != 'YY')) {
CSaleOrder::CancelOrder($order['externalId'], "N", $order['statusComment']); CSaleOrder::CancelOrder($order['externalId'], "N", $order['statusComment']);
}
// cancel order // cancel order
if($optionsPayStatuses[$order['status']] == 'YY') if($optionsPayStatuses[$order['status']] == 'YY') {
CSaleOrder::CancelOrder($order['externalId'], "Y", $order['statusComment']); CSaleOrder::CancelOrder($order['externalId'], "Y", $order['statusComment']);
} }
} }
}
// set PAYED // set PAYED
if(isset($order['paymentStatus']) && $order['paymentStatus'] && $optionsPayment[$order['paymentStatus']]) if(isset($order['paymentStatus']) && $order['paymentStatus'] && $optionsPayment[$order['paymentStatus']]) {
CSaleOrder::PayOrder($order['externalId'], $optionsPayment[$order['paymentStatus']]); CSaleOrder::PayOrder($order['externalId'], $optionsPayment[$order['paymentStatus']]);
}
if(function_exists('intarocrm_order_post_persist')) { if(function_exists('intarocrm_order_post_persist')) {
intarocrm_order_post_persist($order); intarocrm_order_post_persist($order);
@ -1010,14 +1012,9 @@ class ICrmOrderActions
} }
} }
if(count($orderHistory)) if (count($orderHistory)) {
COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_HISTORY_DATE, $dateFinish->format('Y-m-d H:i:s')); COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_HISTORY_DATE, $dateFinish->format('Y-m-d H:i:s'));
}
// clear intarocrm user basket
CSaleBasket::DeleteAll($USER->GetID());
$USER->Logout();
if($realUser) $USER->Authorize($realUser);
$GLOBALS['INTARO_CRM_FROM_HISTORY'] = false; $GLOBALS['INTARO_CRM_FROM_HISTORY'] = false;
@ -1076,7 +1073,7 @@ class ICrmOrderActions
*/ */
public static function notForkedOrderAgent() { public static function notForkedOrderAgent() {
self::uploadOrdersAgent(); //self::uploadOrdersAgent();
self::orderHistory(); self::orderHistory();
return 'ICrmOrderActions::notForkedOrderAgent();'; return 'ICrmOrderActions::notForkedOrderAgent();';
} }
@ -1096,26 +1093,13 @@ class ICrmOrderActions
break; break;
} }
if(!empty($defaultSite)) { if(COption::GetOptionString('main', 'agents_use_crontab', 'N') != 'N') {
$serverName = $defaultSite['SERVER_NAME']; $docRoot = count($defaultSite) > 0 ? $defaultSite['ABS_DOC_ROOT'] : $_SERVER['DOCUMENT_ROOT'];
} else { define('NO_AGENT_CHECK', true);
if(isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME']) require($docRoot . '/bitrix/modules/main/include/prolog_before.php');
$serverName = $_SERVER['SERVER_NAME'];
else
$serverName = '';
} }
if(self::isForkable($defaultSite)) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, ($_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://') .
$serverName . '/retailcrm/agent.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch,CURLOPT_HEADER, true); // headers
curl_exec($ch);
curl_close($ch);
} else {
self::notForkedOrderAgent(); self::notForkedOrderAgent();
}
return 'ICrmOrderActions::orderAgent();'; return 'ICrmOrderActions::orderAgent();';
} }
@ -1540,26 +1524,4 @@ class ICrmOrderActions
if($location = $dbLocation->Fetch()) if($location = $dbLocation->Fetch())
return $location['ID']; return $location['ID'];
} }
/*
* Returns true if a not a crontab
* or if $dir exists
*/
public static function isForkable($defaultSite = array()) {
$docRoot = !empty($defaultSite) ? $defaultSite['ABS_DOC_ROOT'] : $_SERVER['DOCUMENT_ROOT'];
if(!empty($defaultSite)) {
$serverName = $defaultSite['SERVER_NAME'];
} else {
if(isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'])
$serverName = $_SERVER['SERVER_NAME'];
else
$serverName = '';
}
$fork = COption::GetOptionString('main', 'agents_use_crontab', 'N');
if($fork === 'N')
return file_exists($docRoot . '/retailcrm/agent.php') && is_callable('curl_init') && $serverName;
return false;
}
} }

View File

@ -1,7 +0,0 @@
<?php
define('NO_AGENT_CHECK', true);
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
if ($_SERVER['SERVER_ADDR'] != $_SERVER['REMOTE_ADDR']) die('You are not allowed to access this file.');
if (!CModule::IncludeModule('intaro.intarocrm')) die('retailCRM not installed.');
ICrmOrderActions::notForkedOrderAgent();