diff --git a/classes/modules/RetailCRM/__admin.php b/classes/modules/RetailCRM/__admin.php old mode 100644 new mode 100755 index a35a6c7..936c7fc --- a/classes/modules/RetailCRM/__admin.php +++ b/classes/modules/RetailCRM/__admin.php @@ -23,8 +23,7 @@ abstract class __RetailCRM_adm extends baseModuleAdmin if (!empty($apiKey) && !empty($crmUrl)) { $api = new RCrmProxy( $config->get('retailcrm', 'crmUrl'), - $config->get('retailcrm', 'apiKey'), - __DIR__ . '/../../../retailcrm.error.log' + $config->get('retailcrm', 'apiKey') ); if($api->paymentTypesList() !== false) { @@ -36,7 +35,7 @@ abstract class __RetailCRM_adm extends baseModuleAdmin $umiPaymentTypes = new selector('objects'); $umiPaymentTypes->types('object-type')->name('emarket', 'payment'); - $map = $this->getRelationMap($config->get('retailcrm', 'orderPaymentTypeMap')); + $map = RCrmHelpers::getRelationMap($config->get('retailcrm', 'orderPaymentTypeMap')); $orderPaymentsMapping = array(); foreach ($umiPaymentTypes->result() as $umiPaymentType) { @@ -46,7 +45,7 @@ abstract class __RetailCRM_adm extends baseModuleAdmin $translations['order-payment-type-' . $umiPaymentTypeId] = $umiPaymentTypeName; $orderPaymentsMapping['select:order-payment-type-' . $umiPaymentTypeId] = array(); - $orderPaymentsMapping['select:order-payment-type-' . $umiPaymentTypeId]['value'] = $this->getRelationByMap($map, + $orderPaymentsMapping['select:order-payment-type-' . $umiPaymentTypeId]['value'] = RCrmHelpers::getRelationByMap($map, $umiPaymentTypeId); $orderPaymentsMapping['select:order-payment-type-' . $umiPaymentTypeId]['none'] = ''; @@ -63,7 +62,7 @@ abstract class __RetailCRM_adm extends baseModuleAdmin $umiDeliveryTypes = new selector('objects'); $umiDeliveryTypes->types('object-type')->name('emarket', 'delivery'); - $map = $this->getRelationMap($config->get('retailcrm', 'orderDeliveryTypeMap')); + $map = RCrmHelpers::getRelationMap($config->get('retailcrm', 'orderDeliveryTypeMap')); $orderDeliveryTypesMapping = array(); foreach ($umiDeliveryTypes as $umiDeliveryType) { @@ -73,7 +72,7 @@ abstract class __RetailCRM_adm extends baseModuleAdmin $translations['order-delivery-type-' . $umiDeliveryTypeId] = $umiDeliveryTypeName; $orderDeliveryTypesMapping['select:order-delivery-type-' . $umiDeliveryTypeId] = array(); - $orderDeliveryTypesMapping['select:order-delivery-type-' . $umiDeliveryTypeId]['value'] = $this->getRelationByMap($map, + $orderDeliveryTypesMapping['select:order-delivery-type-' . $umiDeliveryTypeId]['value'] = RCrmHelpers::getRelationByMap($map, $umiDeliveryTypeId); $orderDeliveryTypesMapping['select:order-delivery-type-' . $umiDeliveryTypeId]['none'] = ''; @@ -91,7 +90,7 @@ abstract class __RetailCRM_adm extends baseModuleAdmin $umiPaymentStatuses = new selector('objects'); $umiPaymentStatuses->types('object-type')->name('emarket', 'order_payment_status'); - $map = $this->getRelationMap($config->get('retailcrm', 'orderPaymentStatusMap')); + $map = RCrmHelpers::getRelationMap($config->get('retailcrm', 'orderPaymentStatusMap')); $orderPaymentStatusesMapping = array(); foreach ($umiPaymentStatuses->result() as $umiPaymentStatus) { @@ -101,7 +100,7 @@ abstract class __RetailCRM_adm extends baseModuleAdmin $translations['order-payment-status-' . $umiPaymentStatusId] = $umiPaymentStatusName; $orderPaymentStatusesMapping['select:order-payment-status-' . $umiPaymentStatusId] = array(); - $orderPaymentStatusesMapping['select:order-payment-status-' . $umiPaymentStatusId]['value'] = $this->getRelationByMap($map, + $orderPaymentStatusesMapping['select:order-payment-status-' . $umiPaymentStatusId]['value'] = RCrmHelpers::getRelationByMap($map, $umiPaymentStatusId); $orderPaymentStatusesMapping['select:order-payment-status-' . $umiPaymentStatusId]['none'] = ''; @@ -118,26 +117,29 @@ abstract class __RetailCRM_adm extends baseModuleAdmin $umiOrderStatuses = new selector('objects'); $umiOrderStatuses->types('object-type')->name('emarket', 'order_status'); - $map = $this->getRelationMap($config->get('retailcrm', 'orderStatusMap')); + $map = RCrmHelpers::getRelationMap($config->get('retailcrm', 'orderStatusMap')); $params['orderStatusesMapping'] = array(); foreach ($umiOrderStatuses->result() as $umiOrderStatus) { - $translations['order-status-' . $umiOrderStatus->getPropByName('codename')->getValue()] = $umiOrderStatus->getName(); + $codeName = $umiOrderStatus->getValue('codename'); - $params['orderStatusesMapping']['select:order-status-' . $umiOrderStatus->getPropByName('codename')->getValue()] = array(); - $params['orderStatusesMapping']['select:order-status-' . $umiOrderStatus->getPropByName('codename')->getValue()]['value'] = $this->getRelationByMap($map, - $umiOrderStatus->getPropByName('codename')->getValue()); + $translations['order-status-' . $codeName] = $umiOrderStatus->getName(); + + $params['orderStatusesMapping']['select:order-status-' . $codeName] = array(); + $params['orderStatusesMapping']['select:order-status-' . $codeName]['value'] = RCrmHelpers::getRelationByMap($map, $codeName); + $params['orderStatusesMapping']['select:order-status-' . $codeName]['none'] = ''; - $params['orderStatusesMapping']['select:order-status-' . $umiOrderStatus->getPropByName('codename')->getValue()]['none'] = ''; foreach ($crmOrderStatuses as $crmOrderStatus) { - $params['orderStatusesMapping']['select:order-status-' . $umiOrderStatus->getPropByName('codename')->getValue()][$crmOrderStatus['code']] = $crmOrderStatus['name']; + $params['orderStatusesMapping']['select:order-status-' . $codeName][$crmOrderStatus['code']] = $crmOrderStatus['name']; } } $params['guidesMapping']['select:country'] = array(); $params['guidesMapping']['select:country']['value'] = $config->get('retailcrm', 'countryGuideId'); $params['guidesMapping']['select:country']['none'] = ''; + $objectTypes = umiObjectTypesCollection::getInstance(); + foreach ($objectTypes->getGuidesList() as $guideId => $guideName) { $params['guidesMapping']['select:country'][$guideId] = $guideName; } diff --git a/classes/modules/RetailCRM/__events.php b/classes/modules/RetailCRM/__events.php old mode 100644 new mode 100755 diff --git a/classes/modules/RetailCRM/class.php b/classes/modules/RetailCRM/class.php old mode 100644 new mode 100755 index 66f0636..546bbc9 --- a/classes/modules/RetailCRM/class.php +++ b/classes/modules/RetailCRM/class.php @@ -4,32 +4,33 @@ class RetailCRM extends def_module { { parent::__construct(); - if (cmsController::getInstance()->getCurrentMode() == "admin") { - $this->__loadLib("__admin.php"); - $this->__implement("__RetailCRM_adm"); + if (cmsController::getInstance()->getCurrentMode() == 'admin') { + $this->__loadLib('__admin.php'); + $this->__implement('__RetailCRM_adm'); } - - $this->__loadLib("../emarket/includes.php"); + + // Подключаем модуль интернет магазина + cmsController::getInstance()->getModule("emarket"); // RetailCRM classes - $this->__loadLib("classes/retailcrm/RCrmActions.php"); - $this->__loadLib("classes/retailcrm/RCrmApiClient.php"); - $this->__loadLib("classes/retailcrm/RCrmApiResponse.php"); - $this->__loadLib("classes/retailcrm/RCrmHistory.php"); - $this->__loadLib("classes/retailcrm/RCrmHttpClient.php"); - $this->__loadLib("classes/retailcrm/RCrmIcml.php"); - $this->__loadLib("classes/retailcrm/RCrmProxy.php"); + $this->__loadLib('classes/retailcrm/RCrmActions.php'); + $this->__loadLib('classes/retailcrm/RCrmApiClient.php'); + $this->__loadLib('classes/retailcrm/RCrmApiResponse.php'); + $this->__loadLib('classes/retailcrm/RCrmHistory.php'); + $this->__loadLib('classes/retailcrm/RCrmHttpClient.php'); + $this->__loadLib('classes/retailcrm/RCrmIcml.php'); + $this->__loadLib('classes/retailcrm/RCrmProxy.php'); // Exceptions - $this->__loadLib("classes/retailcrm/RCrmCurlException.php"); - $this->__loadLib("classes/retailcrm/RCrmJsonException.php"); + $this->__loadLib('classes/retailcrm/RCrmCurlException.php'); + $this->__loadLib('classes/retailcrm/RCrmJsonException.php'); // Helpers - $this->__loadLib("classes/retailcrm/RCrmHelpers.php"); - $this->__implement("RCrmHelpers"); + $this->__loadLib('classes/retailcrm/RCrmHelpers.php'); + $this->__implement('RCrmHelpers'); // Events - $this->__loadLib("__events.php"); - $this->__implement("__RetailCRM_events"); + $this->__loadLib('__events.php'); + $this->__implement('__RetailCRM_events'); } } \ No newline at end of file diff --git a/classes/modules/RetailCRM/classes/retailcrm/RCrmActions.php b/classes/modules/RetailCRM/classes/retailcrm/RCrmActions.php old mode 100644 new mode 100755 index f98996c..25c9ada --- a/classes/modules/RetailCRM/classes/retailcrm/RCrmActions.php +++ b/classes/modules/RetailCRM/classes/retailcrm/RCrmActions.php @@ -2,75 +2,82 @@ class RCrmActions { - public static function orderSend($orderId, $mode = 'create') { + /** + * @param int $orderId + */ + public static function orderSend($orderId) { /** @var RCrmApiClient $api */ $objects = umiObjectsCollection::getInstance(); - $order = order::get($orderId); + $orderObj = order::get($orderId); - if (!$order) { + if (!$orderObj) { return; } // Проверяем был ли вызов из апи $regedit = regedit::getInstance(); - $time = $regedit->getVal('//modules/RetailCRM/IgnoreObjectUpdateEvent/' . $order->getObject()->getId()); - if ($time == $order->getObject()->getUpdateTime() OR $time + 1 == $order->getObject()->getUpdateTime()) { + $time = $regedit->getVal('//modules/RetailCRM/IgnoreObjectUpdateEvent/' . $orderObj->getObject()->getId()); + if ($time == $orderObj->getObject()->getUpdateTime() OR $time + 1 == $orderObj->getObject()->getUpdateTime()) { return; } $config = mainConfiguration::getInstance(); - $umiOrderStatusCode = order::getCodeByStatus($order->getOrderStatus()); + $umiOrderStatusCode = order::getCodeByStatus($orderObj->getOrderStatus()); - $retailcrm = new RetailCRM; - - $relationMap = $retailcrm->getRelationMap($config->get('retailcrm', 'orderStatusMap')); - $crmOrderStatusCode = $retailcrm->getRelationByMap($relationMap, $umiOrderStatusCode); + $relationMap = RCrmHelpers::getRelationMap($config->get('retailcrm', 'orderStatusMap')); + $crmOrderStatusCode = RCrmHelpers::getRelationByMap($relationMap, $umiOrderStatusCode); if (!$crmOrderStatusCode) { return; } - $umiOrderPaymentType = $order->getObject()->getValue('payment_id'); - $relationOrderPaymentTypesMap = $retailcrm->getRelationMap($config->get('retailcrm', 'orderPaymentTypeMap')); - $crmOrderPaymentType = $retailcrm->getRelationByMap($relationOrderPaymentTypesMap, $umiOrderPaymentType); + $umiOrderPaymentType = $orderObj->getObject()->getValue('payment_id'); + $relationOrderPaymentTypesMap = RCrmHelpers::getRelationMap($config->get('retailcrm', 'orderPaymentTypeMap')); + $crmOrderPaymentType = RCrmHelpers::getRelationByMap($relationOrderPaymentTypesMap, $umiOrderPaymentType); - $umiOrderPaymentStatus = $order->getObject()->getValue('payment_status_id'); - $relationOrderPaymentStatusesMap = $retailcrm->getRelationMap($config->get('retailcrm', 'orderPaymentStatusMap')); - $crmOrderPaymentStatus = $retailcrm->getRelationByMap($relationOrderPaymentStatusesMap, $umiOrderPaymentStatus); + $umiOrderPaymentStatus = $orderObj->getObject()->getValue('payment_status_id'); + $relationOrderPaymentStatusesMap = RCrmHelpers::getRelationMap($config->get('retailcrm', 'orderPaymentStatusMap')); + $crmOrderPaymentStatus = RCrmHelpers::getRelationByMap($relationOrderPaymentStatusesMap, $umiOrderPaymentStatus); - $umiOrderDeliveryId = $order->getObject()->getValue('delivery_id'); - $relationOrderDeliveryTypesMap = $retailcrm->getRelationMap($config->get('retailcrm', 'orderDeliveryTypeMap')); - $crmOrderDeliveryType = $retailcrm->getRelationByMap($relationOrderDeliveryTypesMap, $umiOrderDeliveryId); + $umiOrderDeliveryId = $orderObj->getObject()->getValue('delivery_id'); + $relationOrderDeliveryTypesMap = RCrmHelpers::getRelationMap($config->get('retailcrm', 'orderDeliveryTypeMap')); + $crmOrderDeliveryType = RCrmHelpers::getRelationByMap($relationOrderDeliveryTypesMap, $umiOrderDeliveryId); - $customer = new umiObject($order->getCustomerId()); - $orderItems = $order->getItems(); + $customer = new umiObject($orderObj->getCustomerId()); + $orderItemsObj = $orderObj->getItems(); - $orderItemsToCrm = array(); + $orderItems = array(); - foreach ($orderItems as $orderItem) { + foreach ($orderItemsObj as $orderItem) { /** @var optionedOrderItem $orderItem */ - $itemProperties = array(); - foreach ($orderItem->getOptions() as $option) { - $option = new umiObject($option['option-id']); - $itemProperties[] = array( - 'name' => $option->getType()->getName(), - 'value' => $option->getName() - ); + + if (get_class($orderItem) == 'optionedOrderItem') { + foreach ($orderItem->getOptions() as $option) { + $option = new umiObject($option['option-id']); + $itemProperties[] = array( + 'name' => $option->getType()->getName(), + 'value' => $option->getName() + ); + } } $optionGroups = $orderItem->getItemElement()->getObject()->getType()->getFieldsGroupByName('catalog_option_props')->getFields(); $optionGuidesToGroups = array(); + foreach ($optionGroups as $optionGroup) { /** @var umiField $optionGroup */ $optionGuidesToGroups[$optionGroup->getGuideId()] = $optionGroup->getId(); } $options = array(); - foreach ($orderItem->getOptions() as $option) { - $option = $objects->getObject($option['option-id']); - $options[] = $optionGuidesToGroups[$option->getTypeId()] . '_' . $option->getId(); + + if (get_class($orderItem) == 'optionedOrderItem') { + foreach ($orderItem->getOptions() as $option) { + $option = $objects->getObject($option['option-id']); + $options[] = $optionGuidesToGroups[$option->getTypeId()] . '_' . $option->getId(); + } } $product = $orderItem->getItemElement(); @@ -81,11 +88,25 @@ class RCrmActions $productId = $product->getId(); } - $orderItemsToCrm[] = array( + if (get_class($orderItem) == 'optionedOrderItem') { + $productName = $product->getName(); + } else { + $productName = $orderItem->getName(); + } + + if ($orderItem->getDiscount()) { + $discount = $orderItem->getDiscount(); + } else if ($orderItem->getValue('item_discount_value')) { + $discount = $orderItem->getValue('item_discount_value'); + } else { + $discount = 0; + } + + $orderItems[] = array( 'initialPrice' => $orderItem->getItemPrice(), - 'discount' => $orderItem->getDiscount(), + 'discount' => $discount, 'quantity' => $orderItem->getAmount(), - 'productName' => $product->getName(), + 'productName' => $productName, 'properties' => $itemProperties, 'offer' => array( 'externalId' => $productId @@ -94,31 +115,36 @@ class RCrmActions } /* One click order */ - if ($order->getObject()->getValue('purchaser_one_click') !== null) { - $oneClickObj = new umiObject($order->getObject()->getValue('purchaser_one_click')); + if ($orderObj->getObject()->getValue('purchaser_one_click') !== null) { + $oneClickObj = new umiObject($orderObj->getObject()->getValue('purchaser_one_click')); - $orderToCrm = array( - 'number' => $order->getObject()->getValue('number'), - 'externalId' => $order->getId(), + $order = array( + 'number' => $orderObj->getObject()->getValue('number'), + 'externalId' => $orderObj->getId(), + 'lastName' => $oneClickObj->getValue('lname'), + 'firstName' => $oneClickObj->getValue('fname'), + 'patronymic' => $oneClickObj->getValue('father_name'), 'phone' => $oneClickObj->getValue('phone'), 'customer' => array( 'externalId' => $customer->getId() ), - 'paymentType' => $crmOrderPaymentType, - 'paymentStatus' => $crmOrderPaymentStatus, - 'status' => $crmOrderStatusCode, - 'items' => $orderItemsToCrm, + 'items' => $orderItems, 'orderMethod' => 'one-click' ); } else { - if ($order->getObject()->getValue('delivery_address') !== null) { - $deliveryObjId = $order->getObject()->getValue('delivery_address'); + if ($orderObj->getObject()->getValue('delivery_address') !== null) { + $deliveryObjId = $orderObj->getObject()->getValue('delivery_address'); $deliveryObj = new umiObject($deliveryObjId); - if ($deliveryObj->getValue('country') !== false) { + if ($deliveryObj->getValue('country') !== null) { $deliveryCountryObjId = $deliveryObj->getValue('country'); - $deliveryCountryObj = new umiObject($deliveryCountryObjId); - $deliveryCountryIsoCode = $deliveryCountryObj->getValue('country_iso_code'); + + try { + $deliveryCountryObj = new umiObject($deliveryCountryObjId); + $deliveryCountryIsoCode = $deliveryCountryObj->getValue('country_iso_code'); + } catch (Exception $e) { + $deliveryCountryIsoCode = ''; + } } else { $deliveryCountryIsoCode = ''; } @@ -152,7 +178,7 @@ class RCrmActions $deliveryCity = ''; } - $addressToCrm = array( + $deliveryAddress = array( 'countryIso' => $deliveryCountryIsoCode, 'index' => $deliveryIndex, 'region' => $deliveryRegion, @@ -163,111 +189,142 @@ class RCrmActions 'house' => $deliveryHouse, 'notes' => $deliveryNotes ); - } else { - $addressToCrm = array(); + $deliveryAddress = array(); } - $orderToCrm = array( - 'number' => $order->getObject()->getValue('number'), - 'externalId' => $order->getId(), + $order = array( + 'number' => $orderObj->getObject()->getValue('number'), + 'externalId' => $orderObj->getId(), 'lastName' => $customer->getValue('lname'), 'firstName' => $customer->getValue('fname'), 'patronymic' => $customer->getValue('father_name'), 'phone' => $customer->getValue('phone'), - 'email' => $customer->getValue('email'), 'customer' => array( 'externalId' => $customer->getId() ), - 'paymentType' => $crmOrderPaymentType, - 'paymentStatus' => $crmOrderPaymentStatus, - 'status' => $crmOrderStatusCode, - 'items' => $orderItemsToCrm, + 'items' => $orderItems, 'delivery' => array( - 'address' => $addressToCrm, - 'code' => $crmOrderDeliveryType + 'address' => $deliveryAddress, ) ); } + if ($crmOrderStatusCode && $crmOrderStatusCode != 'none') { + $order['status'] = $crmOrderStatusCode; + } + + if ($crmOrderDeliveryType && $crmOrderDeliveryType != 'none') { + $order['delivery']['code'] = $crmOrderDeliveryType; + } + + if ($crmOrderPaymentType && $crmOrderPaymentType != 'none') { + $order['paymentType'] = $crmOrderPaymentType; + } + + if ($crmOrderPaymentStatus && $crmOrderPaymentStatus != 'none') { + $order['paymentStatus'] = $crmOrderPaymentStatus; + } + + if ($customer->getTypeGUID() == 'emarket-customer') { + $email = $customer->getValue('email'); + } else if ($customer->getTypeGUID() == 'users-user') { + $email = $customer->getValue('e-mail'); + } else { + $email = ''; + } + + if ($email = filter_var($email, FILTER_VALIDATE_EMAIL)) { + $order['email'] = $email; + } + + if ($deliveryCost = $orderObj->getValue('delivery_price')) { + $order['delivery']['cost'] = $deliveryCost; + } + // TODO: есть возможность учитывать домен $api = new RCrmProxy( $config->get('retailcrm', 'crmUrl'), - $config->get('retailcrm', 'apiKey'), - __DIR__ . '/../../../retailcrm.error.log' + $config->get('retailcrm', 'apiKey') ); - if ($mode == 'create') { - $orderToCrm = self::customerPrepare($orderToCrm); - $api->ordersCreate($orderToCrm); - } else if ($mode == 'edit') { - $api->ordersEdit($orderToCrm); + $response = $api->ordersGet($order['externalId']); + $order = self::customerPrepare($order); + + if ($response->isSuccessful()) { + $api->ordersEdit($order); + } else { + $api->ordersCreate($order); } } - public static function customerPrepare($orderToCrm) { + /** + * @param array $order + * @return array + */ + public static function customerPrepare(array $order) { $config = mainConfiguration::getInstance(); + /** @var RCrmApiClient $api */ $api = new RCrmProxy( $config->get('retailcrm', 'crmUrl'), - $config->get('retailcrm', 'apiKey'), - __DIR__ . '/../../../retailcrm.error.log' + $config->get('retailcrm', 'apiKey') ); - $crmCustomer = $api->customersGet($orderToCrm['customer']['externalId']); + $crmCustomer = $api->customersGet( + $order['customer']['externalId'] + ); - if (!$crmCustomer) { + if (!$crmCustomer->isSuccessful()) { $crmCustomers = $api->customersList(array( - 'name' => $orderToCrm['phone'], - 'email' => $orderToCrm['email'] + 'name' => $order['phone'], + 'email' => $order['email'] )); $foundedCustomerExternalId = false; - if ($crmCustomers) { - /** @var RCrmApiResponse $crmCustomers */ - $crmCustomers = $crmCustomers->getCustomers(); + if ($crmCustomers->isSuccessful()) { + $crmCustomers = $crmCustomers->offsetGet('customers'); if (count($crmCustomers) > 0) { foreach ($crmCustomers as $crmCustomer) { if (isset($crmCustomer['externalId']) && $crmCustomer['externalId'] > 0) { $foundedCustomerExternalId = true; - $orderToCrm['customer']['externalId'] = $crmCustomer['externalId']; + $order['customer']['externalId'] = $crmCustomer['externalId']; break; } } if (!$foundedCustomerExternalId) { - $crmCustomer = $crmCustomers[0]; $status = $api->customersFixExternalIds(array( - 'id' => $crmCustomer['id'], - 'externalId' => $crmCustomer['externalId'] + 'id' => $crmCustomers[0]['id'], + 'externalId' => $crmCustomers[0]['externalId'] )); - if (!$status) { - unset($orderToCrm['customer']); + if (!$status->isSuccessful()) { + unset($order['customer']); } } } else { $status = $api->customersCreate(array( - 'externalId' => $orderToCrm['customer']['externalId'], - 'firstName' => $orderToCrm['firstName'], - 'lastName' => $orderToCrm['lastName'], - 'patronymic' => $orderToCrm['patronymic'], - 'email' => $orderToCrm['email'], + 'externalId' => $order['customer']['externalId'], + 'firstName' => $order['firstName'], + 'lastName' => $order['lastName'], + 'patronymic' => $order['patronymic'], + 'email' => $order['email'], 'phones' => array( - 'number' => $orderToCrm['phone'] + 'number' => $order['phone'] ) )); - if (!$status) { - unset($orderToCrm['customer']); + if (!$status->isSuccessful()) { + unset($order['customer']); } } } else { - unset($orderToCrm['customer']); + unset($order['customer']); } } - return $orderToCrm; + return $order; } } diff --git a/classes/modules/RetailCRM/classes/retailcrm/RCrmApiClient.php b/classes/modules/RetailCRM/classes/retailcrm/RCrmApiClient.php old mode 100644 new mode 100755 diff --git a/classes/modules/RetailCRM/classes/retailcrm/RCrmApiResponse.php b/classes/modules/RetailCRM/classes/retailcrm/RCrmApiResponse.php old mode 100644 new mode 100755 diff --git a/classes/modules/RetailCRM/classes/retailcrm/RCrmCurlException.php b/classes/modules/RetailCRM/classes/retailcrm/RCrmCurlException.php old mode 100644 new mode 100755 diff --git a/classes/modules/RetailCRM/classes/retailcrm/RCrmHelpers.php b/classes/modules/RetailCRM/classes/retailcrm/RCrmHelpers.php old mode 100644 new mode 100755 index 6dd5303..3bb2afe --- a/classes/modules/RetailCRM/classes/retailcrm/RCrmHelpers.php +++ b/classes/modules/RetailCRM/classes/retailcrm/RCrmHelpers.php @@ -1,13 +1,13 @@ removeEmpty($change['order']); + $change['order'] = self::removeEmpty($change['order']); $orderId = $change['order']['id']; @@ -106,24 +106,24 @@ abstract class RCrmHelpers $orders[$orderId]['items'][$itemId]['deleted'] = true; } - if (!$orders[$orderId]['items'][$itemId]['created'] && $fields['item'][$change['field']]) { + if (!$orders[$orderId]['items'][$itemId]['created'] && isset($fields['item']) && $fields['item'][$change['field']]) { $orders[$orderId]['items'][$itemId][$fields['item'][$change['field']]] = $change['newValue']; } } else { if (isset($fields['delivery'][$change['field']]) && $fields['delivery'][$change['field']] == 'service') { - $orders[$orderId]['delivery']['service']['code'] = $this->historyNewValue($change['newValue']); + $orders[$orderId]['delivery']['service']['code'] = self::historyNewValue($change['newValue']); } elseif (isset($fields['delivery'][$change['field']])) { - $orders[$orderId]['delivery'][$fields['delivery'][$change['field']]] = $this->historyNewValue($change['newValue']); + $orders[$orderId]['delivery'][$fields['delivery'][$change['field']]] = self::historyNewValue($change['newValue']); } elseif (isset($fields['orderAddress'][$change['field']])) { $orders[$orderId]['delivery']['address'][$fields['orderAddress'][$change['field']]] = $change['newValue']; } elseif (isset($fields['integrationDelivery'][$change['field']])) { - $orders[$orderId]['delivery']['service'][$fields['integrationDelivery'][$change['field']]] = $this->historyNewValue($change['newValue']); + $orders[$orderId]['delivery']['service'][$fields['integrationDelivery'][$change['field']]] = self::historyNewValue($change['newValue']); } elseif (isset($fields['customerContragent'][$change['field']])) { - $orders[$orderId][$fields['customerContragent'][$change['field']]] = $this->historyNewValue($change['newValue']); + $orders[$orderId][$fields['customerContragent'][$change['field']]] = self::historyNewValue($change['newValue']); } elseif (strripos($change['field'], 'custom_') !== false) { - $orders[$orderId]['customFields'][str_replace('custom_', '', $change['field'])] = $this->historyNewValue($change['newValue']); + $orders[$orderId]['customFields'][str_replace('custom_', '', $change['field'])] = self::historyNewValue($change['newValue']); } elseif (isset($fields['order'][$change['field']])) { - $orders[$orderId][$fields['order'][$change['field']]] = $this->historyNewValue($change['newValue']); + $orders[$orderId][$fields['order'][$change['field']]] = self::historyNewValue($change['newValue']); } if (isset($change['created'])) { @@ -143,7 +143,7 @@ abstract class RCrmHelpers * @param $value mixed * @return string */ - public function historyNewValue($value) + public static function historyNewValue($value) { if (isset($value['code'])) { return $value['code']; @@ -156,14 +156,14 @@ abstract class RCrmHelpers * @param $inputArray mixed * @return array */ - public function removeEmpty($inputArray) + public static function removeEmpty($inputArray) { $outputArray = array(); if (!empty($inputArray)) { foreach ($inputArray as $key => $element) { if (!empty($element) || $element === 0 || $element === '0') { if (is_array($element)) { - $element = $this->removeEmpty($element); + $element = self::removeEmpty($element); } $outputArray[$key] = $element; } diff --git a/classes/modules/RetailCRM/classes/retailcrm/RCrmHistory.php b/classes/modules/RetailCRM/classes/retailcrm/RCrmHistory.php index e236c32..ffd08fc 100644 --- a/classes/modules/RetailCRM/classes/retailcrm/RCrmHistory.php +++ b/classes/modules/RetailCRM/classes/retailcrm/RCrmHistory.php @@ -5,20 +5,21 @@ class RCrmHistory /** @var RCrmApiClient $api */ private $api = null; + /** + * RCrmHistory constructor. + */ public function __construct() { $config = mainConfiguration::getInstance(); $this->api = new RCrmProxy( $config->get('retailcrm', 'crmUrl'), - $config->get('retailcrm', 'apiKey'), - __DIR__ . '/../../../retailcrm.error.log' + $config->get('retailcrm', 'apiKey') ); } public function runOrders() { - $retailcrm = new RetailCRM; $regedit = regedit::getInstance(); $config = mainConfiguration::getInstance(); @@ -35,7 +36,7 @@ class RCrmHistory $response = $this->api->ordersHistory(array('sinceId' => $historyLastId), $historyPage); $historyPage++; - if (!is_null($response) && count($response['history'])) { + if ($response->isSuccessful() && count($response['history'])) { $historyArray = array_merge($historyArray, $response['history']); } else { break; @@ -45,7 +46,7 @@ class RCrmHistory if (count($historyArray)) { $lastChange = end($historyArray); - $crmOrders = $retailcrm->getAssemblyOrder($historyArray); + $crmOrders = RCrmHelpers::getAssemblyOrder($historyArray); $objectTypes = umiObjectTypesCollection::getInstance(); $objects = umiObjectsCollection::getInstance(); @@ -65,12 +66,32 @@ class RCrmHistory $order = order::create(); /* Order create date */ - $order->getObject()->getPropByName('order_date')->setValue(umiDate::getTimeStamp($crmOrder['createdAt'])); + $order->getObject()->setValue('order_date', umiDate::getTimeStamp($crmOrder['createdAt'])); + if (!empty($crmOrder['number'])) { + $order->setName($crmOrder['number']); + } else { + $order->generateNumber(); + $order->setName($order->getName() . ' ' . $crmOrder['id'] . "-retailcrm"); + } + + $this->api->ordersFixExternalIds(array( + array( + 'id' => $crmOrder['id'], + 'externalId' => $order->getId() + ) + )); + } + + if (!$order) { + continue; + } + + if (isset($crmOrder['customer'])) { $crmCustomer = $crmOrder['customer']; if (isset($crmCustomer['externalId']) && $crmCustomer['externalId'] > 0) { // TODO: проверить существует ли такой пользователь в системе, если нет, то создать, т.к. принимая customer externalId мы считаем, что такой пользователь уже есть - $order->getObject()->getPropByName('customer_id')->setValue($crmCustomer['externalId']); + $order->getObject()->setValue('customer_id', $crmCustomer['externalId']); } else { $customer = $objects->getObjectByName($crmCustomer['id'] . '-retailcrm'); @@ -90,23 +111,31 @@ class RCrmHistory $expirations->add($customerId, customer::$defaultExpiration); if (!empty($crmCustomer['firstName'])) { - $customer->getPropByName('fname')->setValue($crmCustomer['firstName']); + $customer->setValue('fname', $crmCustomer['firstName']); } if (!empty($crmCustomer['lastName'])) { - $customer->getPropByName('lname')->setValue($crmCustomer['lastName']); + $customer->setValue('lname', $crmCustomer['lastName']); } if (!empty($crmCustomer['patronymic'])) { - $customer->getPropByName('father_name')->setValue($crmCustomer['patronymic']); + $customer->setValue('father_name', $crmCustomer['patronymic']); } if (!empty($crmCustomer['email'])) { - $customer->getPropByName('email')->setValue($crmCustomer['email']); + if ($customer->getTypeGUID() == 'emarket-customer') { + $customer->setValue('email', $crmCustomer['email']); + } else { + if ($customer->getTypeGUID() == 'users-user') { + $customer->setValue('e-mail', $crmCustomer['email']); + } else { + $customer->setValue('email', $crmCustomer['email']); + } + } } if (isset($crmCustomer['phones']) && count($crmCustomer['phones']) > 0) { - $customer->getPropByName('phone')->setValue($crmCustomer['phones'][0]['number']); + $customer->setValue('phone', $crmCustomer['phones'][0]['number']); } if (isset($crmCustomer['address'])) { @@ -133,56 +162,61 @@ class RCrmHistory $countryCode = $country->getValue('country_iso_code'); if ($crmCustomerAddress['countryIso'] == $countryCode) { - $deliveryObject->getPropByName('country')->setValue($country->getId()); + $deliveryObject->setValue('country', $country->getId()); break; } } } if (!empty($crmCustomerAddress['index'])) { - $deliveryObject->getPropByName('index')->setValue($crmCustomerAddress['index']); + $deliveryObject->setValue('index', $crmCustomerAddress['index']); } if (!empty($crmCustomerAddress['region'])) { - $deliveryObject->getPropByName('region')->setValue($crmCustomerAddress['region']); + $deliveryObject->setValue('region', $crmCustomerAddress['region']); } if (!empty($crmCustomerAddress['city'])) { - $deliveryObject->getPropByName('city')->setValue($crmCustomerAddress['city']); + $deliveryObject->setValue('city', $crmCustomerAddress['city']); } if (!empty($crmCustomerAddress['street'])) { - $deliveryObject->getPropByName('street')->setValue($crmCustomerAddress['street']); + $deliveryObject->setValue('street', $crmCustomerAddress['street']); } if (!empty($crmCustomerAddress['building'])) { - $deliveryObject->getPropByName('house')->setValue($crmCustomerAddress['building']); + $deliveryObject->setValue('house', $crmCustomerAddress['building']); } if (!empty($crmCustomerAddress['flat'])) { - $deliveryObject->getPropByName('flat')->setValue($crmCustomerAddress['flat']); + $deliveryObject->setValue('flat', $crmCustomerAddress['flat']); } $deliveryAddresses = array( 0 => $deliveryObject->getId() ); - $customer->getPropByName('delivery_addresses')->setValue($deliveryAddresses); + $customer->setValue('delivery_addresses', $deliveryAddresses); } } - $order->getObject()->getPropByName('customer_id')->setValue($customer->getId()); + $order->getObject()->setValue('customer_id', $customer->getId()); } + } + if (isset($crmOrder['items']) && count($crmOrder['items']) > 0) { $orderItems = $order->getItems(); foreach ($orderItems as $orderItem) { $order->removeItem($orderItem); } - $crmItems = $crmOrder['items']; + $crmOrderForItems = $this->api->ordersGet($crmOrder['externalId'])->offsetGet('order'); + $crmItems = $crmOrderForItems['items']; + foreach ($crmItems as $crmItem) { if (isset($crmItem['deleted']) && $crmItem['deleted'] == true) { continue; } + if (!isset($crmItem['offer']['externalId'])) { continue; } @@ -195,6 +229,7 @@ class RCrmHistory $itemOptions = $data[1]; $itemOptions = explode('-', $itemOptions); + foreach ($itemOptions as $itemOption) { $itemOption = explode('_', $itemOption); $itemOptionGroupId = $itemOption[0]; @@ -209,255 +244,121 @@ class RCrmHistory /** @var optionedOrderItem $orderItem */ $orderItem->setAmount($crmItem['quantity']); - $order->appendItem($orderItem); } - - if (isset($crmOrder['paymentType'])) { - $relationOrderPaymentTypesMap = $retailcrm->getRelationMap($config->get('retailcrm', 'orderPaymentTypeMap')); - $umiOrderPaymentType = $retailcrm->getRelationByMap($relationOrderPaymentTypesMap, $crmOrder['paymentType'], true); - $order->getObject()->getPropByName('payment_id')->setValue($umiOrderPaymentType); - } - - if (isset($crmOrder['paymentStatus'])) { - $relationOrderPaymentStatusesMap = $retailcrm->getRelationMap($config->get('retailcrm', 'orderPaymentStatusMap')); - $umiOrderPaymentStatus = $retailcrm->getRelationByMap($relationOrderPaymentStatusesMap, $crmOrder['paymentStatus'], true); - $order->getObject()->getPropByName('payment_status_id')->setValue($umiOrderPaymentStatus); - } - - if (isset($crmOrder['delivery']['cost'])) { - $order->getObject()->getPropByName('delivery_price')->setValue($crmOrder['delivery']['cost']); - } - - if (isset($crmOrder['delivery']['code'])) { - $relationOrderDeliveryTypesMap = $retailcrm->getRelationMap($config->get('retailcrm', 'orderDeliveryTypeMap')); - $umiOrderDeliveryType = $retailcrm->getRelationByMap($relationOrderDeliveryTypesMap, $crmOrder['delivery']['code'], true); - $order->getObject()->getPropByName('delivery_id')->setValue($umiOrderDeliveryType); - } - - if (isset($crmOrder['delivery']['address']) && count($crmOrder['delivery']['address'])) { - $crmDeliveryAddress = $crmOrder['delivery']['address']; - - $deliveryTypeId = $objectTypes->getTypeIdByGUID('emarket-deliveryaddress'); - $deliveryObjectId = $objects->addObject('Address for order ' . $order->getId(), $deliveryTypeId); - $deliveryObject = $objects->getObject($deliveryObjectId); - - if (!empty($crmDeliveryAddress['countryIso'])) { - $selector = new selector('objects'); - try { - $selector->types('object-type')->id($config->get('retailcrm', 'countryGuideId')); - $countries = $selector->result(); - - foreach ($countries as $country) { - /** @var umiObject $country */ - - $countryCode = $country->getValue('country_iso_code'); - - if ($crmDeliveryAddress['countryIso'] == $countryCode) { - $deliveryObject->getPropByName('country')->setValue($country->getId()); - break; - } - } - } catch (selectorException $e) {} - } - - if (!empty($crmDeliveryAddress['index'])) { - $deliveryObject->getPropByName('index')->setValue($crmDeliveryAddress['index']); - } - - if (!empty($crmDeliveryAddress['region'])) { - $deliveryObject->getPropByName('region')->setValue($crmDeliveryAddress['region']); - } - - if (!empty($crmDeliveryAddress['city'])) { - $deliveryObject->getPropByName('city')->setValue($crmDeliveryAddress['city']); - } - - if (!empty($crmDeliveryAddress['street'])) { - $deliveryObject->getPropByName('street')->setValue($crmDeliveryAddress['street']); - } - - if (!empty($crmDeliveryAddress['building'])) { - $deliveryObject->getPropByName('house')->setValue($crmDeliveryAddress['building']); - } - - if (!empty($crmDeliveryAddress['flat'])) { - $deliveryObject->getPropByName('flat')->setValue($crmDeliveryAddress['flat']); - } - - $order->getObject()->getPropByName('delivery_address')->setValue($deliveryObject->getId()); - } - - if (!empty($crmOrder['number'])) { - $order->setName($crmOrder['number']); - } else { - $order->generateNumber(); - $order->setName($order->getName() . ' ' . $crmOrder['id'] . "-retailcrm"); - } - - $this->api->ordersFixExternalIds(array( - array( - 'id' => $crmOrder['id'], - 'externalId' => $order->getId() - ) - )); - } else { - if (!$order) { - continue; - } - - if (isset($crmOrder['items']) && count($crmOrder['items']) > 0) { - $orderItems = $order->getItems(); - foreach ($orderItems as $orderItem) { - $order->removeItem($orderItem); - } - - $crmOrderForItems = $this->api->ordersGet($crmOrder['externalId'])->getOrder(); - $crmItems = $crmOrderForItems['items']; - - foreach ($crmItems as $crmItem) { - if (isset($crmItem['deleted']) && $crmItem['deleted'] == true) { - continue; - } - if (!isset($crmItem['offer']['externalId'])) { - continue; - } - - if (mb_strpos($crmItem['offer']['externalId'], '#')) { - $data = explode('#', $crmItem['offer']['externalId']); - $itemId = $data[0]; - - $orderItem = orderItem::create($itemId); - - $itemOptions = $data[1]; - $itemOptions = explode('-', $itemOptions); - foreach ($itemOptions as $itemOption) { - $itemOption = explode('_', $itemOption); - $itemOptionGroupId = $itemOption[0]; - $itemOptionValue = $itemOption[1]; - $itemOptionObject = new umiField($itemOptionGroupId); - - $orderItem->appendOption($itemOptionObject->getName(), $itemOptionValue); - } - } else { - $orderItem = orderItem::create($crmItem['offer']['externalId']); - } - - /** @var optionedOrderItem $orderItem */ - $orderItem->setAmount($crmItem['quantity']); - $order->appendItem($orderItem); - } - } - - $customer = $objects->getObject($order->getCustomerId()); - - if (isset($crmOrder['phone'])) { - $customer->getPropByName('phone')->setValue($crmOrder['phone']); - } - - if (isset($crmOrder['lastName'])) { - $customer->getPropByName('lname')->setValue($crmOrder['lastName']); - } - - if (isset($crmOrder['firstName'])) { - $customer->getPropByName('fname')->setValue($crmOrder['firstName']); - } - - if (isset($crmOrder['patronymic'])) { - $customer->getPropByName('father_name')->setValue($crmOrder['patronymic']); - } - - if (isset($crmOrder['e-mail'])) { - $customer->getPropByName('e-mail')->setValue($crmOrder['e-mail']); - } - - if (isset($crmOrder['paymentType'])) { - $relationOrderPaymentTypesMap = $retailcrm->getRelationMap($config->get('retailcrm', 'orderPaymentTypeMap')); - $umiOrderPaymentType = $retailcrm->getRelationByMap($relationOrderPaymentTypesMap, $crmOrder['paymentType'], true); - $order->getObject()->getPropByName('payment_id')->setValue($umiOrderPaymentType); - } - - if (isset($crmOrder['paymentStatus'])) { - $relationOrderPaymentStatusesMap = $retailcrm->getRelationMap($config->get('retailcrm', 'orderPaymentStatusMap')); - $umiOrderPaymentStatus = $retailcrm->getRelationByMap($relationOrderPaymentStatusesMap, $crmOrder['paymentStatus'], true); - $order->getObject()->getPropByName('payment_status_id')->setValue($umiOrderPaymentStatus); - } - - if (isset($crmOrder['delivery']['cost'])) { - $order->getObject()->getPropByName('delivery_price')->setValue($crmOrder['delivery']['cost']); - } - - if (isset($crmOrder['delivery']['code'])) { - $relationOrderDeliveryTypesMap = $retailcrm->getRelationMap($config->get('retailcrm', 'orderDeliveryTypeMap')); - $umiOrderDeliveryType = $retailcrm->getRelationByMap($relationOrderDeliveryTypesMap, $crmOrder['delivery']['code'], true); - $order->getObject()->getPropByName('delivery_id')->setValue($umiOrderDeliveryType); - } - - if (isset($crmOrder['delivery']['address']) && count($crmOrder['delivery']['address'])) { - $crmDeliveryAddress = $crmOrder['delivery']['address']; - - $deliveryTypeId = $objectTypes->getTypeIdByGUID('emarket-deliveryaddress'); - $deliveryObject = $objects->getObjectByName('Address for order ' . $order->getId()); - if (!$deliveryObject) { - $deliveryObjectId = $objects->addObject('Address for order ' . $order->getId(), $deliveryTypeId); - $deliveryObject = $objects->getObject($deliveryObjectId); - } - - if (!empty($crmDeliveryAddress['countryIso'])) { - $selector = new selector('objects'); - $selector->types('object-type')->id($config->get('retailcrm', 'countryGuideId')); - - $countries = $selector->result(); - - foreach ($countries as $country) { - /** @var umiObject $country */ - - $countryCode = $country->getValue('country_iso_code'); - - if ($crmDeliveryAddress['countryIso'] == $countryCode) { - $deliveryObject->getPropByName('country')->setValue($country->getId()); - break; - } - } - } - - if (!empty($crmDeliveryAddress['index'])) { - $deliveryObject->getPropByName('index')->setValue($crmDeliveryAddress['index']); - } - - if (!empty($crmDeliveryAddress['region'])) { - $deliveryObject->getPropByName('region')->setValue($crmDeliveryAddress['region']); - } - - if (!empty($crmDeliveryAddress['city'])) { - $deliveryObject->getPropByName('city')->setValue($crmDeliveryAddress['city']); - } - - if (!empty($crmDeliveryAddress['street'])) { - $deliveryObject->getPropByName('street')->setValue($crmDeliveryAddress['street']); - } - - if (!empty($crmDeliveryAddress['building'])) { - $deliveryObject->getPropByName('house')->setValue($crmDeliveryAddress['building']); - } - - if (!empty($crmDeliveryAddress['flat'])) { - $deliveryObject->getPropByName('flat')->setValue($crmDeliveryAddress['flat']); - } - - $order->getObject()->getPropByName('delivery_address')->setValue($deliveryObject->getId()); - } } - if (!$order) { - continue; + $customer = $objects->getObject($order->getCustomerId()); + + if (isset($crmOrder['phone'])) { + $customer->setValue('phone', $crmOrder['phone']); + } + + if (isset($crmOrder['lastName'])) { + $customer->setValue('lname', $crmOrder['lastName']); + } + + if (isset($crmOrder['firstName'])) { + $customer->setValue('fname', $crmOrder['firstName']); + } + + if (isset($crmOrder['patronymic'])) { + $customer->setValue('father_name', $crmOrder['patronymic']); + } + + if (!empty($crmCustomer['email'])) { + if ($customer->getTypeGUID() == 'emarket-customer') { + $customer->setValue('email', $crmCustomer['email']); + } else if ($customer->getTypeGUID() == 'users-user') { + $customer->setValue('e-mail', $crmCustomer['email']); + } else { + $customer->setValue('email', $crmCustomer['email']); + } + } + + if (isset($crmOrder['paymentType'])) { + $relationOrderPaymentTypesMap = RCrmHelpers::getRelationMap($config->get('retailcrm', 'orderPaymentTypeMap')); + $umiOrderPaymentType = RCrmHelpers::getRelationByMap($relationOrderPaymentTypesMap, $crmOrder['paymentType'], true); + $order->getObject()->setValue('payment_id', $umiOrderPaymentType); + } + + if (isset($crmOrder['paymentStatus'])) { + $relationOrderPaymentStatusesMap = RCrmHelpers::getRelationMap($config->get('retailcrm', 'orderPaymentStatusMap')); + $umiOrderPaymentStatus = RCrmHelpers::getRelationByMap($relationOrderPaymentStatusesMap, $crmOrder['paymentStatus'], true); + $order->getObject()->setValue('payment_status_id', $umiOrderPaymentStatus); + } + + if (isset($crmOrder['delivery']['cost'])) { + $order->getObject()->setValue('delivery_price', $crmOrder['delivery']['cost']); + } + + if (isset($crmOrder['delivery']['code'])) { + $relationOrderDeliveryTypesMap = RCrmHelpers::getRelationMap($config->get('retailcrm', 'orderDeliveryTypeMap')); + $umiOrderDeliveryType = RCrmHelpers::getRelationByMap($relationOrderDeliveryTypesMap, $crmOrder['delivery']['code'], true); + $order->getObject()->setValue('delivery_id', $umiOrderDeliveryType); + } + + if (isset($crmOrder['delivery']['address']) && count($crmOrder['delivery']['address'])) { + $crmDeliveryAddress = $crmOrder['delivery']['address']; + + $deliveryTypeId = $objectTypes->getTypeIdByGUID('emarket-deliveryaddress'); + $deliveryObject = $objects->getObjectByName('Address for order ' . $order->getId()); + + if (!$deliveryObject) { + $deliveryObjectId = $objects->addObject('Address for order ' . $order->getId(), $deliveryTypeId); + $deliveryObject = $objects->getObject($deliveryObjectId); + } + + if (!empty($crmDeliveryAddress['countryIso'])) { + $selector = new selector('objects'); + $selector->types('object-type')->id($config->get('retailcrm', 'countryGuideId')); + + $countries = $selector->result(); + + foreach ($countries as $country) { + /** @var umiObject $country */ + + $countryCode = $country->getValue('country_iso_code'); + + if ($crmDeliveryAddress['countryIso'] == $countryCode) { + $deliveryObject->setValue('country', $country->getId()); + break; + } + } + } + + if (!empty($crmDeliveryAddress['index'])) { + $deliveryObject->setValue('index', $crmDeliveryAddress['index']); + } + + if (!empty($crmDeliveryAddress['region'])) { + $deliveryObject->setValue('region', $crmDeliveryAddress['region']); + } + + if (!empty($crmDeliveryAddress['city'])) { + $deliveryObject->setValue('city', $crmDeliveryAddress['city']); + } + + if (!empty($crmDeliveryAddress['street'])) { + $deliveryObject->setValue('street', $crmDeliveryAddress['street']); + } + + if (!empty($crmDeliveryAddress['building'])) { + $deliveryObject->setValue('house', $crmDeliveryAddress['building']); + } + + if (!empty($crmDeliveryAddress['flat'])) { + $deliveryObject->setValue('flat', $crmDeliveryAddress['flat']); + } + + $order->getObject()->setValue('delivery_address', $deliveryObject->getId()); } $regedit->setVal('//modules/RetailCRM/IgnoreObjectUpdateEvent/' . $order->getObject()->getId(), time()); if (isset($crmOrder['status'])) { - $relationMap = $retailcrm->getRelationMap($config->get('retailcrm', 'orderStatusMap')); - $umiOrderStatusCode = $retailcrm->getRelationByMap($relationMap, $crmOrder['status'], true); + $relationMap = RCrmHelpers::getRelationMap($config->get('retailcrm', 'orderStatusMap')); + $umiOrderStatusCode = RCrmHelpers::getRelationByMap($relationMap, $crmOrder['status'], true); if ($umiOrderStatusCode) { // меняем дату редактирования заказа, для того, чтобы его не перехватил хенлдер и не выплюнул обратно в црм $order->getObject()->setUpdateTime(time()); diff --git a/classes/modules/RetailCRM/classes/retailcrm/RCrmHttpClient.php b/classes/modules/RetailCRM/classes/retailcrm/RCrmHttpClient.php old mode 100644 new mode 100755 diff --git a/classes/modules/RetailCRM/classes/retailcrm/RCrmIcml.php b/classes/modules/RetailCRM/classes/retailcrm/RCrmIcml.php old mode 100644 new mode 100755 index dceadb9..39927ea --- a/classes/modules/RetailCRM/classes/retailcrm/RCrmIcml.php +++ b/classes/modules/RetailCRM/classes/retailcrm/RCrmIcml.php @@ -287,9 +287,7 @@ class RCrmIcml if (is_array($photos) && count($photos)) { $photo = reset($photos); $photoPath = $this->shopUrl . $photo->getFilePath(true); - - $e->appendChild($this->dd->createElement('picture')) - ->appendChild($this->dd->createTextNode($photoPath)); + $e->appendChild($this->dd->createElement('picture'))->appendChild($this->dd->createTextNode($photoPath)); } } diff --git a/classes/modules/RetailCRM/classes/retailcrm/RCrmJsonException.php b/classes/modules/RetailCRM/classes/retailcrm/RCrmJsonException.php old mode 100644 new mode 100755 diff --git a/classes/modules/RetailCRM/classes/retailcrm/RCrmProxy.php b/classes/modules/RetailCRM/classes/retailcrm/RCrmProxy.php old mode 100644 new mode 100755 index 0f011db..752183e --- a/classes/modules/RetailCRM/classes/retailcrm/RCrmProxy.php +++ b/classes/modules/RetailCRM/classes/retailcrm/RCrmProxy.php @@ -7,36 +7,104 @@ class RCrmProxy { private $api; - private $log; - public function __construct($url, $key, $log) + /** + * Методы API которые не надо логировать + * @var array + */ + private $ignoreMethods = array( + 'customersList', + 'customersGet', + 'ordersList', + 'ordersGet', + ); + + /** + * Методы API трассировку которых надо логировать + * @var array + */ + private $traceMethods = array( + 'customersCreate', + 'customersEdit', + 'ordersCreate', + 'ordersEdit', + ); + + /** + * RCrmProxy constructor. + * @param string $apiUrl + * @param string $apiKey + */ + public function __construct($apiUrl, $apiKey) { - $this->api = new RCrmApiClient($url, $key); - $this->log = $log; + $this->api = new RCrmApiClient($apiUrl, $apiKey); } + /** + * @param $method + * @param $arguments + * @return bool|RCrmApiResponse + */ public function __call($method, $arguments) { - $accessLog = date('H:m:i') . ' [' . $method . '] -> ' . json_encode($arguments) . "\n"; - error_log($accessLog, 3, $this->log); - try { $response = call_user_func_array(array($this->api, $method), $arguments); - if (!$response->isSuccessful()) { - error_log("[$method] " . $response->getErrorMsg() . "\n", 3, $this->log); - if (isset($response['errors'])) { - $error = implode("\n", $response['errors']); - error_log($error . "\n", 3, $this->log); - } - $response = false; + + if (!in_array($method, $this->ignoreMethods)) { + $this->writeLog($method, $response); } + return $response; } catch (RCrmCurlException $e) { - error_log("[$method] " . $e->getMessage() . "\n", 3, $this->log); + $this->writeLog($method, $e->getMessage()); return false; } catch (RCrmJsonException $e) { - error_log("[$method] " . $e->getMessage() . "\n", 3, $this->log); + $this->writeLog($method, $e->getMessage()); return false; } } + + /** + * @param string $method + * @param mixed $data + * @return bool + */ + private function writeLog($method, $data) + { + $path = realpath(__DIR__ . '/../../logs/'); + $file = $path . '/' . $method . '.log'; + + if (!file_exists($path)) { + mkdir($path); + } + + if (file_exists($file)) { + if (filesize($file) > 1024 * 1024 * 10) { + unlink($file); + } + } + + $logArray = array( + 'time' => date('Y-m-d H:i:s'), + 'data' => $data + ); + + if (in_array($method, $this->traceMethods)) { + $traces = debug_backtrace(); + + foreach ($traces as $i => $trace) { + if ($i == 0) { + unset($traces[$i]); + continue; + } + + unset($traces[$i]['args']); + unset($traces[$i]['object']); + } + + $logArray['trace'] = array_reverse($traces); + } + + return file_put_contents($file, print_r($logArray, true) . "\n\n", FILE_APPEND); + } } \ No newline at end of file diff --git a/classes/modules/RetailCRM/data/objects.xml b/classes/modules/RetailCRM/data/objects.xml old mode 100644 new mode 100755 diff --git a/classes/modules/RetailCRM/events.php b/classes/modules/RetailCRM/events.php old mode 100644 new mode 100755 index 02be534..6c022f5 --- a/classes/modules/RetailCRM/events.php +++ b/classes/modules/RetailCRM/events.php @@ -3,8 +3,8 @@ 'icml' => 'onCronGenerateICML', 'history' => 'onCronSyncHistory', ); - - if (isset($_SERVER['argv'][2]) || isset($eventHandlers[$_SERVER['argv'][2]])) { + + if (isset($_SERVER['argv']) && (isset($_SERVER['argv'][2]) || isset($eventHandlers[$_SERVER['argv'][2]]))) { new umiEventListener('cron', 'RetailCRM', $eventHandlers[$_SERVER['argv'][2]]); } diff --git a/classes/modules/RetailCRM/i18n.php b/classes/modules/RetailCRM/i18n.php old mode 100644 new mode 100755 diff --git a/classes/modules/RetailCRM/install.php b/classes/modules/RetailCRM/install.php old mode 100644 new mode 100755