Роли, переделывание отчета, изменение на главной странице

This commit is contained in:
brusnitsyn
2026-01-11 23:37:18 +09:00
parent eb019504d7
commit d4f077cdaf
59 changed files with 2099 additions and 366 deletions

View File

@@ -0,0 +1,151 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Resources\Mis\FormattedPatientResource;
use App\Models\MetrikaGroup;
use App\Models\MetrikaResult;
use App\Models\MisMedicalHistory;
use App\Models\ObservationPatient;
use App\Models\Report;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Inertia\Inertia;
class ReportController extends Controller
{
public function index(Request $request)
{
$user = $request->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'];
$model = new MisMedicalHistory();
if ($status === 'plan') {
$patients = MisMedicalHistory::select(
[
...$model->getFillable(),
DB::raw('ROW_NUMBER() OVER (ORDER BY "DateRecipient" DESC) as num')
])
->where('rf_EmerSignID', 1)
->orderBy('DateRecipient', 'DESC')
->get();
} else if ($status === 'emergency') {
$patients = MisMedicalHistory::select(
[
...$model->getFillable(),
DB::raw('ROW_NUMBER() OVER (ORDER BY "DateRecipient" DESC) as num')
])
->where('rf_EmerSignID', 2)
->orderBy('DateRecipient', 'DESC')
->get();
}
return response()->json(FormattedPatientResource::collection($patients));
}
public function getPatientsCount(Request $request)
{
$data = $request->validate([
'status' => 'required|string', // plan emergency
]);
$status = $data['status'];
$model = new MisMedicalHistory();
if ($status === 'plan') {
$count = MisMedicalHistory::select($model->getFillable())
->where('rf_EmerSignID', 1)
->orderBy('DateRecipient', 'DESC')
->count();
} else if ($status === 'emergency') {
$count = MisMedicalHistory::select($model->getFillable())
->where('rf_EmerSignID', 2)
->orderBy('DateRecipient', 'DESC')
->count();
}
return response()->json($count);
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Role;
use Illuminate\Http\Request;
class RoleController extends Controller
{
public function getUserRoles(Request $request)
{
$roles = $request->user()->roles;
return response()->json(
$roles
);
}
public function setUserRole(Request $request)
{
$data = $request->validate([
'role_id' => 'required|integer|exists:roles,id'
]);
}
public function getRoles()
{
$roles = Role::all();
return response()->json($roles);
}
}