Роли, переделывание отчета, изменение на главной странице
This commit is contained in:
151
app/Http/Controllers/Api/ReportController.php
Normal file
151
app/Http/Controllers/Api/ReportController.php
Normal 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);
|
||||
}
|
||||
}
|
||||
33
app/Http/Controllers/Api/RoleController.php
Normal file
33
app/Http/Controllers/Api/RoleController.php
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -20,9 +20,7 @@ class IndexController extends Controller
|
||||
|
||||
$fillableModel =
|
||||
|
||||
$departments = Department::with(['lpu'])->whereHas('lpu', function ($query) {
|
||||
$query->where('mainlpuid', 1);
|
||||
})->get();
|
||||
$departments = Department::all();
|
||||
|
||||
return Inertia::render('Report/Index', [
|
||||
'depatments' => $departments,
|
||||
|
||||
24
app/Http/Controllers/Web/ReportController.php
Normal file
24
app/Http/Controllers/Web/ReportController.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Inertia\Inertia;
|
||||
|
||||
class ReportController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$user = $request->user();
|
||||
$department = $user->department;
|
||||
|
||||
$beds = $department->metrikaDefault()->where('rf_metrika_item_id', 1)->first()->value;
|
||||
|
||||
return Inertia::render('Report/Index', [
|
||||
'department' => [
|
||||
'beds' => $beds
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,13 @@
|
||||
namespace App\Http\Controllers\Web;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Department;
|
||||
use App\Models\MetrikaForm;
|
||||
use App\Models\MetrikaGroup;
|
||||
use App\Models\MetrikaItem;
|
||||
use App\Models\MetrikaResult;
|
||||
use App\Models\Report;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
@@ -15,6 +19,64 @@ use Inertia\Inertia;
|
||||
class StatisticController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$user = $request->user();
|
||||
|
||||
$userDepartment = $user->department;
|
||||
|
||||
$data = [];
|
||||
|
||||
$departments = Department::select('department_id', 'name_short')->get();
|
||||
|
||||
foreach ($departments as $department) {
|
||||
$allCount = MetrikaResult::whereHas('report', function ($query) use ($userDepartment, $department) {
|
||||
$query->where('rf_department_id', $department->department_id);
|
||||
})->where('rf_metrika_item_id', 3)
|
||||
->sum(DB::raw('value::integer'));
|
||||
|
||||
$leaveCount = MetrikaResult::whereHas('report', function ($query) use ($userDepartment, $department) {
|
||||
$query->where('rf_department_id', $department->department_id);
|
||||
})->where('rf_metrika_item_id', 7)
|
||||
->sum(DB::raw('value::integer'));
|
||||
|
||||
$consistCount = optional(MetrikaResult::where('rf_metrika_item_id', 8)
|
||||
->whereHas('report', function (Builder $query) use ($department) {
|
||||
$query->where('rf_department_id', $department->department_id);
|
||||
})->join('reports', 'metrika_results.rf_report_id', '=', 'reports.report_id')
|
||||
->select('metrika_results.value')
|
||||
->orderBy('reports.sent_at', 'desc')
|
||||
)->value('value') ?? 0;
|
||||
|
||||
$beds = (int)optional($department->metrikaDefault()
|
||||
->where('rf_metrika_item_id', 1)
|
||||
->first())->value ?? 0;
|
||||
|
||||
$occupiedBeds = (int)optional(Report::where('rf_department_id', $department->department_id)
|
||||
->join('metrika_results', 'reports.report_id', '=', 'metrika_results.rf_report_id')
|
||||
->where('metrika_results.rf_metrika_item_id', 8)
|
||||
->orderBy('reports.sent_at', 'desc')
|
||||
->first())->value ?? 0;
|
||||
|
||||
$percentLoadedBeds = $beds > 0 ? $occupiedBeds * 100 / $beds : 0;
|
||||
|
||||
$data[] = [
|
||||
'department' => $department->name_short,
|
||||
'beds' => $beds,
|
||||
'all' => $allCount,
|
||||
'plan' => '0',
|
||||
'emergency' => '0',
|
||||
'leave' => $leaveCount,
|
||||
'consist' => $consistCount,
|
||||
'percentLoadedBeds' => $percentLoadedBeds,
|
||||
];
|
||||
}
|
||||
|
||||
return Inertia::render('Statistic/Index', [
|
||||
'data' => $data
|
||||
]);
|
||||
}
|
||||
|
||||
public function indexOld(Request $request)
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user