• Модуль: bizproc
  • Путь к файлу: ~/bitrix/modules/bizproc/classes/general/taskservice.php
  • Класс: CBPTaskService
  • Вызов: CBPTaskService::deleteByWorkflow
static function deleteByWorkflow($workflowId, $taskStatus = null)
{
	global $DB;

	$workflowId = trim($workflowId);
	if ($workflowId == '')
		throw new Exception("workflowId");

	$dbRes = $DB->Query(
		"SELECT ID ".
		"FROM b_bp_task ".
		"WHERE WORKFLOW_ID = '".$DB->ForSql($workflowId)."' "
		.($taskStatus !== null? 'AND STATUS = '.(int)$taskStatus : '')
	);
	while ($arRes = $dbRes->Fetch())
	{
		$taskId = intval($arRes["ID"]);
		$removedUsers = $decremented = [];
		$dbResUser = $DB->Query("SELECT USER_ID, STATUS FROM b_bp_task_user WHERE TASK_ID = ".$taskId." ");
		while ($arResUser = $dbResUser->Fetch())
		{
			if ($arResUser['STATUS'] == CBPTaskUserStatus::Waiting)
			{
				CUserCounter::Decrement($arResUser["USER_ID"], 'bp_tasks', '**');
				$decremented[] = $arResUser["USER_ID"];
			}
			$removedUsers[] = $arResUser['USER_ID'];
		}
		$DB->Query("DELETE FROM b_bp_task_user WHERE TASK_ID = ".$taskId." ", true);

		self::onTaskChange(
			$taskId,
			[
				'USERS_REMOVED' => $removedUsers,
				'COUNTERS_DECREMENTED' => $decremented
			],
			CBPTaskChangedStatus::Delete
		);
		foreach (GetModuleEvents("bizproc", "OnTaskDelete", true) as $arEvent)
			ExecuteModuleEventEx($arEvent, array($taskId));
	}

	$DB->Query(
		"DELETE FROM b_bp_task ".
		"WHERE WORKFLOW_ID = '".$DB->ForSql($workflowId)."' "
		.($taskStatus !== null? 'AND STATUS = '.(int)$taskStatus : ''),
		true
	);
}