В Битрикс24 огромное количество возможностей, ни одна из известных мне компаний не использует их полностью. Однако есть функционал, которым пользуются все. Или почти все. Одним из таких инструментов является система учета рабочего времени.
Данная система позволяет осуществлять мониторинг рабочего времени сотрудников, выявлять нарушения/опоздания, контролировать изменения хронометража и многое другое. Все подробности — на официальном сайте.
Но, как вы уже наверное успели догадаться, речь сегодня пойдет не о том, как важно начинать и завершать рабочий день и почему от этого могут зависеть ваши зарплата и премия. Сегодня о другом.
На днях для решения одной из задач мне потребовалось реализовать проверку статуса рабочего дня через API. Практическое применение крайне простое: есть кастомный механизм создания лида. Ответственный за лид — один из работающих сегодня сотрудников. Требуется реализовать ряд проверок: начат ли рабочий день, не находится ли сотрудник на перерыве. Если обе проверки проходят — сотрудник может стать ответственным за лид.
Решение задачи кроется в файле /bitrix/modules/timeman/classes/general/timeman_user.php
. Для удобства — ссылка на онлайн API.
Здесь можно увидеть целый ряд методов:
isDayOpenedToday
— рабочий день открыт сегодняisDayOpen
— рабочий день открыт (но не факт, что сегодня)isDayPaused
— установлен перерывisDayExpired
— рабочий день истек (превышает 24 часа)Использование всех четырех методов мне показалось избыточным, потому я остановился на следующей логике: рабочий день открыт (но не факт, что сегодня), перерыв не установлен, рабочий день не истек. Получается следующая функция:
function user_can_sale($users_array){ foreach($users_array as $user_id) { $TimemanUser = new CTimeManUser($user_id); $userSettings = $TimemanUser->GetSettings(); if( $TimemanUser->isDayOpen() && !$TimemanUser->isDayPaused() && !$TimemanUser->isDayExpired()) { $user_can_sale[] = $user_id; } } return $user_can_sale; }
На вход — подается массив проверяемых идентификаторов пользователей $users_array
. На выходе — получаем массив $user_can_sale
, в который подают только пользователи, удовлетворяющие сформулированному ранее правилу.
На этапе отладки и внедрения можно воспользоваться такой конструкцией:
//подключаем модуль рабочего времени If(CModule::IncludeModule('timeman')) { $UserID = 1; $TimemanUser = new CTimeManUser($UserID); //получаем настройки пользователя $userSettings = $TimemanUser->GetSettings(); //Проверяем ведётся ли учет времени if($userSettings["UF_TIMEMAN"]) { if($TimemanUser->isDayOpenedToday()){echo'<p>рабочий день сегодня начат</p>';}; if($TimemanUser->isDayPaused()){echo'<p>установлен перерыв</p>';}; if($TimemanUser->isDayOpen()){echo'<p>рабочий день начат</p>';}; if($TimemanUser->isDayExpired()){echo'<p>рабочий день ИСТЕК</p>';}; } }
В переменной $UserID
укажите идентификатор проверяемого пользователя.
Для облачной версии в REST API существует метод timeman.status. Самому сталкиваться не доводилось.
Оставить комментарий