user(); $department = $user->department; $beds = (int)$department->metrikaDefault()->where('rf_metrika_item_id', 1)->first()->value; $occupiedBeds = optional(Report::where('rf_department_id', $user->rf_department_id) ->join('metrika_results', 'reports.report_id', '=', 'metrika_results.rf_report_id') ->where('metrika_results.rf_metrika_item_id', 8) ->orderBy('sent_at', 'desc')->first())->value ?? 0; $percentLoadedBeds = intval($occupiedBeds) * 100 / $beds; $metrikaGroup = MetrikaGroup::whereMetrikaGroupId(2)->first(); $metrikaItems = $metrikaGroup->metrikaItems; return response()->json([ 'department' => [ 'beds' => $beds, 'percentLoadedBeds' => $percentLoadedBeds, ], 'metrikaItems' => $metrikaItems ]); } public function store(Request $request) { $data = $request->validate([ 'metrics' => 'required', 'observationPatients' => 'nullable', 'departmentId' => 'required|integer', ]); $metrics = $data['metrics']; $observationPatients = $data['observationPatients']; $metriks = []; foreach ($metrics as $key => $value) { $metrika = new MetrikaResult; $metrikaId = (int)Str::replace('metrika_item_', '', $key); $metrika->rf_metrika_item_id = $metrikaId; $metrika->value = $value; $metriks[] = $metrika; } \DB::beginTransaction(); $report = Report::create([ 'rf_department_id' => $data['departmentId'], 'rf_user_id' => Auth::user()->id, 'created_at' => now(), 'sent_at' => now() ]); foreach ($metriks as $metrika) { $metrika->rf_report_id = $report->report_id; $metrika->save(); } foreach ($observationPatients as $observationPatient) { ObservationPatient::create([ 'rf_department_id' => $data['departmentId'], 'rf_report_id' => $report->report_id, 'rf_medicalhistory_id' => $observationPatient['id'], 'rf_mkab_id' => null ]); } \DB::commit(); return response()->json([ 'message' => 'success' ]); } public function getPatients(Request $request) { $data = $request->validate([ 'status' => 'required|string', // plan emergency ]); $status = $data['status']; $startDate = Carbon::now()->addDays(-1)->format('Y-m-d'); $endDate = Carbon::now()->format('Y-m-d'); $model = new MisMedicalHistory(); $misDepartmentId = $request->user()->department->rf_mis_department_id; $misStationarBranchId = MisStationarBranch::where('rf_DepartmentID', $misDepartmentId)->first()->StationarBranchID; if ($status === 'plan') { $patients = MisMedicalHistory::select( [ ...$model->getFillable(), DB::raw('ROW_NUMBER() OVER (ORDER BY "DateRecipient" DESC) as num') ]) ->plan() ->inDepartment($misDepartmentId, $startDate, $endDate) ->orderBy('DateRecipient', 'DESC') ->get() ->map(function ($item, $index) { $item->num = $index + 1; return $item; });; } else if ($status === 'emergency') { $patients = MisMedicalHistory::select( [ ...$model->getFillable(), DB::raw('ROW_NUMBER() OVER (ORDER BY "DateRecipient" DESC) as num') ]) ->emergency() ->inDepartment($misDepartmentId, $startDate, $endDate) ->orderBy('DateRecipient', 'DESC') ->get() ->map(function ($item, $index) { $item->num = $index + 1; return $item; }); } else if ($status === 'observation') { $patients = ObservationPatient::with(['history']) ->where('rf_department_id', $misDepartmentId) ->history; } else if ($status === 'deceased') { $patients = MisMedicalHistory::select(...$model->getFillable()) ->deceased() ->inDepartment($misDepartmentId, $startDate, $endDate) ->get() ->map(function ($item, $index) { $item->num = $index + 1; return $item; }); } $patients->load(['migrations' => function ($query) use ($startDate, $endDate, $misStationarBranchId) { $query->whereHas('diagnosis', function ($query) { $query->where('rf_DiagnosTypeID', 3); })->with('diagnosis.mkb') ->where('rf_StationarBranchID', $misStationarBranchId); }]); return response()->json(FormattedPatientResource::collection($patients)); } public function getPatientsCount(Request $request) { $data = $request->validate([ 'status' => 'required|string', // plan emergency ]); $status = $data['status']; $startDate = Carbon::now()->addDays(-1)->format('Y-m-d'); $endDate = Carbon::now()->format('Y-m-d'); $model = new MisMedicalHistory(); $misDepartmentId = $request->user()->department->rf_mis_department_id; if ($status === 'plan') { $count = MisMedicalHistory::select($model->getFillable()) ->plan() ->inDepartment($misDepartmentId, $startDate, $endDate) ->orderBy('DateRecipient', 'DESC') ->count(); } else if ($status === 'emergency') { $count = MisMedicalHistory::select($model->getFillable()) ->emergency() ->inDepartment($misDepartmentId, $startDate, $endDate) ->orderBy('DateRecipient', 'DESC') ->count(); } return response()->json($count); } }