- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/volume/invoice.php
- Класс: Bitrix\Crm\Volume\Invoice
- Вызов: Invoice::clearEntity
public function clearEntity()
{
if (!$this->canClearEntity())
{
return -1;
}
$query = $this->prepareQuery();
$dropped = -1;
if ($this->prepareFilter($query))
{
$userPermissions = \CCrmPerms::GetUserPermissions($this->getOwner());
$connection = \Bitrix\Main\Application::getConnection();
$query
->addSelect('ID', 'INVOICE_ID')
->setLimit(self::MAX_ENTITY_PER_INTERACTION)
->setOrder(array('ID' => 'ASC'))
;
if ($this->getProcessOffset() > 0)
{
$query->where('ID', '>', $this->getProcessOffset());
}
$res = $query->exec();
$dropped = 0;
$entity = new \CCrmInvoice(false);
while ($invoice = $res->fetch())
{
$this->setProcessOffset($invoice['INVOICE_ID']);
$entityAttr = $userPermissions->GetEntityAttr('INVOICE', array($invoice['INVOICE_ID']));
$attr = $entityAttr[$invoice['INVOICE_ID']];
if($userPermissions->CheckEnityAccess('INVOICE', 'DELETE', $attr))
{
$connection->startTransaction();
if ($entity->delete($invoice['INVOICE_ID']))
{
$connection->commitTransaction();
$this->incrementDroppedEntityCount();
$dropped ++;
}
else
{
$connection->rollbackTransaction();
$err = '';
global $APPLICATION;
if ($APPLICATION instanceof \CMain)
{
$err = $APPLICATION->GetException();
}
if ($err == '')
{
$err = 'Deletion failed with invoice #'.$invoice['INVOICE_ID'];
}
$this->collectError(new Main\Error($err, self::ERROR_DELETION_FAILED));
$this->incrementFailCount();
}
}
else
{
$this->collectError(new Main\Error('Access denied to drop invoice #'.$invoice['INVOICE_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;
}