1
0
mirror of synced 2024-11-27 07:46:09 +03:00
bitrix-module/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php

336 lines
12 KiB
PHP
Raw Normal View History

2013-08-14 20:12:40 +04:00
<?php
/**
* OrderEvent
*/
class ICrmOrderEvent {
protected static $MODULE_ID = 'intaro.intarocrm';
protected static $CRM_API_HOST_OPTION = 'api_host';
protected static $CRM_API_KEY_OPTION = 'api_key';
protected static $CRM_ORDER_TYPES_ARR = 'order_types_arr';
protected static $CRM_DELIVERY_TYPES_ARR = 'deliv_types_arr';
protected static $CRM_PAYMENT_TYPES = 'pay_types_arr';
protected static $CRM_PAYMENT_STATUSES = 'pay_statuses_arr';
protected static $CRM_PAYMENT = 'payment_arr'; //order payment Y/N
protected static $CRM_ORDER_LAST_ID = 'order_last_id';
2013-09-19 00:18:32 +04:00
protected static $CRM_ORDER_PROPS = 'order_props';
2015-03-03 16:37:34 +03:00
protected static $CRM_LEGAL_DETAILS = 'legal_details';
protected static $CRM_CUSTOM_FIELDS = 'custom_fields';
protected static $CRM_CONTRAGENT_TYPE = 'contragent_type';
protected static $CRM_ORDER_FAILED_IDS = 'order_failed_ids';
2015-03-03 16:37:34 +03:00
protected static $CRM_SITES_LIST = 'sites_list';
2013-09-19 00:18:32 +04:00
/**
* onBeforeOrderAdd
*
* @param mixed $arFields - Order arFields
*/
function onBeforeOrderAdd($arFields = array()) {
$GLOBALS['INTARO_CRM_ORDER_ADD'] = true;
return;
}
/**
* OnSaleBeforeReserveOrder
*
* @param mixed $arFields - Order arFields
*/
function OnSaleBeforeReserveOrder($arFields = array()) {
$GLOBALS['INTARO_CRM_ORDER_RESERVE'] = true;
return;
}
/**
* OnSaleReserveOrder
*
* @param mixed $arFields - Order arFields
*/
function OnSaleReserveOrder($arFields = array()) {
if(isset($GLOBALS['INTARO_CRM_ORDER_RESERVE']) && $GLOBALS['INTARO_CRM_ORDER_RESERVE'])
unset($GLOBALS['INTARO_CRM_ORDER_RESERVE']);
return;
}
2013-09-19 00:18:32 +04:00
2013-08-14 20:12:40 +04:00
/**
* onUpdateOrder
*
* @param mixed $ID - Order id
* @param mixed $arFields - Order arFields
*/
2013-09-22 21:28:28 +04:00
function onUpdateOrder($ID, $arFields) {
2013-09-19 00:18:32 +04:00
if(isset($GLOBALS['INTARO_CRM_ORDER_ADD']) && $GLOBALS['INTARO_CRM_ORDER_ADD'])
return;
2014-06-20 16:06:20 +04:00
if(isset($GLOBALS['INTARO_CRM_ORDER_RESERVE']) && $GLOBALS['INTARO_CRM_ORDER_RESERVE'])
return;
2015-03-03 16:37:34 +03:00
2013-09-19 00:18:32 +04:00
if(isset($GLOBALS['INTARO_CRM_FROM_HISTORY']) && $GLOBALS['INTARO_CRM_FROM_HISTORY'])
2013-09-17 18:06:58 +04:00
return;
if(isset($arFields['LOCKED_BY']) && $arFields['LOCKED_BY'])
return;
2013-11-14 16:41:19 +04:00
if(isset($arFields['CANCELED']))
return;
self::writeDataOnOrderCreate($ID, $arFields);
2013-08-14 20:12:40 +04:00
}
2013-09-10 17:15:41 +04:00
2013-08-14 20:12:40 +04:00
/**
* onSendOrderMail
* in: sale.order.ajax, sale.order.full
*
* @param mixed $ID - Order id
* @param mixed $eventName - Event type
* @param mixed $arFields - Order arFields for sending template
*/
function onSendOrderMail($ID, &$eventName, &$arFields) {
2014-03-13 12:58:52 +04:00
if(isset($GLOBALS['INTARO_CRM_FROM_HISTORY']) && $GLOBALS['INTARO_CRM_FROM_HISTORY'])
return;
if(self::writeDataOnOrderCreate($ID))
COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_LAST_ID, $ID);
else {
$failedIds = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_FAILED_IDS, 0));
if(!$failedIds)
$failedIds = array();
$failedIds[] = $ID;
COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_FAILED_IDS, serialize($failedIds));
}
2013-08-14 20:12:40 +04:00
}
/**
* writeDataOnOrderCreate via api
*
2014-01-28 17:44:21 +04:00
* @param $ID - Order Id
* @param array $arFields
* @return boolean
2013-08-14 20:12:40 +04:00
*/
function writeDataOnOrderCreate($ID, $arFields) {
2013-09-19 00:18:32 +04:00
2013-08-14 20:12:40 +04:00
if (!CModule::IncludeModule('iblock')) {
//handle err
ICrmOrderActions::eventLog('ICrmOrderEvent::writeDataOnOrderCreate', 'iblock', 'module not found');
return true;
}
if (!CModule::IncludeModule("sale")) {
//handle err
ICrmOrderActions::eventLog('ICrmOrderEvent::writeDataOnOrderCreate', 'sale', 'module not found');
return true;
}
if (!CModule::IncludeModule("catalog")) {
//handle err
ICrmOrderActions::eventLog('ICrmOrderEvent::writeDataOnOrderCreate', 'catalog', 'module not found');
return true;
}
2015-03-03 16:37:34 +03:00
2013-09-19 00:18:32 +04:00
$GLOBALS['INTARO_CRM_FROM_HISTORY'] = false;
2013-08-14 20:12:40 +04:00
$api_host = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_HOST_OPTION, 0);
2013-09-10 17:15:41 +04:00
$api_key = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_KEY_OPTION, 0);
2013-08-14 20:12:40 +04:00
//saved cat params
$optionsOrderTypes = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_TYPES_ARR, 0));
$optionsDelivTypes = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_DELIVERY_TYPES_ARR, 0));
$optionsPayTypes = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT_TYPES, 0));
$optionsPayStatuses = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT_STATUSES, 0)); // --statuses
$optionsPayment = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT, 0));
2015-03-03 16:37:34 +03:00
$optionsSitesList = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_SITES_LIST, 0));
2013-09-19 00:18:32 +04:00
$optionsOrderProps = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_PROPS, 0));
2015-03-03 16:37:34 +03:00
$optionsLegalDetails = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_LEGAL_DETAILS, 0));
$optionsContragentType = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_CONTRAGENT_TYPE, 0));
$optionsCustomFields = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_CUSTOM_FIELDS, 0));
2013-08-14 20:12:40 +04:00
2015-03-03 16:37:34 +03:00
$api = new RetailCrm\RestApi($api_host, $api_key);
2013-08-14 20:12:40 +04:00
$arParams = ICrmOrderActions::clearArr(array(
2015-03-03 16:37:34 +03:00
'optionsOrderTypes' => $optionsOrderTypes,
'optionsDelivTypes' => $optionsDelivTypes,
'optionsPayTypes' => $optionsPayTypes,
'optionsPayStatuses' => $optionsPayStatuses,
'optionsPayment' => $optionsPayment,
'optionsOrderProps' => $optionsOrderProps,
'optionsLegalDetails' => $optionsLegalDetails,
'optionsContragentType' => $optionsContragentType,
'optionsSitesList' => $optionsSitesList,
'optionsCustomFields' => $optionsCustomFields
));
2015-03-03 16:37:34 +03:00
2013-08-14 20:12:40 +04:00
$arOrder = CSaleOrder::GetById($ID);
2015-03-03 16:37:34 +03:00
if (is_array($arFields) && !empty($arFields)) {
2013-10-29 19:16:32 +04:00
$arFieldsNew = array(
2013-09-22 21:28:28 +04:00
'USER_ID' => $arOrder['USER_ID'],
'ID' => $ID,
'PERSON_TYPE_ID' => $arOrder['PERSON_TYPE_ID'],
2013-09-22 21:28:28 +04:00
'CANCELED' => $arOrder['CANCELED'],
'STATUS_ID' => $arOrder['STATUS_ID'],
'DATE_INSERT' => $arOrder['DATE_INSERT'],
'LID' => $arOrder['LID']
);
$arFieldsNew = array_merge($arFieldsNew, $arFields);
$arOrder = $arFieldsNew;
}
2015-03-03 16:37:34 +03:00
if(count($optionsSitesList)>1){
$result = ICrmOrderActions::orderCreate($arOrder, $api, $arParams, true, $optionsSitesList[$arOrder['LID']]);
}
else{
$result = ICrmOrderActions::orderCreate($arOrder, $api, $arParams, true);
}
2013-08-14 20:12:40 +04:00
if(!$result) {
ICrmOrderActions::eventLog('ICrmOrderEvent::writeDataOnOrderCreate', 'ICrmOrderActions::orderCreate', 'error during creating order');
return false;
2013-08-14 20:12:40 +04:00
}
return true;
}
/**
*
* @param type $ID -- orderId
* @param type $cancel -- Y / N - cancel order status
* @param type $reason -- cancel reason
* @return boolean
*/
function onSaleCancelOrder($ID, $cancel, $reason) {
2014-03-13 12:58:52 +04:00
if(isset($GLOBALS['INTARO_CRM_FROM_HISTORY']) && $GLOBALS['INTARO_CRM_FROM_HISTORY'])
return;
2013-11-15 15:55:54 +04:00
if(!$ID || !$cancel)
2013-08-14 20:12:40 +04:00
return true;
if (!CModule::IncludeModule('iblock')) {
//handle err
ICrmOrderActions::eventLog('ICrmOrderEvent::onSaleCancelOrder', 'iblock', 'module not found');
return true;
}
if (!CModule::IncludeModule("sale")) {
//handle err
ICrmOrderActions::eventLog('ICrmOrderEvent::onSaleCancelOrder', 'sale', 'module not found');
return true;
}
if (!CModule::IncludeModule("catalog")) {
//handle err
ICrmOrderActions::eventLog('ICrmOrderEvent::onSaleCancelOrder', 'catalog', 'module not found');
return true;
}
$api_host = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_HOST_OPTION, 0);
$api_key = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_KEY_OPTION, 0);
//saved cat params
$optionsPayStatuses = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT_STATUSES, 0)); // --statuses
2015-03-03 16:37:34 +03:00
$api = new RetailCrm\RestApi($api_host, $api_key);
2013-11-15 15:55:54 +04:00
$order = array();
if($cancel == 'Y') {
$order = array(
'externalId' => (int) $ID,
'status' => $optionsPayStatuses[$cancel.$cancel],
'statusComment' => ICrmOrderActions::toJSON($reason)
);
} else if($cancel == 'N') {
$arOrder = CSaleOrder::GetById((int) $ID);
$order = array(
'externalId' => (int) $ID,
'status' => $optionsPayStatuses[$arOrder['STATUS_ID']],
'managerComment' => $arOrder['COMMENTS']
);
}
2014-03-22 14:52:17 +04:00
try {
$api->orderEdit($order);
2015-03-03 16:37:34 +03:00
} catch (\RetailCrm\Exception\CurlException $e) {
2014-03-22 14:52:17 +04:00
ICrmOrderActions::eventLog(
2015-03-03 16:37:34 +03:00
'ICrmOrderEvent::onSaleCancelOrder', 'RetailCrm\RestApi::orderEdit::CurlException',
2014-03-22 14:52:17 +04:00
$e->getCode() . ': ' . $e->getMessage()
);
}
2013-08-14 20:12:40 +04:00
return true;
}
/**
*
* @param type $ID -- orderId
* @param type $payed -- Y / N - pay order status
* @return boolean
*/
function onSalePayOrder($ID, $payed) {
2014-03-13 12:58:52 +04:00
if(isset($GLOBALS['INTARO_CRM_FROM_HISTORY']) && $GLOBALS['INTARO_CRM_FROM_HISTORY'])
return;
2013-08-14 20:12:40 +04:00
if(!$ID || !$payed || ($payed != 'Y'))
return true;
if (!CModule::IncludeModule('iblock')) {
//handle err
ICrmOrderActions::eventLog('ICrmOrderEvent::onSalePayOrder', 'iblock', 'module not found');
return true;
}
if (!CModule::IncludeModule("sale")) {
//handle err
ICrmOrderActions::eventLog('ICrmOrderEvent::onSalePayOrder', 'sale', 'module not found');
return true;
}
if (!CModule::IncludeModule("catalog")) {
//handle err
ICrmOrderActions::eventLog('ICrmOrderEvent::onSalePayOrder', 'catalog', 'module not found');
return true;
}
$api_host = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_HOST_OPTION, 0);
$api_key = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_KEY_OPTION, 0);
//saved cat params
$optionsPayment = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_PAYMENT, 0));
2015-03-03 16:37:34 +03:00
$api = new RetailCrm\RestApi($api_host, $api_key);
2013-08-14 20:12:40 +04:00
$order = array(
'externalId' => (int) $ID,
'paymentStatus' => $optionsPayment[$payed]
);
$api->orderEdit($order);
2014-03-13 12:58:52 +04:00
2014-03-22 14:52:17 +04:00
try {
$api->orderEdit($order);
2015-03-03 16:37:34 +03:00
} catch (\RetailCrm\Exception\CurlException $e) {
2014-03-22 14:52:17 +04:00
ICrmOrderActions::eventLog(
2015-03-03 16:37:34 +03:00
'ICrmOrderEvent::onSalePayOrder', 'RetailCrm\RestApi::orderEdit::CurlException',
2014-03-22 14:52:17 +04:00
$e->getCode() . ': ' . $e->getMessage()
);
}
2013-08-14 20:12:40 +04:00
return true;
}
2013-10-30 17:01:34 +04:00
/**
*
* @param type $ID -- orderId
* @param type $value -- ACCOUNT_NUMBER
* @return boolean
*/
function onBeforeOrderAccountNumberSet($ID, $value) {
if(isset($GLOBALS['ICRM_ACCOUNT_NUMBER']) && $GLOBALS['ICRM_ACCOUNT_NUMBER'])
return $GLOBALS['ICRM_ACCOUNT_NUMBER'];
2014-06-19 16:24:04 +04:00
return false;
2013-10-30 17:01:34 +04:00
}
2013-08-14 20:12:40 +04:00
}