query('userId') ? (int) $request->query('userId') : null; $departmentId = $request->query('departmentId') ? (int) $request->query('departmentId') : null; $department = Department::where('department_id', $departmentId)->firstOrFail(); $dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user); $isRangeOneDay = $this->dateRangeService->isRangeOneDay($dateRange->startDate, $dateRange->endDate); // Проверяем, есть ли отчет за этот период $isPastPeriod = $this->dateRangeService->isPastPeriod($dateRange); $existsReport = ReportNurse::where('rf_department_id', $departmentId) ->where('period_end', '>', $dateRange->startSql()) ->where('period_end', '<=', $dateRange->endSql()) ->exists(); $isCurrentPeriod = !$isPastPeriod; $reportsNurse = ReportNurse::where('rf_department_id', $departmentId) ->where('period_start', '>=', $dateRange->startSql()) ->where('period_end', '<=', $dateRange->endSql()) ->where('rf_lpudoctor_id', $selectedUserId) ->orderBy('period_end', 'desc') ->with(['doctor']) ->get(); $hasNurseReport = $reportsNurse->count() > 0; $reportNurseIds = $reportsNurse->pluck('id')->toArray(); // Получаем пациентов (источник зависит от периода) if ($isCurrentPeriod) { // Для текущего периода - пациенты из МИС $patients = $this->unifiedMedicalHistoryService->getGroupedHistories( $dateRange, $department->rf_mis_department_id, ); $latestReport = $reportsNurse->first(); } else { // Для прошедшего периода - данные из отчета $patients = $hasNurseReport ? $this->nurseMedicalHistoryService->getGroupedHistories( $dateRange, $department->rf_mis_department_id, $reportNurseIds ) : []; $latestReport = $reportsNurse->first(); } //$data = $this->unifiedMedicalHistoryService->getGroupedHistories($dateRange, $department->rf_mis_department_id); $currentReport = ReportNurse::where('rf_department_id', $departmentId) ->where('period_start', '>=', $dateRange->startSql()) ->where('period_end', '<=', $dateRange->endSql()) ->orderBy('period_end', 'desc') ->first(); $isRangeOneDay = $this->dateRangeService->isRangeOneDay($dateRange->startDate, $dateRange->endDate); return Inertia::render('Nurse/Report/Index', [ 'patients' => $patients, 'latestReport' => $latestReport ?? null, 'reportNurseId' => $currentReport?->id, 'canSaveReport' => $isRangeOneDay && $user->currentRoleCan('nurse.report.create'), 'canEditPastReport' => $user->currentRoleCan('nurse.report.edit.past'), 'department' => $department, 'selectedUserId' => $selectedUserId, 'selectedDepartmentId' => $departmentId, 'dates' => [ $dateRange->startDate->getTimestampMs(), $dateRange->endDate->getTimestampMs(), ] ]); } /** * Сохранение отчета от роли мед. сестра * @return \Illuminate\Http\RedirectResponse */ public function store(Request $request) { abort_if(!auth()->user()->currentRoleCan('nurse.report.create'), 403); $user = auth()->user(); $selectedUserId = $request->input('userId') ? (int) $request->input('userId') : null; $departmentId = $request->input('departmentId') ? (int) $request->input('departmentId') : null; $dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user); $report = $this->nurseReportService->saveReport($dateRange, null, $selectedUserId, $departmentId); $this->nurseReportService->saveSnapshot($dateRange, $report, null, auth()->id()); return redirect()->back(); } }