parent
e918317f6a
commit
6d479ae441
@ -1,3 +1,6 @@
|
|||||||
|
## 2023-12-18 v.6.5.0
|
||||||
|
- Добавлена поддержка функционала пользовательских полей
|
||||||
|
|
||||||
## 2023-12-13 v.6.4.13
|
## 2023-12-13 v.6.4.13
|
||||||
- Исправлена ошибка с получением данных программы лояльности администратора при изменении заказа в админке
|
- Исправлена ошибка с получением данных программы лояльности администратора при изменении заказа в админке
|
||||||
|
|
||||||
|
@ -10,6 +10,8 @@ use Intaro\RetailCrm\Service\Utils;
|
|||||||
use RetailCrm\Exception\CurlException;
|
use RetailCrm\Exception\CurlException;
|
||||||
use RetailCrm\Exception\InvalidJsonException;
|
use RetailCrm\Exception\InvalidJsonException;
|
||||||
use Intaro\RetailCrm\Service\ManagerService;
|
use Intaro\RetailCrm\Service\ManagerService;
|
||||||
|
use Bitrix\Main\UserFieldTable;
|
||||||
|
use Bitrix\Main\UserFieldLangTable;
|
||||||
use Bitrix\Sale\Internals\SiteCurrencyTable;
|
use Bitrix\Sale\Internals\SiteCurrencyTable;
|
||||||
|
|
||||||
IncludeModuleLangFile(__FILE__);
|
IncludeModuleLangFile(__FILE__);
|
||||||
@ -438,6 +440,188 @@ class RCrmActions
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function customOrderPropList()
|
||||||
|
{
|
||||||
|
$typeMatched = [
|
||||||
|
'STRING' => 'STRING',
|
||||||
|
'NUMBER' => 'NUMERIC',
|
||||||
|
'Y/N' => 'BOOLEAN',
|
||||||
|
'DATE' => 'DATE'
|
||||||
|
];
|
||||||
|
|
||||||
|
//Базовые свойства заказа и используемые свойства в функционале модуля
|
||||||
|
$bannedCodeList = [
|
||||||
|
'FIO',
|
||||||
|
'EMAIL',
|
||||||
|
'PHONE',
|
||||||
|
'ZIP',
|
||||||
|
'CITY',
|
||||||
|
'LOCATION',
|
||||||
|
'ADDRESS',
|
||||||
|
'COMPANY',
|
||||||
|
'COMPANY_ADR',
|
||||||
|
'INN',
|
||||||
|
'KPP',
|
||||||
|
'CONTACT_PERSON',
|
||||||
|
'FAX',
|
||||||
|
'LP_BONUS_INFO',
|
||||||
|
'LP_DISCOUNT_INFO',
|
||||||
|
''
|
||||||
|
];
|
||||||
|
|
||||||
|
$listPersons = PersonType::getList([
|
||||||
|
'select' => ['ID', 'NAME'],
|
||||||
|
'filter' => ['ENTITY_REGISTRY_TYPE' => 'ORDER']
|
||||||
|
])->fetchAll();
|
||||||
|
|
||||||
|
$persons = [];
|
||||||
|
|
||||||
|
foreach ($listPersons as $person) {
|
||||||
|
$persons[$person['ID']] = $person['NAME'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$propsList = OrderPropsTable::getList([
|
||||||
|
'select' => ['ID', 'CODE', 'NAME', 'PERSON_TYPE_ID', 'TYPE'],
|
||||||
|
'filter' => [
|
||||||
|
['!=CODE' => $bannedCodeList],
|
||||||
|
['?TYPE' => 'STRING | NUMBER | Y/N | DATE'],
|
||||||
|
['MULTIPLE' => 'N'],
|
||||||
|
['ACTIVE' => 'Y']
|
||||||
|
]
|
||||||
|
])->fetchAll();
|
||||||
|
|
||||||
|
$resultList = [];
|
||||||
|
|
||||||
|
foreach ($propsList as $prop) {
|
||||||
|
$type = $typeMatched[$prop['TYPE']] ?? $prop['TYPE'];
|
||||||
|
$key = $prop['ID'] . '#' . $prop['CODE'];
|
||||||
|
$resultList[$type . '_TYPE'][$key] = $prop['NAME'] . ' (' . $persons[$prop['PERSON_TYPE_ID']] . ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
ksort($resultList);
|
||||||
|
|
||||||
|
return $resultList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function customUserFieldList()
|
||||||
|
{
|
||||||
|
$typeMatched = [
|
||||||
|
'string' => 'STRING',
|
||||||
|
'double' => 'NUMERIC',
|
||||||
|
'boolean' => 'BOOLEAN',
|
||||||
|
'date' => 'DATE',
|
||||||
|
'integer' => 'INTEGER'
|
||||||
|
];
|
||||||
|
|
||||||
|
$userFields = UserFieldTable::getList([
|
||||||
|
'select' => ['ID', 'FIELD_NAME', 'USER_TYPE_ID'],
|
||||||
|
'filter' => [
|
||||||
|
['ENTITY_ID' => 'USER'],
|
||||||
|
['?FIELD_NAME' => '~%INTARO%'],
|
||||||
|
['!=FIELD_NAME' => 'UF_SUBSCRIBE_USER_EMAIL'],
|
||||||
|
['!=USER_TYPE_ID' => 'datetime'],
|
||||||
|
['?USER_TYPE_ID' => 'string | date | integer | double | boolean'],
|
||||||
|
['MULTIPLE' => 'N'],
|
||||||
|
]
|
||||||
|
])->fetchAll();
|
||||||
|
|
||||||
|
$resultList = [];
|
||||||
|
|
||||||
|
foreach ($userFields as $userField) {
|
||||||
|
$label = UserFieldLangTable::getList([
|
||||||
|
'select' => ['EDIT_FORM_LABEL'],
|
||||||
|
'filter' => [
|
||||||
|
["USER_FIELD_ID" => $userField['ID']],
|
||||||
|
['LANGUAGE_ID' => LANGUAGE_ID]
|
||||||
|
]
|
||||||
|
])->fetch();
|
||||||
|
|
||||||
|
$type = $typeMatched[$userField['USER_TYPE_ID']] ?? $userField['USER_TYPE_ID'];
|
||||||
|
$resultList[$type . '_TYPE'][$userField['FIELD_NAME']] = $label['EDIT_FORM_LABEL'];
|
||||||
|
}
|
||||||
|
|
||||||
|
ksort($resultList);
|
||||||
|
|
||||||
|
return $resultList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getTypeUserField()
|
||||||
|
{
|
||||||
|
$userFields = UserFieldTable::getList([
|
||||||
|
'select' => ['FIELD_NAME', 'USER_TYPE_ID'],
|
||||||
|
'filter' => [
|
||||||
|
['ENTITY_ID' => 'USER'],
|
||||||
|
['?FIELD_NAME' => '~%INTARO%'],
|
||||||
|
['!=FIELD_NAME' => 'UF_SUBSCRIBE_USER_EMAIL'],
|
||||||
|
['?USER_TYPE_ID' => 'string | date | datetime | integer | double | boolean'],
|
||||||
|
['MULTIPLE' => 'N'],
|
||||||
|
]
|
||||||
|
])->fetchAll();
|
||||||
|
|
||||||
|
$result = [];
|
||||||
|
|
||||||
|
foreach ($userFields as $userField) {
|
||||||
|
$result[$userField['FIELD_NAME']] = $userField['USER_TYPE_ID'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function convertCmsFieldToCrmValue($value, $type)
|
||||||
|
{
|
||||||
|
$result = $value;
|
||||||
|
|
||||||
|
switch ($type) {
|
||||||
|
case 'boolean':
|
||||||
|
$result = $value === '1' ? 1 : 0;
|
||||||
|
break;
|
||||||
|
case 'Y/N':
|
||||||
|
$result = $result === 'Y' ? 1 : 0;
|
||||||
|
break;
|
||||||
|
case 'STRING':
|
||||||
|
case 'string':
|
||||||
|
$result = strlen($value) <= 500 ? $value : '';
|
||||||
|
break;
|
||||||
|
case 'datetime':
|
||||||
|
$result = date('Y-m-d', strtotime($value));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function convertCrmValueToCmsField($crmValue, $type)
|
||||||
|
{
|
||||||
|
$result = $crmValue;
|
||||||
|
|
||||||
|
switch ($type) {
|
||||||
|
case 'Y/N':
|
||||||
|
case 'boolean':
|
||||||
|
$result = $crmValue == 1 ? 'Y' : 'N';
|
||||||
|
break;
|
||||||
|
case 'DATE':
|
||||||
|
case 'date':
|
||||||
|
if (empty($crmValue)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$result = date('d.m.Y', strtotime($crmValue));
|
||||||
|
} catch (\Exception $exception) {
|
||||||
|
$result = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'STRING':
|
||||||
|
case 'string':
|
||||||
|
case 'text':
|
||||||
|
$result = strlen($crmValue) <= 500 ? $crmValue : '';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
public static function sendConfiguration($api, $active = true)
|
public static function sendConfiguration($api, $active = true)
|
||||||
{
|
{
|
||||||
$scheme = isset($_SERVER['HTTPS']) ? 'https://' : 'http://';
|
$scheme = isset($_SERVER['HTTPS']) ? 'https://' : 'http://';
|
||||||
|
@ -99,7 +99,7 @@ class RestNormalizer
|
|||||||
$formatted[ $code ] = $this->formatting($value, true);
|
$formatted[ $code ] = $this->formatting($value, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($formatted[$code])) {
|
if (empty($formatted[$code] && $formatted[$code] !== 0)) {
|
||||||
if ($this->clear === true) {
|
if ($this->clear === true) {
|
||||||
unset($formatted[ $code ]);
|
unset($formatted[ $code ]);
|
||||||
}
|
}
|
||||||
|
@ -175,6 +175,7 @@ class RetailCrmEvent
|
|||||||
'optionsContragentType' => $optionsContragentType,
|
'optionsContragentType' => $optionsContragentType,
|
||||||
'optionsSitesList' => $optionsSitesList,
|
'optionsSitesList' => $optionsSitesList,
|
||||||
'optionsCustomFields' => $optionsCustomFields,
|
'optionsCustomFields' => $optionsCustomFields,
|
||||||
|
'customOrderProps' => RetailcrmConfigProvider::getMatchedOrderProps(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
//many sites?
|
//many sites?
|
||||||
|
@ -49,6 +49,7 @@ class RetailCrmHistory
|
|||||||
public static $CRM_CANSEL_ORDER = 'cansel_order';
|
public static $CRM_CANSEL_ORDER = 'cansel_order';
|
||||||
public static $CRM_CURRENCY = 'currency';
|
public static $CRM_CURRENCY = 'currency';
|
||||||
public static $CRM_DISCOUNT_ROUND = 'discount_round';
|
public static $CRM_DISCOUNT_ROUND = 'discount_round';
|
||||||
|
public static $CUSTOM_FIELDS_IS_ACTIVE = 'N';
|
||||||
|
|
||||||
const PAGE_LIMIT = 25;
|
const PAGE_LIMIT = 25;
|
||||||
|
|
||||||
@ -63,6 +64,21 @@ class RetailCrmHistory
|
|||||||
$historyStart = RetailcrmConfigProvider::getCustomersHistorySinceId();
|
$historyStart = RetailcrmConfigProvider::getCustomersHistorySinceId();
|
||||||
$api = new RetailCrm\ApiClient(RetailcrmConfigProvider::getApiUrl(), RetailcrmConfigProvider::getApiKey());
|
$api = new RetailCrm\ApiClient(RetailcrmConfigProvider::getApiUrl(), RetailcrmConfigProvider::getApiKey());
|
||||||
|
|
||||||
|
$matchedCustomFields = RetailcrmConfigProvider::getMatchedUserFields();
|
||||||
|
$matchedCustomFields = is_array($matchedCustomFields) ? array_flip($matchedCustomFields) : [];
|
||||||
|
|
||||||
|
if (method_exists(RCrmActions::class, 'getTypeUserField')
|
||||||
|
&& method_exists(RCrmActions::class, 'convertCrmValueToCmsField')
|
||||||
|
) {
|
||||||
|
self::$CUSTOM_FIELDS_IS_ACTIVE = RetailcrmConfigProvider::getCustomFieldsStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
$customUserFieldTypes = [];
|
||||||
|
|
||||||
|
if (self::$CUSTOM_FIELDS_IS_ACTIVE === 'Y') {
|
||||||
|
$customUserFieldTypes = RCrmActions::getTypeUserField();
|
||||||
|
}
|
||||||
|
|
||||||
if ($historyStart && $historyStart > 0) {
|
if ($historyStart && $historyStart > 0) {
|
||||||
$historyFilter['sinceId'] = $historyStart;
|
$historyFilter['sinceId'] = $historyStart;
|
||||||
}
|
}
|
||||||
@ -124,6 +140,8 @@ class RetailCrmHistory
|
|||||||
|
|
||||||
$customerBuilder->setDataCrm($customer)->build();
|
$customerBuilder->setDataCrm($customer)->build();
|
||||||
|
|
||||||
|
$customFields = self::getCustomUserFields($customer, $matchedCustomFields, $customUserFieldTypes);
|
||||||
|
|
||||||
if (!isset($customer['externalId'])) {
|
if (!isset($customer['externalId'])) {
|
||||||
if (!isset($customer['id'])) {
|
if (!isset($customer['id'])) {
|
||||||
continue;
|
continue;
|
||||||
@ -155,7 +173,7 @@ class RetailCrmHistory
|
|||||||
if ($registerNewUser === true) {
|
if ($registerNewUser === true) {
|
||||||
$customerBuilder->buildPassword();
|
$customerBuilder->buildPassword();
|
||||||
|
|
||||||
$registeredUserID = $newUser->Add(self::getDataUser($customerBuilder));
|
$registeredUserID = $newUser->Add(self::getDataUser($customerBuilder, $customFields));
|
||||||
|
|
||||||
if ($registeredUserID === false) {
|
if ($registeredUserID === false) {
|
||||||
RCrmActions::eventLog(
|
RCrmActions::eventLog(
|
||||||
@ -197,9 +215,11 @@ class RetailCrmHistory
|
|||||||
}
|
}
|
||||||
|
|
||||||
$customerArray = $customerBuilder->getCustomer()->getObjectToArray();
|
$customerArray = $customerBuilder->getCustomer()->getObjectToArray();
|
||||||
$u = $newUser->Update($customer['externalId'], self::convertBooleanFields($customerArray));
|
$customerArray = array_merge($customerArray, $customFields);
|
||||||
|
|
||||||
if (!$u) {
|
$queryUpdate = $newUser->Update($customer['externalId'], self::convertBooleanFields($customerArray));
|
||||||
|
|
||||||
|
if (!$queryUpdate) {
|
||||||
RCrmActions::eventLog(
|
RCrmActions::eventLog(
|
||||||
'RetailCrmHistory::customerHistory',
|
'RetailCrmHistory::customerHistory',
|
||||||
'Error update user',
|
'Error update user',
|
||||||
@ -261,6 +281,24 @@ class RetailCrmHistory
|
|||||||
$contragentTypes = array_flip(RetailcrmConfigProvider::getContragentTypes());
|
$contragentTypes = array_flip(RetailcrmConfigProvider::getContragentTypes());
|
||||||
$shipmentDeducted = RetailcrmConfigProvider::getShipmentDeducted();
|
$shipmentDeducted = RetailcrmConfigProvider::getShipmentDeducted();
|
||||||
|
|
||||||
|
$matchedCustomUserFields = RetailcrmConfigProvider::getMatchedUserFields() ?? [];
|
||||||
|
$matchedCustomUserFields = is_array($matchedCustomUserFields) ? array_flip($matchedCustomUserFields) : [];
|
||||||
|
|
||||||
|
$matchedCustomOrderFields = RetailcrmConfigProvider::getMatchedOrderProps() ?? [];
|
||||||
|
$matchedCustomOrderFields = is_array($matchedCustomOrderFields) ? array_flip($matchedCustomOrderFields) : [];
|
||||||
|
|
||||||
|
if (method_exists(RCrmActions::class, 'getTypeUserField')
|
||||||
|
&& method_exists(RCrmActions::class, 'convertCrmValueToCmsField')
|
||||||
|
) {
|
||||||
|
self::$CUSTOM_FIELDS_IS_ACTIVE = RetailcrmConfigProvider::getCustomFieldsStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
$customUserFieldTypes = [];
|
||||||
|
|
||||||
|
if (self::$CUSTOM_FIELDS_IS_ACTIVE === 'Y') {
|
||||||
|
$customUserFieldTypes = RCrmActions::getTypeUserField();
|
||||||
|
}
|
||||||
|
|
||||||
$api = new RetailCrm\ApiClient(RetailcrmConfigProvider::getApiUrl(), RetailcrmConfigProvider::getApiKey());
|
$api = new RetailCrm\ApiClient(RetailcrmConfigProvider::getApiUrl(), RetailcrmConfigProvider::getApiKey());
|
||||||
$page = 1;
|
$page = 1;
|
||||||
/* @var OrderLoyaltyDataService $orderLoyaltyDataService */
|
/* @var OrderLoyaltyDataService $orderLoyaltyDataService */
|
||||||
@ -459,6 +497,9 @@ class RetailCrmHistory
|
|||||||
$newUser = new CUser();
|
$newUser = new CUser();
|
||||||
$customerArray = $corporateCustomerBuilder->getCustomer()->getObjectToArray();
|
$customerArray = $corporateCustomerBuilder->getCustomer()->getObjectToArray();
|
||||||
|
|
||||||
|
$customFields = self::getCustomUserFields($userData, $matchedCustomUserFields, $customUserFieldTypes);
|
||||||
|
$customerArray = array_merge($customerArray, $customFields);
|
||||||
|
|
||||||
if (!array_key_exists('UF_SUBSCRIBE_USER_EMAIL', $customerArray)) {
|
if (!array_key_exists('UF_SUBSCRIBE_USER_EMAIL', $customerArray)) {
|
||||||
$customerArray['UF_SUBSCRIBE_USER_EMAIL'] = 'Y';
|
$customerArray['UF_SUBSCRIBE_USER_EMAIL'] = 'Y';
|
||||||
}
|
}
|
||||||
@ -925,7 +966,8 @@ class RetailCrmHistory
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($registerNewUser === true) {
|
if ($registerNewUser === true) {
|
||||||
$registeredUserID = $newUser->Add(self::getDataUser($customerBuilder));
|
$customFields = self::getCustomUserFields($response['customer'], $matchedCustomUserFields, $customUserFieldTypes);
|
||||||
|
$registeredUserID = $newUser->Add(self::getDataUser($customerBuilder, $customFields));
|
||||||
|
|
||||||
if ($registeredUserID === false) {
|
if ($registeredUserID === false) {
|
||||||
RCrmActions::eventLog(
|
RCrmActions::eventLog(
|
||||||
@ -1216,6 +1258,26 @@ class RetailCrmHistory
|
|||||||
}
|
}
|
||||||
|
|
||||||
$newOrder->setField('PRICE', $orderSumm);
|
$newOrder->setField('PRICE', $orderSumm);
|
||||||
|
|
||||||
|
if (self::$CUSTOM_FIELDS_IS_ACTIVE === 'Y' && !empty($matchedCustomOrderFields)) {
|
||||||
|
foreach ($order['customFields'] as $code => $value) {
|
||||||
|
if (isset($matchedCustomOrderFields[$code])) {
|
||||||
|
$arrayIdentifier = explode('#', $matchedCustomOrderFields[$code], 2);
|
||||||
|
$property = $propertyCollection->getItemByOrderPropertyId($arrayIdentifier[0]);
|
||||||
|
$value = RCrmActions::convertCrmValueToCmsField($value, $property->getType());
|
||||||
|
$queryResult = $property->setField('VALUE', $value);
|
||||||
|
|
||||||
|
if (!$queryResult->isSuccess()) {
|
||||||
|
RCrmActions::eventLog(
|
||||||
|
'RetailCrmHistory::orderHistory',
|
||||||
|
'CustomOrderPropSave',
|
||||||
|
'Error when saving a property: ' . $arrayIdentifier[1]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self::orderSave($newOrder);
|
self::orderSave($newOrder);
|
||||||
|
|
||||||
if ($optionsOrderNumbers === 'Y' && isset($order['number'])) {
|
if ($optionsOrderNumbers === 'Y' && isset($order['number'])) {
|
||||||
@ -2113,7 +2175,7 @@ class RetailCrmHistory
|
|||||||
* @param $customerBuilder
|
* @param $customerBuilder
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
private static function getDataUser($customerBuilder)
|
private static function getDataUser($customerBuilder, $customFields)
|
||||||
{
|
{
|
||||||
$customerArray = $customerBuilder->getCustomer()->getObjectToArray();
|
$customerArray = $customerBuilder->getCustomer()->getObjectToArray();
|
||||||
|
|
||||||
@ -2121,6 +2183,27 @@ class RetailCrmHistory
|
|||||||
$customerArray['UF_SUBSCRIBE_USER_EMAIL'] = 'Y';
|
$customerArray['UF_SUBSCRIBE_USER_EMAIL'] = 'Y';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$customerArray = array_merge($customerArray, $customFields);
|
||||||
|
|
||||||
return self::convertBooleanFields($customerArray);
|
return self::convertBooleanFields($customerArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static function getCustomUserFields($customer, $matchedCustomFields, $customUserFieldTypes)
|
||||||
|
{
|
||||||
|
$customFields = [];
|
||||||
|
|
||||||
|
if (self::$CUSTOM_FIELDS_IS_ACTIVE === 'Y'
|
||||||
|
&& isset($customer['customFields'])
|
||||||
|
&& is_array($customer['customFields'])
|
||||||
|
) {
|
||||||
|
foreach ($customer['customFields'] as $code => $value) {
|
||||||
|
if (isset($matchedCustomFields[$code]) && !empty($customUserFieldTypes[$matchedCustomFields[$code]])) {
|
||||||
|
$type = $customUserFieldTypes[$matchedCustomFields[$code]];
|
||||||
|
$customFields[$matchedCustomFields[$code]] = RCrmActions::convertCrmValueToCmsField($value, $type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $customFields;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -123,6 +123,11 @@ class RetailCrmOrder
|
|||||||
|
|
||||||
$countryList = BitrixOrderService::getCountryList();
|
$countryList = BitrixOrderService::getCountryList();
|
||||||
$deliveryAddress = ['city' => '', 'text' => '', 'index' => '', 'region' => '', 'countryIso' => ''];
|
$deliveryAddress = ['city' => '', 'text' => '', 'index' => '', 'region' => '', 'countryIso' => ''];
|
||||||
|
$isSendCustomFields = 'N';
|
||||||
|
|
||||||
|
if (method_exists(RCrmActions::class, 'convertCmsFieldToCrmValue')) {
|
||||||
|
$isSendCustomFields = RetailcrmConfigProvider::getCustomFieldsStatus();
|
||||||
|
}
|
||||||
|
|
||||||
//Order fields
|
//Order fields
|
||||||
foreach ($arOrder['PROPS']['properties'] as $prop) {
|
foreach ($arOrder['PROPS']['properties'] as $prop) {
|
||||||
@ -131,10 +136,11 @@ class RetailCrmOrder
|
|||||||
&& $search = array_search($prop['CODE'], $arParams['optionsLegalDetails'][$arOrder['PERSON_TYPE_ID']])
|
&& $search = array_search($prop['CODE'], $arParams['optionsLegalDetails'][$arOrder['PERSON_TYPE_ID']])
|
||||||
) {
|
) {
|
||||||
$order['contragent'][$search] = $prop['VALUE'][0];//legal order data
|
$order['contragent'][$search] = $prop['VALUE'][0];//legal order data
|
||||||
} elseif (!empty($arParams['optionsCustomFields'])
|
} elseif ($isSendCustomFields === 'Y'
|
||||||
&& $search = array_search($prop['CODE'], $arParams['optionsCustomFields'][$arOrder['PERSON_TYPE_ID']])
|
&& !empty($arParams['customOrderProps'])
|
||||||
|
&& isset($arParams['customOrderProps'][$prop['ID'] . '#' . $prop['CODE']])
|
||||||
) {
|
) {
|
||||||
$order['customFields'][$search] = $prop['VALUE'][0];//custom properties
|
$order['customFields'][$arParams['customOrderProps'][$prop['ID'] . '#' . $prop['CODE']]] = RCrmActions::convertCmsFieldToCrmValue($prop['VALUE'][0], $prop['TYPE']);
|
||||||
} elseif (is_array($arParams['optionsOrderProps'][$arOrder['PERSON_TYPE_ID']])
|
} elseif (is_array($arParams['optionsOrderProps'][$arOrder['PERSON_TYPE_ID']])
|
||||||
&& $search = array_search($prop['CODE'], $arParams['optionsOrderProps'][$arOrder['PERSON_TYPE_ID']])) {//other
|
&& $search = array_search($prop['CODE'], $arParams['optionsOrderProps'][$arOrder['PERSON_TYPE_ID']])) {//other
|
||||||
if (in_array($search, ['fio', 'phone', 'email'])) {//fio, phone, email
|
if (in_array($search, ['fio', 'phone', 'email'])) {//fio, phone, email
|
||||||
@ -557,6 +563,7 @@ class RetailCrmOrder
|
|||||||
'optionsContragentType' => $optionsContragentType,
|
'optionsContragentType' => $optionsContragentType,
|
||||||
'optionsSitesList' => RetailcrmConfigProvider::getSitesList(),
|
'optionsSitesList' => RetailcrmConfigProvider::getSitesList(),
|
||||||
'optionsCustomFields' => $optionsCustomFields,
|
'optionsCustomFields' => $optionsCustomFields,
|
||||||
|
'customOrderProps' => RetailcrmConfigProvider::getMatchedOrderProps(),
|
||||||
];
|
];
|
||||||
|
|
||||||
$recOrders = [];
|
$recOrders = [];
|
||||||
|
@ -29,6 +29,10 @@ class RetailCrmUser
|
|||||||
$customer['createdAt'] = new \DateTime($arFields['DATE_REGISTER']);
|
$customer['createdAt'] = new \DateTime($arFields['DATE_REGISTER']);
|
||||||
$customer['contragent'] = ['contragentType' => $contragentType];
|
$customer['contragent'] = ['contragentType' => $contragentType];
|
||||||
|
|
||||||
|
if (RetailcrmConfigProvider::getCustomFieldsStatus() === 'Y') {
|
||||||
|
$customer['customFields'] = self::getCustomFields($arFields);
|
||||||
|
}
|
||||||
|
|
||||||
if ($send && isset($_COOKIE['_rc']) && $_COOKIE['_rc'] != '') {
|
if ($send && isset($_COOKIE['_rc']) && $_COOKIE['_rc'] != '') {
|
||||||
$customer['browserId'] = $_COOKIE['_rc'];
|
$customer['browserId'] = $_COOKIE['_rc'];
|
||||||
}
|
}
|
||||||
@ -75,6 +79,10 @@ class RetailCrmUser
|
|||||||
$customer = self::getSimpleCustomer($arFields);
|
$customer = self::getSimpleCustomer($arFields);
|
||||||
$found = false;
|
$found = false;
|
||||||
|
|
||||||
|
if (RetailcrmConfigProvider::getCustomFieldsStatus() === 'Y') {
|
||||||
|
$customer['customFields'] = self::getCustomFields($arFields);
|
||||||
|
}
|
||||||
|
|
||||||
if (count($optionsSitesList) > 0) {
|
if (count($optionsSitesList) > 0) {
|
||||||
foreach ($optionsSitesList as $site) {
|
foreach ($optionsSitesList as $site) {
|
||||||
$userCrm = RCrmActions::apiMethod($api, 'customersGet', __METHOD__, $arFields['ID'], $site);
|
$userCrm = RCrmActions::apiMethod($api, 'customersGet', __METHOD__, $arFields['ID'], $site);
|
||||||
@ -151,4 +159,26 @@ class RetailCrmUser
|
|||||||
|
|
||||||
return $customer;
|
return $customer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static function getCustomFields(array $arFields)
|
||||||
|
{
|
||||||
|
if (!method_exists(RCrmActions::class, 'getTypeUserField')
|
||||||
|
|| !method_exists(RCrmActions::class, 'convertCmsFieldToCrmValue')
|
||||||
|
) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$customUserFields = RetailcrmConfigProvider::getMatchedUserFields();
|
||||||
|
$typeList = RCrmActions::getTypeUserField();
|
||||||
|
$result = [];
|
||||||
|
|
||||||
|
foreach ($customUserFields as $code => $codeCrm) {
|
||||||
|
if (isset($arFields[$code])) {
|
||||||
|
$type = $typeList[$code] ?? '';
|
||||||
|
$result[$codeCrm] = RCrmActions::convertCmsFieldToCrmValue($arFields[$code], $type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1 +1 @@
|
|||||||
- Исправлена ошибка с получением данных программы лояльности администратора при изменении заказа в админке
|
- Добавлена поддержка функционала пользовательских полей
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
$arModuleVersion = [
|
$arModuleVersion = [
|
||||||
'VERSION' => '6.4.13',
|
'VERSION' => '6.5.0',
|
||||||
'VERSION_DATE' => '2023-12-13 17:00:00'
|
'VERSION_DATE' => '2023-12-18 13:00:00'
|
||||||
];
|
];
|
||||||
|
@ -117,3 +117,18 @@ $MESS ['WRONG_CREDENTIALS'] = 'Enter the address and authorization key of the CR
|
|||||||
$MESS ['Wrong "apiKey" value.'] = 'Invalid authorization key';
|
$MESS ['Wrong "apiKey" value.'] = 'Invalid authorization key';
|
||||||
|
|
||||||
$MESS ['ORDER_TRACK_NUMBER'] = 'Receive track number';
|
$MESS ['ORDER_TRACK_NUMBER'] = 'Receive track number';
|
||||||
|
|
||||||
|
$MESS ['CUSTOM_FIELDS_TITLE'] = 'User fields';
|
||||||
|
$MESS ['CUSTOM_FIELDS_CAPTION'] = 'Matching user fields';
|
||||||
|
$MESS ['CUSTOM_FIELDS_TOGGLE_MSG'] = 'Activate synchronization of user fields';
|
||||||
|
$MESS ['CUSTOM_FIELDS_ORDER_LABEL'] = 'Custom order fields';
|
||||||
|
$MESS ['CUSTOM_FIELDS_USER_LABEL'] = 'User custom fields';
|
||||||
|
$MESS ['INTEGER_TYPE'] = 'An integer';
|
||||||
|
$MESS ['STRING_TYPE'] = 'Line/Text';
|
||||||
|
$MESS ['NUMERIC_TYPE'] = 'Number';
|
||||||
|
$MESS ['BOOLEAN_TYPE'] = 'Check box (yes/no)';
|
||||||
|
$MESS ['DATE_TYPE'] = 'Date';
|
||||||
|
$MESS ['NOTATION_CUSTOM_FIELDS'] = 'Before enabling this functionality, make sure that you do not have customized files for working with orders and customers associated with older versions of the module.';
|
||||||
|
$MESS ['NOTATION_MATCHED_CUSTOM_FIELDS'] = 'For correct data exchange, the types of matched fields must be the same!';
|
||||||
|
$MESS ['ADD_LABEL'] = 'Add';
|
||||||
|
$MESS ['DELETE_MATCHED'] = 'Delete';
|
@ -176,3 +176,18 @@ $MESS ['WRONG_CREDENTIALS'] = 'Введите адрес и ключ автор
|
|||||||
$MESS ['Wrong "apiKey" value.'] = 'Недействительный ключ авторизации';
|
$MESS ['Wrong "apiKey" value.'] = 'Недействительный ключ авторизации';
|
||||||
|
|
||||||
$MESS ['ORDER_TRACK_NUMBER'] = 'Получать трек-номер';
|
$MESS ['ORDER_TRACK_NUMBER'] = 'Получать трек-номер';
|
||||||
|
|
||||||
|
$MESS ['CUSTOM_FIELDS_TITLE'] = 'Пользовательские поля';
|
||||||
|
$MESS ['CUSTOM_FIELDS_CAPTION'] = 'Сопоставление пользовательских полей';
|
||||||
|
$MESS ['CUSTOM_FIELDS_TOGGLE_MSG'] = 'Активировать синхронизацию пользовательских полей';
|
||||||
|
$MESS ['CUSTOM_FIELDS_ORDER_LABEL'] = 'Пользовательские поля заказа';
|
||||||
|
$MESS ['CUSTOM_FIELDS_USER_LABEL'] = 'Пользовательские поля клиента';
|
||||||
|
$MESS ['INTEGER_TYPE'] = 'Целое число';
|
||||||
|
$MESS ['STRING_TYPE'] = 'Строка/Текст';
|
||||||
|
$MESS ['NUMERIC_TYPE'] = 'Число';
|
||||||
|
$MESS ['BOOLEAN_TYPE'] = 'Флажок (да/нет)';
|
||||||
|
$MESS ['DATE_TYPE'] = 'Дата';
|
||||||
|
$MESS ['NOTATION_CUSTOM_FIELDS'] = 'Перед подключением данного функционала, убедитесь, что у вас нет кастомизированных файлов по работе с заказами и клиентами, связанных со старыми версиями модуля.';
|
||||||
|
$MESS ['NOTATION_MATCHED_CUSTOM_FIELDS'] = 'Для корректного обмена данными типы сопоставляемых полей должны быть одинаковыми!';
|
||||||
|
$MESS ['ADD_LABEL'] = 'Добавить';
|
||||||
|
$MESS ['DELETE_MATCHED'] = 'Удалить';
|
||||||
|
@ -117,6 +117,12 @@ class ConfigProvider
|
|||||||
/** @var bool|null|string $loyaltyProgramStatus */
|
/** @var bool|null|string $loyaltyProgramStatus */
|
||||||
protected static $loyaltyProgramStatus;
|
protected static $loyaltyProgramStatus;
|
||||||
|
|
||||||
|
/** @var array $mathedCustomProps */
|
||||||
|
protected static $mathedCustomProps;
|
||||||
|
|
||||||
|
/** @var array $mathedCustomFields */
|
||||||
|
protected static $mathedCustomFields;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return bool|string|null
|
* @return bool|string|null
|
||||||
*/
|
*/
|
||||||
@ -1169,4 +1175,69 @@ class ConfigProvider
|
|||||||
{
|
{
|
||||||
static::setOption(Constants::RECEIVE_TRACK_NUMBER_DELIVERY, $trackNumberStatus);
|
static::setOption(Constants::RECEIVE_TRACK_NUMBER_DELIVERY, $trackNumberStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public static function getCustomFieldsStatus()
|
||||||
|
{
|
||||||
|
return static::getOption(Constants::CUSTOM_FIELDS_TOGGLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param bool|string|null $customFieldsStatus
|
||||||
|
* @return void
|
||||||
|
* @throws \Bitrix\Main\ArgumentOutOfRangeException
|
||||||
|
*/
|
||||||
|
public static function setCustomFieldsStatus($customFieldsStatus)
|
||||||
|
{
|
||||||
|
static::setOption(Constants::CUSTOM_FIELDS_TOGGLE, $customFieldsStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getMatchedOrderProps()
|
||||||
|
{
|
||||||
|
if (self::isEmptyNotZero(static::$mathedCustomProps)) {
|
||||||
|
static::$mathedCustomProps = static::getUnserializedOption(Constants::MATCHED_CUSTOM_PROPS);
|
||||||
|
}
|
||||||
|
|
||||||
|
return static::$mathedCustomProps;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array|null $customPropsList
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws \Bitrix\Main\ArgumentOutOfRangeException
|
||||||
|
*/
|
||||||
|
public static function setMatchedOrderProps(?array $customPropsList)
|
||||||
|
{
|
||||||
|
static::setOption(Constants::MATCHED_CUSTOM_PROPS, serialize($customPropsList));
|
||||||
|
'selected';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getMatchedUserFields()
|
||||||
|
{
|
||||||
|
if (self::isEmptyNotZero(static::$mathedCustomFields)) {
|
||||||
|
static::$mathedCustomFields = static::getUnserializedOption(Constants::MATCHED_CUSTOM_USER_FIELDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
return static::$mathedCustomFields;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array|null $customUserFields
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws \Bitrix\Main\ArgumentOutOfRangeException
|
||||||
|
*/
|
||||||
|
public static function setMatchedUserFields(?array $customUserFields)
|
||||||
|
{
|
||||||
|
static::setOption(Constants::MATCHED_CUSTOM_USER_FIELDS, serialize($customUserFields));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -105,4 +105,7 @@ class Constants
|
|||||||
public const SITES_AVAILABLE = 'sites_available';
|
public const SITES_AVAILABLE = 'sites_available';
|
||||||
|
|
||||||
public const RECEIVE_TRACK_NUMBER_DELIVERY = 'receive_track_number_delivery';
|
public const RECEIVE_TRACK_NUMBER_DELIVERY = 'receive_track_number_delivery';
|
||||||
|
public const CUSTOM_FIELDS_TOGGLE = 'custom_fields_toggle';
|
||||||
|
public const MATCHED_CUSTOM_PROPS = 'matched_order_props';
|
||||||
|
public const MATCHED_CUSTOM_USER_FIELDS = 'matched_custom_field';
|
||||||
}
|
}
|
||||||
|
@ -120,6 +120,16 @@ if (file_exists($_SERVER["DOCUMENT_ROOT"] . '/bitrix/modules/intaro.retailcrm/cl
|
|||||||
|
|
||||||
$arResult['arSites'] = RCrmActions::getSitesList();
|
$arResult['arSites'] = RCrmActions::getSitesList();
|
||||||
$arResult['arCurrencySites'] = RCrmActions::getCurrencySites();
|
$arResult['arCurrencySites'] = RCrmActions::getCurrencySites();
|
||||||
|
$arResult['bitrixOrdersCustomProp'] = [];
|
||||||
|
$arResult['bitrixCustomUserFields'] = [];
|
||||||
|
|
||||||
|
if (method_exists(RCrmActions::class, 'customOrderPropList')
|
||||||
|
&& method_exists(RCrmActions::class, 'customUserFieldList')
|
||||||
|
) {
|
||||||
|
$arResult['bitrixOrdersCustomProp'] = RCrmActions::customOrderPropList();
|
||||||
|
$arResult['bitrixCustomUserFields'] = RCrmActions::customUserFieldList();
|
||||||
|
}
|
||||||
|
|
||||||
//ajax update deliveryServices
|
//ajax update deliveryServices
|
||||||
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') && isset($_POST['ajax']) && ($_POST['ajax'] === 1)) {
|
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') && isset($_POST['ajax']) && ($_POST['ajax'] === 1)) {
|
||||||
$api_host = COption::GetOptionString($mid, $CRM_API_HOST_OPTION, 0);
|
$api_host = COption::GetOptionString($mid, $CRM_API_HOST_OPTION, 0);
|
||||||
@ -934,6 +944,34 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
|
|||||||
$bitrixCorpAdres
|
$bitrixCorpAdres
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (isset($_POST['custom_fields_toggle']) && $_POST['custom_fields_toggle'] === 'on') {
|
||||||
|
$counter = 1;
|
||||||
|
$customOrderProps = [];
|
||||||
|
$customUserFields = [];
|
||||||
|
|
||||||
|
foreach ($arResult['bitrixOrdersCustomProp'] as $list) {
|
||||||
|
foreach ($list as $code => $text) {
|
||||||
|
if (!empty($_POST['bitrixOrderFields_' . $code]) && !empty($_POST['crmOrderFields_' . $code])) {
|
||||||
|
$customOrderProps[htmlspecialchars($_POST['bitrixOrderFields_' . $code])] = htmlspecialchars($_POST['crmOrderFields_' . $code]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($arResult['bitrixCustomUserFields'] as $list) {
|
||||||
|
foreach ($list as $code => $text) {
|
||||||
|
if (!empty($_POST['bitrixUserFields_' . $code]) && !empty($_POST['crmUserFields_' . $code])) {
|
||||||
|
$customUserFields[htmlspecialchars($_POST['bitrixUserFields_' . $code])] = htmlspecialchars($_POST['crmUserFields_' . $code]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ConfigProvider::setCustomFieldsStatus('Y');
|
||||||
|
ConfigProvider::setMatchedOrderProps($customOrderProps);
|
||||||
|
ConfigProvider::setMatchedUserFields($customUserFields);
|
||||||
|
} else {
|
||||||
|
ConfigProvider::setCustomFieldsStatus('N');
|
||||||
|
}
|
||||||
|
|
||||||
$request = Application::getInstance()->getContext()->getRequest();
|
$request = Application::getInstance()->getContext()->getRequest();
|
||||||
|
|
||||||
if ($request->isHttps() === true) {
|
if ($request->isHttps() === true) {
|
||||||
@ -961,6 +999,16 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
|
|||||||
$arResult['sitesList'] = $APPLICATION->ConvertCharsetArray($api->sitesList()->sites, 'utf-8', SITE_CHARSET);
|
$arResult['sitesList'] = $APPLICATION->ConvertCharsetArray($api->sitesList()->sites, 'utf-8', SITE_CHARSET);
|
||||||
$arResult['inventoriesList'] = $APPLICATION->ConvertCharsetArray($api->storesList()->stores, 'utf-8', SITE_CHARSET);
|
$arResult['inventoriesList'] = $APPLICATION->ConvertCharsetArray($api->storesList()->stores, 'utf-8', SITE_CHARSET);
|
||||||
$arResult['priceTypeList'] = $APPLICATION->ConvertCharsetArray($api->pricesTypes()->priceTypes, 'utf-8', SITE_CHARSET);
|
$arResult['priceTypeList'] = $APPLICATION->ConvertCharsetArray($api->pricesTypes()->priceTypes, 'utf-8', SITE_CHARSET);
|
||||||
|
$arResult['crmCustomOrderFields'] = $APPLICATION->ConvertCharsetArray(
|
||||||
|
$api->customFieldsList(['entity' => 'order', 'type' => ['string','text', 'numeric', 'boolean', 'date']], 250)->customFields,
|
||||||
|
'utf-8',
|
||||||
|
SITE_CHARSET
|
||||||
|
);
|
||||||
|
$arResult['crmCustomUserFields'] = $APPLICATION->ConvertCharsetArray(
|
||||||
|
$api->customFieldsList(['entity' => 'customer', 'type' => ['string', 'text', 'integer', 'numeric', 'boolean', 'date']], 250)->customFields,
|
||||||
|
'utf-8',
|
||||||
|
SITE_CHARSET
|
||||||
|
);
|
||||||
} catch (\RetailCrm\Exception\CurlException $e) {
|
} catch (\RetailCrm\Exception\CurlException $e) {
|
||||||
RCrmActions::eventLog(
|
RCrmActions::eventLog(
|
||||||
'intaro.retailcrm/options.php', 'RetailCrm\ApiClient::*List::CurlException',
|
'intaro.retailcrm/options.php', 'RetailCrm\ApiClient::*List::CurlException',
|
||||||
@ -976,6 +1024,40 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
|
|||||||
echo CAdminMessage::ShowMessage(GetMessage('ERR_JSON'));
|
echo CAdminMessage::ShowMessage(GetMessage('ERR_JSON'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$crmCustomOrderFieldsList = [];
|
||||||
|
$crmCustomUserFieldsList = [];
|
||||||
|
|
||||||
|
foreach ($arResult['crmCustomOrderFields'] as $customField) {
|
||||||
|
$type = $customField['type'];
|
||||||
|
|
||||||
|
if ($type === 'text') {
|
||||||
|
$type = 'string';
|
||||||
|
}
|
||||||
|
|
||||||
|
$crmCustomOrderFieldsList[strtoupper($type) . '_TYPE'][] = ['name' => $customField['name'], 'code' => $customField['code']];
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($arResult['crmCustomUserFields'] as $customField) {
|
||||||
|
$type = $customField['type'];
|
||||||
|
|
||||||
|
if ($type === 'text') {
|
||||||
|
$type = 'string';
|
||||||
|
}
|
||||||
|
|
||||||
|
$crmCustomUserFieldsList[strtoupper($type). '_TYPE'][] = ['name' => $customField['name'], 'code' => $customField['code']];
|
||||||
|
}
|
||||||
|
|
||||||
|
ksort($crmCustomOrderFieldsList);
|
||||||
|
ksort($crmCustomUserFieldsList);
|
||||||
|
|
||||||
|
$arResult['crmCustomOrderFields'] = $crmCustomOrderFieldsList;
|
||||||
|
$arResult['crmCustomUserFields'] = $crmCustomUserFieldsList;
|
||||||
|
|
||||||
|
unset($crmCustomOrderFieldsList, $crmCustomUserFieldsList);
|
||||||
|
|
||||||
|
$arResult['matchedOrderProps'] = ConfigProvider::getMatchedOrderProps();
|
||||||
|
$arResult['matchedUserFields'] = ConfigProvider::getMatchedUserFields();
|
||||||
|
|
||||||
$arResult['paymentTypesList'] = RetailCrmService::getAvailableTypes(
|
$arResult['paymentTypesList'] = RetailCrmService::getAvailableTypes(
|
||||||
$availableSites,
|
$availableSites,
|
||||||
$api->paymentTypesList()->paymentTypes
|
$api->paymentTypesList()->paymentTypes
|
||||||
@ -1166,13 +1248,19 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
|
|||||||
"TITLE" => GetMessage('ICRM_OPTIONS_ORDER_DISCHARGE_CAPTION'),
|
"TITLE" => GetMessage('ICRM_OPTIONS_ORDER_DISCHARGE_CAPTION'),
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"DIV" => "edit5",
|
"DIV" => "edit5",
|
||||||
|
"TAB" => GetMessage('CUSTOM_FIELDS_TITLE'),
|
||||||
|
"ICON" => '',
|
||||||
|
"TITLE" => GetMessage('CUSTOM_FIELDS_CAPTION'),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"DIV" => "edit6",
|
||||||
"TAB" => GetMessage('UPLOAD_ORDERS_OPTIONS'),
|
"TAB" => GetMessage('UPLOAD_ORDERS_OPTIONS'),
|
||||||
"ICON" => '',
|
"ICON" => '',
|
||||||
"TITLE" => GetMessage('ORDER_UPLOAD'),
|
"TITLE" => GetMessage('ORDER_UPLOAD'),
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"DIV" => "edit6",
|
"DIV" => "edit7",
|
||||||
"TAB" => GetMessage('OTHER_OPTIONS'),
|
"TAB" => GetMessage('OTHER_OPTIONS'),
|
||||||
"ICON" => '',
|
"ICON" => '',
|
||||||
"TITLE" => GetMessage('ICRM_OPTIONS_ORDER_DISCHARGE_CAPTION'),
|
"TITLE" => GetMessage('ICRM_OPTIONS_ORDER_DISCHARGE_CAPTION'),
|
||||||
@ -1323,6 +1411,97 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
|
|||||||
$('#loyalty_main_settings').toggle(500);
|
$('#loyalty_main_settings').toggle(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function switchCustomFieldsStatus() {
|
||||||
|
$('#custom_fields_settings').toggle(500);
|
||||||
|
}
|
||||||
|
|
||||||
|
function createMatched(type)
|
||||||
|
{
|
||||||
|
let bitrixName = "bitrix" + type + "Fields";
|
||||||
|
let crmName = "crm" + type + "Fields";
|
||||||
|
|
||||||
|
let elements = document.getElementsByClassName("adm-list-table-row matched-" + type);
|
||||||
|
let nextId = 1;
|
||||||
|
|
||||||
|
if (elements.length >= 1) {
|
||||||
|
let lastElement = elements[elements.length - 1];
|
||||||
|
nextId = parseInt(lastElement.id.replace("matched" + type + "Fields_", "")) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
let matchedBlank = document.getElementById(type + "MatchedFieldsBlank");
|
||||||
|
let matchedElement = matchedBlank.cloneNode(true);
|
||||||
|
|
||||||
|
matchedElement.classList.add("adm-list-table-row");
|
||||||
|
matchedElement.classList.add("matched-" + type);
|
||||||
|
matchedElement.setAttribute("id", "matched" + type + "Fields_" + nextId);
|
||||||
|
matchedElement.querySelector(`select[name=${bitrixName}`).setAttribute("name", bitrixName + "_" + nextId);
|
||||||
|
matchedElement.querySelector(`select[name=${crmName}`).setAttribute("name", crmName + "_" + nextId);
|
||||||
|
matchedElement.removeAttribute("hidden");
|
||||||
|
|
||||||
|
document.getElementById(type + "_matched").appendChild(matchedElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteMatched(element)
|
||||||
|
{
|
||||||
|
element.parentNode.parentNode.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateEmptyMatched()
|
||||||
|
{
|
||||||
|
let elements = document.getElementsByClassName("adm-list-table-row matched-Order");
|
||||||
|
|
||||||
|
if (elements.length < 1) {
|
||||||
|
createMatched("Order");
|
||||||
|
}
|
||||||
|
|
||||||
|
elements = document.getElementsByClassName("adm-list-table-row matched-User");
|
||||||
|
|
||||||
|
if (elements.length < 1) {
|
||||||
|
createMatched("User");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeSelectBitrixValue(element, nameBitrix, nameCrm)
|
||||||
|
{
|
||||||
|
let name = element.getAttribute("name");
|
||||||
|
let uniqIdSelect = name.replace(nameBitrix, "");
|
||||||
|
let selectedValue = element.value;
|
||||||
|
let checkElements = document.getElementsByName(nameCrm + selectedValue);
|
||||||
|
|
||||||
|
if (checkElements.length === 0) {
|
||||||
|
let selectCrm = document.getElementsByName(nameCrm + uniqIdSelect);
|
||||||
|
selectCrm[0].setAttribute('name', nameCrm + selectedValue);
|
||||||
|
element.setAttribute('name', nameBitrix + selectedValue);
|
||||||
|
} else {
|
||||||
|
let text = element.options[element.selectedIndex].text;
|
||||||
|
element.value = uniqIdSelect;
|
||||||
|
|
||||||
|
alert('Поле: "' + text +'" уже используется в обмене');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeSelectCrmValue(element, nameElement)
|
||||||
|
{
|
||||||
|
let selectedValue = element.value;
|
||||||
|
let checkElement = document.getElementById(nameElement + selectedValue)
|
||||||
|
|
||||||
|
if (checkElement === null) {
|
||||||
|
element.id = nameElement + selectedValue;
|
||||||
|
} else {
|
||||||
|
let currentId = element.id;
|
||||||
|
let code = '';
|
||||||
|
|
||||||
|
if (currentId !== null) {
|
||||||
|
code = currentId.replace(nameElement, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
let text = element.options[element.selectedIndex].text;
|
||||||
|
element.value = code;
|
||||||
|
|
||||||
|
alert('Поле: "' + text + '" уже используется в обмене');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$('input.addr').change(function() {
|
$('input.addr').change(function() {
|
||||||
splitName = $(this).attr('name').split('-');
|
splitName = $(this).attr('name').split('-');
|
||||||
@ -1877,7 +2056,6 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
|
|||||||
</tr>
|
</tr>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
|
|
||||||
<?php $tabControl->BeginNextTab(); ?>
|
<?php $tabControl->BeginNextTab(); ?>
|
||||||
<?php
|
<?php
|
||||||
//loyalty program options
|
//loyalty program options
|
||||||
@ -2072,6 +2250,274 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<?php $tabControl->BeginNextTab(); ?>
|
||||||
|
<?php
|
||||||
|
$customFieldsToggle = ConfigProvider::getCustomFieldsStatus();
|
||||||
|
?>
|
||||||
|
<tr class="">
|
||||||
|
<td class="option-head" colspan="2">
|
||||||
|
<p><b><?php echo GetMessage('NOTATION_CUSTOM_FIELDS'); ?></b></p>
|
||||||
|
<p><b><?php echo GetMessage('NOTATION_MATCHED_CUSTOM_FIELDS'); ?></b></p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="heading">
|
||||||
|
<td colspan="2" class="option-other-heading">
|
||||||
|
<b>
|
||||||
|
<label>
|
||||||
|
<input class="addr" type="checkbox" id="custom_fields_toggle" name="custom_fields_toggle" onclick="switchCustomFieldsStatus();" <?php if ($customFieldsToggle === 'Y') {
|
||||||
|
echo "checked";
|
||||||
|
} ?>>
|
||||||
|
<?php echo GetMessage('CUSTOM_FIELDS_TOGGLE_MSG'); ?>
|
||||||
|
</label>
|
||||||
|
</b>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<div id="custom_fields_settings" <?php if ($customFieldsToggle !== 'Y') {
|
||||||
|
echo "hidden";
|
||||||
|
} ?>>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<table class="adm-list-table">
|
||||||
|
<thead>
|
||||||
|
<tr class="adm-list-table-header">
|
||||||
|
<th class="adm-list-table-cell option-head option-other-top option-other-bottom" colspan="4">
|
||||||
|
<?php echo GetMessage('CUSTOM_FIELDS_ORDER_LABEL');?>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<th class="option-head option-other-top option-other-bottom" colspan="4">
|
||||||
|
<button class="adm-btn-save" type="button" onclick="createMatched(`Order`)"><?php echo GetMessage('ADD_LABEL'); ?></button>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
<tbody id="Order_matched">
|
||||||
|
<?php
|
||||||
|
$matchedPropsNum = 1;
|
||||||
|
foreach ($arResult['matchedOrderProps'] as $bitrixProp => $crmField) {?>
|
||||||
|
<tr class="adm-list-table-row matched-Order" id="matchedOrderFields_<?php echo $matchedPropsNum ?>">
|
||||||
|
<td class="adm-list-table-cell adm-detail-content-cell-l" colspan="2" width="50%">
|
||||||
|
<select
|
||||||
|
style="width: 200px;" class="typeselect"
|
||||||
|
name="bitrixOrderFields_<?php echo $bitrixProp ?>"
|
||||||
|
onchange="changeSelectBitrixValue(this, 'bitrixOrderFields_', 'crmOrderFields_');"
|
||||||
|
>
|
||||||
|
<option value=""></option>
|
||||||
|
|
||||||
|
<?php foreach ($arResult['bitrixOrdersCustomProp'] as $type => $mass) {?>
|
||||||
|
<optgroup label="<?php echo GetMessage($type); ?>">
|
||||||
|
<?php foreach ($mass as $code => $prop) {?>
|
||||||
|
<option
|
||||||
|
value="<?php echo $code ?>"
|
||||||
|
<?php if ($bitrixProp === $code) echo 'selected'; ?>
|
||||||
|
>
|
||||||
|
<?php echo $prop ?>
|
||||||
|
</option>
|
||||||
|
<?php } ?>
|
||||||
|
</optgroup>
|
||||||
|
<?php } ?>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td class="adm-list-table-cell adm-detail-content-cell-r" colspan="2" width="50%">
|
||||||
|
|
||||||
|
<select
|
||||||
|
style="width: 200px;" class="typeselect"
|
||||||
|
name="crmOrderFields_<?php echo $bitrixProp ?>"
|
||||||
|
id="crmOrder_<?php echo $crmField?>"
|
||||||
|
onchange="changeSelectCrmValue(this, 'crmOrder_')"
|
||||||
|
>
|
||||||
|
<option value=""></option>
|
||||||
|
<?php foreach ($arResult['crmCustomOrderFields'] as $type => $mass) {?>
|
||||||
|
<optgroup label="<?php echo GetMessage($type); ?>">
|
||||||
|
<?php foreach ($mass as $crmProp) {?>
|
||||||
|
<option
|
||||||
|
value="<?php echo $crmProp['code'] ?>"
|
||||||
|
<?php if ($crmField === $crmProp['code']) echo 'selected'; ?>
|
||||||
|
>
|
||||||
|
<?php echo $crmProp['name'] ?>
|
||||||
|
</option>
|
||||||
|
<?php } ?>
|
||||||
|
</optgroup>
|
||||||
|
<?php } ?>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<a onclick="deleteMatched(this)" style="cursor: pointer"><?php echo GetMessage('DELETE_MATCHED'); ?></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<?php $matchedPropsNum++; }?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<table class="adm-list-table">
|
||||||
|
<thead>
|
||||||
|
<tr class="adm-list-table-header">
|
||||||
|
<th class="adm-list-table-cell option-head option-other-top option-other-bottom" colspan="4">
|
||||||
|
<?php echo GetMessage('CUSTOM_FIELDS_USER_LABEL');?>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<th class="option-head option-other-top option-other-bottom" colspan="4">
|
||||||
|
<button class="adm-btn-save" type="button" onclick="createMatched(`User`)"><?php echo GetMessage('ADD_LABEL'); ?></button>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
<tbody id="User_matched">
|
||||||
|
<?php
|
||||||
|
$matchedFieldsNum = 1;
|
||||||
|
foreach ($arResult['matchedUserFields'] as $bitrixProp => $crmField) {?>
|
||||||
|
<tr class="adm-list-table-row matched-User" id="matchedUserFields_<?php echo $matchedFieldsNum ?>">
|
||||||
|
<td class="adm-list-table-cell adm-detail-content-cell-l" colspan="2" width="50%">
|
||||||
|
<select
|
||||||
|
style="width: 200px;" class="typeselect"
|
||||||
|
name="bitrixUserFields_<?php echo $bitrixProp ?>"
|
||||||
|
onchange="changeSelectBitrixValue(this, 'bitrixUserFields_', 'crmUserFields_');"
|
||||||
|
>
|
||||||
|
<option value=""></option>
|
||||||
|
<?php foreach ($arResult['bitrixCustomUserFields'] as $type => $mass) {?>
|
||||||
|
<optgroup label="<?php echo GetMessage($type); ?>">
|
||||||
|
<?php foreach ($mass as $code => $prop) {?>
|
||||||
|
<option
|
||||||
|
value="<?php echo $code ?>"
|
||||||
|
<?php if ($bitrixProp === $code) echo 'selected'; ?>
|
||||||
|
>
|
||||||
|
<?php echo $prop ?>
|
||||||
|
</option>
|
||||||
|
<?php } ?>
|
||||||
|
</optgroup>
|
||||||
|
<?php } ?>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td class="adm-list-table-cell adm-detail-content-cell-r" colspan="2" width="50%">
|
||||||
|
|
||||||
|
<select
|
||||||
|
style="width: 200px;" class="typeselect"
|
||||||
|
name="crmUserFields_<?php echo $bitrixProp ?>"
|
||||||
|
id="crmClient_<?php echo $crmField?>"
|
||||||
|
onchange="changeSelectCrmValue(this, 'crmClient_')"
|
||||||
|
>
|
||||||
|
<option value=""></option>
|
||||||
|
<?php foreach ($arResult['crmCustomUserFields'] as $type => $mass) {?>
|
||||||
|
<optgroup label="<?php echo GetMessage($type); ?>">
|
||||||
|
<?php foreach ($mass as $crmProp) {?>
|
||||||
|
<option
|
||||||
|
value="<?php echo $crmProp['code'] ?>"
|
||||||
|
<?php if ($crmField === $crmProp['code']) echo 'selected'; ?>
|
||||||
|
>
|
||||||
|
<?php echo $crmProp['name'] ?>
|
||||||
|
</option>
|
||||||
|
<?php } ?>
|
||||||
|
</optgroup>
|
||||||
|
<?php } ?>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<a onclick="deleteMatched(this)" style="cursor: pointer"><?php echo GetMessage('DELETE_MATCHED'); ?></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<?php $matchedFieldsNum++; }?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr id="OrderMatchedFieldsBlank" hidden="hidden">
|
||||||
|
<td class="adm-list-table-cell adm-detail-content-cell-l" colspan="2" width="50%">
|
||||||
|
<select
|
||||||
|
style="width: 200px;" class="typeselect"
|
||||||
|
name="bitrixOrderFields"
|
||||||
|
onchange="changeSelectBitrixValue(this, 'bitrixOrderFields_', 'crmOrderFields_');"
|
||||||
|
>
|
||||||
|
<option value=""></option>
|
||||||
|
<?php foreach ($arResult['bitrixOrdersCustomProp'] as $type => $mass) {?>
|
||||||
|
<optgroup label="<?php echo GetMessage($type); ?>">
|
||||||
|
<?php foreach ($mass as $code => $prop) {?>
|
||||||
|
<option
|
||||||
|
value="<?php echo $code ?>"
|
||||||
|
<?php if ($bitrixProp === $code) echo 'selected'; ?>
|
||||||
|
>
|
||||||
|
<?php echo $prop ?>
|
||||||
|
</option>
|
||||||
|
<?php } ?>
|
||||||
|
</optgroup>
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td class="adm-list-table-cell adm-detail-content-cell-r" colspan="2" width="50%">
|
||||||
|
|
||||||
|
<select
|
||||||
|
style="width: 200px;" class="typeselect"
|
||||||
|
name="crmOrderFields"
|
||||||
|
onchange="changeSelectCrmValue(this, 'crmOrder_')"
|
||||||
|
>
|
||||||
|
<option value=""></option>
|
||||||
|
<?php foreach ($arResult['crmCustomOrderFields'] as $type => $mass) {?>
|
||||||
|
<optgroup label="<?php echo GetMessage($type); ?>">
|
||||||
|
<?php foreach ($mass as $crmProp) {?>
|
||||||
|
<option
|
||||||
|
value="<?php echo $crmProp['code'] ?>"
|
||||||
|
<?php if ($crmField === $crmProp['code']) echo 'selected'; ?>
|
||||||
|
>
|
||||||
|
<?php echo $crmProp['name'] ?>
|
||||||
|
</option>
|
||||||
|
<?php } ?>
|
||||||
|
</optgroup>
|
||||||
|
<?php } ?>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<a onclick="deleteMatched(this)" style="cursor: pointer"><?php echo GetMessage('DELETE_MATCHED'); ?></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr id="UserMatchedFieldsBlank" hidden="hidden">
|
||||||
|
<td class="adm-list-table-cell adm-detail-content-cell-l" colspan="2" width="50%">
|
||||||
|
<select
|
||||||
|
style="width: 200px;" class="typeselect"
|
||||||
|
name="bitrixUserFields"
|
||||||
|
onchange="changeSelectBitrixValue(this, 'bitrixUserFields_', 'crmUserFields_');"
|
||||||
|
>
|
||||||
|
<option value=""></option>
|
||||||
|
<?php foreach ($arResult['bitrixCustomUserFields'] as $type => $mass) {?>
|
||||||
|
<optgroup label="<?php echo GetMessage($type); ?>">
|
||||||
|
<?php foreach ($mass as $code => $prop) {?>
|
||||||
|
<option value="<?php echo $code ?>">
|
||||||
|
<?php echo $prop ?>
|
||||||
|
</option>
|
||||||
|
<?php } ?>
|
||||||
|
</optgroup>
|
||||||
|
<?php } ?>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td class="adm-list-table-cell adm-detail-content-cell-r" colspan="2" width="50%">
|
||||||
|
|
||||||
|
<select
|
||||||
|
style="width: 200px;" class="typeselect"
|
||||||
|
name="crmUserFields"
|
||||||
|
onchange="changeSelectCrmValue(this, 'crmClient_')"
|
||||||
|
>
|
||||||
|
<option value=""></option>
|
||||||
|
<?php foreach ($arResult['crmCustomUserFields'] as $type => $mass) {?>
|
||||||
|
<optgroup label="<?php echo GetMessage($type); ?>">
|
||||||
|
<?php foreach ($mass as $crmProp) {?>
|
||||||
|
<option value="<?php echo $crmProp['code'] ?>">
|
||||||
|
<?php echo $crmProp['name'] ?>
|
||||||
|
</option>
|
||||||
|
<?php } ?>
|
||||||
|
</optgroup>
|
||||||
|
<?php } ?>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<a onclick="deleteMatched(this)" style="cursor: pointer"><?php echo GetMessage('DELETE_MATCHED'); ?></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<?php // Manual orders upload. ?>
|
<?php // Manual orders upload. ?>
|
||||||
<?php $tabControl->BeginNextTab(); ?>
|
<?php $tabControl->BeginNextTab(); ?>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
@ -2149,6 +2595,8 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
|
|||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
generateEmptyMatched();
|
||||||
|
|
||||||
$('#percent').width($('.install-progress-bar-outer').width());
|
$('#percent').width($('.install-progress-bar-outer').width());
|
||||||
|
|
||||||
$(window).resize(function() { // strechin progress bar
|
$(window).resize(function() { // strechin progress bar
|
||||||
|
@ -1195,7 +1195,14 @@ function update()
|
|||||||
(new UpdateSubscribe())
|
(new UpdateSubscribe())
|
||||||
->CopyFiles()
|
->CopyFiles()
|
||||||
->addEvent()
|
->addEvent()
|
||||||
->addCustomUserField();
|
->addCustomUserField()
|
||||||
|
;
|
||||||
|
|
||||||
|
COption::SetOptionString(
|
||||||
|
'intaro.retailcrm',
|
||||||
|
'custom_fields_toggle',
|
||||||
|
'N'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -47,7 +47,13 @@ class BitrixTestCase extends \PHPUnit\Framework\TestCase
|
|||||||
'USER_DESCRIPTION' => 'userComment',
|
'USER_DESCRIPTION' => 'userComment',
|
||||||
'COMMENTS' => 'managerComment',
|
'COMMENTS' => 'managerComment',
|
||||||
'PRICE_DELIVERY' => '100',
|
'PRICE_DELIVERY' => '100',
|
||||||
'PROPS' => ['properties' => [['CODE' => 'FIO', 'VALUE' => ['FirstName LastName']]]],
|
'PROPS' => [
|
||||||
|
'properties' => [
|
||||||
|
['CODE' => 'FIO', 'VALUE' => ['FirstName LastName']],
|
||||||
|
['ID' => 1, 'CODE' => 'TEST_PROP_1', 'VALUE' => ['test 1']],
|
||||||
|
['ID' => 2, 'CODE' => 'TEST_PROP_2', 'VALUE' => ['test 2']]
|
||||||
|
]
|
||||||
|
],
|
||||||
'DELIVERYS' => [[
|
'DELIVERYS' => [[
|
||||||
'id' => 'test',
|
'id' => 'test',
|
||||||
'service' => 'service'
|
'service' => 'service'
|
||||||
|
@ -4,6 +4,7 @@ use Bitrix\Sale\Order;
|
|||||||
use Bitrix\Currency\CurrencyManager;
|
use Bitrix\Currency\CurrencyManager;
|
||||||
use RetailCrm\Response\ApiResponse;
|
use RetailCrm\Response\ApiResponse;
|
||||||
use Tests\Intaro\RetailCrm\DataHistory;
|
use Tests\Intaro\RetailCrm\DataHistory;
|
||||||
|
use CUserTypeEntity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class RetailCrmHistory_v5Test
|
* Class RetailCrmHistory_v5Test
|
||||||
@ -27,10 +28,21 @@ class RetailCrmHistory_v5Test extends \BitrixTestCase
|
|||||||
*/
|
*/
|
||||||
public function testRegisterUser(): void
|
public function testRegisterUser(): void
|
||||||
{
|
{
|
||||||
|
RetailcrmConfigProvider::setCustomFieldsStatus('Y');
|
||||||
|
RetailcrmConfigProvider::setMatchedUserFields(
|
||||||
|
['UF_FIELD_USER_1' => 'custom_1', 'UF_FIELD_USER_2' => 'custom_2']
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->registerCustomFields();
|
||||||
|
|
||||||
$actionsMock = Mockery::mock('alias:' . RCrmActions::class);
|
$actionsMock = Mockery::mock('alias:' . RCrmActions::class);
|
||||||
$apiResponse = new ApiResponse(200, DataHistory::get_history_data_new_customer());
|
$apiResponse = new ApiResponse(200, DataHistory::get_history_data_new_customer());
|
||||||
|
|
||||||
$actionsMock->shouldReceive('apiMethod')->withAnyArgs()->andReturn($apiResponse);
|
$actionsMock->shouldReceive('apiMethod')->withAnyArgs()->andReturn($apiResponse);
|
||||||
|
$actionsMock->shouldReceive('getTypeUserField')->withAnyArgs()->andReturn([
|
||||||
|
'UF_FIELD_USER_1' => 'string', 'UF_FIELD_USER_2' => 'string'
|
||||||
|
]);
|
||||||
|
$actionsMock->shouldReceive('convertCrmValueToCmsField')->byDefault();
|
||||||
|
|
||||||
$this->deleteTestingUser();
|
$this->deleteTestingUser();
|
||||||
RetailCrmHistory::customerHistory();
|
RetailCrmHistory::customerHistory();
|
||||||
@ -38,6 +50,8 @@ class RetailCrmHistory_v5Test extends \BitrixTestCase
|
|||||||
$dbUser = CUser::GetList(($by = 'ID'), ($sort = 'DESC'), ['=EMAIL' => 'testbitrixreg@gmail.com']);
|
$dbUser = CUser::GetList(($by = 'ID'), ($sort = 'DESC'), ['=EMAIL' => 'testbitrixreg@gmail.com']);
|
||||||
|
|
||||||
$this->assertEquals(1, $dbUser->SelectedRowsCount());
|
$this->assertEquals(1, $dbUser->SelectedRowsCount());
|
||||||
|
|
||||||
|
RetailcrmConfigProvider::setCustomFieldsStatus('N');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -220,4 +234,38 @@ class RetailCrmHistory_v5Test extends \BitrixTestCase
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function registerCustomFields()
|
||||||
|
{
|
||||||
|
$oUserTypeEntity = new CUserTypeEntity();
|
||||||
|
$userField = [
|
||||||
|
'ENTITY_ID' => 'USER',
|
||||||
|
'FIELD_NAME' => 'UF_FIELD_USER_1',
|
||||||
|
'USER_TYPE_ID' => 'string',
|
||||||
|
'MULTIPLE' => 'N',
|
||||||
|
'MANDATORY' => 'N',
|
||||||
|
'EDIT_FROM_LABEL' => ['ru' => 'TEST 1']
|
||||||
|
];
|
||||||
|
|
||||||
|
$dbRes = CUserTypeEntity::GetList([], ['FIELD_NAME' => 'UF_FIELD_USER_1'])->fetch();
|
||||||
|
|
||||||
|
if (!$dbRes['ID']) {
|
||||||
|
$oUserTypeEntity->Add($userField);
|
||||||
|
}
|
||||||
|
|
||||||
|
$userField = [
|
||||||
|
'ENTITY_ID' => 'USER',
|
||||||
|
'FIELD_NAME' => 'UF_FIELD_USER_2',
|
||||||
|
'USER_TYPE_ID' => 'string',
|
||||||
|
'MULTIPLE' => 'N',
|
||||||
|
'MANDATORY' => 'N',
|
||||||
|
'EDIT_FROM_LABEL' => ['ru' => 'TEST 2']
|
||||||
|
];
|
||||||
|
|
||||||
|
$dbRes = CUserTypeEntity::GetList([], ['FIELD_NAME' => 'UF_FIELD_USER_2'])->fetch();
|
||||||
|
|
||||||
|
if (!$dbRes['ID']) {
|
||||||
|
$oUserTypeEntity->Add($userField);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,8 @@ class RetailCrmOrder_v5Test extends BitrixTestCase {
|
|||||||
*/
|
*/
|
||||||
public function testOrderSend($arFields, $arParams, $methodApi, $expected)
|
public function testOrderSend($arFields, $arParams, $methodApi, $expected)
|
||||||
{
|
{
|
||||||
|
RetailcrmConfigProvider::setCustomFieldsStatus('Y');
|
||||||
|
|
||||||
self::assertEquals($expected, RetailCrmOrder::orderSend(
|
self::assertEquals($expected, RetailCrmOrder::orderSend(
|
||||||
$arFields,
|
$arFields,
|
||||||
new stdClass(),
|
new stdClass(),
|
||||||
@ -103,7 +105,8 @@ class RetailCrmOrder_v5Test extends BitrixTestCase {
|
|||||||
'optionsDelivTypes' => RetailcrmConfigProvider::getDeliveryTypes(),
|
'optionsDelivTypes' => RetailcrmConfigProvider::getDeliveryTypes(),
|
||||||
'optionsPayTypes' => RetailcrmConfigProvider::getPaymentTypes(),
|
'optionsPayTypes' => RetailcrmConfigProvider::getPaymentTypes(),
|
||||||
'optionsOrderProps' => ['bitrixType' => ['fio' => 'FIO']],
|
'optionsOrderProps' => ['bitrixType' => ['fio' => 'FIO']],
|
||||||
'optionsPayment' => ['Y' => 'paid']
|
'optionsPayment' => ['Y' => 'paid'],
|
||||||
|
'customOrderProps' => ['1#TEST_PROP_1' => 'custom_first', '2#TEST_PROP_2' => 'custom_second']
|
||||||
];
|
];
|
||||||
|
|
||||||
return [[
|
return [[
|
||||||
@ -136,7 +139,8 @@ class RetailCrmOrder_v5Test extends BitrixTestCase {
|
|||||||
'privilegeType' => 'none',
|
'privilegeType' => 'none',
|
||||||
'statusComment' => $arFields['REASON_CANCELED'],
|
'statusComment' => $arFields['REASON_CANCELED'],
|
||||||
'firstName' => 'FirstName',
|
'firstName' => 'FirstName',
|
||||||
'lastName' => 'LastName'
|
'lastName' => 'LastName',
|
||||||
|
'customFields' => ['custom_first' => 'test 1', 'custom_second' => 'test 2']
|
||||||
],
|
],
|
||||||
]];
|
]];
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,9 @@ class DataHistory
|
|||||||
"text": "Street"
|
"text": "Street"
|
||||||
},
|
},
|
||||||
"customFields": {
|
"customFields": {
|
||||||
"crm_customer": "test_customer"
|
"crm_customer": "test_customer",
|
||||||
|
"custom_1": "test 1",
|
||||||
|
"custom_2": "test 2"
|
||||||
},
|
},
|
||||||
"segments": [],
|
"segments": [],
|
||||||
"firstName": "Test_Name",
|
"firstName": "Test_Name",
|
||||||
|
Loading…
Reference in New Issue
Block a user