- Модуль: 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;
}