1С-Битрикс. Перенос данных о купонах из Highload-блока
Информацию о скидках из 1С выгружаем на сайт в Highload-блок. Затем через подписку на событие (файл init.php) создаем купоны.
// Added("Nicholas Mikuslas", "06.10.2015 16:56:01", "Переносим данные о купонах из Highload-блока") {
AddEventHandler('catalog', 'OnSuccessCatalogImport1C', 'customCatalogImportStep');
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity as EN;
function customCatalogImportStep()
{
$stepInterval = (int) COption::GetOptionString("catalog", "1C_INTERVAL", "-");
$startTime = time();
// Флаг импорта файла торговых предложений
//$isOffers = strpos($_REQUEST['filename'], 'offers') !== false;
$NS = &$_SESSION["BX_CML2_IMPORT"]["NS"];
if (!isset($NS['custom']['lastId'])) {
// Последний отработанный элемент для пошаговости.
$NS['custom']['lastId'] = 0;
$NS['custom']['counter'] = 0;
}
$errorMessage = null;
CModule::IncludeModule('highloadblock');
$rsData = HL\HighloadBlockTable::getList(array('filter' => array('NAME' => 'InformatsionnyeKarty')));
if ( !($arData = $rsData->fetch()) ){
$errorMessage = 'Инфоблок "InformatsionnyeKarty" не найден';
} else {
$Entity = HL\HighloadBlockTable::compileEntity($arData);
//Создадим объект - запрос
$Query = new EN\Query($Entity);
//Зададим параметры запроса, любой параметр можно опустить
$Query->setSelect(array('*'));
//$Query->setFilter(array('ID'=> array(2,12,6)));
//$Query->setOrder(array('UF_SORT' => 'ASC'));
//Выполним запрос
$result = $Query->exec();
//Получаем результат по привычной схеме
$result = new CDBResult($result);
while ($row = $result->Fetch()){
if (CModule::IncludeModule("catalog"))
{
// Создадим купон
$kodKupona = preg_replace('/[^0-9]/', '', trim($row['UF_KOD']));
$arCouponFields = array(
"DISCOUNT_ID" => 2,
"ACTIVE" => "Y",
"ONE_TIME" => "N",
"COUPON" => $kodKupona,
"DATE_APPLY" => false,
"DESCRIPTION" => trim($row['UF_NAME'])
);
$arFilter = array('COUPON' => $kodKupona);
$dbCoupon = CCatalogDiscountCoupon::GetList (array(), $arFilter);
if($arCoupon = $dbCoupon->Fetch())
{
$CID = CCatalogDiscountCoupon::Update($arCoupon['ID'], $arCouponFields);
}
else
{
$CID = CCatalogDiscountCoupon::Add($arCouponFields);
}
$CID = IntVal($CID);
if ($CID <= 0)
{
$ex = $APPLICATION->GetException();
$errorMessage = $ex->GetString();
$error = true;
}
//Удаляем из Хайлоад-блока
$DataClass = $Entity->getDataClass();
$delresult = $DataClass::delete($row['ID']);
if(!$delresult->isSuccess()){ //произошла ошибка
$error = true;
$errorMessage = $delresult->getErrorMessages(); //выведем ошибку
}
} else {
$error = true;
$errorMessage = 'Не удалось подключить модуль "catalog"';
}
if ($error === true) {
break;
}
$NS['custom']['lastId'] = $arItem['ID'];
$NS['custom']['counter']++;
// Прерывание по времени шага
if ($stepInterval > 0 && (time() - $startTime) > $stepInterval) {
break;
}
}
}
if ($arItem != false) {
if ($errorMessage === null) {
print "progress\n";
print "Обработано " . $NS['custom']['counter'] . ' элементов, осталось ' . $res->SelectedRowsCount();
} else {
print "failure\n" . $errorMessage;
}
$contents = ob_get_contents();
ob_end_clean();
if (toUpper(LANG_CHARSET) != "WINDOWS-1251") {
$contents = $GLOBALS['APPLICATION']->ConvertCharset($contents, LANG_CHARSET, "windows-1251");
}
header("Content-Type: text/html; charset=windows-1251");
print $contents;
exit;
}
}
// }
Добавить комментарий