• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/kanban/helper.php
  • Класс: Bitrix\Crm\Kanban\Helper
  • Вызов: Helper::getFilter
static function getFilter($entity)
{
	static $filter = array();
	$types = self::getTypes();

	if (!array_key_exists($entity, $filter))
	{
		$filter[$entity] = array();
		// lead
		if ($entity == $types['lead'])
		{
			$entityFilter = \Bitrix\Crm\Filter\Factory::createEntityFilter(
				new \Bitrix\Crm\Filter\LeadSettings(
					array(
						'ID' => self::getGridId($entity)
					)
				)
			);
		}
		// deal
		elseif ($entity == $types['deal'])
		{
			$userPermissions = \CCrmPerms::getCurrentUserPermissions();
			$entityFilter = \Bitrix\Crm\Filter\Factory::createEntityFilter(
				new \Bitrix\Crm\Filter\DealSettings(
					array(
						'ID' => self::getGridId($entity),
						'categoryID' => self::$categoryId,
						'categoryAccess' => array(
							'CREATE' => \CCrmDeal::getPermittedToCreateCategoryIDs($userPermissions),
							'READ' => \CCrmDeal::getPermittedToReadCategoryIDs($userPermissions),
							'UPDATE' => \CCrmDeal::getPermittedToUpdateCategoryIDs($userPermissions)
						),
						'flags' => \Bitrix\Crm\Filter\DealSettings::FLAG_NONE
					)
				)
			);
		}
		// quote
		elseif ($entity == $types['quote'])
		{
			$entityFilter = \Bitrix\Crm\Filter\Factory::createEntityFilter(
				new \Bitrix\Crm\Filter\QuoteSettings(
					array(
						'ID' => self::getGridId($entity)
					)
				)
			);
		}
		// invoice
		elseif ($entity == $types['invoice'])
		{
			$filter[$entity]['OVERDUE'] = array(
				'id' => 'OVERDUE',
				'name' => Loc::getMessage('CRM_KANBAN_HELPER_FLT_OVERDUE_INVOICE'),
				'default' => true,
				'type' => 'list',
				'items' => array(
					'Y' => Loc::getMessage('CRM_KANBAN_HELPER_FLT_YES'),
					'N' => Loc::getMessage('CRM_KANBAN_HELPER_FLT_NO')
				)
			);
			$filter[$entity]['DATE_PAY_BEFORE'] = array(
				'id' => 'DATE_PAY_BEFORE',
				'name' => Loc::getMessage('CRM_KANBAN_HELPER_FLT_DATE_PAY_INVOICE'),
				'default' => true,
				'type' => 'date'
			);
			$filter[$entity]['PRICE'] = array(
				'id' => 'PRICE',
				'name' => Loc::getMessage('CRM_KANBAN_HELPER_FLT_PRICE'),
				'default' => true,
				'type' => 'number'
			);
			$filter[$entity]['RESPONSIBLE_ID'] = array(
				'id' => 'RESPONSIBLE_ID',
				'name' => Loc::getMessage('CRM_KANBAN_HELPER_FLT_ASSIGNED_BY_ID'),
				'default' => true,
				'type' => 'dest_selector',
				'params' => array(
					'context' => 'CRM_KANBAN_FILTER_RESPONSIBLE_ID',
					'multiple' => 'Y',
					'contextCode' => 'U',
					'enableAll' => 'N',
					'enableSonetgroups' => 'N',
					'allowEmailInvitation' => 'N',
					'allowSearchEmailUsers' => 'N',
					'departmentSelectDisable' => 'Y',
					'isNumeric' => 'Y',
					'prefix' => 'U',
				)
			);
			// add new columns
			$columns = PhaseSemantics::getListFilterInfo(false, null, true);
			$id = 'STATUS_SEMANTIC_ID';
			$filter[$entity][$id] = array_merge(
				array(
					'id' => $id,
					'name' => Loc::getMessage('CRM_KANBAN_HELPER_FLT_STATUS_SEMANTIC_ID'),
					'default' => false,
					'params' => array(
						'multiple' => 'Y'
					)
				),
				$columns
			);
		}
		// order
		elseif ($entity == $types['order'])
		{
			$entityFilter = \Bitrix\Crm\Filter\Factory::createEntityFilter(
				new \Bitrix\Crm\Filter\OrderSettings(
					array(
						'ID' => self::getGridId($entity)
					)
				)
			);
		}
		// new common filter
		if ($entity != $types['invoice'])
		{
			$grid = self::getGrid($entity);
			$effectiveFilterFieldIDs = $grid->getUsedFields();
			// add some additional fields
			if ($entity != $types['quote'])
			{

				$addCodes = array(
					'ASSIGNED_BY_ID', 'ACTIVITY_COUNTER', 'STAGE_ID'
				);
				if (self::$categoryId)
				{
					$addCodes[] = 'STAGE_ID';
				}
				foreach ($addCodes as $code)
				{
					if (!in_array($code, $effectiveFilterFieldIDs))
					{
						$effectiveFilterFieldIDs[] = $code;
					}
				}
			}
			// compile filter
			if (empty($effectiveFilterFieldIDs))
			{
				$effectiveFilterFieldIDs = $grid->getDefaultFieldIDs();
			}
			foreach ($effectiveFilterFieldIDs as $filterFieldID)
			{
				$filterField = $entityFilter->getField($filterFieldID);
				if ($filterField)
				{
					$filter[$entity][$filterFieldID] = $filterField->toArray();
				}
			}
		}
	}

	return $filter[$entity];
}