From 13f72cc89ff49d02a6cff8f4bed78cad34cc4f25 Mon Sep 17 00:00:00 2001 From: Grisha Pomadchin Date: Tue, 17 Sep 2013 15:17:39 +0400 Subject: [PATCH 01/12] options fix --- intaro.intarocrm/install/index.php | 45 +++++++++++++++--------------- intaro.intarocrm/install/step3.php | 4 +-- intaro.intarocrm/options.php | 37 ++++++++++-------------- 3 files changed, 39 insertions(+), 47 deletions(-) diff --git a/intaro.intarocrm/install/index.php b/intaro.intarocrm/install/index.php index c5bf34b3..ae64533d 100755 --- a/intaro.intarocrm/install/index.php +++ b/intaro.intarocrm/install/index.php @@ -64,7 +64,14 @@ class intaro_intarocrm extends CModule { if (!date_default_timezone_get()) { if (!ini_get('date.timezone')) { $APPLICATION->ThrowException(GetMessage("DATE_TIMEZONE_ERR")); - return false; + return false; + } + } + + if (!date_default_timezone_get()) { + if (!ini_get('date.timezone')) { + $APPLICATION->ThrowException(GetMessage("DATE_TIMEZONE_ERR")); + return false; } } @@ -77,27 +84,19 @@ class intaro_intarocrm extends CModule { $arResult['orderProps'] = array( array( 'NAME' => GetMessage('FIO'), - 'ID' => 'fio' - ), - array( - 'NAME' => GetMessage('ZIP'), - 'ID' => 'index' + 'ID' => 'fio' ), array( 'NAME' => GetMessage('PHONE'), - 'ID' => 'phone' + 'ID' => 'phone' ), array( 'NAME' => GetMessage('EMAIL'), - 'ID' => 'email' - ), - array( - 'NAME' => GetMessage('ZIP'), - 'ID' => 'index' + 'ID' => 'email' ), array( 'NAME' => GetMessage('ADDRESS'), - 'ID' => 'text' + 'ID' => 'text' ), // address /* array( @@ -114,35 +113,35 @@ class intaro_intarocrm extends CModule { ), */ array( 'NAME' => GetMessage('ZIP'), - 'ID' => 'index' + 'ID' => 'index' ), array( 'NAME' => GetMessage('STREET'), - 'ID' => 'street' + 'ID' => 'street' ), array( 'NAME' => GetMessage('BUILDING'), - 'ID' => 'building' + 'ID' => 'building' ), array( 'NAME' => GetMessage('FLAT'), - 'ID' => 'flat' + 'ID' => 'flat' ), array( 'NAME' => GetMessage('INTERCOMCODE'), - 'ID' => 'intercomcode' + 'ID' => 'intercomcode' ), array( 'NAME' => GetMessage('FLOOR'), - 'ID' => 'floor' + 'ID' => 'floor' ), array( 'NAME' => GetMessage('BLOCK'), - 'ID' => 'block' + 'ID' => 'block' ), array( 'NAME' => GetMessage('HOUSE'), - 'ID' => 'house' + 'ID' => 'house' ) ); @@ -698,7 +697,7 @@ class intaro_intarocrm extends CModule { //form orderProps $dbProp = CSaleOrderProps::GetList(array(), array()); while ($arProp = $dbProp->GetNext()) { - $arResult['arProp'][] = $arProp; + $arResult['arProp'][$arProp['PERSON_TYPE_ID']] = $arProp; } COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_TYPES_ARR, serialize($orderTypesArr)); @@ -772,7 +771,7 @@ class intaro_intarocrm extends CModule { $propsCount = 0; $_orderPropsArr = array(); foreach ($arResult['orderProps'] as $orderProp) { - if ((!(int) htmlspecialchars(trim($_POST['address-detail-' . $orderType['ID']]))) && $propsCount > 5) + if ((!(int) htmlspecialchars(trim($_POST['address-detail-' . $orderType['ID']]))) && $propsCount > 4) break; $_orderPropsArr[$orderProp['ID']] = htmlspecialchars(trim($_POST['order-prop-' . $orderProp['ID'] . '-' . $orderType['ID']])); $propsCount++; diff --git a/intaro.intarocrm/install/step3.php b/intaro.intarocrm/install/step3.php index 7c5a7446..c40ca3d2 100755 --- a/intaro.intarocrm/install/step3.php +++ b/intaro.intarocrm/install/step3.php @@ -72,14 +72,14 @@ $defaultOrderProps = array( - 5) echo 'class="address-detail-' . $bitrixOrderType['ID'] . '"'; if(($countProps > 5) && (count($defaultOrderProps[$bitrixOrderType['ID']]) < 6)) echo 'style="display:none;"';?>> + 4) echo 'class="address-detail-' . $bitrixOrderType['ID'] . '"'; if(($countProps > 4) && (count($defaultOrderProps[$bitrixOrderType['ID']]) < 6)) echo 'style="display:none;"';?>> - + From 77abe318ac99e32dca7b48104a2cb9dc430f19b1 Mon Sep 17 00:00:00 2001 From: Grisha Pomadchin Date: Tue, 17 Sep 2013 15:40:23 +0400 Subject: [PATCH 02/12] removed test log --- intaro.intarocrm/classes/general/ICrmOrderActions.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/intaro.intarocrm/classes/general/ICrmOrderActions.php b/intaro.intarocrm/classes/general/ICrmOrderActions.php index 9ec6299f..de9d59f2 100755 --- a/intaro.intarocrm/classes/general/ICrmOrderActions.php +++ b/intaro.intarocrm/classes/general/ICrmOrderActions.php @@ -657,8 +657,6 @@ class ICrmOrderActions } $resOrder = self::clearArr($resOrder); - - self::eventLog('ICrmOrderActions::orderHistory', 'iblock', json_encode($resOrder)); if($send) return $api->orderEdit($resOrder); From e3ceadfe673910c257bc8c985afe04cd7d200529 Mon Sep 17 00:00:00 2001 From: Grisha Pomadchin Date: Tue, 17 Sep 2013 18:06:58 +0400 Subject: [PATCH 03/12] fix onOrderUpdateEvent --- intaro.intarocrm/classes/general/ICrmOrderActions.php | 2 ++ intaro.intarocrm/classes/general/events/ICrmOrderEvent.php | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/intaro.intarocrm/classes/general/ICrmOrderActions.php b/intaro.intarocrm/classes/general/ICrmOrderActions.php index de9d59f2..50459df5 100755 --- a/intaro.intarocrm/classes/general/ICrmOrderActions.php +++ b/intaro.intarocrm/classes/general/ICrmOrderActions.php @@ -416,6 +416,8 @@ class ICrmOrderActions 'DELIVERY_ID' => $optionsDelivTypes[$order['deliveryType']], 'STATUS_ID' => $optionsPayStatuses[$order['status']] )); + + $GLOBALS['FROM_HISTORY'] = true; CSaleOrder::Update($order['externalId'], $arFields); diff --git a/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php b/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php index 7b7e8178..951c6d55 100644 --- a/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php +++ b/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php @@ -21,6 +21,9 @@ class ICrmOrderEvent { * @param mixed $arFields - Order arFields */ function onUpdateOrder($ID, $arFields = array()) { + if(isset($GLOBALS['FROM_HISTORY']) && $GLOBALS['FROM_HISTORY']) + return; + self::writeDataOnOrderCreate($ID); } @@ -35,6 +38,7 @@ class ICrmOrderEvent { */ function onSendOrderMail($ID, &$eventName, &$arFields) { self::writeDataOnOrderCreate($ID); + COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_LAST_ID, $ID); } /** @@ -89,8 +93,6 @@ class ICrmOrderEvent { return true; } - COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_LAST_ID, $ID); - return true; } From 622dd0e56ce5c7db1399e5b28e2d39101d79eb5d Mon Sep 17 00:00:00 2001 From: Grisha Pomadchin Date: Tue, 17 Sep 2013 18:31:15 +0400 Subject: [PATCH 04/12] fixed order status update --- intaro.intarocrm/classes/general/ICrmOrderActions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intaro.intarocrm/classes/general/ICrmOrderActions.php b/intaro.intarocrm/classes/general/ICrmOrderActions.php index 50459df5..0517e692 100755 --- a/intaro.intarocrm/classes/general/ICrmOrderActions.php +++ b/intaro.intarocrm/classes/general/ICrmOrderActions.php @@ -412,7 +412,7 @@ class ICrmOrderActions 'USER_ID' => $userId, //$order['customer'] 'PAY_SYSTEM_ID' => $optionsPayTypes[$order['paymentType']], 'PAYED' => $optionsPayment[$order['paymentStatus']], - 'PERSON_TYPE_ID' => $optionsOrderTypes[$order['orderType']], + //'PERSON_TYPE_ID' => $optionsOrderTypes[$order['orderType']], 'DELIVERY_ID' => $optionsDelivTypes[$order['deliveryType']], 'STATUS_ID' => $optionsPayStatuses[$order['status']] )); From e13fddda752ee93631d15e7be9df715a5761943e Mon Sep 17 00:00:00 2001 From: Grisha Pomadchin Date: Tue, 17 Sep 2013 19:02:19 +0400 Subject: [PATCH 05/12] +getLocationCityId --- .../classes/general/ICrmOrderActions.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/intaro.intarocrm/classes/general/ICrmOrderActions.php b/intaro.intarocrm/classes/general/ICrmOrderActions.php index 0517e692..092f80b0 100755 --- a/intaro.intarocrm/classes/general/ICrmOrderActions.php +++ b/intaro.intarocrm/classes/general/ICrmOrderActions.php @@ -749,4 +749,19 @@ class ICrmOrderActions )); } } + + public static function getLocationCityId($cityName) { + if(!$cityName) + return; + + $dbLocation = CSaleLocation::GetList( + array( + "SORT" => "ASC", + "CITY_NAME_LANG" => "ASC" + ), + array("LID" => "ru", "CITY_NAME" => $cityName), false, false, array()); + + if($location = $dbLocation->Fetch()) + return $location['ID']; + } } \ No newline at end of file From e210a7a26fee5d278bf8de472072f607e66a6b66 Mon Sep 17 00:00:00 2001 From: Grisha Pomadchin Date: Thu, 19 Sep 2013 00:18:32 +0400 Subject: [PATCH 06/12] histore update fixes --- .../classes/general/ICrmOrderActions.php | 65 ++++++++++--------- .../classes/general/events/ICrmOrderEvent.php | 27 +++++++- intaro.intarocrm/install/index.php | 10 +-- intaro.intarocrm/install/step1.php | 3 - intaro.intarocrm/install/step3.php | 9 ++- intaro.intarocrm/lang/ru/install/step3.php | 1 + intaro.intarocrm/lang/ru/options.php | 4 +- intaro.intarocrm/options.php | 9 +-- 8 files changed, 75 insertions(+), 53 deletions(-) diff --git a/intaro.intarocrm/classes/general/ICrmOrderActions.php b/intaro.intarocrm/classes/general/ICrmOrderActions.php index 092f80b0..6f237ecc 100755 --- a/intaro.intarocrm/classes/general/ICrmOrderActions.php +++ b/intaro.intarocrm/classes/general/ICrmOrderActions.php @@ -200,7 +200,7 @@ class ICrmOrderActions $api = new IntaroCrm\RestApi($api_host, $api_key); $orderHistory = $api->orderHistory(); - + // pushing existing orders foreach ($orderHistory as $order) { @@ -249,7 +249,9 @@ class ICrmOrderActions if(isset($order['customer']) && $order['customer']) $userId = $order['customer']; $LID = $arFields['LID']; + $rsOrderProps = CSaleOrderPropsValue::GetList(array(), array('ORDER_ID' => $arFields['ID'])); + while ($ar = $rsOrderProps->Fetch()) { if (isset($order['deliveryAddress']) && $order['deliveryAddress']) { switch ($ar['CODE']) { @@ -403,24 +405,26 @@ class ICrmOrderActions CSaleBasket::Update($p['ID'], $arProduct); }*/ - + // orderUpdate $arFields = self::clearArr(array( - 'PRICE_DELIVERY' => $order['deliveryCost'], - 'PRICE' => $order['summ'], - 'DATE_MARKED' => $order['markDatetime'], - 'USER_ID' => $userId, //$order['customer'] - 'PAY_SYSTEM_ID' => $optionsPayTypes[$order['paymentType']], - 'PAYED' => $optionsPayment[$order['paymentStatus']], + 'PRICE_DELIVERY' => $order['deliveryCost'], + 'PRICE' => $order['summ'], + 'DATE_MARKED' => $order['markDatetime'], + 'USER_ID' => $userId, //$order['customer'] + 'PAY_SYSTEM_ID' => $optionsPayTypes[$order['paymentType']], + 'PAYED' => $optionsPayment[$order['paymentStatus']], //'PERSON_TYPE_ID' => $optionsOrderTypes[$order['orderType']], - 'DELIVERY_ID' => $optionsDelivTypes[$order['deliveryType']], - 'STATUS_ID' => $optionsPayStatuses[$order['status']] + 'DELIVERY_ID' => $optionsDelivTypes[$order['deliveryType']], + 'STATUS_ID' => $optionsPayStatuses[$order['status']], + 'REASON_CANCELED' => $order['statusComment'], + 'USER_DESCRIPTION' => $order['customerComment'], + 'COMMENTS' => $order['managerComment'] )); - $GLOBALS['FROM_HISTORY'] = true; + $GLOBALS['INTARO_CRM_FROM_HISTORY'] = true; CSaleOrder::Update($order['externalId'], $arFields); - } } @@ -550,46 +554,46 @@ class ICrmOrderActions $rsOrderProps = CSaleOrderPropsValue::GetList(array(), array('ORDER_ID' => $arFields['ID'])); while ($ar = $rsOrderProps->Fetch()) { switch ($ar['CODE']) { - case $arParams['optionsOrderProps']['index']: $resOrderDeliveryAddress['index'] = self::toJSON($ar['VALUE']); + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['index']: $resOrderDeliveryAddress['index'] = self::toJSON($ar['VALUE']); break; case 'CITY': $resOrderDeliveryAddress['city'] = self::toJSON($ar['VALUE']); break; - case $arParams['optionsOrderProps']['text']: $resOrderDeliveryAddress['text'] = self::toJSON($ar['VALUE']); + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['text']: $resOrderDeliveryAddress['text'] = self::toJSON($ar['VALUE']); break; case 'LOCATION': if(!isset($resOrderDeliveryAddress['city']) && !$resOrderDeliveryAddress['city']) { $resOrderDeliveryAddress['city'] = CSaleLocation::GetByID($ar['VALUE']); $resOrderDeliveryAddress['city'] = self::toJSON($resOrderDeliveryAddress['city']['CITY_NAME_LANG']); } break; - case $arParams['optionsOrderProps']['fio']: $contactNameArr = self::explodeFIO($ar['VALUE']); + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['fio']: $contactNameArr = self::explodeFIO($ar['VALUE']); break; - case $arParams['optionsOrderProps']['phone']: $resOrder['phone'] = $ar['VALUE']; + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['phone']: $resOrder['phone'] = $ar['VALUE']; break; - case $arParams['optionsOrderProps']['email']: $resOrder['email'] = $ar['VALUE']; + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['email']: $resOrder['email'] = $ar['VALUE']; break; } - if (count($arParams['optionsOrderProps'] > 5)) { + if (count($arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']] > 5)) { switch ($ar['CODE']) { - /*case $arParams['optionsOrderProps']['country']: $resOrderDeliveryAddress['country'] = self::toJSON($ar['VALUE']); + /*case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['country']: $resOrderDeliveryAddress['country'] = self::toJSON($ar['VALUE']); break; - case $arParams['optionsOrderProps']['region']: $resOrderDeliveryAddress['region'] = self::toJSON($ar['VALUE']); + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['region']: $resOrderDeliveryAddress['region'] = self::toJSON($ar['VALUE']); break; - case $arParams['optionsOrderProps']['city']: $resOrderDeliveryAddress['city'] = self::toJSON($ar['VALUE']); + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['city']: $resOrderDeliveryAddress['city'] = self::toJSON($ar['VALUE']); break; */ - case $arParams['optionsOrderProps']['street']: $resOrderDeliveryAddress['street'] = self::toJSON($ar['VALUE']); + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['street']: $resOrderDeliveryAddress['street'] = self::toJSON($ar['VALUE']); break; - case $arParams['optionsOrderProps']['building']: $resOrderDeliveryAddress['building'] = self::toJSON($ar['VALUE']); + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['building']: $resOrderDeliveryAddress['building'] = self::toJSON($ar['VALUE']); break; - case $arParams['optionsOrderProps']['flat']: $resOrderDeliveryAddress['flat'] = self::toJSON($ar['VALUE']); + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['flat']: $resOrderDeliveryAddress['flat'] = self::toJSON($ar['VALUE']); break; - case $arParams['optionsOrderProps']['inercomcode']: $resOrderDeliveryAddress['intercomcode'] = self::toJSON($ar['VALUE']); + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['inercomcode']: $resOrderDeliveryAddress['intercomcode'] = self::toJSON($ar['VALUE']); break; - case $arParams['optionsOrderProps']['floor']: $resOrderDeliveryAddress['floor'] = self::toJSON($ar['VALUE']); + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['floor']: $resOrderDeliveryAddress['floor'] = self::toJSON($ar['VALUE']); break; - case $arParams['optionsOrderProps']['block']: $resOrderDeliveryAddress['block'] = self::toJSON($ar['VALUE']); + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['block']: $resOrderDeliveryAddress['block'] = self::toJSON($ar['VALUE']); break; - case $arParams['optionsOrderProps']['house']: $resOrderDeliveryAddress['house'] = self::toJSON($ar['VALUE']); + case $arParams['optionsOrderProps'][$arFields['PERSON_TYPE_ID']]['house']: $resOrderDeliveryAddress['house'] = self::toJSON($ar['VALUE']); break; } } @@ -626,6 +630,7 @@ class ICrmOrderActions $createdAt = $createdAt->format('Y-m-d H:i:s'); $resOrder = array( + 'number' => $resOrder['ACCOUNT_NUMBER'], 'phone' => $resOrder['phone'], 'email' => $resOrder['email'], 'deliveryCost' => $arFields['PRICE_DELIVERY'], @@ -638,7 +643,9 @@ class ICrmOrderActions 'orderType' => $arParams['optionsOrderTypes'][$arFields['PERSON_TYPE_ID']], 'deliveryType' => $arParams['optionsDelivTypes'][$resultDeliveryTypeId], 'status' => $arParams['optionsPayStatuses'][$arFields['STATUS_ID']], - 'statusComment' => $arFields['USER_DESCRIPTION'], + 'statusComment' => $arFields['REASON_CANCELED'], + 'customerComment' => $arFields['USER_DESCRIPTION'], + 'managerComment' => $arFields['COMMENTS'], 'createdAt' => $createdAt, 'deliveryAddress' => $resOrderDeliveryAddress, 'items' => $items diff --git a/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php b/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php index 951c6d55..dca02903 100644 --- a/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php +++ b/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php @@ -13,7 +13,18 @@ class ICrmOrderEvent { 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'; - + protected static $CRM_ORDER_PROPS = 'order_props'; + + /** + * onBeforeOrderAdd + * + * @param mixed $arFields - Order arFields + */ + function onBeforeOrderAdd($arFields = array()) { + $GLOBALS['INTARO_CRM_ORDER_ADD'] = true; + return; + } + /** * onUpdateOrder * @@ -21,7 +32,10 @@ class ICrmOrderEvent { * @param mixed $arFields - Order arFields */ function onUpdateOrder($ID, $arFields = array()) { - if(isset($GLOBALS['FROM_HISTORY']) && $GLOBALS['FROM_HISTORY']) + if(isset($GLOBALS['INTARO_CRM_ORDER_ADD']) && $GLOBALS['INTARO_CRM_ORDER_ADD']) + return; + + if(isset($GLOBALS['INTARO_CRM_FROM_HISTORY']) && $GLOBALS['INTARO_CRM_FROM_HISTORY']) return; self::writeDataOnOrderCreate($ID); @@ -47,6 +61,7 @@ class ICrmOrderEvent { * @param integer $ID - Order Id */ function writeDataOnOrderCreate($ID) { + if (!CModule::IncludeModule('iblock')) { //handle err ICrmOrderActions::eventLog('ICrmOrderEvent::writeDataOnOrderCreate', 'iblock', 'module not found'); @@ -64,6 +79,9 @@ class ICrmOrderEvent { ICrmOrderActions::eventLog('ICrmOrderEvent::writeDataOnOrderCreate', 'catalog', 'module not found'); return true; } + + $GLOBALS['INTARO_CRM_ORDER_ADD'] = false; + $GLOBALS['INTARO_CRM_FROM_HISTORY'] = false; $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); @@ -74,6 +92,7 @@ class ICrmOrderEvent { $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)); + $optionsOrderProps = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_PROPS, 0)); $api = new IntaroCrm\RestApi($api_host, $api_key); @@ -82,7 +101,8 @@ class ICrmOrderEvent { 'optionsDelivTypes' => $optionsDelivTypes, 'optionsPayTypes' => $optionsPayTypes, 'optionsPayStatuses' => $optionsPayStatuses, - 'optionsPayment' => $optionsPayment + 'optionsPayment' => $optionsPayment, + 'optionsOrderProps' => $optionsOrderProps ); $arOrder = CSaleOrder::GetById($ID); @@ -190,6 +210,7 @@ class ICrmOrderEvent { ); $api->orderEdit($order); + // error pushing order if ($api->getStatusCode() != 201) diff --git a/intaro.intarocrm/install/index.php b/intaro.intarocrm/install/index.php index ae64533d..54a332ab 100755 --- a/intaro.intarocrm/install/index.php +++ b/intaro.intarocrm/install/index.php @@ -68,13 +68,6 @@ class intaro_intarocrm extends CModule { } } - if (!date_default_timezone_get()) { - if (!ini_get('date.timezone')) { - $APPLICATION->ThrowException(GetMessage("DATE_TIMEZONE_ERR")); - return false; - } - } - include($this->INSTALL_PATH . '/../classes/general/RestApi.php'); include($this->INSTALL_PATH . '/../classes/general/ICrmOrderActions.php'); include($this->INSTALL_PATH . '/../classes/general/ICMLLoader.php'); @@ -697,7 +690,7 @@ class intaro_intarocrm extends CModule { //form orderProps $dbProp = CSaleOrderProps::GetList(array(), array()); while ($arProp = $dbProp->GetNext()) { - $arResult['arProp'][$arProp['PERSON_TYPE_ID']] = $arProp; + $arResult['arProp'][$arProp['PERSON_TYPE_ID']][] = $arProp; } COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_TYPES_ARR, serialize($orderTypesArr)); @@ -876,6 +869,7 @@ class intaro_intarocrm extends CModule { } RegisterModule($this->MODULE_ID); + RegisterModuleDependences("sale", "OnSalePayOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSalePayOrder"); RegisterModuleDependences("sale", "OnSaleCancelOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSaleCancelOrder"); $this->CopyFiles(); if (isset($_POST['LOAD_NOW'])) { diff --git a/intaro.intarocrm/install/step1.php b/intaro.intarocrm/install/step1.php index 9f3ff0b9..587334c1 100755 --- a/intaro.intarocrm/install/step1.php +++ b/intaro.intarocrm/install/step1.php @@ -29,9 +29,6 @@ - - -   diff --git a/intaro.intarocrm/install/step3.php b/intaro.intarocrm/install/step3.php index c40ca3d2..81668f47 100755 --- a/intaro.intarocrm/install/step3.php +++ b/intaro.intarocrm/install/step3.php @@ -58,13 +58,12 @@ $defaultOrderProps = array( - + - - + @@ -74,14 +73,14 @@ $defaultOrderProps = array( 4) echo 'class="address-detail-' . $bitrixOrderType['ID'] . '"'; if(($countProps > 4) && (count($defaultOrderProps[$bitrixOrderType['ID']]) < 6)) echo 'style="display:none;"';?>> - + ConvertCharset($orderProp['NAME'], 'utf-8', SITE_CHARSET);; ?> diff --git a/intaro.intarocrm/lang/ru/install/step3.php b/intaro.intarocrm/lang/ru/install/step3.php index 852511e5..1d840812 100755 --- a/intaro.intarocrm/lang/ru/install/step3.php +++ b/intaro.intarocrm/lang/ru/install/step3.php @@ -12,6 +12,7 @@ $MESS ['START_3'] = 'Возобновить выгрузку'; $MESS ['MOD_NEXT_STEP'] = 'Следующий шаг'; $MESS ['MOD_PREV_STEP'] = 'Предыдущий шаг'; $MESS ['INFO_2'] = ' Задайте соответствие между полями заказа 1C-Битрикс и IntaroCRM.'; +$MESS ['ORDER_TYPE_INFO'] = 'Тип заказа:'; $MESS ['ORDER_PROPS'] = 'Настройки соответствия полей заказа IntaroCRM свойствам заказа 1С-Битрикс'; $MESS ['FIO'] = 'Ф.И.О.'; diff --git a/intaro.intarocrm/lang/ru/options.php b/intaro.intarocrm/lang/ru/options.php index 0eed5b14..442fccdb 100755 --- a/intaro.intarocrm/lang/ru/options.php +++ b/intaro.intarocrm/lang/ru/options.php @@ -50,4 +50,6 @@ $MESS ['FLOOR'] = 'Этаж'; $MESS ['BLOCK'] = 'Подъезд'; $MESS ['HOUSE'] = 'Строение / корпус'; $MESS ['ADDRESS_SHORT'] = 'Краткий адрес'; -$MESS ['ADDRESS_FULL'] = 'Детальный адрес'; \ No newline at end of file +$MESS ['ADDRESS_FULL'] = 'Детальный адрес'; + +$MESS ['ORDER_TYPE_INFO'] = 'Тип заказа:'; \ No newline at end of file diff --git a/intaro.intarocrm/options.php b/intaro.intarocrm/options.php index be1efdc6..aca82213 100755 --- a/intaro.intarocrm/options.php +++ b/intaro.intarocrm/options.php @@ -219,6 +219,7 @@ if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) { // remove depenedencies UnRegisterModuleDependences("sale", "OnOrderNewSendEmail", $mid, "ICrmOrderEvent", "onSendOrderMail"); UnRegisterModuleDependences("sale", "OnOrderUpdate", $mid, "ICrmOrderEvent", "onUpdateOrder"); + UnRegisterModuleDependences("sale", "OnBeforeOrderAdd", $mid, "ICrmOrderEvent", "onBeforeOrderAdd"); // new agent $dateAgent = new DateTime(); $intAgent = new DateInterval('PT60S'); // PT60S - 60 sec; @@ -236,7 +237,7 @@ if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) { // event dependencies RegisterModuleDependences("sale", "OnOrderNewSendEmail", $mid, "ICrmOrderEvent", "onSendOrderMail"); RegisterModuleDependences("sale", "OnOrderUpdate", $mid, "ICrmOrderEvent", "onUpdateOrder"); - + RegisterModuleDependences("sale", "OnBeforeOrderAdd", $mid, "ICrmOrderEvent", "onBeforeOrderAdd"); } $orderPropsArr = array(); @@ -576,13 +577,13 @@ if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) { - + - + @@ -599,7 +600,7 @@ if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) { From 7af1925bb289539d90433a0698cd09a0b874c05f Mon Sep 17 00:00:00 2001 From: Grisha Pomadchin Date: Thu, 19 Sep 2013 00:20:56 +0400 Subject: [PATCH 07/12] uninstallation fix --- intaro.intarocrm/install/index.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/intaro.intarocrm/install/index.php b/intaro.intarocrm/install/index.php index 54a332ab..7063e9ca 100755 --- a/intaro.intarocrm/install/index.php +++ b/intaro.intarocrm/install/index.php @@ -1035,6 +1035,9 @@ class intaro_intarocrm extends CModule { UnRegisterModuleDependences("sale", "OnSalePayOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSalePayOrder"); UnRegisterModuleDependences("sale", "OnSaleCancelOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSaleCancelOrder"); + UnRegisterModuleDependences("sale", "OnOrderNewSendEmail", $this->MODULE_ID, "ICrmOrderEvent", "onSendOrderMail"); + UnRegisterModuleDependences("sale", "OnOrderUpdate", $this->MODULE_ID, "ICrmOrderEvent", "onUpdateOrder"); + UnRegisterModuleDependences("sale", "OnBeforeOrderAdd", $this->MODULE_ID, "ICrmOrderEvent", "onBeforeOrderAdd"); if (CModule::IncludeModule("catalog")) { if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/catalog_export/' . $this->INTARO_CRM_EXPORT . '_run.php')) { $dbProfile = CCatalogExport::GetList(array(), array("FILE_NAME" => $this->INTARO_CRM_EXPORT)); From 0e5c9b5b6c39eb5676abdb75650173b9ae56b519 Mon Sep 17 00:00:00 2001 From: Grisha Pomadchin Date: Fri, 20 Sep 2013 19:12:01 +0400 Subject: [PATCH 08/12] fixes due to upload event & upload agent --- .../classes/general/ICrmOrderActions.php | 235 +++++++++++++----- .../classes/general/events/ICrmOrderEvent.php | 46 +++- intaro.intarocrm/install/index.php | 5 +- intaro.intarocrm/options.php | 18 +- 4 files changed, 211 insertions(+), 93 deletions(-) diff --git a/intaro.intarocrm/classes/general/ICrmOrderActions.php b/intaro.intarocrm/classes/general/ICrmOrderActions.php index 6f237ecc..ce126a01 100755 --- a/intaro.intarocrm/classes/general/ICrmOrderActions.php +++ b/intaro.intarocrm/classes/general/ICrmOrderActions.php @@ -13,12 +13,14 @@ class ICrmOrderActions protected static $CRM_ORDER_LAST_ID = 'order_last_id'; protected static $CRM_ORDER_SITES = 'sites_ids'; protected static $CRM_ORDER_PROPS = 'order_props'; + protected static $CRM_ORDER_FAILED_IDS = 'order_failed_ids'; /** * Mass order uploading, without repeating; always returns true, but writes error log + * @param $failed -- flag to export failed orders * @return boolean */ - public static function uploadOrders($pSize = 50) { + public static function uploadOrders($pSize = 50, $failed = false) { //COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_LAST_ID, 0); // -- for test @@ -42,11 +44,16 @@ class ICrmOrderActions $resOrders = array(); $resCustomers = array(); - + $lastUpOrderId = COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_LAST_ID, 0); $lastOrderId = 0; + $failedIds = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_FAILED_IDS, 0)); + if (!$failedIds) + $failedIds = array(); + $dbOrder = CSaleOrder::GetList(array("ID" => "ASC"), array('>ID' => $lastUpOrderId)); + $dbFailedOrder = CSaleOrder::GetList(array("ID" => "ASC"), array('ID' => $failedIds)); $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); @@ -63,50 +70,80 @@ class ICrmOrderActions $api = new IntaroCrm\RestApi($api_host, $api_key); $arParams = array( - 'optionsOrderTypes' => $optionsOrderTypes, - 'optionsDelivTypes' => $optionsDelivTypes, - 'optionsPayTypes' => $optionsPayTypes, + 'optionsOrderTypes' => $optionsOrderTypes, + 'optionsDelivTypes' => $optionsDelivTypes, + 'optionsPayTypes' => $optionsPayTypes, 'optionsPayStatuses' => $optionsPayStatuses, - 'optionsPayment' => $optionsPayment, - 'optionSites' => $optionsSites, - 'optionsOrderProps' => $optionsOrderProps + 'optionsPayment' => $optionsPayment, + 'optionSites' => $optionsSites, + 'optionsOrderProps' => $optionsOrderProps ); - //packmode - - $orderCount = 0; + if (!$failed) { - while ($arOrder = $dbOrder->GetNext()) { // here orders by id asc - - if(is_array($optionsSites)) - if(!empty($optionsSites)) - if(!in_array($arOrder['LID'], $optionsSites)) - continue; - - $result = self::orderCreate($arOrder, $api, $arParams); + //packmode - if (!$result['order'] || !$result['customer']) - continue; - - $orderCount++; - - $resOrders[] = $result['order']; - $resCustomers[] = $result['customer']; + $orderCount = 0; - $lastOrderId = $arOrder['ID']; + while ($arOrder = $dbOrder->GetNext()) { // here orders by id asc + if (is_array($optionsSites)) + if (!empty($optionsSites)) + if (!in_array($arOrder['LID'], $optionsSites)) + continue; - if($orderCount >= $pSize) { - $customers = $api->customerUpload($resCustomers); - - // error pushing customers - if ($api->getStatusCode() != 201) { - //handle err - //self::eventLog('ICrmOrderActions::uploadOrders', 'IntaroCrm\RestApi::customerUpload', $api->getLastError()); - - if($api->getStatusCode() != 460) // some orders were sent - return false; // in pack mode return errors + $result = self::orderCreate($arOrder, $api, $arParams); + + if (!$result['order'] || !$result['customer']) + continue; + + $orderCount++; + + $resOrders[] = $result['order']; + $resCustomers[] = $result['customer']; + + $lastOrderId = $arOrder['ID']; + + if ($orderCount >= $pSize) { + $customers = $api->customerUpload($resCustomers); + + // error pushing customers + if ($api->getStatusCode() != 201) { + //handle err + //self::eventLog('ICrmOrderActions::uploadOrders', 'IntaroCrm\RestApi::customerUpload', $api->getLastError()); + + if ($api->getStatusCode() != 460) // some orders were sent + return false; // in pack mode return errors + } + + $orders = $api->orderUpload($resOrders); + + // error pushing orders + if ($api->getStatusCode() != 201) { + //handle err + self::eventLog('ICrmOrderActions::uploadOrders', 'IntaroCrm\RestApi::orderUpload', $api->getLastError()); + + if ($api->getStatusCode() != 460) // some orders were sent + return false; // in pack mode return errors + } + + if ($lastOrderId) + COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_LAST_ID, $lastOrderId); + + return true; // end of pack } - + } + if (!empty($resOrders)) { + $customers = $api->customerUpload($resCustomers); + + // error pushing customers + if ($api->getStatusCode() != 201) { + //handle err + //self::eventLog('ICrmOrderActions::uploadOrders', 'IntaroCrm\RestApi::customerUpload', $api->getLastError()); + + if ($api->getStatusCode() != 460) // some orders were sent + return false; // in pack mode return errors + } + $orders = $api->orderUpload($resOrders); // error pushing orders @@ -114,42 +151,98 @@ class ICrmOrderActions //handle err self::eventLog('ICrmOrderActions::uploadOrders', 'IntaroCrm\RestApi::orderUpload', $api->getLastError()); - if($api->getStatusCode() != 460) // some orders were sent + if ($api->getStatusCode() != 460) // some orders were sent return false; // in pack mode return errors } - - if($lastOrderId) - COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_LAST_ID, $lastOrderId); + } - return true; // end of pack + if ($lastOrderId) + COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_LAST_ID, $lastOrderId); + + } else { + + // failed orders upload + $orderCount = 0; + $recOrders = array(); + + while ($arOrder = $dbFailedOrder->GetNext()) { // here orders by id asc + if (is_array($optionsSites)) + if (!empty($optionsSites)) + if (!in_array($arOrder['LID'], $optionsSites)) + continue; + + $result = self::orderCreate($arOrder, $api, $arParams); + + if (!$result['order'] || !$result['customer']) + continue; + + $orderCount++; + + $resOrders[] = $result['order']; + $resCustomers[] = $result['customer']; + + $recOrders[] = $arOrder['ID']; + + if ($orderCount >= $pSize) { + $customers = $api->customerUpload($resCustomers); + + // error pushing customers + if ($api->getStatusCode() != 201) { + //handle err + //self::eventLog('ICrmOrderActions::uploadOrders', 'IntaroCrm\RestApi::customerUpload', $api->getLastError()); + + if ($api->getStatusCode() != 460) // some orders were sent + return false; // in pack mode return errors + } + + $orders = $api->orderUpload($resOrders); + + // error pushing orders + if ($api->getStatusCode() != 201) { + //handle err + self::eventLog('ICrmOrderActions::uploadOrders', 'IntaroCrm\RestApi::orderUpload', $api->getLastError()); + + if ($api->getStatusCode() != 460) // some orders were sent + return false; // in pack mode return errors + } + + if (!empty($recOrders)) { + $failedIds = array_merge(array_diff($failedIds, $recOrders)); // clear success ids + COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_FAILED_IDS, serialize($failedIds)); + } + + return true; // end of pack + } + } + if (!empty($resOrders)) { + $customers = $api->customerUpload($resCustomers); + + // error pushing customers + if ($api->getStatusCode() != 201) { + //handle err + //self::eventLog('ICrmOrderActions::uploadOrders', 'IntaroCrm\RestApi::customerUpload', $api->getLastError()); + + if ($api->getStatusCode() != 460) // some orders were sent + return false; // in pack mode return errors + } + + $orders = $api->orderUpload($resOrders); + + // error pushing orders + if ($api->getStatusCode() != 201) { + //handle err + self::eventLog('ICrmOrderActions::uploadOrders', 'IntaroCrm\RestApi::orderUpload', $api->getLastError()); + + if ($api->getStatusCode() != 460) // some orders were sent + return false; // in pack mode return errors + } + } + + if (!empty($recOrders)) { + $failedIds = array_merge(array_diff($failedIds, $recOrders)); // clear success ids + COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_FAILED_IDS, serialize($failedIds)); } } - if (!empty($resOrders)) { - $customers = $api->customerUpload($resCustomers); - - // error pushing customers - if ($api->getStatusCode() != 201) { - //handle err - //self::eventLog('ICrmOrderActions::uploadOrders', 'IntaroCrm\RestApi::customerUpload', $api->getLastError()); - - if ($api->getStatusCode() != 460) // some orders were sent - return false; // in pack mode return errors - } - - $orders = $api->orderUpload($resOrders); - - // error pushing orders - if ($api->getStatusCode() != 201) { - //handle err - self::eventLog('ICrmOrderActions::uploadOrders', 'IntaroCrm\RestApi::orderUpload', $api->getLastError()); - - if ($api->getStatusCode() != 460) // some orders were sent - return false; // in pack mode return errors - } - } - - if($lastOrderId) - COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_LAST_ID, $lastOrderId); return true; //all ok! } @@ -456,6 +549,10 @@ class ICrmOrderActions public static function uploadOrdersAgent() { self::uploadOrders(); + $failedIds = unserialize(COption::GetOptionString(self::$MODULE_ID, self::$CRM_ORDER_FAILED_IDS, 0)); + if(is_array($failedIds) && !empty($failedIds)) + self::uploadOrders(50, true); // upload failed orders + return 'ICrmOrderActions::uploadOrdersAgent();'; } diff --git a/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php b/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php index dca02903..cf12c209 100644 --- a/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php +++ b/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php @@ -14,6 +14,7 @@ class ICrmOrderEvent { protected static $CRM_PAYMENT = 'payment_arr'; //order payment Y/N protected static $CRM_ORDER_LAST_ID = 'order_last_id'; protected static $CRM_ORDER_PROPS = 'order_props'; + protected static $CRM_ORDER_FAILED_IDS = 'order_failed_ids'; /** * onBeforeOrderAdd @@ -31,14 +32,18 @@ class ICrmOrderEvent { * @param mixed $ID - Order id * @param mixed $arFields - Order arFields */ - function onUpdateOrder($ID, $arFields = array()) { + function onBeforeUpdateOrder($ID, $arFields) { + if(isset($GLOBALS['INTARO_CRM_ORDER_ADD']) && $GLOBALS['INTARO_CRM_ORDER_ADD']) return; if(isset($GLOBALS['INTARO_CRM_FROM_HISTORY']) && $GLOBALS['INTARO_CRM_FROM_HISTORY']) return; - self::writeDataOnOrderCreate($ID); + if(isset($arFields['LOCKED_BY']) && $arFields['LOCKED_BY']) + return; + + self::writeDataOnOrderCreate($ID, $arFields); } @@ -51,8 +56,17 @@ class ICrmOrderEvent { * @param mixed $arFields - Order arFields for sending template */ function onSendOrderMail($ID, &$eventName, &$arFields) { - self::writeDataOnOrderCreate($ID); - COption::SetOptionString(self::$MODULE_ID, self::$CRM_ORDER_LAST_ID, $ID); + 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)); + } } /** @@ -60,7 +74,7 @@ class ICrmOrderEvent { * * @param integer $ID - Order Id */ - function writeDataOnOrderCreate($ID) { + function writeDataOnOrderCreate($ID, $arFields) { if (!CModule::IncludeModule('iblock')) { //handle err @@ -96,21 +110,37 @@ class ICrmOrderEvent { $api = new IntaroCrm\RestApi($api_host, $api_key); - $arParams = array( + $arParams = ICrmOrderActions::clearArr(array( 'optionsOrderTypes' => $optionsOrderTypes, 'optionsDelivTypes' => $optionsDelivTypes, 'optionsPayTypes' => $optionsPayTypes, 'optionsPayStatuses' => $optionsPayStatuses, 'optionsPayment' => $optionsPayment, 'optionsOrderProps' => $optionsOrderProps - ); + )); $arOrder = CSaleOrder::GetById($ID); + + if (is_array($arFields) && !empty($arFields)) { + $arFieldsNew = array( + 'USER_ID' => $arOrder['USER_ID'], + 'ID' => $ID, + 'PERSON_TYPE_ID' => $arOrder['PERSON_TYPE_ID'], + 'CANCELED' => $arOrder['CANCELED'], + 'STATUS_ID' => $arOrder['STATUS_ID'], + 'DATE_INSERT' => $arOrder['DATE_INSERT'], + 'LID' => $arOrder['LID'] + ); + + $arFieldsNew = array_merge($arFieldsNew, $arFields); + $arOrder = $arFieldsNew; + } + $result = ICrmOrderActions::orderCreate($arOrder, $api, $arParams, true); if(!$result) { ICrmOrderActions::eventLog('ICrmOrderEvent::writeDataOnOrderCreate', 'ICrmOrderActions::orderCreate', 'error during creating order'); - return true; + return false; } return true; diff --git a/intaro.intarocrm/install/index.php b/intaro.intarocrm/install/index.php index 7063e9ca..6587d9ce 100755 --- a/intaro.intarocrm/install/index.php +++ b/intaro.intarocrm/install/index.php @@ -33,6 +33,7 @@ class intaro_intarocrm extends CModule { var $CRM_ORDER_SITES = 'sites_ids'; var $CRM_ORDER_PROPS = 'order_props'; var $CRM_ORDER_DISCHARGE = 'order_discharge'; + var $CRM_ORDER_FAILED_IDS = 'order_failed_ids'; var $INSTALL_PATH; function intaro_intarocrm() { @@ -700,6 +701,7 @@ class intaro_intarocrm extends CModule { COption::SetOptionString($this->MODULE_ID, $this->CRM_PAYMENT, serialize($paymentArr)); COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_LAST_ID, 0); COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_DISCHARGE, 0); + COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_FAILED_IDS, serialize(array())); $APPLICATION->IncludeAdminFile( GetMessage('MODULE_INSTALL_TITLE'), @@ -1032,11 +1034,12 @@ class intaro_intarocrm extends CModule { COption::RemoveOption($this->MODULE_ID, $this->CRM_ORDER_SITES); COption::RemoveOption($this->MODULE_ID, $this->CRM_ORDER_PROPS); COption::RemoveOption($this->MODULE_ID, $this->CRM_ORDER_DISCHARGE); + COption::RemoveOption($this->MODULE_ID, $this->CRM_ORDER_FAILED_IDS); UnRegisterModuleDependences("sale", "OnSalePayOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSalePayOrder"); UnRegisterModuleDependences("sale", "OnSaleCancelOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSaleCancelOrder"); UnRegisterModuleDependences("sale", "OnOrderNewSendEmail", $this->MODULE_ID, "ICrmOrderEvent", "onSendOrderMail"); - UnRegisterModuleDependences("sale", "OnOrderUpdate", $this->MODULE_ID, "ICrmOrderEvent", "onUpdateOrder"); + UnRegisterModuleDependences("sale", "OnBeforeOrderUpdate", $this->MODULE_ID, "ICrmOrderEvent", "onBeforeUpdateOrder"); UnRegisterModuleDependences("sale", "OnBeforeOrderAdd", $this->MODULE_ID, "ICrmOrderEvent", "onBeforeOrderAdd"); if (CModule::IncludeModule("catalog")) { if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/catalog_export/' . $this->INTARO_CRM_EXPORT . '_run.php')) { diff --git a/intaro.intarocrm/options.php b/intaro.intarocrm/options.php index aca82213..bebd3615 100755 --- a/intaro.intarocrm/options.php +++ b/intaro.intarocrm/options.php @@ -218,25 +218,13 @@ if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) { if (($orderDischarge != $previousDischarge) && ($orderDischarge == 0)) { // remove depenedencies UnRegisterModuleDependences("sale", "OnOrderNewSendEmail", $mid, "ICrmOrderEvent", "onSendOrderMail"); - UnRegisterModuleDependences("sale", "OnOrderUpdate", $mid, "ICrmOrderEvent", "onUpdateOrder"); + UnRegisterModuleDependences("sale", "OnBeforeOrderUpdate", $mid, "ICrmOrderEvent", "onBeforeUpdateOrder"); UnRegisterModuleDependences("sale", "OnBeforeOrderAdd", $mid, "ICrmOrderEvent", "onBeforeOrderAdd"); - // new agent - $dateAgent = new DateTime(); - $intAgent = new DateInterval('PT60S'); // PT60S - 60 sec; - $dateAgent->add($intAgent); - CAgent::AddAgent( - "ICrmOrderActions::uploadOrdersAgent();", $mid, "N", 600, // interval - 10 mins - $dateAgent->format('d.m.Y H:i:s'), // date of first check - "Y", // агент активен - $dateAgent->format('d.m.Y H:i:s'), // date of first start - 30 - ); + } else if (($orderDischarge != $previousDischarge) && ($orderDischarge == 1)) { - // remove agent - CAgent::RemoveAgent("ICrmOrderActions::uploadOrdersAgent();", $mid); // event dependencies RegisterModuleDependences("sale", "OnOrderNewSendEmail", $mid, "ICrmOrderEvent", "onSendOrderMail"); - RegisterModuleDependences("sale", "OnOrderUpdate", $mid, "ICrmOrderEvent", "onUpdateOrder"); + RegisterModuleDependences("sale", "OnBeforeOrderUpdate", $mid, "ICrmOrderEvent", "onBeforeUpdateOrder"); RegisterModuleDependences("sale", "OnBeforeOrderAdd", $mid, "ICrmOrderEvent", "onBeforeOrderAdd"); } From 6c2552881b47159a10efe5b60a8313ec7b3fecc2 Mon Sep 17 00:00:00 2001 From: Grisha Pomadchin Date: Sun, 22 Sep 2013 20:03:35 +0400 Subject: [PATCH 09/12] catalog export fix --- .../classes/general/ICMLLoader.php | 85 ++++++++++--------- .../lang/ru/classes/general/ICMLLoader.php | 2 + 2 files changed, 46 insertions(+), 41 deletions(-) create mode 100644 intaro.intarocrm/lang/ru/classes/general/ICMLLoader.php diff --git a/intaro.intarocrm/classes/general/ICMLLoader.php b/intaro.intarocrm/classes/general/ICMLLoader.php index 18715118..b28e36ce 100644 --- a/intaro.intarocrm/classes/general/ICMLLoader.php +++ b/intaro.intarocrm/classes/general/ICMLLoader.php @@ -1,33 +1,36 @@ iblocks) < count($this->articleProperties)) return false; - + $this->PrepareFile(); $this->PreWriteCatalog(); - + $categories = $this->GetCategories(); - + $this->WriteCategories($categories); - + $this->PreWriteOffers(); $this->BuildOffers($categories); $this->PostWriteOffers(); @@ -36,9 +39,9 @@ class ICMLLoader { $this->CloseFile(); return true; - + } - + protected function PrepareValue($text) { $newText = $this->application->ConvertCharset($text, LANG_CHARSET, $this->encoding); @@ -46,7 +49,7 @@ class ICMLLoader { $newText = str_replace("&", "&", $newText); return $newText; } - + protected function PrepareFile() { $fullFilename = $_SERVER["DOCUMENT_ROOT"] . $this->filename; @@ -57,7 +60,7 @@ class ICMLLoader { else return true; } - + protected function PreWriteCatalog() { @fwrite($this->fp, "PrepareValue(Date("Y-m-d H:i:s")) . "\">\n"); @@ -68,7 +71,7 @@ class ICMLLoader { @fwrite($this->fp, "".$this->PrepareValue(COption::GetOptionString("main", "site_name", ""))."\n"); } - + protected function WriteCategories($categories) { $stringCategories = ""; @@ -83,33 +86,33 @@ class ICMLLoader { { @fwrite($this->fp, "\n"); } - + protected function PostWriteOffers() { @fwrite($this->fp, "\n"); } - + protected function WriteOffers($offers) { @fwrite($this->fp, $offers); } - + protected function PostWriteCatalog() { @fwrite($this->fp, "\n"); @fwrite($this->fp, "\n"); } - + protected function CloseFile() { @fclose($this->fp); } - - + + protected function GetCategories() { $categories = array(); - foreach ($this->iblocks as $id) + foreach ($this->iblocks as $id) { $filter = Array( "IBLOCK_ID" => $id, @@ -128,18 +131,18 @@ class ICMLLoader { if (!$hasCategories) { $iblock = CIBlock::GetByID($id)->Fetch(); - + $arRes = Array(); $arRes['ID'] = $this->mainSection + $id; $arRes['IBLOCK_SECTION_ID'] = 0; - $arRes['NAME'] = "Основной раздел каталога " . $iblock['NAME']; + $arRes['NAME'] = sprintf(GetMessage('ROOT_CATEGORY_FOR_CATALOG'), $iblock['NAME']); $categories[$arRes['ID']] = $arRes; } } return $categories; } - + protected function BuildCategory($arCategory) { return " @@ -150,12 +153,12 @@ class ICMLLoader { . ">" . $this->PrepareValue($arCategory["NAME"]) . "\n"; - + } - + protected function BuildOffers(&$allCategories) { - foreach ($this->iblocks as $key => $id) + foreach ($this->iblocks as $key => $id) { $iblock['IBLOCK_DB'] = CIBlock::GetByID($id)->Fetch(); @@ -177,10 +180,10 @@ class ICMLLoader { "LANG_DIR", "DETAIL_PAGE_URL" ); - + if (isset($this->articleProperties[$id])) $arSelect[] = "PROPERTY_" . $this->articleProperties[$id]; - + $filter = Array ( "IBLOCK_ID" => $id, @@ -192,7 +195,7 @@ class ICMLLoader { $dbResProducts = CIBlockElement::GetList(array(), $filter, false, false, $arSelect); $stringOffers = ""; while ($product = $dbResProducts->GetNextElement()) { - + $product = $product->GetFields(); // Get categories in InfoBlock @@ -205,16 +208,16 @@ class ICMLLoader { ); } if (count($categories) == 0) { - + $catId = $this->mainSection + $id; $categories[$catId] = $allCategories[$catId]; } - + $existOffer = false; if (!empty($iblockOffer['IBLOCK_ID'])) { - - + + $arFilterOffer = Array ( 'IBLOCK_ID' => $iblockOffer['IBLOCK_ID'], 'PROPERTY_' . $iblockOffer['SKU_PROPERTY_ID'] => $product["ID"] @@ -252,7 +255,7 @@ class ICMLLoader { } } if (!$existOffer) { - + $offer = CCatalogProduct::GetByID($product['ID']); $product['QUANTITY'] = $offer["QUANTITY"]; @@ -266,15 +269,15 @@ class ICMLLoader { $stringOffers .= $this->BuildOffer($product, $categories, $iblock); } - + $count++; if ($count == 1000) { $this->WriteOffers($stringOffers); $stringOffers = ""; } - + } - + if ($stringOffers != "") { $this->WriteOffers($stringOffers); $stringOffers = ""; @@ -282,15 +285,15 @@ class ICMLLoader { } } - - + + protected function BuildOffer($arOffer, $categories, $iblock) { $offer = ""; $offer .= "PrepareValue($arOffer["ID"]) . "\" ". "productId=\"" . $this->PrepareValue($arOffer["PRODUCT_ID"]) . "\" ". "quantity=\"" . $this->PrepareValue(DoubleVal($arOffer['QUANTITY'])) . "\">\n"; - + $offer .= "http://" . $this->PrepareValue($iblock['IBLOCK_DB']['SERVER_NAME']) . $this->PrepareValue($arOffer['DETAIL_PAGE_URL']) . "\n"; $offer .= "" . $this->PrepareValue($arOffer['PRICE']) . "\n"; @@ -329,5 +332,5 @@ class ICMLLoader { $offer.= "\n"; return $offer; } - + } \ No newline at end of file diff --git a/intaro.intarocrm/lang/ru/classes/general/ICMLLoader.php b/intaro.intarocrm/lang/ru/classes/general/ICMLLoader.php new file mode 100644 index 00000000..e21acd04 --- /dev/null +++ b/intaro.intarocrm/lang/ru/classes/general/ICMLLoader.php @@ -0,0 +1,2 @@ + Date: Sun, 22 Sep 2013 21:28:28 +0400 Subject: [PATCH 10/12] event fixes --- .../classes/general/events/ICrmOrderEvent.php | 14 +++++++------- intaro.intarocrm/install/index.php | 2 +- intaro.intarocrm/options.php | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php b/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php index cf12c209..cead90e0 100644 --- a/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php +++ b/intaro.intarocrm/classes/general/events/ICrmOrderEvent.php @@ -32,7 +32,7 @@ class ICrmOrderEvent { * @param mixed $ID - Order id * @param mixed $arFields - Order arFields */ - function onBeforeUpdateOrder($ID, $arFields) { + function onUpdateOrder($ID, $arFields) { if(isset($GLOBALS['INTARO_CRM_ORDER_ADD']) && $GLOBALS['INTARO_CRM_ORDER_ADD']) return; @@ -123,13 +123,13 @@ class ICrmOrderEvent { if (is_array($arFields) && !empty($arFields)) { $arFieldsNew = array( - 'USER_ID' => $arOrder['USER_ID'], - 'ID' => $ID, + 'USER_ID' => $arOrder['USER_ID'], + 'ID' => $ID, 'PERSON_TYPE_ID' => $arOrder['PERSON_TYPE_ID'], - 'CANCELED' => $arOrder['CANCELED'], - 'STATUS_ID' => $arOrder['STATUS_ID'], - 'DATE_INSERT' => $arOrder['DATE_INSERT'], - 'LID' => $arOrder['LID'] + 'CANCELED' => $arOrder['CANCELED'], + 'STATUS_ID' => $arOrder['STATUS_ID'], + 'DATE_INSERT' => $arOrder['DATE_INSERT'], + 'LID' => $arOrder['LID'] ); $arFieldsNew = array_merge($arFieldsNew, $arFields); diff --git a/intaro.intarocrm/install/index.php b/intaro.intarocrm/install/index.php index 6587d9ce..d178d6fa 100755 --- a/intaro.intarocrm/install/index.php +++ b/intaro.intarocrm/install/index.php @@ -1039,7 +1039,7 @@ class intaro_intarocrm extends CModule { UnRegisterModuleDependences("sale", "OnSalePayOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSalePayOrder"); UnRegisterModuleDependences("sale", "OnSaleCancelOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSaleCancelOrder"); UnRegisterModuleDependences("sale", "OnOrderNewSendEmail", $this->MODULE_ID, "ICrmOrderEvent", "onSendOrderMail"); - UnRegisterModuleDependences("sale", "OnBeforeOrderUpdate", $this->MODULE_ID, "ICrmOrderEvent", "onBeforeUpdateOrder"); + UnRegisterModuleDependences("sale", "OnOrderUpdate", $this->MODULE_ID, "ICrmOrderEvent", "onUpdateOrder"); UnRegisterModuleDependences("sale", "OnBeforeOrderAdd", $this->MODULE_ID, "ICrmOrderEvent", "onBeforeOrderAdd"); if (CModule::IncludeModule("catalog")) { if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/catalog_export/' . $this->INTARO_CRM_EXPORT . '_run.php')) { diff --git a/intaro.intarocrm/options.php b/intaro.intarocrm/options.php index bebd3615..cb45c217 100755 --- a/intaro.intarocrm/options.php +++ b/intaro.intarocrm/options.php @@ -218,13 +218,13 @@ if (isset($_POST['Update']) && ($_POST['Update'] == 'Y')) { if (($orderDischarge != $previousDischarge) && ($orderDischarge == 0)) { // remove depenedencies UnRegisterModuleDependences("sale", "OnOrderNewSendEmail", $mid, "ICrmOrderEvent", "onSendOrderMail"); - UnRegisterModuleDependences("sale", "OnBeforeOrderUpdate", $mid, "ICrmOrderEvent", "onBeforeUpdateOrder"); + UnRegisterModuleDependences("sale", "OnOrderUpdate", $mid, "ICrmOrderEvent", "onUpdateOrder"); UnRegisterModuleDependences("sale", "OnBeforeOrderAdd", $mid, "ICrmOrderEvent", "onBeforeOrderAdd"); } else if (($orderDischarge != $previousDischarge) && ($orderDischarge == 1)) { // event dependencies RegisterModuleDependences("sale", "OnOrderNewSendEmail", $mid, "ICrmOrderEvent", "onSendOrderMail"); - RegisterModuleDependences("sale", "OnBeforeOrderUpdate", $mid, "ICrmOrderEvent", "onBeforeUpdateOrder"); + RegisterModuleDependences("sale", "OnOrderUpdate", $mid, "ICrmOrderEvent", "onUpdateOrder"); RegisterModuleDependences("sale", "OnBeforeOrderAdd", $mid, "ICrmOrderEvent", "onBeforeOrderAdd"); } From 78087575a8c0ab145b59b8359b026406d8a55cca Mon Sep 17 00:00:00 2001 From: Grisha Pomadchin Date: Sun, 22 Sep 2013 22:51:12 +0400 Subject: [PATCH 11/12] lang fix --- intaro.intarocrm/lang/ru/install/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intaro.intarocrm/lang/ru/install/index.php b/intaro.intarocrm/lang/ru/install/index.php index 9d10c0ef..a204a9dc 100755 --- a/intaro.intarocrm/lang/ru/install/index.php +++ b/intaro.intarocrm/lang/ru/install/index.php @@ -15,7 +15,7 @@ $MESS ['ERR_ARTICLE_IBLOCK'] = 'Не установлены артикулы'; $MESS ['DATE_TIMEZONE_ERR'] = 'Не указана временная зона в настройках php.'; $MESS ['ORDER_PROPS'] = 'Настройки соответствия полей заказа IntaroCRM свойствам заказа 1С-Битрикс'; -$MESS ['FIO'] = 'ф.И.О.'; +$MESS ['FIO'] = 'Ф.И.О.'; $MESS ['ZIP'] = 'Индекс'; $MESS ['ADDRESS'] = 'Адрес (строкой)'; $MESS ['PHONE'] = 'Телефон'; From f63a3271a6b114f78ea99630d97e59bb347d40de Mon Sep 17 00:00:00 2001 From: Grisha Pomadchin Date: Sun, 22 Sep 2013 23:12:29 +0400 Subject: [PATCH 12/12] number fix --- intaro.intarocrm/classes/general/ICrmOrderActions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intaro.intarocrm/classes/general/ICrmOrderActions.php b/intaro.intarocrm/classes/general/ICrmOrderActions.php index ce126a01..07d36601 100755 --- a/intaro.intarocrm/classes/general/ICrmOrderActions.php +++ b/intaro.intarocrm/classes/general/ICrmOrderActions.php @@ -727,7 +727,7 @@ class ICrmOrderActions $createdAt = $createdAt->format('Y-m-d H:i:s'); $resOrder = array( - 'number' => $resOrder['ACCOUNT_NUMBER'], + 'number' => $arFields['ACCOUNT_NUMBER'], 'phone' => $resOrder['phone'], 'email' => $resOrder['email'], 'deliveryCost' => $arFields['PRICE_DELIVERY'],