| Current Path : /var/www/homesaver/www/local/php_interface/ |
| Current File : /var/www/homesaver/www/local/php_interface/init.php |
<?
use Bitrix\Catalog\Model\Price;
use Bitrix\Main\Loader;
const BRANDS_IBLOCK_ID = 12;
define("CATALOG_PATH2EXPORTS", "/local/php_interface/include/catalog_export/");
function notifyNewItemFeedback($ID, $arFields){
ob_start();
$res = CIBlockElement::GetList(
array(),
array(
'IBLOCK_ID' => 17,
'PROPERTY_FORUM_TOPIC_ID' => $arFields["TOPIC_ID"]
),
false,
false,
array('*', 'IBLOCK_ID', 'ID', 'NAME', 'PROPERTY_FORUM_TOPIC_ID', 'SECTION_ID', 'SECTION', 'SECTIONS')
);
if($ar_res = $res->GetNext()){
var_dump(date('d.m.Y H:i:s'));
echo 'найден товар '.$ar_res['NAME'];
$TYPE_MAIL_EVENT = 'NEW_ITEM_REVIEW';
var_dump($ar_res);
$arMail = array(
'ITEM_NAME' => $ar_res['NAME'],
'AUTHOR_NAME' => $arFields['AUTHOR_NAME'],
'POST_DATE' => date('d.m.Y H:i:s'),
'POST_MESSAGE' => $arFields['POST_MESSAGE'],
'PATH2ITEM' => $ar_res['DETAIL_PAGE_URL'],
);
var_dump($arMail);
$ID_MAIL_EVENT = 60;
$ok = CEvent::Send($TYPE_MAIL_EVENT, "s1", $arMail, $ID_MAIL_EVENT);
if ($ok){
echo 'Сообщение отправлено';
}
else{
'Сообщение не отправлено '.$ok;
}
}
else{
echo 'Элемент не найден.';
$dump = ob_get_clean();
if (!empty($ok)){
return true;
}
else{
$filename = dirname(__FILE__).'/dump.txt';
if (!file_exists($filename)){
$f = fopen($filename, 'w+');
fclose($f);
}
file_put_contents($filename, $dump);
}
}
}
AddEventHandler("forum", "onAfterMessageAdd", "notifyNewItemFeedback");
# изм. раздел --> обновляем цены всех товаров
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "recalculatePriceFromEuro");
/**
* При обновлении бренда, обновляем цены на все привязанные к нему товары,
* имеющие цену в евро, если курс евро заполнен для бренда
* @param $brand
* @return void
*/
function recalculatePriceFromEuro($brand)
{
$shouldUseOwnRate = CIBlockElement::GetProperty($brand['IBLOCK_ID'], $brand['ID'], "sort", "asc", ['CODE' => 'SHOULD_USE_OWN_RATE'])->Fetch()['VALUE'] ?? false;
$currency = CIBlockElement::GetProperty($brand['IBLOCK_ID'], $brand['ID'], "sort", "asc", ['CODE' => 'CURRENCY'])->Fetch()['VALUE_ENUM'] ?? false;
if (!$shouldUseOwnRate) {
$currencyName = 'EUR';
if ($currency === 'Доллар США') {
$currencyName = 'USD';
}
$rate = getRateByCurrencyName($currencyName);
CIBlockElement::SetPropertyValuesEx($brand['ID'], false, ['EURO_RATE' => $rate]);
}
$prop = CIBlockElement::GetProperty($brand['IBLOCK_ID'], $brand['ID'], "sort", "asc", ['CODE' => 'EURO_RATE'])->Fetch();
if (!$prop) {
return;
}
$euroRate = (float)$prop['VALUE'];
if (!$euroRate) {
return;
}
// Собираем товары с ценой в евро
$priceList = Price::getList([
'filter' => [
'CURRENCY' => 'EUR',
],
'select' => ['ID', 'PRICE', 'CURRENCY', 'PRODUCT_ID'],
]);
$productsPriceById = [];
while ($price = $priceList->fetch()) {
$productsPriceById[$price['PRODUCT_ID']] = $price['PRICE'];
}
// Товары данного бренда с ценой в евро, но не заполненным полем цены в евро
$select = ['ID', 'IBLOCK_SECTION_ID', 'PROPERTY_PRICE_EURO', 'IBLOCK_ID'];
$filter = ['ID' => array_keys($productsPriceById), 'IBLOCK_ID' => 17, 'PROPERTY_BRAND' => $brand['ID'], 'INCLUDE_SUBSECTIONS' => 'Y', 'ACTIVE' => 'Y', '=PROPERTY_PRICE_EURO' => false];
$elementResult = CIBlockElement::GetList([], $filter, false, false, $select);
while ($element = $elementResult->Fetch()) {
CIBlockElement::SetPropertyValuesEx($element['ID'], $element['IBLOCK_ID'], ['PRICE_EURO' => $productsPriceById[$element['ID']]]);
}
// Торговые предложения данного бренда с ценой в евро, но не заполненным полем цены в евро
$select = ['ID', 'IBLOCK_SECTION_ID', 'PROPERTY_PRICE_EURO', 'IBLOCK_ID', 'PROPERTY_CML2_LINK.PROPERTY_BRAND'];
$filter = [
'IBLOCK_ID' => 20,
'INCLUDE_SUBSECTIONS' => 'Y',
'ACTIVE' => 'Y',
'=PROPERTY_PRICE_EURO' => false
];
$elementResult = CIBlockElement::GetList([], $filter, false, false, $select);
while ($element = $elementResult->Fetch()) {
if ($element['PROPERTY_CML2_LINK_PROPERTY_BRAND_VALUE'] != $brand['ID']) {
continue;
}
CIBlockElement::SetPropertyValuesEx($element['ID'], $element['IBLOCK_ID'], ['PRICE_EURO' => $productsPriceById[$element['ID']]]);
}
$select = ['ID', 'IBLOCK_SECTION_ID', 'PROPERTY_PRICE_EURO'];
$filter = ['IBLOCK_ID' => 17, 'PROPERTY_BRAND' => $brand['ID'], 'INCLUDE_SUBSECTIONS' => 'Y', 'ACTIVE' => 'Y', '!PROPERTY_PRICE_EURO' => false];
$elementResult = CIBlockElement::GetList([], $filter, false, false, $select);
while ($element = $elementResult->Fetch()) {
$price = Price::getList([
'filter' => [
'PRODUCT_ID' => $element['ID'],
],
'select' => ['ID', 'PRICE', 'CURRENCY', 'PRODUCT_ID'],
])->fetch();
$rubPrice = $element['PROPERTY_PRICE_EURO_VALUE'] * $euroRate;
Price::update($price['ID'], [
'PRICE' => $rubPrice,
'CURRENCY' => 'RUB',
]);
}
// Торговые предложения данного бренда с ценой в евро, но не заполненным полем цены в евро
$select = ['ID', 'IBLOCK_SECTION_ID', 'PROPERTY_PRICE_EURO', 'IBLOCK_ID', 'PROPERTY_CML2_LINK.PROPERTY_BRAND'];
$filter = [
'IBLOCK_ID' => 20,
'INCLUDE_SUBSECTIONS' => 'Y',
'ACTIVE' => 'Y',
'!PROPERTY_PRICE_EURO' => false
];
$elementResult = CIBlockElement::GetList([], $filter, false, false, $select);
while ($element = $elementResult->Fetch()) {
if ($element['PROPERTY_CML2_LINK_PROPERTY_BRAND_VALUE'] != $brand['ID']) {
continue;
}
$price = Price::getList([
'filter' => [
'PRODUCT_ID' => $element['ID'],
],
'select' => ['ID', 'PRICE', 'CURRENCY', 'PRODUCT_ID'],
])->fetch();
$rubPrice = $element['PROPERTY_PRICE_EURO_VALUE'] * $euroRate;
Price::update($price['ID'], [
'PRICE' => $rubPrice,
'CURRENCY' => 'RUB',
]);
}
}
function getRateByCurrencyName($currencyName) {
if (false === CModule::IncludeModule('currency')) {
return false;
}
$rsCurrencyRate = \Bitrix\Currency\CurrencyRateTable::getList(
[
'order' => ['ID' => 'DESC'],
'filter' => ['=CURRENCY' => $currencyName]
]
);
$rate = false;
if($currencyRate=$rsCurrencyRate->fetch())
{
$rate = $currencyRate['RATE'];
}
return $rate;
}