1
0
mirror of synced 2024-11-28 16:26:07 +03:00

ref #90085 Проверка на доступность типа оплат и доставок для текущего магазина для настройки модуля (#295)

This commit is contained in:
Kocmonavtik 2023-06-07 14:39:34 +03:00 committed by GitHub
parent de7a2bc1de
commit 555d7e2513
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 178 additions and 57 deletions

View File

@ -1,3 +1,6 @@
## 2023-06-02 v.6.3.10
- Добавлено ограничение по магазинам для типов доставок и оплат
## 2023-06-01 v.6.3.9
- Исправление ошибок генерации ICML каталога при установке модуля
@ -10,6 +13,8 @@
## 2023-05-19 v.6.3.6
- В настройки добавлена опция деактивации модуля
## 2023-05-18 v.6.3.5
- Добавлен функционал обновления номера телефона, адреса и других полей заказа, связанных с курьерской доставкой
## 2023-04-26 v.6.3.4
- Оптимизирован алгоритм получения истории заказов и клиентов

View File

@ -124,4 +124,34 @@ class RetailCrmService
true
);
}
/**
* @param array|null $availableSites
* @param array|null $types
*
* @return array
*/
public static function getAvailableTypes(?array $availableSites, ?array $types)
{
$result = [];
foreach ($types as $type) {
if ($type['active'] !== true) {
continue;
}
if (empty($type['sites'])) {
$result[] = $type;
} else {
foreach ($type['sites'] as $site) {
if (!empty($availableSites[$site])) {
$result[] = $type;
break;
}
}
}
}
return $result;
}
}

View File

@ -1 +1 @@
- Исправление ошибок генерации ICML каталога при установке модуля
- Добавлено ограничение по магазинам для типов доставок и оплат

View File

@ -455,14 +455,25 @@ class intaro_retailcrm extends CModule
return false;
}
$delivTypes = [];
foreach ($arResult['deliveryTypesList'] as $delivType) {
if ($delivType['active'] === true) {
$delivTypes[$delivType['code']] = $delivType;
}
$this->loadDeps();
$availableSites = RetailcrmConfigProvider::getSitesList();
if (!empty($availableSites)) {
$availableSites = array_flip($availableSites);
} else {
$site = RetailcrmConfigProvider::getSitesAvailable();
$availableSites[$site] = $site;
}
$this->loadDeps();
$arResult['deliveryTypesList'] = RetailCrmService::getAvailableTypes(
$availableSites,
$arResult['deliveryTypesList']
);
$arResult['paymentTypesList'] = RetailCrmService::getAvailableTypes(
$availableSites,
$arResult['paymentTypesList']
);
RetailcrmConfigProvider::setIntegrationDelivery(
RetailCrmService::selectIntegrationDeliveries($arResult['deliveryTypesList'])
@ -472,8 +483,6 @@ class intaro_retailcrm extends CModule
RetailCrmService::selectIntegrationPayments($arResult['paymentTypesList'])
);
$arResult['deliveryTypesList'] = $delivTypes;
//bitrix personTypes
$arResult['bitrixOrderTypesList'] = RCrmActions::OrderTypesList($arResult['arSites']);

View File

@ -24,6 +24,15 @@ $RETAIL_CRM_API = new ApiClient($api_host, $api_key);
COption::SetOptionString($MODULE_ID, $CRM_API_HOST_OPTION, $api_host);
COption::SetOptionString($MODULE_ID, $CRM_API_KEY_OPTION, $api_key);
$availableSites = RetailcrmConfigProvider::getSitesList();
if (!empty($availableSites)) {
$availableSites = array_flip($availableSites);
} else {
$site = RetailcrmConfigProvider::getSitesAvailable();
$availableSites[$site] = $site;
}
if (count($arResult['arSites']) === 1) {
COption::SetOptionString($MODULE_ID, $CRM_SITES_LIST, serialize([]));
}
@ -38,7 +47,10 @@ if (!isset($arResult['ORDER_TYPES'])) {
if (!isset($arResult['paymentTypesList'])) {
$arResult['bitrixPaymentTypesList'] = RCrmActions::PaymentList();
$arResult['paymentTypesList'] = $RETAIL_CRM_API->paymentTypesList()->paymentTypes;
$arResult['paymentTypesList'] = RetailCrmService::getAvailableTypes(
$availableSites,
$RETAIL_CRM_API->paymentTypesList()->paymentTypes
);
$arResult['PAYMENT_TYPES'] = unserialize(COption::GetOptionString($MODULE_ID, $CRM_PAYMENT_TYPES, 0));
}
@ -60,7 +72,10 @@ if (!isset($arResult['paymentStatusesList'])) {
if (!isset($arResult['bitrixDeliveryTypesList'])) {
$arResult['bitrixDeliveryTypesList'] = RCrmActions::DeliveryList();
$arResult['deliveryTypesList'] = $RETAIL_CRM_API->deliveryTypesList()->deliveryTypes;
$arResult['deliveryTypesList'] = RetailCrmService::getAvailableTypes(
$availableSites,
$RETAIL_CRM_API->deliveryTypesList()->deliveryTypes
);
$arResult['DELIVERY_TYPES'] = unserialize(COption::GetOptionString($MODULE_ID, $CRM_DELIVERY_TYPES_ARR, 0));
}
@ -226,12 +241,10 @@ if (isset($arResult['PAYMENT'])) {
<select name="delivery-type-<?php echo $bitrixDeliveryType['ID']; ?>" class="typeselect">
<option value=""></option>
<?php foreach($arResult['deliveryTypesList'] as $deliveryType): ?>
<?php if ($deliveryType['active'] === true): ?>
<option value="<?php echo $deliveryType['code']; ?>"
<?php if($defaultDelivTypes[$bitrixDeliveryType['ID']] == $deliveryType['code']) echo 'selected'; ?>>
<?php echo $APPLICATION->ConvertCharset($deliveryType['name'], 'utf-8', SITE_CHARSET); ?>
</option>
<?php endif; ?>
<option value="<?php echo $deliveryType['code']; ?>"
<?php if($defaultDelivTypes[$bitrixDeliveryType['ID']] == $deliveryType['code']) echo 'selected'; ?>>
<?php echo $APPLICATION->ConvertCharset($deliveryType['name'], 'utf-8', SITE_CHARSET); ?>
</option>
<?php endforeach; ?>
</select>
</td>
@ -250,14 +263,12 @@ if (isset($arResult['PAYMENT'])) {
<select name="payment-type-<?php echo $bitrixPaymentType['ID']; ?>" class="typeselect">
<option value=""></option>
<?php foreach($arResult['paymentTypesList'] as $paymentType): ?>
<?php if($paymentType['active'] === true): ?>
<option value="<?php echo $paymentType['code']; ?>"
<?php if($defaultPayTypes[$bitrixPaymentType['ID']] == $paymentType['code']) echo 'selected'; ?>>
<?php
$nameType = isset($paymentType['integrationModule']) ? $APPLICATION->ConvertCharset($paymentType['name'] . GetMessage('INTEGRATIONS'), 'utf-8', SITE_CHARSET) : $APPLICATION->ConvertCharset($paymentType['name'], 'utf-8', SITE_CHARSET);
echo $nameType;?>
</option>
<?php endif; ?>
<option value="<?php echo $paymentType['code']; ?>"
<?php if($defaultPayTypes[$bitrixPaymentType['ID']] == $paymentType['code']) echo 'selected'; ?>>
<?php
$nameType = isset($paymentType['integrationModule']) ? $APPLICATION->ConvertCharset($paymentType['name'] . GetMessage('INTEGRATIONS'), 'utf-8', SITE_CHARSET) : $APPLICATION->ConvertCharset($paymentType['name'], 'utf-8', SITE_CHARSET);
echo $nameType;?>
</option>
<?php endforeach; ?>
</select>
</td>

View File

@ -1,6 +1,6 @@
<?php
$arModuleVersion = [
'VERSION' => '6.3.9',
'VERSION_DATE' => '2023-06-01 14:00:00'
'VERSION' => '6.3.10',
'VERSION_DATE' => '2023-06-02 11:00:00'
];

View File

@ -220,6 +220,15 @@ if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_RE
die(json_encode($res));
}
$availableSites = RetailcrmConfigProvider::getSitesList();
if (!empty($availableSites)) {
$availableSites = array_flip($availableSites);
} else {
$site = RetailcrmConfigProvider::getSitesAvailable();
$availableSites[$site] = $site;
}
//update connection settings
if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
$api_host = htmlspecialchars(trim($_POST['api_host']));
@ -618,8 +627,14 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
}
try {
$arResult['paymentTypesList'] = $api->paymentTypesList()->paymentTypes;
$arResult['deliveryTypesList'] = $api->deliveryTypesList()->deliveryTypes;
$arResult['paymentTypesList'] = RetailCrmService::getAvailableTypes(
$availableSites,
$api->paymentTypesList()->paymentTypes
);
$arResult['deliveryTypesList'] = RetailCrmService::getAvailableTypes(
$availableSites,
$api->deliveryTypesList()->deliveryTypes
);
} catch (\RetailCrm\Exception\CurlException $e) {
RCrmActions::eventLog(
'intaro.retailcrm/options.php', 'RetailCrm\ApiClient::*List::CurlException',
@ -942,21 +957,20 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
echo CAdminMessage::ShowMessage(GetMessage('ERR_JSON'));
}
$deliveryTypes = [];
$deliveryIntegrationCode = [];
foreach ($arResult['deliveryTypesList'] as $deliveryType) {
if ($deliveryType['active'] === true) {
$deliveryTypes[$deliveryType['code']] = $deliveryType;
$deliveryIntegrationCode[$deliveryType['code']] = $deliveryType['integrationCode'];
}
}
$arResult['deliveryTypesList'] = $deliveryTypes;
COption::SetOptionString(
$mid,
RetailcrmConstants::CRM_INTEGRATION_DELIVERY,
serialize(RCrmActions::clearArr(is_array($deliveryIntegrationCode) ? $deliveryIntegrationCode : []))
$arResult['paymentTypesList'] = RetailCrmService::getAvailableTypes(
$availableSites,
$api->paymentTypesList()->paymentTypes
);
$arResult['deliveryTypesList'] = RetailCrmService::getAvailableTypes(
$availableSites,
$api->deliveryTypesList()->deliveryTypes
);
$integrationPayments = RetailCrmService::selectIntegrationPayments($arResult['paymentTypesList']);
$integrationDeliveries = RetailCrmService::selectIntegrationDeliveries($arResult['deliveryTypesList']);
RetailcrmConfigProvider::setIntegrationPaymentTypes($integrationPayments);
RetailcrmConfigProvider::setIntegrationDelivery($integrationDeliveries);
//bitrix orderTypesList -- personTypes
$arResult['bitrixOrderTypesList'] = RCrmActions::OrderTypesList($arResult['arSites']);
@ -1470,13 +1484,11 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
<select name="delivery-type-<?php echo $bitrixDeliveryType['ID']; ?>" class="typeselect">
<option value=""></option>
<?php foreach ($arResult['deliveryTypesList'] as $deliveryType): ?>
<?php if ($deliveryType['active'] === true) { ?>
<option value="<?php echo $deliveryType['code']; ?>" <?php if ($optionsDelivTypes[$bitrixDeliveryType['ID']] === $deliveryType['code']) {
echo 'selected';
} ?>>
<?php echo $APPLICATION->ConvertCharset($deliveryType['name'], 'utf-8', SITE_CHARSET); ?>
</option>
<?php } ?>
<option value="<?php echo $deliveryType['code']; ?>" <?php if ($optionsDelivTypes[$bitrixDeliveryType['ID']] === $deliveryType['code']) {
echo 'selected';
} ?>>
<?php echo $APPLICATION->ConvertCharset($deliveryType['name'], 'utf-8', SITE_CHARSET); ?>
</option>
<?php endforeach; ?>
</select>
</label>
@ -1501,13 +1513,11 @@ if (isset($_POST['Update']) && ($_POST['Update'] === 'Y')) {
<select name="payment-type-<?php echo $bitrixPaymentType['ID']; ?>" class="typeselect">
<option value="" selected=""></option>
<?php foreach ($arResult['paymentTypesList'] as $paymentType): ?>
<?php if($paymentType['active'] === true): ?>
<option value="<?php echo $paymentType['code']; ?>" <?php if ($optionsPayTypes[$bitrixPaymentType['ID']] === $paymentType['code']) {
echo 'selected';
} ?>>
<?php echo $APPLICATION->ConvertCharset($paymentType['name'], 'utf-8', SITE_CHARSET); ?>
</option>
<?php endif; ?>
<option value="<?php echo $paymentType['code']; ?>" <?php if ($optionsPayTypes[$bitrixPaymentType['ID']] === $paymentType['code']) {
echo 'selected';
} ?>>
<?php echo $APPLICATION->ConvertCharset($paymentType['name'], 'utf-8', SITE_CHARSET); ?>
</option>
<?php endforeach; ?>
</select>
</label>

View File

@ -50,6 +50,20 @@ class RetailCrmServiceTest extends PHPUnit\Framework\TestCase
$this->assertEquals($expected, RetailCrmService::selectIntegrationPayments($data));
}
public function testGetAvailableTypes(): void
{
$data = DataService::availableSitesAndTypesData();
$sites = $data['sites'];
$types = $data['types'];
$result = RetailCrmService::getAvailableTypes($sites, $types);
$this->assertCount(3, $result);
$this->assertEquals('test1', $result[0]['code']);
$this->assertEquals('test4', $result[1]['code']);
$this->assertEquals('test6', $result[2]['code']);
}
public function selectIntegrationDeliveriesProvider()
{
return [[

View File

@ -42,4 +42,46 @@ class DataService
'shipmentStore' => 'test',
];
}
public static function availableSitesAndTypesData()
{
return [
'sites' => [
'bitrix' => 's1',
'bitrix2' => 's2'
],
'types' => [
'test1' => [
'code' => 'test1',
'active' => true,
'sites' => []
],
'test2' => [
'code' => 'test2',
'active' => false,
'sites' => []
],
'test3' => [
'code' => 'test3',
'active' => true,
'sites' => ['crm', 'crm1']
],
'test4' => [
'code' => 'test4',
'active' => true,
'sites' => ['bitrix', 'crm']
],
'test5' => [
'code' => 'test5',
'active' => false,
'sites' => ['bitrix', 'bitrix2']
],
'test6' => [
'code' => 'test6',
'active' => true,
'sites' => ['bitrix', 'bitrix2']
]
]
];
}
}