Пример ограничения для касс (по сайтам):
[CODE]<?php
namespace Bitrix\Sale\Cashbox\Restrictions;
use Bitrix\Main\Localization\Loc;
use Bitrix\Sale\Internals\Entity;
use Bitrix\Sale\Payment;
use Bitrix\Sale;
use Bitrix\Sale\Services\Base\Restriction;
Loc::loadMessages(__FILE__);
/**
* Ограничение для касс по сайту
*
* @license GPLv3
* @author George Melikov <mail@gmelikov.ru>
*/
/*
add to init.php:
$eventManager->addEventHandler(
'sale',
'onSaleCashboxRestrictionsClassNamesBuildList',
'addGmSale'
);
function addGmSale($entity){
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS,
array(
'\Bitrix\Sale\Cashbox\Restrictions\Site' => '/bitrix/php_interface/include/classes/gmsite.php',
)
);
}
*/
/**
* Class Site
* @package Bitrix\Sale\Cashbox\Restrictions
*/
class Site extends Restriction
{
public static $easeSort = 200;
protected static $preparedData = array();
/**
* @return string
*/
public static function getClassTitle()
{
return "сайт";
}
/**
* @return string
*/
public static function getClassDescription()
{
return "Ограничение по сайту";
}
/**
* @param $params
* @param array $restrictionParams
* @param int $serviceId
* @return bool
*/
public static function check($params, array $restrictionParams, $serviceId = 0)
{
if (is_array($restrictionParams) && isset($restrictionParams['COMPANY']))
{
$diff = array_diff($params, $restrictionParams['COMPANY']);
return empty($diff);
}
return true;
}
/**
* @param Entity $entity
* @return array
*/
protected static function extractParams(Entity $entity)
{
$result = array();
if ($entity instanceof Sale\Order)
{
$result[] = $entity->getField('LID');
}
elseif ($entity instanceof Sale\Shipment)
{
/** @var Sale\ShipmentCollection $shipmentCollection */
$shipmentCollection = $entity->getCollection();
if (!$shipmentCollection)
return $result;
$order = $shipmentCollection->getOrder();
if (!$order)
return $result;
$result[] = $order->getField('LID');
}
elseif ($entity instanceof Payment)
{
$paymentCollection = $entity->getCollection();
$order = $paymentCollection->getOrder();
$result[] = $order->getField('LID');
}
return $result;
}
/**
* @return array|null
*/
protected static function getSiteList()
{
static $result = null;
if($result !== null)
return $result;
$result = array();
$dbResultList =
\Bitrix\Main\SiteTable::getList(array(
'select' => array("LID", "NAME", "ACTIVE"),
'filter' => array("ACTIVE" => "Y"),
'order' => array("SORT"=>"ASC", "NAME"=>"ASC")
));
while ($item = $dbResultList->fetch())
$result[$item["LID"]] = $item["NAME"];
return $result;
}
/**
* @param int $entityId
* @return array
*/
public static function getParamsStructure($entityId = 0)
{
$result = array(
"COMPANY" => array(
"TYPE" => "ENUM",
'MULTIPLE' => 'Y',
"LABEL" => "Сайты",
"OPTIONS" => self::getSiteList()
)
);
return $result;
}
/**
* @param int $mode - RestrictionManager::MODE_CLIENT | RestrictionManager::MODE_MANAGER
* @return int
*/
public static function getSeverity($mode)
{
return Manager::SEVERITY_STRICT;
}
}[/CODE]
[CODE]<?php
namespace Bitrix\Sale\Cashbox\Restrictions;
use Bitrix\Main\Localization\Loc;
use Bitrix\Sale\Internals\Entity;
use Bitrix\Sale\Payment;
use Bitrix\Sale;
use Bitrix\Sale\Services\Base\Restriction;
Loc::loadMessages(__FILE__);
/**
* Ограничение для касс по сайту
*
* @license GPLv3
* @author George Melikov <mail@gmelikov.ru>
*/
/*
add to init.php:
$eventManager->addEventHandler(
'sale',
'onSaleCashboxRestrictionsClassNamesBuildList',
'addGmSale'
);
function addGmSale($entity){
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS,
array(
'\Bitrix\Sale\Cashbox\Restrictions\Site' => '/bitrix/php_interface/include/classes/gmsite.php',
)
);
}
*/
/**
* Class Site
* @package Bitrix\Sale\Cashbox\Restrictions
*/
class Site extends Restriction
{
public static $easeSort = 200;
protected static $preparedData = array();
/**
* @return string
*/
public static function getClassTitle()
{
return "сайт";
}
/**
* @return string
*/
public static function getClassDescription()
{
return "Ограничение по сайту";
}
/**
* @param $params
* @param array $restrictionParams
* @param int $serviceId
* @return bool
*/
public static function check($params, array $restrictionParams, $serviceId = 0)
{
if (is_array($restrictionParams) && isset($restrictionParams['COMPANY']))
{
$diff = array_diff($params, $restrictionParams['COMPANY']);
return empty($diff);
}
return true;
}
/**
* @param Entity $entity
* @return array
*/
protected static function extractParams(Entity $entity)
{
$result = array();
if ($entity instanceof Sale\Order)
{
$result[] = $entity->getField('LID');
}
elseif ($entity instanceof Sale\Shipment)
{
/** @var Sale\ShipmentCollection $shipmentCollection */
$shipmentCollection = $entity->getCollection();
if (!$shipmentCollection)
return $result;
$order = $shipmentCollection->getOrder();
if (!$order)
return $result;
$result[] = $order->getField('LID');
}
elseif ($entity instanceof Payment)
{
$paymentCollection = $entity->getCollection();
$order = $paymentCollection->getOrder();
$result[] = $order->getField('LID');
}
return $result;
}
/**
* @return array|null
*/
protected static function getSiteList()
{
static $result = null;
if($result !== null)
return $result;
$result = array();
$dbResultList =
\Bitrix\Main\SiteTable::getList(array(
'select' => array("LID", "NAME", "ACTIVE"),
'filter' => array("ACTIVE" => "Y"),
'order' => array("SORT"=>"ASC", "NAME"=>"ASC")
));
while ($item = $dbResultList->fetch())
$result[$item["LID"]] = $item["NAME"];
return $result;
}
/**
* @param int $entityId
* @return array
*/
public static function getParamsStructure($entityId = 0)
{
$result = array(
"COMPANY" => array(
"TYPE" => "ENUM",
'MULTIPLE' => 'Y',
"LABEL" => "Сайты",
"OPTIONS" => self::getSiteList()
)
);
return $result;
}
/**
* @param int $mode - RestrictionManager::MODE_CLIENT | RestrictionManager::MODE_MANAGER
* @return int
*/
public static function getSeverity($mode)
{
return Manager::SEVERITY_STRICT;
}
}[/CODE]