Меняем дату просроченной подзадачи, bitrix24

Задача следующая - если дата просроченной основной задачи совпадает с датой просроченных подзадач, то при изменении времени исполнения в корневой задаче, должно измениться время и у этих просроченных подзадач.

Для решения такой задачи я добавил в /local/php_interface/init.php такой обработчик событий OnBeforeTaskUpdate, который срабатывает перед обновлением задачи.


AddEventHandler("tasks", "OnBeforeTaskUpdate", Array("TaskUpdate", "BeforeTaskUpdate"));
class TaskUpdate
{
    function BeforeTaskUpdate($ID, &$arFields, &$arTaskCopy)
    {
    	if (CModule::IncludeModule("tasks"))
		{

		    $res = CTasks::GetList(
		        Array("ID" => "ASC"), 
		        Array("ID" => $ID),
		        Array("DEADLINE")
		    );

		    while ($arTask = $res->GetNext())
		    {
		       $OldTime = $arTask['DEADLINE'];
		    }


		   	$NewTime = $arFields['DEADLINE'];

		   	$NewTimeForTable = date( "Y-m-d H:i:s", strtotime( $NewTime ) );

		    if($OldTime != $NewTime)
		    {
		    	$res_parent = CTasks::GetList(
			        Array("ID" => "ASC"), 
			        Array("PARENT_ID" => $ID),
			        Array("DEADLINE")
			    );

			    while ($arTask_parent = $res_parent ->GetNext())
			    {
			       if($arTask_parent['DEADLINE'] ==  $OldTime)
			       {
			       		$arUpdateId[] = $arTask_parent['ID'];
			       }
			    }

			    if(count($arUpdateId) > 0)
			    {
					$arUpdateId_separated = implode(",", $arUpdateId);
					global $DB;

					if(empty($NewTime))
					{
						$results = $DB->Query("UPDATE `b_tasks` SET `DEADLINE`=NULL WHERE `ID` IN (".$arUpdateId_separated.")");
					}
					else
					{
						$results = $DB->Query("UPDATE `b_tasks` SET `DEADLINE`='".$NewTimeForTable."' WHERE `ID` IN (".$arUpdateId_separated.")");
					}				    
			    }
		    }
	    }
    }
}