Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/local/php_interface/
Upload File :
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;
}