• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskitem.php
  • Класс: CTaskItem
  • Вызов: CTaskItem::checkProjectDates
private function checkProjectDates($arTaskData, $arNewFields)
{
	if (array_key_exists('GROUP_ID', $arNewFields) && (int)$arNewFields['GROUP_ID'] > 0)
	{
		$groupId = (int)$arNewFields['GROUP_ID'];
	}
	else
	{
		$groupId = (int)$arTaskData['GROUP_ID'];
	}

	if (!$groupId)
	{
		return;
	}

	if (CModule::includeModule('socialnetwork'))
	{
		$group = CSocNetGroup::getById($groupId);

		if ($group && $group['PROJECT'] == 'Y' && ($group['PROJECT_DATE_START'] || $group['PROJECT_DATE_FINISH']))
		{
			$projectStartDate = DateTime::createFrom($group['PROJECT_DATE_START']);
			$projectFinishDate = DateTime::createFrom($group['PROJECT_DATE_FINISH']);

			if ($projectFinishDate)
			{
				$projectFinishDate->addSecond(86399); // + 23:59:59
			}

			$deadline = DateTime::createFrom($arTaskData['DEADLINE']);
			$endDatePlan = DateTime::createFrom($arTaskData['END_DATE_PLAN']);
			$startDatePlan = DateTime::createFrom($arTaskData['START_DATE_PLAN']);

			if (isset($arNewFields['DEADLINE']) && $arNewFields['DEADLINE'])
			{
				$deadline = DateTime::createFrom($arNewFields['DEADLINE']);
			}
			if (isset($arNewFields['END_DATE_PLAN']) && $arNewFields['END_DATE_PLAN'])
			{
				$endDatePlan = DateTime::createFrom($arNewFields['END_DATE_PLAN']);
			}
			if (isset($arNewFields['START_DATE_PLAN']) && $arNewFields['START_DATE_PLAN'])
			{
				$startDatePlan = DateTime::createFrom($arNewFields['START_DATE_PLAN']);
			}

			if ($deadline && !$deadline->checkInRange($projectStartDate, $projectFinishDate))
			{
				$this->_errors[] = ["text" => GetMessage("TASKS_DEADLINE_OUT_OF_PROJECT_RANGE"), "id" => "ERROR_TASKS_OUT_OF_PROJECT_DATE"];
			}

			if ($endDatePlan && !$endDatePlan->checkInRange($projectStartDate, $projectFinishDate))
			{
				$this->_errors[] = ["text" => GetMessage("TASKS_PLAN_DATE_END_OUT_OF_PROJECT_RANGE"), "id" => "ERROR_TASKS_OUT_OF_PROJECT_DATE"];
			}

			if ($startDatePlan && !$startDatePlan->checkInRange($projectStartDate, $projectFinishDate))
			{
				$this->_errors[] = ["text" => GetMessage("TASKS_PLAN_DATE_START_OUT_OF_PROJECT_RANGE"), "id" => "ERROR_TASKS_OUT_OF_PROJECT_DATE"];
			}

			if (!empty($this->_errors))
			{
				static::throwExceptionVerbose($this->_errors);
			}
		}
	}
}