262  /  381
Справочник

Пользовательские правила компаний

Просмотров: 9347
Дата последнего изменения: 11.08.2020
Татьяна Старкова
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5
Недоступно в лицензиях:
Старт, Стандарт

Вы можете дополнить стандартный набор правил компаний своими собственными правилами. Для этого следует использовать событие onSaleCompanyRulesClassNamesBuildList:

Bitrix\Main\EventManager::getInstance()->addEventHandler(
        "sale",
        "onSaleCompanyRulesClassNamesBuildList", 
        "myCompanyRulesFunction"
);

В обработчике события следует вернуть ваш класс правил:

function myCompanyRulesFunction()
{
    return new \Bitrix\Main\EventResult(
        \Bitrix\Main\EventResult::SUCCESS,
        array(
            '\MyCompanyRules' => '/bitrix/php_interface/include/mycompanyrules.php',
        )
    );
}

Описывая уже само правило, вы можете определять какие-то собственные условия. Например, в примере приведено правило автоназначения компании в зависимости от лунных суток:

use Bitrix\Sale\Services\Base;
use Bitrix\Sale\Internals\Entity;

class MyCompanyRules extends Base\Restriction
{
    public static function getClassTitle()
    {
        return 'по лунным суткам';
    }

    public static function getClassDescription()
    {
        return 'компания будет использоваться только в указанном диапазоне лунных суток';
    }

public static function check($params, array $restrictionParams, $serviceId = 0)
{
    if ($params < $restrictionParams['MIN_MOONDAY']
        || $params > $restrictionParams['MAX_MOONDAY'])
        return false;

    return true;
}
protected static function extractParams(Entity $entity)
{
    $json = file_get_contents('http://moon-today.com/api/index.php?get=moonday');
    $res = json_decode($json, true);
    return !empty($res['moonday']) ? intval($res['moonday']) : 0;
}
public static function getParamsStructure($entityId = 0)
    {
        return array(
            "MIN_MOONDAY" => array(
                'TYPE' => 'NUMBER',
                'DEFAULT' => "1",
                'LABEL' => 'Минимальные сутки'
            ),
            "MAX_MOONDAY" => array(
                'TYPE' => 'NUMBER',
                'DEFAULT' => "30",
                'LABEL' => 'Максимальные сутки'
            )
        );
    }
}

Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии