- Модуль: timeman
- Путь к файлу: ~/bitrix/modules/timeman/lib/service/worktime/worktimeservice.php
- Класс: BitrixTimemanServiceWorktimeWorktimeService
- Вызов: WorktimeService::processWorktimeAction
private function processWorktimeAction($recordForm, $checkActionCallback)
{
return $this->wrapAction(function () use ($recordForm, $checkActionCallback) {
/** @var WorktimeServiceResult $actionListResult */
$this->safeRun($actionListResult = $checkActionCallback());
$this->safeRun(
$buildingRecordResult = $this->getWorktimeManager()
->buildActualRecord($actionListResult->getWorktimeAction(), $this->worktimeRepository)
);
$actualRecord = $buildingRecordResult->getWorktimeRecord();
if (empty($actualRecord->collectValues(Values::CURRENT)))
{
return (new WorktimeServiceResult())
->setSchedule($actionListResult->getSchedule())
->setShift($actionListResult->getShift())
->setWorktimeRecord($actualRecord);
}
$worktimeEvents = $this->getWorktimeManager()->buildEvents($actualRecord);
$this->runBeforeRecordSave($actualRecord);
$this->safeRun($this->save($actualRecord, $worktimeEvents));
// we need ID, so we save and then updating if needed
$this->runAfterRecordSave($actualRecord, $actionListResult->getSchedule(), $actionListResult->getShift(), $recordForm->getFirstEventName());
if ($actionListResult->getSchedule())
{
$this->sendNotifications($actualRecord, $actionListResult->getSchedule());
}
return (new WorktimeServiceResult())
->setWorktimeRecord($actualRecord)
->setSchedule($actionListResult->getSchedule())
->setShift($actionListResult->getShift())
->setWorktimeEvents($worktimeEvents);
});
}