<?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'; /** * onUpdateOrder * * @param mixed $ID - Order id * @param mixed $arFields - Order arFields */ function onUpdateOrder($ID, $arFields = array()) { //self::writeDataOnOrderCreate($ID); } /** * 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) { self::writeDataOnOrderCreate($ID); } /** * writeDataOnOrderCreate via api * * @param integer $ID - Order Id */ function writeDataOnOrderCreate($ID) { 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; } $api_host = COption::GetOptionString(self::$MODULE_ID, self::$CRM_API_HOST_OPTION, 0); $api_key = COption::GetOptionString(Iself::$MODULE_ID, self::$CRM_API_KEY_OPTION, 0); //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)); $api = new IntaroCrm\RestApi($api_host, $api_key); $arParams = array( 'optionsOrderTypes' => $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; } 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; } }