/ Битрикс24. Выбираем при помощи API сотрудников у которых начат рабочий день

Битрикс24. Выбираем при помощи API сотрудников у которых начат рабочий день

21 Май 2022
Дмитрий М.
9

Для того чтобы выбрать сотрудников у которых начат рабочий день, сперва нужно составить список всех "активных" сотрудников, после пройтись по этому списку и сформировать список сотрудников которые стартовали рабочий день.

Получить список пользователей Битрикс 24

Чтобы получить список пользователей Битрикс24 воспользуемся функцией API CUser::getList()

$userResult = \CUser::getList(
    'ID', 'ASC',
    [
        'ACTIVE' => 'Y'
    ],
    array(
        'FIELDS' => ['ID']
    )
);
while($user = $userResult->fetch()){
    $arUsers[] = $user['ID'];
}

Мы получили массив $arUsers который содержит идентификаторы ID пользователей.

Битрикс24. Получить список пользователей у которых начат рабочий день

Для получения информации о рабочем дне пользователя в Битрикс24 используется класс CTimeManUser()

Нам потребуются методы: GetSettings()State()

Метод GetSettings() - получает настройки учёта времени для пользователя, это нам требуется для того, чтобы понимать ведётся ли для пользователя учёт времени, если учёт не ведётся то ты не получим возможность понять начат у сотрудника рабочий день или нет.

Метод State() - возвращает статус:

EXPIRED рабочий день истёк - это значить что сотрудник не завершил предыдущий рабочий день
OPENED рабочий день начат
PAUSED рабочий день на паузе - обычно паузу ставят когда сотрудник отлучился ( например на обед )
CLOSED рабочий день завершён/закрыт

Нас интересует только статус OPENED. Код примет следующий вид:

if(CModule::IncludeModule('timeman')){
    foreach($arUsers as $user){
        $userTimeMan = new CTimeManUser($user);
        $userSettings = $userTimeMan->GetSettings();
        // Проверяем ведётся ли учёт рабочего времени у сотрудника UF_TIMEMAN
        if($userSettings["UF_TIMEMAN"]){
            if($userTimeMan->State() == "OPENED"){
                $usersWithOpenedDay[] = $user;
            }
        }
    }
}

В итоге мы получили массив $usersWithOpenedDay с ID сотрудников у которых в текущий момент начат рабочий день.

Получить сотрудников из определённого отдела у которых начат рабочий день

Обычно нужно получить список сотрудников которые относятся к какому-то отделу. Для этого нужно сперва получить список сотрудников отдела, а потом проверить их на "начало рабочего дня".

В переменно $departmentId необходимо указать ID отдела, список сотрудников которого Вы хотите получить. Из выборки так же будет исключён Руководитель отдела.

if(CModule::IncludeModule('timeman')){
    $departmentId = '10'; // ID отдела
    $arDepartmentManager = CIntranetUtils::GetDepartmentManagerID($departmentId); // получаем ID руководителя отдела
    $arDepartmentUsersWithOpenDay = [];
    $rsDep = CIntranetUtils::GetDepartmentEmployees($departmentId, $bRecursive = false, $bSkipSelf = false, $onlyActive = 'Y', ['ID','NAME']);
    while($arDep = $rsDep->fetch()){
        if ($arDepartmentManager == $arDep['ID'])
            continue;
        $userTimeMan = new CTimeManUser($arDep['ID']);
        $userSettings = $userTimeMan->GetSettings();
        //Проверяем ведётся ли учет времени
        if($userSettings["UF_TIMEMAN"]){
            if ($userTimeMan->State() == "OPENED"){
                $arDepartmentUsersWithOpenDay[] = $arDep['ID'];
            }
        } 
    }
}

В итоге в массиве $arDepartmentUsersWithOpenDay получим ID сотрудников отдела в текущей момент "работающих". Исключение составляет Руководитель отдела, его из выборки исключил: переменная $arDepartmentManager содержит руководителя отдела.

Статья была полезна? Поблагодарите автора.

Самые читаемые
#1С Битрикс, #Bitrix CMS, #.htaccess, #настройка редиректов
4 Авг 2019
#Хлебные крошки, #1С Битрикс, #Bitrix CMS, #bitrix:breadcrumbs, #component_epilog, #кэширование
1 Окт 2018
#ресайз изображений, #1С Битрикс, #Bitrix CMS
3 Мар 2019
#bitrix, #robots.txt, #sitemap.xml, #поддомены, #мультисайтовость
16 Окт 2018
#Bitrix CMS, #breadcrumb, #bitrix:breadcrumbs, #хлебные крошки, #настройка
13 Фев 2019
#bitrix, #bitrix:catalog.section, #скидки, #товары со скидкой, #страница скидок, #страница со скидками
4 Окт 2018
#bitrix:news, #сортировка, #фильтрация, #bitrix:catalog, #catalog.section, #news.list
16 Дек 2020
#bitrix, #свойства элементов, #обработчик событий, #OnBeforeIBlockElementUpdate, #OnIBlockElementSetPropertyValues
21 Июл 2020
#bitrix, #пользовательские свойства, #тип свойств, #привязка к элементам
27 Ноя 2019