• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/volume/company.php
  • Класс: Bitrix\Crm\Volume\Company
  • Вызов: Company::clearEntity
public function clearEntity()
{
	if (!$this->canClearEntity())
	{
		return -1;
	}

	$query = $this->prepareQuery();

	$dropped = -1;

	if ($this->prepareFilter($query))
	{
		$query
			->addSelect('ID', 'COMPANY_ID')
			->setLimit(self::MAX_ENTITY_PER_INTERACTION)
			->setOrder(array('ID' => 'ASC'))
		;

		if ($this->getProcessOffset() > 0)
		{
			$query->where('ID', '>', $this->getProcessOffset());
		}

		$res = $query->exec();

		$connection = \Bitrix\Main\Application::getConnection();

		$userPermissions = \CCrmPerms::GetUserPermissions($this->getOwner());

		$crmCompany = new \CCrmCompany(false);

		$dropped = 0;
		while ($company = $res->fetch())
		{
			$this->setProcessOffset($company['COMPANY_ID']);

			$entityAttr = $userPermissions->GetEntityAttr('COMPANY', array($company['COMPANY_ID']));
			if ($userPermissions->CheckEnityAccess('COMPANY', 'DELETE', $entityAttr[$company['COMPANY_ID']]))
			{
				$connection->startTransaction();

				if ($crmCompany->Delete($company['COMPANY_ID'], array('CURRENT_USER' => $this->getOwner())))
				{
					$connection->commitTransaction();
					$this->incrementDroppedEntityCount();
					$dropped ++;
				}
				else
				{
					$connection->rollbackTransaction();

					$err = '';
					global $APPLICATION;
					if ($APPLICATION instanceof \CMain)
					{
						$err = $APPLICATION->GetException();
					}
					if ($err == '')
					{
						$err = 'Deletion failed with company #'.$company['COMPANY_ID'];
					}
					$this->collectError(new Main\Error($err, self::ERROR_DELETION_FAILED));
					$this->incrementFailCount();
				}
			}
			else
			{
				$this->collectError(new Main\Error('Access denied to drop company #'.$company['COMPANY_ID'], self::ERROR_PERMISSION_DENIED));
				$this->incrementFailCount();
			}

			if ($this->hasTimeLimitReached())
			{
				break;
			}
		}
	}
	else
	{
		$this->collectError(new Main\Error('Filter error', self::ERROR_DELETION_FAILED));
	}

	return $dropped;
}