diff --git a/intaro.intarocrm/classes/general/ICrmOrderActions.php b/intaro.intarocrm/classes/general/ICrmOrderActions.php
index d19090b2..8afcb964 100755
--- a/intaro.intarocrm/classes/general/ICrmOrderActions.php
+++ b/intaro.intarocrm/classes/general/ICrmOrderActions.php
@@ -255,6 +255,7 @@ class ICrmOrderActions
$resOrder = array();
$resOrderDeliveryAddress = array();
+ $contactNameArr = array();
$rsOrderProps = CSaleOrderPropsValue::GetList(array(), array('ORDER_ID' => $arFields['ID']));
while ($ar = $rsOrderProps->Fetch()) {
@@ -270,7 +271,7 @@ class ICrmOrderActions
$resOrderDeliveryAddress['city'] = self::toJSON($resOrderDeliveryAddress['city']['CITY_NAME_LANG']);
}
break;
- case 'FIO': $resOrder['contactName'] = explode(" ", self::toJSON($ar['VALUE']));
+ case 'FIO': $contactNameArr = self::explodeFIO($ar['VALUE']);
break;
case 'PHONE': $resOrder['phone'] = $ar['VALUE'];
break;
@@ -309,10 +310,7 @@ class ICrmOrderActions
$createdAt = new \DateTime($arFields['DATE_INSERT']);
$createdAt = $createdAt->format('Y-m-d H:i:s');
- $resOrder = self::clearArr(array(
- 'lastName' => $resOrder['contactName'][0],
- 'firstName' => $resOrder['contactName'][1],
- 'patronymic' => $resOrder['contactName'][2],
+ $resOrder = array(
'phone' => $resOrder['phone'],
'email' => $resOrder['email'],
'deliveryCost' => $arFields['PRICE_DELIVERY'],
@@ -325,7 +323,7 @@ class ICrmOrderActions
'orderType' => $arParams['optionsOrderTypes'][$arFields['PERSON_TYPE_ID']],
'deliveryType' => $arParams['optionsDelivTypes'][$resultDeliveryTypeId],
'status' => $arParams['optionsPayStatuses'][$arFields['STATUS_ID']],
- 'statusComment' => $arFields['REASON_CANCELED'],
+ 'statusComment' => $arFields['USER_DESCRIPTION'],
'createdAt' => $createdAt,
'deliveryAddress' => $resOrderDeliveryAddress,
'items' => $items
@@ -335,8 +333,19 @@ class ICrmOrderActions
&& in_array($arFields['LID'], $arParams['optionsSites']))
$resOrder['site'] = $arFields['LID'];
+ // parse fio
+ if(count($contactNameArr) == 1) {
+ $resOrder['firstName'] = $contactNameArr[0];
+ } else {
+ $resOrder['lastName'] = $contactNameArr[0];
+ $resOrder['firstName'] = $contactNameArr[1];
+ $resOrder['patronymic'] = $contactNameArr[2];
+ }
+
+ $resOrder = self::clearArr($resOrder);
+
if($send)
- $api->createOrder($resOrder);
+ return $api->orderEdit($resOrder);
return array(
'order' => $resOrder,
@@ -389,4 +398,21 @@ class ICrmOrderActions
return $APPLICATION->ConvertCharset($str, 'utf-8', SITE_CHARSET);
}
+
+ public static function explodeFIO($str) {
+ if(!$str)
+ return array();
+
+ $array = explode(" ", self::toJSON($str), 3);
+ $newArray = array();
+
+ foreach($array as $ar) {
+ if(!$ar)
+ continue;
+
+ $newArray[] = $ar;
+ }
+
+ return $newArray;
+ }
}
\ No newline at end of file
diff --git a/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php b/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php
new file mode 100644
index 00000000..7b7e8178
--- /dev/null
+++ b/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php
@@ -0,0 +1,198 @@
+ $optionsOrderTypes,
+ 'optionsDelivTypes' => $optionsDelivTypes,
+ 'optionsPayTypes' => $optionsPayTypes,
+ 'optionsPayStatuses' => $optionsPayStatuses,
+ 'optionsPayment' => $optionsPayment
+ );
+
+ $arOrder = CSaleOrder::GetById($ID);
+ $result = ICrmOrderActions::orderCreate($arOrder, $api, $arParams, true);
+
+ if(!$result) {
+ ICrmOrderActions::eventLog('ICrmOrderEvent::writeDataOnOrderCreate', 'ICrmOrderActions::orderCreate', 'error during creating order');
+ return true;
+ }
+
+ COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_LAST_ID, $ID);
+
+ 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) {
+ if(!$ID || !$cancel || ($cancel != 'Y'))
+ 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
+
+ $api = new IntaroCrm\RestApi($api_host, $api_key);
+
+ $order = array(
+ 'externalId' => (int) $ID,
+ 'status' => $optionsPayStatuses[$cancel],
+ 'statusComment' => ICrmOrderActions::toJSON($reason)
+ );
+
+ $api->orderEdit($order);
+
+ // error pushing order
+ if ($api->getStatusCode() != 201)
+ ICrmOrderActions::eventLog('ICrmOrderEvent::onSaleCancelOrder', 'IntaroCrm\RestApi::orderEdit', $api->getLastError());
+
+ return true;
+ }
+
+ /**
+ *
+ * @param type $ID -- orderId
+ * @param type $payed -- Y / N - pay order status
+ * @return boolean
+ */
+ function onSalePayOrder($ID, $payed) {
+ 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));
+
+ $api = new IntaroCrm\RestApi($api_host, $api_key);
+
+ $order = array(
+ 'externalId' => (int) $ID,
+ 'paymentStatus' => $optionsPayment[$payed]
+ );
+
+ $api->orderEdit($order);
+
+ // error pushing order
+ if ($api->getStatusCode() != 201)
+ ICrmOrderActions::eventLog('ICrmOrderEvent::onSalePayOrder', 'IntaroCrm\RestApi::orderEdit', $api->getLastError());
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/intaro.intarocrm/export/export_setup.php b/intaro.intarocrm/export/export_setup.php
new file mode 100644
index 00000000..1fafdeee
--- /dev/null
+++ b/intaro.intarocrm/export/export_setup.php
@@ -0,0 +1,295 @@
+
+
+
+if(!check_bitrix_sessid()) return;
+
+__IncludeLang(GetLangFileName($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/intaro.intarocrm/lang/", "/icml_export_setup.php"));
+
+if (($ACTION == 'EXPORT_EDIT' || $ACTION == 'EXPORT_COPY') && $STEP == 1)
+{
+ if (isset($arOldSetupVars['SETUP_FILE_NAME']))
+ $SETUP_FILE_NAME = $arOldSetupVars['SETUP_FILE_NAME'];
+ if (isset($arOldSetupVars['SETUP_PROFILE_NAME']))
+ $SETUP_PROFILE_NAME = $arOldSetupVars['SETUP_PROFILE_NAME'];
+ if (isset($arOldSetupVars['IBLOCK_EXPORT']))
+ $IBLOCK_EXPORT = $arOldSetupVars['IBLOCK_EXPORT'];
+ if (isset($arOldSetupVars['IBLOCK_PROPERTY_ARTICLE']))
+ $IBLOCK_PROPERTY_ARTICLE = $arOldSetupVars['IBLOCK_PROPERTY_ARTICLE'];
+}
+
+
+if ($STEP>1)
+{
+
+
+ if (count($IBLOCK_EXPORT) < count($IBLOCK_PROPERTY_ARTICLE))
+ $arSetupErrors[] = GetMessage("ERROR_ARTICLE_NOT_SET");
+
+ if (strlen($SETUP_FILE_NAME)<=0)
+ {
+ $arSetupErrors[] = GetMessage("CET_ERROR_NO_FILENAME");
+ }
+ elseif ($APPLICATION->GetFileAccessPermission($SETUP_FILE_NAME) < "W")
+ {
+ $arSetupErrors[] = str_replace("#FILE#", $SETUP_FILE_NAME, GetMessage('CET_YAND_RUN_ERR_SETUP_FILE_ACCESS_DENIED'));
+ }
+
+ if (($ACTION=="EXPORT_SETUP" || $ACTION == 'EXPORT_EDIT' || $ACTION == 'EXPORT_COPY') && strlen($SETUP_PROFILE_NAME)<=0)
+ {
+ $arSetupErrors[] = GetMessage("CET_ERROR_NO_PROFILE_NAME");
+ }
+
+ if (!empty($arSetupErrors))
+ {
+ $STEP = 1;
+ }
+}
+
+if (!empty($arSetupErrors))
+ echo ShowError(implode('
', $arSetupErrors));
+
+
+if ($STEP==1)
+{
+
+
+?>
+