• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_report_helper.php
  • Класс: \CCrmInvoiceReportHelper
  • Вызов: CCrmInvoiceReportHelper::beforeViewDataQuery
static function beforeViewDataQuery(&$select, &$filter, &$group, &$order, &$limit, &$options, &$runtime = null)
{
	parent::beforeViewDataQuery($select, $filter, $group, $order, $limit, $options, $runtime);

	if(!isset($select['CRM_INVOICE_INVOICE_UTS_COMPANY_BY_ID']))
	{
		foreach($select as $k => $v)
		{
			if(mb_strpos($k, 'CRM_INVOICE_INVOICE_UTS_COMPANY_BY_') === 0)
			{
				$select['CRM_INVOICE_INVOICE_UTS_COMPANY_BY_ID'] = 'INVOICE_UTS.COMPANY_BY.ID';
				break;
			}
		}
	}
	if(!isset($select['CRM_INVOICE_INVOICE_UTS_CONTACT_BY_ID']))
	{
		foreach($select as $k => $v)
		{
			if(mb_strpos($k, 'CRM_INVOICE_INVOICE_UTS_CONTACT_BY_') === 0)
			{
				$select['CRM_INVOICE_INVOICE_UTS_CONTACT_BY_ID'] = 'INVOICE_UTS.CONTACT_BY.ID';
				break;
			}
		}
	}

	// HACK: Switch to order by SATTUS_BY.SORT instead STATUS_BY.STATUS_ID
	// We are trying to adhere user defined sort rules.
	if(isset($order['STATUS_ID']))
	{
		$select['CRM_INVOICE_STATUS_BY_SORT'] = 'STATUS_BY.SORT';
		$order['CRM_INVOICE_STATUS_BY_SORT'] = $order['STATUS_ID'];
		unset($order['STATUS_ID']);
	}

	if(!isset($select['CRM_INVOICE_INVOICE_UTS_CONTACT_BY_ID']))
	{
		foreach($select as $k => $v)
		{
			if(mb_strpos($k, 'CRM_INVOICE_INVOICE_UTS_CONTACT_BY_') === 0)
			{
				$select['CRM_INVOICE_INVOICE_UTS_CONTACT_BY_ID'] = 'INVOICE_UTS.CONTACT_BY.ID';
				break;
			}
		}
	}

	if(!isset($select['CRM_INVOICE_INVOICE_UTS_COMPANY_BY_ID']))
	{
		foreach($select as $k => $v)
		{
			if(mb_strpos($k, 'CRM_INVOICE_INVOICE_UTS_COMPANY_BY_') === 0)
			{
				$select['CRM_INVOICE_INVOICE_UTS_COMPANY_BY_ID'] = 'INVOICE_UTS.COMPANY_BY.ID';
				break;
			}
		}
	}

	// permission
	$addClause = CCrmInvoice::BuildPermSql('crm_invoice');
	if(!empty($addClause))
	{
		global $DB;
		// HACK: add escape chars for ORM
		$addClause = str_replace('crm_invoice.ID', $DB->escL.'crm_invoice'.$DB->escR.'.ID', $addClause);

		$filter = array($filter,
			'=IS_ALLOWED' => '1'
		);

		$runtime['IS_ALLOWED'] = array(
			'data_type' => 'integer',
			'expression' => array('CASE WHEN '.$addClause.' THEN 1 ELSE 0 END')
		);
	}

	if (!isset($filter['=IS_RECURRING']) || !isset($filter['IS_RECURRING']))
	{
		if(!isset($filter['LOGIC']) || $filter['LOGIC'] === 'AND')
		{
			$filter['=IS_RECURRING'] = 'N';
		}
		else
		{
			$filter = array(
				$filter,
				'=IS_RECURRING' => 'N'
			);

		}
	}
}