Your IP : 3.135.217.13


Current Path : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/modules/crm/lib/volume/
Upload File :
Current File : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/modules/crm/lib/volume/clearactivity.php

<?php

namespace Bitrix\Crm\Volume;

use Bitrix\Crm;
use Bitrix\Crm\Volume;
use Bitrix\Main;
use Bitrix\Main\ORM;
use Bitrix\Main\Error;


/**
 * Trait implements Volume\IVolumeClearActivity
 *
 * @implements \Bitrix\Crm\Volume\IVolumeClearActivity
 * @see \Bitrix\Crm\Volume\IVolumeClearActivity
 */
trait ClearActivity
{
	/** @var int */
	private $droppedActivityCount = 0;

	/**
	 * Returns availability to drop entity activities.
	 *
	 * @return boolean
	 */
	public function canClearActivity()
	{
		$activityVolume = new Volume\Activity();
		return $activityVolume->canClearEntity();
	}


	/**
	 * Returns count of activities.
	 * @see \Bitrix\Crm\Volume\IVolumeClearActivity::countActivity
	 *
	 * @param array $additionActivityFilter Filter for activity list.
	 * @return int
	 */
	public function countRelationActivity($additionActivityFilter = array())
	{
		$activityVolume = new Volume\Activity();
		$activityVolume->setFilter($this->getFilter());

		foreach ($additionActivityFilter as $key => $value)
		{
			$activityVolume->addFilter($key, $value);
		}

		return $activityVolume->countEntity();
	}


	/**
	 * Returns dropped count of associated entity activities.
	 * @see \Bitrix\Crm\Volume\IVolumeClearActivity::getDroppedActivityCount
	 *
	 * @return int
	 */
	public function getDroppedActivityCount()
	{
		return $this->droppedActivityCount;
	}

	/**
	 * Sets dropped count of associated entity activities.
	 * @see \Bitrix\Crm\Volume\IVolumeClearActivity::setDroppedActivityCount
	 *
	 * @param int $count Amount to set.
	 * @return void
	 */
	public function setDroppedActivityCount($count)
	{
		$this->droppedActivityCount = $count;
	}

	/**
	 * Returns dropped count of associated entity activities.
	 * @see \Bitrix\Crm\Volume\IVolumeClearActivity::incrementDroppedActivityCount
	 *
	 * @param int $count Amount to increment.
	 * @return void
	 */
	public function incrementDroppedActivityCount($count = 1)
	{
		$this->droppedActivityCount += $count;
	}


	/**
	 * Gets SQL query code for activity count.
	 *
	 * @param array $entityGroupField Entity fields to group by.
	 *
	 * @return string
	 */
	protected function prepareActivityRelationQuerySql(array $entityGroupField = array())
	{
		if (!(
			$this instanceof Volume\Deal ||
			$this instanceof Volume\Lead ||
			$this instanceof Volume\Quote ||
			$this instanceof Volume\Invoice ||
			$this instanceof Volume\Company ||
			$this instanceof Volume\Contact ||
			$this instanceof Volume\Activity
		))
		{
			return '';
		}

		$query = $this->prepareQuery();
		if ($this->prepareFilter($query))
		{
			$activityVolume = new Volume\Activity();
			$activityVolume->setFilter($this->getFilter());
		}
		else
		{
			return '';
		}

		//-----------

		$activityQuery = $activityVolume->prepareQuery(static::className());
		$activityVolume->prepareFilter($activityQuery);

		$fileCount = new ORM\Fields\ExpressionField('FILE_SIZE', '0');
		$fileBindingCount = new ORM\Fields\ExpressionField('FILE_COUNT', '0');
		$activityQuery
			->registerRuntimeField($fileCount)
			->registerRuntimeField($fileBindingCount)
			->addSelect('FILE_SIZE')
			->addSelect('FILE_COUNT');

		if (self::isModuleAvailable('disk'))
		{
			$diskCount = new ORM\Fields\ExpressionField('DISK_SIZE', '0');
			$diskBindingCount = new ORM\Fields\ExpressionField('DISK_COUNT', '0');
			$activityQuery
				->registerRuntimeField($diskCount)
				->registerRuntimeField($diskBindingCount)
				->addSelect('DISK_SIZE')
				->addSelect('DISK_COUNT');
		}

		$activityCount = new ORM\Fields\ExpressionField('ACTIVITY_COUNT', 'COUNT(DISTINCT %s)', 'ID');
		$activityBindingCount = new ORM\Fields\ExpressionField('BINDINGS_COUNT', 'COUNT(%s)', 'BINDINGS.ID');
		$activityQuery
			->registerRuntimeField($activityCount)
			->registerRuntimeField($activityBindingCount)
			->addSelect('ACTIVITY_COUNT')
			->addSelect('BINDINGS_COUNT');

		foreach ($entityGroupField as $alias => $field)
		{
			$activityQuery->addSelect($field, $alias);
			$activityQuery->addGroup($field);
		}

		//-----------

		$activityFileQuery = $activityVolume->getActivityFileMeasureQuery(static::className(), $entityGroupField);

		$activityCount = new ORM\Fields\ExpressionField('ACTIVITY_COUNT', '0');
		$activityBindingCount = new ORM\Fields\ExpressionField('BINDINGS_COUNT', '0');
		$activityFileQuery
			->registerRuntimeField($activityCount)
			->registerRuntimeField($activityBindingCount)
			->addSelect('ACTIVITY_COUNT')
			->addSelect('BINDINGS_COUNT');

		foreach ($entityGroupField as $alias => $field)
		{
			$field = str_replace('.', '_', $field);
			$activityFileQuery->addSelect($field, $alias);
			$activityFileQuery->addGroup($field);
		}

		$sqlQuery =
			$activityQuery->getQuery().
			' UNION '.
			$activityFileQuery->getQuery();

		return $sqlQuery;
	}

}