• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_invoice.php
  • Класс: \CAllCrmInvoice
  • Вызов: CAllCrmInvoice::BuildSearchCard
static function BuildSearchCard($arInvoice, $bReindex = false)
{
	$arStatuses = array();
	$arSite = array();
	$sEntityType = 'INVOICE';
	$sTitle = 'ORDER_TOPIC';
	$sNumber = 'ACCOUNT_NUMBER';
	$arSearchableFields = array(
		/*'ACCOUNT_NUMBER' => GetMessage('CRM_INVOICE_SEARCH_FIELD_ACCOUNT_NUMBER'),*/
		/*'ORDER_TOPIC' => GetMessage('CRM_INVOICE_SEARCH_FIELD_ORDER_TOPIC'),*/
		'STATUS_ID' => GetMessage('CRM_INVOICE_SEARCH_FIELD_STATUS_ID'),
		'DATE_BILL' => GetMessage('CRM_INVOICE_SEARCH_FIELD_DATE_BILL'),
		'DATE_PAY_BEFORE' => GetMessage('CRM_INVOICE_SEARCH_FIELD_DATE_PAY_BEFORE'),
		'PRICE' => GetMessage('CRM_INVOICE_SEARCH_FIELD_PRICE'),
		'PAY_VOUCHER_NUM' => GetMessage('CRM_INVOICE_SEARCH_FIELD_PAY_VOUCHER_NUM'),
		'USER_DESCRIPTION' => GetMessage('CRM_INVOICE_SEARCH_FIELD_USER_DESCRIPTION'),
		'COMMENTS' => GetMessage('CRM_INVOICE_SEARCH_FIELD_COMMENTS'),
		'REASON_MARKED' => GetMessage('CRM_INVOICE_SEARCH_FIELD_REASON_MARKED')
	);

	$sBody = $arInvoice[$sNumber].', '.$arInvoice[$sTitle]."\n";
	$arField2status = array(
		'STATUS_ID' => 'INVOICE_STATUS'
	);
	$site = new CSite();

	foreach (array_keys($arSearchableFields) as $k)
	{
		if (!isset($arInvoice[$k]))
			continue;

		$v = $arInvoice[$k];

		if($k === 'COMMENTS' || $k === 'USER_DESCRIPTION')
		{
			$v = CSearch::KillTags($v);
		}

		$v = trim($v);

		if ($k === 'DATE_BILL' || $k === 'DATE_PAY_BEFORE')
		{
			$dateFormatShort = $site->GetDateFormat('SHORT');
			if (!CheckDateTime($v, $dateFormatShort))
			{
				$v = ConvertTimeStamp(strtotime($v), 'SHORT');
			}
			if (CheckDateTime($v, $dateFormatShort))
			{
				$v = FormatDate('SHORT', MakeTimeStamp($v, $dateFormatShort));
			}
			else
			{
				$v = null;
			}
		}

		if (isset($arField2status[$k]))
		{
			if (!isset($arStatuses[$k]))
				$arStatuses[$k] = CCrmStatus::GetStatusList($arField2status[$k]);
			$v = $arStatuses[$k][$v];
		}

		if (!empty($v) && (!is_numeric($v) || $k === 'PRICE') && $v != 'N' && $v != 'Y')
			$sBody .= $arSearchableFields[$k].": $v\n";
	}

	if ((isset($arInvoice['RESPONSIBLE_NAME']) && !empty($arInvoice['RESPONSIBLE_NAME']))
		|| (isset($arInvoice['RESPONSIBLE_LAST_NAME']) && !empty($arInvoice['RESPONSIBLE_LAST_NAME']))
		|| (isset($arInvoice['RESPONSIBLE_SECOND_NAME']) && !empty($arInvoice['RESPONSIBLE_SECOND_NAME'])))
	{
		$responsibleInfo = CUser::FormatName(
			$site->GetNameFormat(null, $arInvoice['LID']),
			array(
				'LOGIN' => '',
				'NAME' => isset($arInvoice['RESPONSIBLE_NAME']) ? $arInvoice['RESPONSIBLE_NAME'] : '',
				'LAST_NAME' => isset($arInvoice['RESPONSIBLE_LAST_NAME']) ? $arInvoice['RESPONSIBLE_LAST_NAME'] : '',
				'SECOND_NAME' => isset($arInvoice['RESPONSIBLE_SECOND_NAME']) ? $arInvoice['RESPONSIBLE_SECOND_NAME'] : ''
			),
			false, false
		);
		if (isset($arInvoice['RESPONSIBLE_EMAIL']) && !empty($arInvoice['RESPONSIBLE_EMAIL']))
			$responsibleInfo .= ', '.$arInvoice['RESPONSIBLE_EMAIL'];
		if (isset($arInvoice['RESPONSIBLE_WORK_POSITION']) && !empty($arInvoice['RESPONSIBLE_WORK_POSITION']))
			$responsibleInfo .= ', '.$arInvoice['RESPONSIBLE_WORK_POSITION'];
		if (!empty($responsibleInfo) && !is_numeric($responsibleInfo) && $responsibleInfo != 'N' && $responsibleInfo != 'Y')
			$sBody .= GetMessage('CRM_INVOICE_SEARCH_FIELD_RESPONSIBLE_INFO').": $responsibleInfo\n";
	}

	if (intval($arInvoice['PERSON_TYPE_ID']) > 0)
	{
		$arSearchableProperties = self::_getAllowedPropertiesInfo($arInvoice['LID']);
		$arSearchableProperties = $arSearchableProperties[$arInvoice['PERSON_TYPE_ID']];
		if (is_array($arSearchableProperties))
		{
			$arInvoiceProps = self::GetProperties($arInvoice['ID'], $arInvoice['PERSON_TYPE_ID']);
			foreach ($arInvoiceProps as $prop)
			{
				$propCode = $prop['FIELDS']['CODE'];
				if (array_key_exists($propCode, $arSearchableProperties))
				{
					$v = $prop['VALUE'];
					if (!empty($v) && !is_numeric($v) && $v != 'N' && $v != 'Y')
						$sBody .= $arSearchableProperties[$propCode].": $v\n";
				}
			}
		}
	}

	$sDetailURL = CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_'.mb_strtolower($sEntityType).'_show'),
		array(
			mb_strtolower($sEntityType).'_id' => $arInvoice['ID']
		)
	);

	$_arAttr = \Bitrix\Crm\Security\Manager::resolveController($sEntityType)
		->getPermissionAttributes($sEntityType, [$arInvoice['ID']])
	;

	if (empty($arSite))
	{
		$rsSite = $site->GetList();
		while ($_arSite = $rsSite->Fetch())
			$arSite[] = $_arSite['ID'];
	}
	unset($site);

	$sattr_d = '';
	$sattr_s = '';
	$sattr_u = '';
	$sattr_o = '';
	$sattr2 = '';
	$arAttr = array();
	if (!isset($_arAttr[$arInvoice['ID']]))
		$_arAttr[$arInvoice['ID']] = array();

	$arAttr[] = $sEntityType; // for perm X
	foreach ($_arAttr[$arInvoice['ID']] as $_s)
	{
		if ($_s[0] == 'U')
			$sattr_u = $_s;
		else if ($_s[0] == 'D')
			$sattr_d = $_s;
		else if ($_s[0] == 'S')
			$sattr_s = $_s;
		else if ($_s[0] == 'O')
			$sattr_o = $_s;
		$arAttr[] = $sEntityType.'_'.$_s;
	}
	$sattr = $sEntityType.'_'.$sattr_u;
	if (!empty($sattr_d))
	{
		$sattr .= '_'.$sattr_d;
		$arAttr[] = $sattr;
	}
	if (!empty($sattr_s))
	{
		$sattr2 = $sattr.'_'.$sattr_s;
		$arAttr[] = $sattr2;
		$arAttr[] = $sEntityType.'_'.$sattr_s;  // for perm X in status
	}
	if (!empty($sattr_o))
	{
		$sattr  .= '_'.$sattr_o;
		$sattr3 = $sattr2.'_'.$sattr_o;
		$arAttr[] = $sattr3;
		$arAttr[] = $sattr;
	}

	$arSitePath = array();
	foreach ($arSite as $sSite)
		$arSitePath[$sSite] = $sDetailURL;

	$arResult = Array(
		'LAST_MODIFIED' => $arInvoice['DATE_UPDATE'],
		'DATE_FROM' => $arInvoice['DATE_INSERT'],
		'TITLE' => GetMessage('CRM_'.$sEntityType).': '.$arInvoice[$sNumber].', '.$arInvoice[$sTitle],
		'PARAM1' => $sEntityType,
		'PARAM2' => $arInvoice['ID'],
		'SITE_ID' => $arSitePath,
		'PERMISSIONS' => $arAttr,
		'BODY' => $sBody,
		'TAGS' => 'crm,'.mb_strtolower($sEntityType).','.GetMessage('CRM_'.$sEntityType)
	);

	if ($bReindex)
		$arResult['ID'] = $sEntityType.'.'.$arInvoice['ID'];

	return $arResult;
}