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