- Модуль: timeman
- Путь к файлу: ~/bitrix/modules/timeman/lib/absence.php
- Класс: BitrixTimemanAbsence
- Вызов: Absence::setStatusOnline
static function setStatusOnline($users, $ip = null)
{
if (!self::isActive() || !self::isRegisterOffline())
return false;
$dateStart = (new BitrixMainTypeDateTime())->format('Y-m-d').' 00:00:00';
$orm = BitrixTimemanModelEntriesTable::getList(Array(
'select' => Array(
'USER_ID',
'ABSENCE_ID' => 'ABSENCE.ID',
'ABSENCE_DATE_START' => 'ABSENCE.DATE_START',
'ABSENCE_TIME_START' => 'ABSENCE.TIME_START',
'ABSENCE_TYPE' => 'ABSENCE.TYPE',
),
'filter' => Array(
'=USER_ID' => $users,
'>=DATE_START' => new BitrixMainDBSqlExpression('?', $dateStart),
'=DATE_FINISH' => null,
'>=ABSENCE.DATE_START' => new BitrixMainDBSqlExpression('?', $dateStart),
),
'runtime' => Array(
new BitrixMainEntityReferenceField(
'ABSENCE',
'BitrixTimemanModelAbsenceTable',
array(
"=ref.USER_ID" => "this.USER_ID",
"=ref.ACTIVE" => new BitrixMainDBSqlExpression('?', 'Y'),
"=ref.TYPE" => new BitrixMainDBSqlExpression('?', self::TYPE_OFFLINE),
),
array("join_type"=>"inner")
)
)
));
$todayStart = new BitrixMainTypeDateTime((new BitrixMainTypeDateTime())->format('Y-m-d').' 00:00:00', 'Y-m-d H:i:s');
while ($entry = $orm->fetch())
{
$dateFinish = new BitrixMainTypeDateTime();
$timeFinish = $dateFinish->getTimestamp() - $todayStart->getTimestamp();
$duration = $timeFinish - $entry['ABSENCE_TIME_START'];
$fields = Array(
'ACTIVE' => 'N',
'DATE_FINISH' => $dateFinish,
'TIME_FINISH' => $timeFinish,
'DURATION' => $timeFinish - $entry['ABSENCE_TIME_START'],
'SOURCE_FINISH' => self::SOURCE_ONLINE_EVENT,
);
if ($ip)
{
$fields['IP_FINISH'] = $ip;
}
BitrixTimemanModelAbsenceTable::update($entry['ABSENCE_ID'], $fields);
if (self::isReportEnableForUser($entry['USER_ID'], self::convertSecondsToMinutes($duration)))
{
BitrixPullEvent::add($entry['USER_ID'], Array(
'module_id' => 'timeman',
'command' => 'timeControlCommitAbsence',
'params' => Array(
'absenceId' => $entry['ABSENCE_ID'],
'dateStart' => date('c', $entry['ABSENCE_DATE_START']->getTimestamp()),
'dateFinish' => date('c', $dateFinish->getTimestamp()),
'duration' => $duration
)
));
}
}
return true;
}