1
0
Fork 0
mirror of synced 2025-04-11 05:00:55 +00:00
Поддержка разных типов кастомных полей для заказа
This commit is contained in:
Ivan Chaplygin 2023-12-07 13:09:13 +03:00
parent 066655eea4
commit 20695708d8
5 changed files with 113 additions and 30 deletions

View file

@ -443,12 +443,13 @@ class RCrmActions
public static function customOrderPropList()
{
$propsList = OrderPropsTable::getList([
'select' => ['ID', 'CODE', 'NAME', 'PERSON_TYPE_ID'],
'select' => ['ID', 'CODE', 'NAME', 'PERSON_TYPE_ID', 'TYPE'],
'filter' => [
['!=CODE' => "LP_BONUS_INFO"],
['!=CODE' => "LP_DISCOUNT_INFO"],
['>ID' => 19],
['TYPE' => 'STRING']
['?TYPE' => 'STRING | NUMBER | Y/N | DATE'],
['MULTIPLE' => 'N']
]
]);
@ -458,6 +459,7 @@ class RCrmActions
foreach ($propsList as $prop) {
$key = $prop['ID'] . '#' . $prop['CODE'];
$resultList[$key] = $prop['NAME'] . ' (' . $prop['PERSON_TYPE_ID'] . ')';
$resultList[$prop['TYPE'] . '_TYPE'][$key] = $prop['NAME'] . ' (' . $persons[$prop['PERSON_TYPE_ID']] . ')';
}
return $resultList;
@ -492,6 +494,41 @@ class RCrmActions
return $resultList;
}
public static function convertPropToCrmValue($prop)
{
$result = $prop['VALUE'][0];
if ($prop['TYPE'] === 'Y/N') {
$result = $prop['VALUE'][0] === 'Y' ? 1 : 0;
}
return $result;
}
public static function convertCrmValueToPropOrder($objProperty, $crmValue)
{
$result = $crmValue;
$typeField = $objProperty->getType();
if ($typeField === 'Y/N') {
$result = $crmValue == 1 ? 'Y' : 'N';
}
if ($typeField === 'DATE') {
if (empty($crmValue)) {
return $crmValue;
}
try {
$result = date('d.m.Y', strtotime($crmValue));
} catch (\Exception $exception) {
$result = '';
}
}
return $result;
}
public static function sendConfiguration($api, $active = true)
{
$scheme = isset($_SERVER['HTTPS']) ? 'https://' : 'http://';

View file

@ -1245,6 +1245,7 @@ class RetailCrmHistory
if (isset($matchedCustomOrderFields[$code])) {
$masIdentifier = explode('#', $matchedCustomOrderFields[$code], 2);
$property = $propertyCollection->getItemByOrderPropertyId($masIdentifier[0]);
$value = RCrmActions::convertCrmValueToPropOrder($property, $value);
$r = $property->setField('VALUE', $value);
if (!$r->isSuccess()) {

View file

@ -136,7 +136,7 @@ class RetailCrmOrder
&& !empty($arParams['customOrderProps'])
&& isset($arParams['customOrderProps'][$prop['ID'] . '#' . $prop['CODE']])
) {
$order['customFields'][$arParams['customOrderProps'][$prop['ID'] . '#' . $prop['CODE']]] = $prop['VALUE'][0];
$order['customFields'][$arParams['customOrderProps'][$prop['ID'] . '#' . $prop['CODE']]] = RCrmActions::convertPropToCrmValue($prop);
} elseif (is_array($arParams['optionsOrderProps'][$arOrder['PERSON_TYPE_ID']])
&& $search = array_search($prop['CODE'], $arParams['optionsOrderProps'][$arOrder['PERSON_TYPE_ID']])) {//other
if (in_array($search, ['fio', 'phone', 'email'])) {//fio, phone, email

View file

@ -183,6 +183,14 @@ $MESS ['CUSTOM_FIELDS_TOGGLE_MSG'] = 'Активность обмена поль
$MESS ['CUSTOM_FIELDS_ORDER_LABEL'] = 'Свойство заказа / пользовательское поле в црм';
$MESS ['CUSTOM_FIELDS_USER_LABEL'] = 'Поля пользователя / Пользовательские поля клиента в црм';
$MESS ['SELECT_FIELD_NAME'] = 'Поле';
$MESS ['INTEGER_TYPE'] = 'Целое число';
$MESS ['STRING_TYPE'] = 'Строка';
$MESS ['TEXT_TYPE'] = 'Текст';
$MESS ['NUMBER_TYPE'] = 'Число';
$MESS ['NUMERIC_TYPE'] = 'Число';
$MESS ['Y/N_TYPE'] = 'Булев тип';
$MESS ['BOOLEAN_TYPE'] = 'Булев тип';
$MESS ['DATE_TYPE'] = 'Дата';

View file

@ -942,9 +942,11 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
$customOrderProps = [];
$customUserFields = [];
foreach ($arResult['bitrixOrdersCustomProp'] as $code => $text) {
if (!empty($_POST['bitrixOrderProp_' . $code]) && !empty($_POST['crmOrderField_' . $code])) {
$customOrderProps[htmlspecialchars($_POST['bitrixOrderProp_' . $code])] = htmlspecialchars($_POST['crmOrderField_' . $code]);
foreach ($arResult['bitrixOrdersCustomProp'] as $list) {
foreach ($list as $code => $text) {
if (!empty($_POST['bitrixOrderProp_' . $code]) && !empty($_POST['crmOrderField_' . $code])) {
$customOrderProps[htmlspecialchars($_POST['bitrixOrderProp_' . $code])] = htmlspecialchars($_POST['crmOrderField_' . $code]);
}
}
}
@ -989,7 +991,7 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
$arResult['inventoriesList'] = $APPLICATION->ConvertCharsetArray($api->storesList()->stores, 'utf-8', SITE_CHARSET);
$arResult['priceTypeList'] = $APPLICATION->ConvertCharsetArray($api->pricesTypes()->priceTypes, 'utf-8', SITE_CHARSET);
$arResult['crmCustomOrderFields'] = $APPLICATION->ConvertCharsetArray(
$api->customFieldsList(['entity' => 'order', 'type' => [0 => 'string', 1 => 'text']], 250)->customFields,
$api->customFieldsList(['entity' => 'order', 'type' => ['string','text', 'numeric', 'boolean', 'date']], 250)->customFields,
'utf-8',
SITE_CHARSET
);
@ -1013,6 +1015,15 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
echo CAdminMessage::ShowMessage(GetMessage('ERR_JSON'));
}
$crmCustomOrderFieldsList = [];
foreach ($arResult['crmCustomOrderFields'] as $customField){
$crmCustomOrderFieldsList[strtoupper($customField['type']) . '_TYPE'][] = ['name' => $customField['name'], 'code' => $customField['code']];
}
$arResult['crmCustomOrderFields'] = $crmCustomOrderFieldsList;
unset($crmCustomOrderFieldsList);
$arResult['matchedOrderProps'] = ConfigProvider::getMatchedOrderProps();
$arResult['matchedUserFields'] = ConfigProvider::getMatchedUserFields();
@ -2213,7 +2224,8 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
?>
<tr class="heading">
<p>При работе с данной настройкой, убедитесь, что у вас не используются кастомизированные файлы по работе с заказами и пользователями.</p>
<p>Если же они имеются, убедитеть, что функционал по работе с пользовательскими полями встроен в модуль</p>
<p>Если же они имеются, убедитеть, что функционал по работе с пользовательскими полями встроен в модуль
<p>Типы кастомных полей должны быть одинаковыми, во избежаение проблем с синхронизацией</p>
<td colspan="2" class="option-other-heading">
<b>
<label>
@ -2252,13 +2264,18 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
onchange="changeSelectValue(this, 'bitrixOrderProp_', 'crmOrderField_');"
>
<option value=""></option>
<?php foreach ($arResult['bitrixOrdersCustomProp'] as $code => $prop) {?>
<option
value="<?php echo $code ?>"
<?php if ($bitrixProp === $code) echo 'selected'; ?>
>
<?php echo $prop ?>
</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>
@ -2269,13 +2286,17 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
name="crmOrderField_<?php echo $bitrixProp ?>"
>
<option value=""></option>
<?php foreach ($arResult['crmCustomOrderFields'] as $crmProp) {?>
<option
value="<?php echo $crmProp['code'] ?>"
<?php if ($crmField === $crmProp['code']) echo 'selected'; ?>
>
<?php echo $crmProp['name'] ?>
</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>
&nbsp;
@ -2362,11 +2383,20 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
onchange="changeSelectValue(this, 'bitrixOrderProp_', 'crmOrderField_');"
>
<option value=""></option>
<?php foreach ($arResult['bitrixOrdersCustomProp'] as $code => $prop) {?>
<option value="<?php echo $code ?>">
<?php echo $prop ?>
</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%">
@ -2376,10 +2406,17 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
name="crmOrderField"
>
<option value=""></option>
<?php foreach ($arResult['crmCustomOrderFields'] as $crmProp) {?>
<option value="<?php echo $crmProp['code'] ?>">
<?php echo $crmProp['name'] ?>
</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>
&nbsp;