• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/birthdayreminder.php
  • Класс: Bitrix\Crm\BirthdayReminder
  • Вызов: BirthdayReminder::getNearestEntities
static function getNearestEntities($entityID, $currentDate, $startDate = '', $responsibleID = 0, $intervalInDays = 7, $checkPermissions = true, $limit = 5)
{
	if(!is_string($startDate) || $startDate === '')
	{
		$startDate = $currentDate;
	}

	$site = new \CSite();
	$dateFormat = $site->GetDateFormat('SHORT');
	$curretTime = $currentDate !== '' ? MakeTimeStamp($currentDate, $dateFormat) : false;
	$startTime = $startDate !== '' ? MakeTimeStamp($startDate, $dateFormat) : false;

	if($startTime === false)
	{
		return array();
	}

	$dt = new \DateTime();
	$dt->setTimestamp($startTime);
	$dt->add(new \DateInterval("P{$intervalInDays}D"));
	$endTime = $dt->getTimeStamp();

	$currentSorting = self::internalPrepareSorting($curretTime);
	$startSorting = self::internalPrepareSorting($startTime);
	$endSorting = self::internalPrepareSorting($endTime);

	$filterData = array();
	if($startSorting <= $endSorting)
	{
		$filterData[] = array(
			'FIELDS' => array(
				'>=BIRTHDAY_SORT' => $startSorting,
				'<=BIRTHDAY_SORT' => $endSorting
			)
		);
	}
	else
	{
		$startYear = (int)date('Y', $startTime);
		$endYear = (int)date('Y', $endTime);

		$filterData[] = array(
			'FIELDS' => array(
				'>=BIRTHDAY_SORT' => $startSorting,
				'<=BIRTHDAY_SORT' => self::internalPrepareSorting(mktime(0, 0, 0, 12, 31, $startYear))
			),
			'SORT_OFFSET' => 0
		);

		$filterData[] = array(
			'FIELDS' => array(
				'>=BIRTHDAY_SORT' => self::internalPrepareSorting(mktime(0, 0, 0, 1, 1, $endYear)),
				'<=BIRTHDAY_SORT' => $endSorting
			),
			'SORT_OFFSET' => self::internalPrepareSorting(mktime(0, 0, 0, 12, 31, $startYear))
		);
	}

	$result = array();
	if($entityID === \CCrmOwnerType::Lead)
	{
		foreach($filterData as $filterItem)
		{
			$filter = $filterItem['FIELDS'];
			$filter['CHECK_PERMISSIONS'] = $checkPermissions ? 'Y' : 'N';
			if($responsibleID > 0)
			{
				$filter['=ASSIGNED_BY_ID'] = $responsibleID;
			}

			$dbResult = \CCrmLead::GetListEx(
				array(),
				$filter,
				false,
				array('nTopCount' => $limit),
				array('ID', 'BIRTHDATE', 'BIRTHDAY_SORT', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME')
			);

			$sortOffset = isset($filterItem['SORT_OFFSET']) ? $filterItem['SORT_OFFSET'] : 0;
			while($fields = $dbResult->Fetch())
			{
				self::prepareEntity(\CCrmOwnerType::Lead, $fields, $currentSorting, $sortOffset);
				$result[] = $fields;
			}
		}
	}
	elseif($entityID === \CCrmOwnerType::Contact)
	{
		foreach($filterData as $filterItem)
		{
			$filter = $filterItem['FIELDS'];
			$filter['CHECK_PERMISSIONS'] = $checkPermissions ? 'Y' : 'N';
			if($responsibleID > 0)
			{
				$filter['=ASSIGNED_BY_ID'] = $responsibleID;
			}
			$filter['@CATEGORY_ID'] = 0;

			$dbResult = \CCrmContact::GetListEx(
				array(),
				$filter,
				false,
				array('nTopCount' => $limit),
				array('ID', 'BIRTHDATE', 'BIRTHDAY_SORT', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'PHOTO')
			);

			$sortOffset = isset($filterItem['SORT_OFFSET']) ? $filterItem['SORT_OFFSET'] : 0;
			while($fields = $dbResult->Fetch())
			{
				self::prepareEntity(\CCrmOwnerType::Contact, $fields, $currentSorting, $sortOffset);
				$result[] = $fields;
			}
		}
	}

	return $result;
}