validate([ 'startAt' => 'required', 'endAt' => 'required', 'departmentId' => 'required', ]); $dateRange = $this->dateRangeService->getNormalizedDateRange($user, $validated['startAt'], $validated['endAt']); $department = Department::findSole($request->departmentId, 'department_id'); $unwantedEvents = DutyUnwantedEvent::query() ->whereHas('reportDuty', function ($q) use ($department, $dateRange) { $q->where('rf_department_id', $department->department_id) ->where('period_start', '>=', $dateRange->startSql()) ->where('period_end', '<=', $dateRange->endSql()); }) ->get() ->map(fn ($e) => [ ...$e->toArray(), 'created_at' => Carbon::parse($e->created_at)->format('Создано d.m.Y в H:i'), ]); return response()->json($unwantedEvents); } public function getObservablePatients(Request $request) { $user = Auth::user(); $validated = $request->validate([ 'startAt' => 'required', 'endAt' => 'required', 'departmentId' => 'required', ]); $dateRange = $this->dateRangeService->getNormalizedDateRange($user, $validated['startAt'], $validated['endAt']); $department = Department::findSole($request->departmentId, 'department_id'); $observablePatients = DB::table('observable_medical_histories as omh') ->join('report_duty_patients as rdp', 'rdp.original_id', '=', 'omh.original_id') ->join('report_duties as rd', 'rd.id', '=', 'rdp.report_duty_id') ->leftJoin('report_duty_migration_patients as rdm', function ($join) { $join->on('rdm.medical_history_id', '=', 'rdp.id') ->whereNull('rdm.out_date'); }) ->where('rd.rf_department_id', $department->department_id) ->where('omh.observable_in', '>=', $dateRange->startSql()) ->where('omh.observable_in', '<=', $dateRange->endSql()) ->select('omh.*', 'rdm.diagnosis_code', 'rdm.diagnosis_name', 'rdm.ingoing_date as migration_ingoing_date') ->distinct() ->get() ->map(fn ($row) => [ 'id' => $row->id, 'full_name' => $row->full_name, 'birth_date' => $row->birth_date, 'comment' => $row->comment, 'observable_reason'=> $row->observable_reason, 'observable_in' => $row->observable_in, 'observable_out' => $row->observable_out, 'migrations' => [[ 'ingoing_date' => $row->migration_ingoing_date ?? $row->recipient_date, 'diagnosis_code' => $row->diagnosis_code, 'diagnosis_name' => $row->diagnosis_name, ]], 'operations' => [], ]); return response()->json($observablePatients); } public function getDeadPatients(Request $request) { $user = Auth::user(); $departmentType = $request->query('departmentType'); $availableDepartments = $user->misDepartments->pluck('rf_mis_department_id')->toArray(); $validated = $request->validate([ 'startAt' => 'required', 'endAt' => 'required', ]); $dateRange = $this->dateRangeService->getNormalizedDateRange($user, $validated['startAt'], $validated['endAt']); $deadPatients = ReportDutyPatient::query() ->whereHas('latestMigration', function ($q) use ($availableDepartments) { $q->whereIn('department_id', $availableDepartments); }) ->with('latestMigration') ->where('death_date', '>', $dateRange->startSql()) ->where('death_date', '<=', $dateRange->endSql()) ->orderBy('death_date', 'desc') ->get()->unique('original_id')->values() ->map(fn ($row) => [ 'id' => $row->id, 'full_name' => $row->full_name, 'birth_date' => $row->birth_date, 'ingoing_date' => $row->latestMigration->ingoing_date ?? $row->recipient_date, 'diagnosis_code' => $row->latestMigration->diagnosis_code, 'diagnosis_name' => $row->latestMigration->diagnosis_name, 'department_name' => $row->latestMigration->department->name_full, ]); return response()->json($deadPatients); } }