1
0
Fork 0
mirror of synced 2025-04-11 05:00:55 +00:00
Изменение текста сообщений
Обновление описания версии
Добавлены комментарии к тестам
Обработка интеграциоонной оплаты перенесена в отдельный метод
This commit is contained in:
Ivan Chaplygin 2024-01-22 10:38:59 +03:00
parent 0cfb83c50c
commit 5752f8d4a2
9 changed files with 49 additions and 44 deletions

View file

@ -1,5 +1,5 @@
## 2024-01-19 v.6.5.7
- Добавлена передача данных интегрированной оплаты в систему
## 2024-01-22 v.6.5.7
- Доработана передача данных интеграционных оплат в систему
## 2024-01-12 v.6.5.6
- Добавлена передача дополнительных свойств товаров через конфигурируемый файл

View file

@ -531,8 +531,6 @@ class RetailCrmEvent
$paymentToCrm['externalId'] = RCrmActions::generatePaymentExternalId($arPayment['ID']);
}
$isIntegrationPayment = RetailCrmService::isIntegrationPayment($arPayment['PAY_SYSTEM_ID'] ?? null);
if (!empty($arPayment['DATE_PAID'])) {
if (is_object($arPayment['DATE_PAID'])) {
$culture = new Culture(['FORMAT_DATETIME' => 'YYYY-MM-DD HH:MI:SS']);
@ -554,16 +552,7 @@ class RetailCrmEvent
$paymentToCrm['amount'] = $arPayment['SUM'];
}
if ($isIntegrationPayment && RetailcrmConfigProvider::getSyncIntegrationPayment() === 'Y') {
$paymentToCrm['type'] = $optionsPaymentTypes[$arPayment['PAY_SYSTEM_ID']] .
Constants::CRM_PART_SUBSTITUTED_PAYMENT_CODE;
} else {
$paymentToCrm['type'] = $optionsPaymentTypes[$arPayment['PAY_SYSTEM_ID']];
if ($isIntegrationPayment) {
unset($paymentToCrm['paidAt'], $paymentToCrm['status']);
}
}
$paymentToCrm = RetailCrmService::preparePayment($paymentToCrm, $arPayment, $optionsPaymentTypes);
} else {
RCrmActions::eventLog('RetailCrmEvent::paymentSave', 'payments', 'OrderID = ' . $arPayment['ID'] . '. Payment not found.');
return false;

View file

@ -366,39 +366,27 @@ class RetailCrmOrder
$payments = [];
foreach ($arOrder['PAYMENTS'] as $payment) {
$isIntegrationPayment = RetailCrmService::isIntegrationPayment($payment['PAY_SYSTEM_ID'] ?? null);
if (!empty($payment['PAY_SYSTEM_ID']) && isset($arParams['optionsPayTypes'][$payment['PAY_SYSTEM_ID']])) {
$pm = [];
$crmPayment = [];
if (!empty($payment['DATE_PAID'])) {
$pm['paidAt'] = new \DateTime($payment['DATE_PAID']);
$crmPayment['paidAt'] = new \DateTime($payment['DATE_PAID']);
}
if (!empty($arParams['optionsPayment'][$payment['PAID']])) {
$pm['status'] = $arParams['optionsPayment'][$payment['PAID']];
$crmPayment['status'] = $arParams['optionsPayment'][$payment['PAID']];
}
if (!empty($payment['ID'])) {
$pm['externalId'] = RCrmActions::generatePaymentExternalId($payment['ID']);
$crmPayment['externalId'] = RCrmActions::generatePaymentExternalId($payment['ID']);
}
if (RetailcrmConfigProvider::shouldSendPaymentAmount()) {
$pm['amount'] = $payment['SUM'];
$crmPayment['amount'] = $payment['SUM'];
}
if ($isIntegrationPayment && RetailcrmConfigProvider::getSyncIntegrationPayment() === 'Y') {
$pm['type'] = $arParams['optionsPayTypes'][$payment['PAY_SYSTEM_ID']] .
Constants::CRM_PART_SUBSTITUTED_PAYMENT_CODE;
} else {
$pm['type'] = $arParams['optionsPayTypes'][$payment['PAY_SYSTEM_ID']];
if ($isIntegrationPayment) {
unset($pm['paidAt'], $pm['status']);
}
}
$payments[] = $pm;
$crmPayment = RetailCrmService::preparePayment($crmPayment, $payments, $arParams['optionsPayTypes']);
$payments[] = $crmPayment;
} else {
RCrmActions::eventLog(
'RetailCrmOrder::orderSend',

View file

@ -1,5 +1,7 @@
<?php
use Intaro\RetailCrm\Component\Constants;
/**
* Class RetailCrmService
*/
@ -178,4 +180,29 @@ class RetailCrmService
);
}
}
/**
* @param array $crmPayment
* @param array $bitrixPayment
* @param array $optionsPaymentTypes
* @return array mixed
*/
public static function preparePayment($crmPayment, $bitrixPayment, $optionsPaymentTypes)
{
$isIntegrationPayment = self::isIntegrationPayment($bitrixPayment['PAY_SYSTEM_ID'] ?? null);
if ($isIntegrationPayment && RetailcrmConfigProvider::getSyncIntegrationPayment() === 'Y') {
$crmPayment['type'] = $optionsPaymentTypes[$bitrixPayment['PAY_SYSTEM_ID']] .
Constants::CRM_PART_SUBSTITUTED_PAYMENT_CODE;
} else {
$crmPayment['type'] = $optionsPaymentTypes[$bitrixPayment['PAY_SYSTEM_ID']];
if ($isIntegrationPayment) {
unset($crmPayment['paidAt'], $crmPayment['status']);
}
}
return $crmPayment;
}
}

View file

@ -1 +1 @@
- Добавлена передача данных интегрированной оплаты в систему
- Доработана передача данных интеграционных оплат в систему

View file

@ -2,5 +2,5 @@
$arModuleVersion = [
'VERSION' => '6.5.7',
'VERSION_DATE' => '2024-01-19 14:00:00'
'VERSION_DATE' => '2024-01-22 11:00:00'
];

View file

@ -138,10 +138,10 @@ $MESS ['DELETE_MATCHED'] = 'Delete';
$MESS ['LOCATION_LABEL'] = 'Location';
$MESS ['TEXT_ADDRESS_LABEL'] = 'Address (line)';
$MESS ['SYNC_INTEGRATION_PAYMENT'] = 'Activate synchronization of integrated payments';
$MESS ['SYNC_INTEGRATION_PAYMENT'] = 'Activate synchronization of integration payment types';
$MESS ['DESCRIPTION_AUTO_PAYMENT_TYPE'] = 'Automatically created payment type for integration substitution (Bitrix)';
$MESS ['NO_INTEGRATION_PAYMENT'] = '(Non-integrated)';
$MESS ['ERR_CHECK_JOURNAL'] = 'Error while saving. Details in the event log';
$MESS ['ERROR_LINK_INTEGRATION_PAYMENT'] = 'Integration payment linkage error';
$MESS ['INTEGRATION_PAYMENT_LABEL'] = 'When correlating CMS and CRM integration payments, a regular payment is created on the system side to which orders will be linked';
$MESS ['ERROR_LINK_INTEGRATION_PAYMENT'] = 'Error in comparing integration payments';
$MESS ['INTEGRATION_PAYMENT_LABEL'] = 'When correlating CMS and CRM integration payments, a regular payment is created on the system side to which orders will be linked.';
$MESS ['NEED_PERMISSIONS_REFERENCE_LABEL'] = 'For this option to work correctly, the api key needs access to receive and edit reference book';

View file

@ -197,10 +197,10 @@ $MESS ['DELETE_MATCHED'] = 'Удалить';
$MESS ['LOCATION_LABEL'] = 'Местоположение (LOCATION)';
$MESS ['TEXT_ADDRESS_LABEL'] = 'Адрес (строкой)';
$MESS ['SYNC_INTEGRATION_PAYMENT'] = 'Активировать синхронизацию интегрированных типов оплат';
$MESS ['SYNC_INTEGRATION_PAYMENT'] = 'Активировать синхронизацию интеграционных типов оплат';
$MESS ['DESCRIPTION_AUTO_PAYMENT_TYPE'] = 'Автоматически созданный тип оплаты для подмены интеграционной (Bitrix)';
$MESS ['NO_INTEGRATION_PAYMENT'] = '(Не интегрированная)';
$MESS ['NO_INTEGRATION_PAYMENT'] = '(Не интеграционная)';
$MESS ['ERR_CHECK_JOURNAL'] = 'Ошибка при сохранении. Подробности в журнале событий';
$MESS ['ERROR_LINK_INTEGRATION_PAYMENT'] = 'Ошибка связи интеграционных оплат';
$MESS ['INTEGRATION_PAYMENT_LABEL'] = 'При соотношении интеграционных оплат CMS и CRM, на стороне системы создаётся обычная оплата, к которой будут привязываться заказы.';
$MESS ['ERROR_LINK_INTEGRATION_PAYMENT'] = 'Ошибка при сопоставлении интеграционных оплат';
$MESS ['INTEGRATION_PAYMENT_LABEL'] = 'При сопоставлении интеграционных оплат CRM, на стороне системы создаётся обычная оплата, к которой будут привязываться заказы.';
$MESS ['NEED_PERMISSIONS_REFERENCE_LABEL'] = 'Для корректной работы опции, апи-ключу необходимы доступы на получение и редактирование справочников';

View file

@ -92,12 +92,13 @@ class RetailCrmEventTest extends PHPUnit\Framework\TestCase
});
$api = new RetailCrm\ApiClient(RetailcrmConfigProvider::getApiUrl(), RetailcrmConfigProvider::getApiKey());
$spy = \Mockery::spy('overload:' .RCrmActions::class);
$spy = \Mockery::spy('overload:' . RCrmActions::class); //Добавление слежки за классом
$GLOBALS['RETAIL_CRM_HISTORY'] = false;
$result = RetailCrmEvent::paymentSave($event);
//Проверка вызова класса и передачи определенных параметров
$spy->shouldReceive('apiMethod')->with(
$api,
'ordersPaymentCreate',
@ -177,7 +178,7 @@ class RetailCrmEventTest extends PHPUnit\Framework\TestCase
});
$api = new RetailCrm\ApiClient(RetailcrmConfigProvider::getApiUrl(), RetailcrmConfigProvider::getApiKey());
$spy = \Mockery::spy('overload:' .RCrmActions::class);
$spy = \Mockery::spy('overload:' . RCrmActions::class);
$GLOBALS['RETAIL_CRM_HISTORY'] = false;