• Модуль: timeman
  • Путь к файлу: ~/bitrix/modules/timeman/classes/general/timeman_admin_report.php
  • Класс: CTimeManAdminReport
  • Вызов: CTimeManAdminReport::_getUsersData
private function _getUsersData(&$arUserIDs)
{
	$arResult = array();

	$arFilter = $this->__getFilter();

	if (!$this->bShowAll)
	{
		$arActiveUsers = array();
		$dbRes = CTimeManEntry::GetList(
			array('USER_ID' => 'ASC'), $arFilter,
			array('USER_ID'), false,
			array('USER_ID')
		);
		while ($arRes = $dbRes->GetNext())
		{
			$arActiveUsers[] = $arRes['USER_ID'];
		}

		if (!$this->bCanReadAll)
		{
			$this->arAccessUsers['READ'] = array_intersect($this->arAccessUsers['READ'], $arActiveUsers);
		}
		else
		{
			$this->arAccessUsers['READ'] = $arActiveUsers;
		}

		$this->bCanReadAll = false;

		if (count($this->arAccessUsers['READ']) <= 0)
			return $arResult;
	}

	$arUserIDs = CIntranetUtils::GetEmployeesForSorting($this->page, $this->amount, $this->department, $this->bCanReadAll ? false : $this->arAccessUsers['READ']);

	$arUsers = array();
	foreach ($arUserIDs as $ar)
		$arUsers = array_merge($arUsers, $ar);

	if(count($arUsers) > 0)
	{
		$arFilter['USER_ID'] = $arUsers;

		if ($this->bShowAll)
		{
			$dbRes = CUser::GetList('LAST_NAME', 'asc', array('ID' => implode('|', $arUsers), 'ACTIVE' => 'Y'), array('SELECT' => array('*', 'UF_DEPARTMENT')));
			while ($arRes = $dbRes->GetNext())
			{
				$arResult[$arRes['ID']] = $this->__getUserRow($arRes, '', $arFilter);
			}
		}

		$dbRes = CTimeManEntry::GetList(
			array(
				'USER_LAST_NAME' => 'ASC',
				'DATE_START' => 'ASC'
			), $arFilter, false, false, array('*', 'UF_DEPARTMENT', 'ACTIVATED')
		);

		$arEntriesMap = array();
		while($arRes = $dbRes->GetNext())
		{
			if (!$arResult[$arRes['USER_ID']])
			{
				$arResult[$arRes['USER_ID']] = $this->__getUserRow($arRes, 'USER_', $arFilter);
			}
			elseif ($arEntriesMap[$arRes['ID']])
			{
				continue;
			}

			$ts_start = MakeTimeStamp($arRes['DATE_START']);

			$arEntry = array(
				'ID' => $arRes['ID'],
				'USER_ID' => $arRes['USER_ID'],
				'DAY' => date('j', $ts_start),
				'ACTIVE' => $arRes['ACTIVE'] == 'Y',
				'PAUSED' => $arRes['PAUSED'] == 'Y',
				'ACTIVATED' => $arRes['ACTIVATED'] == 'Y',
				'DATE_START' => MakeTimeStamp($arRes['DATE_START'])-CTimeZone::GetOffset(), // unchanged time
				'DATE_FINISH' => $arRes['DATE_FINISH'] ? MakeTimeStamp($arRes['DATE_FINISH'])-CTimeZone::GetOffset() : '', // unchanged time
				'TIME_START' => $arRes['TIME_START'], // unchanged time
				'TIME_FINISH' => $arRes['TIME_FINISH'], // unchanged time
				'DURATION' => $arRes['DURATION'],
				'TIME_LEAKS' => $arRes['TIME_LEAKS'],
				'CAN_EDIT' => ($this->bCanEditAll || in_array($arRes['USER_ID'], $this->arAccessUsers['WRITE'])),
			);

			if ($arRes['DATE_FINISH'] && $arRes['PAUSED'] !== 'Y')
			{
				if ($arRes['ACTIVE'] == 'Y')
				{
					$arResult[$arRes['USER_ID']]['TOTAL'] += $arRes['DURATION'];
					$arResult[$arRes['USER_ID']]['TOTAL_DAYS']++;

					$arSettings = $arResult[$arRes['USER_ID']]['SETTINGS'];

					if (
						!$arSettings['UF_TM_FREE'] &&
						(
						$arSettings['UF_TM_MAX_START'] < $arEntry['TIME_START']
						|| $arSettings['UF_TM_MIN_FINISH'] > $arEntry['TIME_FINISH']
						|| $arSettings['UF_TM_MIN_DURATION'] > $arEntry['DURATION']
						)
					)
						$arResult[$arRes['USER_ID']]['TOTAL_VIOLATIONS']++;
				}
				else
				{
					$arResult[$arRes['USER_ID']]['TOTAL_INACTIVE']++;
				}
			}

			$arEntriesMap[$arRes['ID']] = true;
			$arResult[$arRes['USER_ID']]['ENTRIES'][] = $arEntry;
		}
	}

	return $arResult;
}